Skrämma trick-or-Treaters Med en DIY Motion-Activated Soundbox
Det är den tiden på året igen när det anses socialt acceptabelt att skrämma unga barn och ge dem godis. Åh glädje. Jag är här för att göra ditt jobb enklare, genom att visa dig hur man gör en enkel rörelse-sensing Raspberry Pi Halloween ljudlåda. Här är en demo:
Här är vad du behöver
Förmodligen är den enda delen du inte redan har rörelsesensorn, en liten och billig del du borde kunna hitta på ditt lokala Microcenter eller Maplin.
- Raspberry Pi (vilken modell som helst).
- Rörelsesensor (~ $ 3).
- Hookup-ledningar.
- Trådbunden högtalare (de flesta Bluetooth-högtalare har möjlighet att använda inlämning).
- 3,5 mm stereokabel, man-till-manlig.
När du är klar kanske du vill lägga till några synkroniserade ljuseffekter Så här synkroniserar du hemljus och musik till Halloween Hur man synkroniserar hemljus och musik till Halloween Oavsett om du är värd för en Halloween-husfest eller vill ha det coolaste hemsökta huset i stadsdel, vilket gör att dina lampor blinkar i tid för att musik och ljudeffekter är avgörande. Läs mer också, men i den här handledningen kommer vi bara att täcka den läskiga ljudbiten!
Inställning
Vi använder Raspbian Jessie Lite och Python 2.7, men någon Linux distro som körs på din Pi ska vara bra. Jag har lämnat den på standard värdnamn “raspberrypi.local”, så börja med att logga in på distans med SSH (öppna ett terminalfönster om du är på Mac. Så här gör du detsamma i Windows 4 Enkla sätt att använda SSH i Windows 4 Enkla sätt att använda SSH I Windows SSH är de facto-lösningen för säker åtkomst av fjärrterminaler på Linux och andra UNIX-liknande system. Om du har en fjärrstyrd SSH-server som du vill komma åt måste du ladda ner en SSH-klient ... Läs mer) - eller om du har valt att använda en fullständig Raspbian med skrivbords GUI kan du hoppa över till uppdatering.
ssh [email protected] (skriv in hallon som lösenord) sudo apt-få uppdatering sudo apt-get install python-pip sudo pip installera gpiozero
Detta installerar ett enkelt bibliotek för att arbeta med GPIO-stiften i Python med många typer av inbyggda sensorer och knappar. Dra upp sensorn med signalstiftet på GPIO4, VCC ansluten till 5V, och GND ansluten till GND. Det kan variera beroende på din exakta modell, så bekräfta med ett pinout-diagram.
Hjälpsam, mitt Pi 2-fodral från Pimoroni har ett pinoutdiagram laser-etsat direkt på det.
Låt oss nu göra vårt rörelsedetekteringskript.
nano motion.py
Klistra in:
från gpiozero Importera MotionSensor pir = MotionSensor (4) medan True: om pir.motion_detected: print ("Motion detected!") annars: print ("No motion")
Tryck CTRL-X sedan Y för att spara och avsluta, kör sedan med:
python motion.py
Du borde se “ingen rörelse” Meddelandet upprepas på skärmen tills du vinkar din hand framför sensorn när den kommer att ligga kvar på “Rörelse upptäckt!”
Om meddelandet inte ändras alls har du kopplat upp det felaktigt.
Om du är intresserad av att lära dig mer om det här enkla GPIOZero-biblioteket, ta en titt på det här fantastiska cheatsheetet.
Spelar ljud
Anslut den bärbara högtalaren och se till att den är strömdriven om den behöver vara. Vi använder pygame bibliotek för att spela ljud, så fortsätt och installera det:
sudo apt-get install python-pygame
Först behöver vi en ljudfil att spela. Om du gör det här från skrivbordsmiljön, fortsätt och ladda ner a WAV eller OGG fil från någonstans (jag hittade ett bra urval av gratis Halloween låtar här) och sätta det i din hemkatalog. Jag skulle föreslå downsampling först och konvertera till ett litet OGG-format ändå.
Om du ansluter på distans och bara använder kommandoraden har vi lite svårare med vissa webbplatser, eftersom wget Kommandot kan inte ta tag i den aktuella filen. Istället kan vi ladda ner det lokalt till vårt skrivbord och använda scp (säker kopia) kommando för att kopiera över kommandoraden. Du kan lära dig mer om scp här, men för nu öppnar du en ny Terminal flik och skriver:
scp thunder.ogg [email protected]:
Byt namn på thunder.ogg, men glöm inte det sista : (kommandot kommer att slutföra utan det, men det kommer inte göra vad vi vill att den ska göra). Som standard överför filen filen till Pi-användarens hemkatalog.
Låt oss nu ändra skriptet för att spela ett ljud. Börja med att importera några nya moduler:
importera pygame.mixer från pygame.mixer importera ljud
Sedan strax efter de befintliga importdeklarationerna slår vi samma ljud om och om igen för teständamål. Lämna resten av din rörelsekänsliga kod som för tillfället - det kommer inte att springas, eftersom det kommer att sitta fast i denna ljudspelslinga för alltid.
pygame.init () pygame.mixer.init () #load en ljudfil, i hemmappen för Pi-användare (ingen mp3-filer) thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg") medan True : Thunder.play () Sova (10) Thunder.stop ()
Observera att när jag ursprungligen försökte denna process vägrade ljudet att spela och bara klickade istället. Storleken på filen eller bithastigheten var den skyldige: den var 24-bitars och över 5 MB för ett 15 sekunders klipp. Skalar ner till 16-bitars med hjälp av omvandlaren som jag länkade till ovan gjorde allt bra, och storleken minskade till bara 260KB!
Om du märker en otäck hiss från dina högtalare när din Python-app körs men inte annars skriver du:
sudo nano / boot / config.txt
Och lägg till den här raden i slutet:
disable_audio_dither = 1
Starta om att ändringarna träder i kraft. Eller stör inte, eftersom det likaledes låter som regn åt mig ändå.
Slutligen, låt oss ändra huvudrörelsekretsen för att spela upp ljudet när rörelse detekteras. Vi använder en 15 sekunders fördröjning så att hela slingan kan spelas och att fungera som en spambuffert för när det finns mycket ostoppad rörelse.
medan True: om pir.motion_detected: print ("Motion detected!") thunder.play () # Se till att uppspelningen har slutförts fullständigt innan du återupptar rörelsedetektering, förhindrar spammning av ljudsömning (15) thunder.stop () annars: skriva ut ("ingen rörelse")
Starta automatiskt
Vi vill förmodligen ställa in det här någonstans med ett batteri och ingen internetuppkoppling, så skriptet måste springa på omstart utan att behöva öppna en kommandorad. För att göra detta ska vi använda den enklaste metoden som är möjlig: crontaben Hur man schemalägger uppdrag i Linux med Cron och Crontab Hur man schemalägger uppdrag i Linux med Cron och Crontab Möjligheten att automatisera uppgifter är en av de futuristiska tekniker som redan finns här . Varje Linux-användare kan dra nytta av schemaläggningssystem och användaruppgifter, tack vare cron, en lättanvänd bakgrundstjänst. Läs mer . Typ:
sudo crontab -e
Om det här är första gången kör det här kommandot, börjar det med att fråga dig vilken redaktör som ska användas. Jag valde alternativ 2, för nano. Det kommer att starta in i din valda editor, så lägg till följande rad:
@reboot python /home/pi/motion.py &
Det betyder att ditt motion.py-skript kommer att köras vid varje start, och gör det så tyst (så att eventuella utdata från skriptet ignoreras). Starta om för att prova det.
Om inget spelar trots att det finns rörelse, eller om du bara hör ett litet klick, kanske du inte har använt hela filvägen, eller din fil kan behöva konverteras till en lägre bitrate och mindre filstorlek.
Lägg till fler ljud
Att spela samma effekt om och om igen är lite tråkig, så låt oss lägga till lite slumpmässighet åt det. Ladda ner några fler Halloween ljud, kom ihåg att skala dem ner till en förnuftig storlek och bitrate, skicka sedan dem till din Pi med scp som förut. Jag lade till tre olika typer av skrik.
Ändra koden så att istället för att definiera en enda pygame.mixer.Sound variabel skapar vi faktiskt en array av ljud. Det här är enkelt med Python, bara omger en kommaseparerad lista över dem med kvadratkonsoler, som så:
ljud = [pygame.mixer.Sound ("/ home / pi / thunder.ogg"), pygame.mixer.Sound ("/ home / pi / scary_scream.ogg"), pygame.mixer.Sound ("/ home / pi /girl_scream.ogg "), pygame.mixer.Sound (" / home / pi / psycho_scream.ogg ")]
Därefter importerar du det slumpmässiga biblioteket i din fil med:
importera slumpmässigt
Ändra nu huvudrörelseavkänningslingan enligt följande:
medan True: om pir.motion_detected: print ("Motion detected!") playSound = random.choice (ljud) playSound.play () # Se till att uppspelningen är fullbordad innan du återupptar rörelsedetektering, förhindrar spammning av ljudsömning ) playSound.stop () annars: skriv ut ("ingen rörelse")
Notera den mindre förändringen: istället för att spela den enda ljudvariabeln använder vi random.choice funktion för att välja ett slumpmässigt ljud från vår ljudmatris och sedan spela det.
Här är hela koden om du har problem:
importera pygame från pygame.mixer import Ljud från gpiozero importera MotionSensor från tidpunkten import sova importera slumpmässigt pygame.init () pygame.mixer.init () #load en ljudfil, samma katalog som script (no mp3s) låter = [pygame.mixer .Sound ("/ home / pi / thunder.ogg"), pygame.mixer.Sound ("/ home / pi / scary_scream.ogg"), pygame.mixer.Sound ("/ home / pi / girl_scream.ogg") , pygame.mixer.Sound ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) medan True: om pir.motion_detected: print ("Motion detected!") playSound = random.choice (ljud) playSound .play () # Se till att uppspelningen är fullbordad innan du återupptar rörelsedetektering, förhindrar "spammning" av ljudsömn (15) playSound.stop () annars: skriv ut ("ingen rörelse")
Med endast fyra prover finns det en stor sannolikhet för repetition varje gång, men du kan lägga till fler prover om det är irriterande.
Det är allt! Dölj den i buskarna med några läskiga monster i monster. Hur man gör Spooky Halloween Glödande ögon för mindre än $ 5. Hur man gör Spooky Halloween Glödande ögon för mindre än $ 5. Vill du krydda dina Halloween-dekorationer i år? Lär dig hur man gör LED-ögon för mindre än $ 5 i det här nybörjarens elektronikprojekt. Läs mer, och du borde kunna spara dig lite godis eftersom alla barn rinner iväg och skriker innan de når fram till dörren. Eller gå gömd i garderoben eftersom en arg mamma är ute efter blod efter att du gjort lite Johnny gråta.
Ansvarsbegränsning: MakeUseOf ansvarar inte för personskada som kan uppstå på grund av din användning av projektet!
Kommer du att göra denna rörelseaktiverade ljudlåda för att skrämma de lokala trick-or-treatersna? Har du skapat några skrämmande effekter med en Raspberry Pi denna Halloween? Vänligen meddela oss om det i kommentarerna nedan!
.