Annons

Det är den tiden på året när det anses vara socialt acceptabelt att skrämma små 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 du gör en enkel rörelsessensande Raspberry Pi Halloween-ljudbox. Här är en demo:

Här är vad du behöver

Förmodligen den enda delen du inte redan har är rörelsessensorn, en liten och billig del som du borde kunna hitta på ditt lokala Microcenter eller Maplin.

  • Raspberry Pi (vilken modell som helst gör).
  • Rörelsessensor (~ $ 3).
  • Kopplingsledningar.
  • Trådbunden högtalare (de flesta Bluetooth-högtalare har möjlighet att använda line-in).
  • 3,5 mm stereokabel, man till man.

När du är klar kanske du vill lägga till några synkroniserade ljuseffekter Hur du synkroniserar hemljus och musik för HalloweenOavsett om du är värd för en Halloween-fest eller vill ha det coolaste hemsökta huset i grannskapet är det viktigt att få lamporna att blinka i tid till musik och ljudeffekter. Läs mer också, men i den här tutorialen kommer vi bara att täcka det läskiga ljudet lite!

instagram viewer

Ställa in

Vi använder Raspbian Jessie Lite och Python 2.7, men all Linux-distro som körs på din Pi borde vara bra. Jag har lämnat det på standardvärdnamnet “raspberrypi.local”, så börja med att logga in på distans med SSH (öppna ett terminalfönster om du är på Mac. här är hur man gör samma sak i Windows 4 enkla sätt att använda SSH i WindowsSSH är de facto-lösningen för säker åtkomst till fjärrterminaler på Linux och andra UNIX-liknande system. Om du har en fjärr 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 grafisk grafikgränssnitt kan du gärna hoppa till uppdatering.

ssh [email protected]. (ange hallon som lösenord) sudo apt-get-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. Anslut din sensor med signalstiftet på GPIO4, VCC ansluten till 5V och GND ansluten till GND. Detta kan variera beroende på din exakta modell, så bekräfta med ett pin-diagram.

Hallon Pi GPIO-diagram
Bildkredit: raspberrypi.org

Hjälpbart har mitt Pi 2-fodral från Pimoroni ett pinout-diagram laser-etsat direkt på det.

Etikett Raspberry Pi-fall

Låt oss nu göra vårt rörelsedetekteringsskript.

nano motion.py. 

Klistra in:

från gpiozero import MotionSensor pir = MotionSensor (4) medan sant: om pir.motion_detected: print ("Rörelse upptäckt!") annars: print ("No motion")

Slå CTRL-X och sedan Y för att spara och avsluta, kör sedan med:

python motion.py. 

Du bör se meddelandet "ingen rörelse" upprepas på skärmen tills du vinkar din hand framför sensorn, när det kommer att hålla kvar på "Rörelse upptäckt!"

Rörelse detekteras i terminal

Om meddelandet inte ändras alls har du kopplat det fel.

Om du är intresserad av att lära dig mer om detta enkla GPIOZero-bibliotek, ta en titt på detta fantastiska fuskark.

Spela ljud

Anslut din bärbara högtalare och se till att den drivs om den behöver. Vi kommer att använda 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 för att spela. Om du gör detta från skrivbordsmiljön, gå vidare och ladda ner en WAV eller OGG fil någonstans (jag hittade ett bra urval av gratis Halloween-ljud här) och lägg den i din hemkatalog. Jag föreslår nedmontering först och konvertering till ett litet OGG-format i alla fall.

Om du ansluter på distans och bara använder kommandoraden har vi lite svårare med vissa webbplatser, sedan wget kommandot kanske inte tar den faktiska 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 tillfället, öppna en ny terminalflik och skriv:

scp thunder.ogg [email protected]: 

Byt namn på thunder.ogg efter behov, men glöm inte den finalen : (kommandot kommer att slutföras utan det, men det kommer inte att göra vad vi vill att det ska göra). Som standard kommer detta att överföra 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 import Ljud. 

Strax efter de befintliga importmeddelandena kommer vi att slinga samma ljud om och om igen för teständamål. Lämna resten av din rörelsekänningskod som för tillfället - den kommer bara inte att köras, eftersom den kommer att fastna i den här ljuduppspelande slingan för alltid.

pygame.init () pygame.mixer.init () # ladda in en ljudfil i Pi-användarens hemkatalog (inga mp3-filer) thunder = pygame.mixer. Ljud ("/ home / pi / thunder.ogg") medan True: thunder.play () sleep (10) thunder.stop ()

Observera att när jag ursprungligen provade 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 klipp på 15 sekunder. Att skala ner till 16-bitars med hjälp av konverteraren som jag länkade till ovan gjorde att allt fungerade bra, och storleken minskades till bara 260 kB!

Om du märker en otäck vässning från dina högtalare när din Python-app körs, men inte annars, skriv:

sudo nano /boot/config.txt. 

Och lägg till den här raden i slutet:

disable_audio_dither = 1. 

Starta om för att ändringarna ska träda i kraft. Eller bry dig inte, eftersom det låter som regn för mig ändå.

Slutligen, låt oss ändra huvudrörelsen för rörelsekontroll för att spela ljudet när rörelse upptäcks. Vi kommer att använda en 15-sekunders fördröjning så att hela slingan kan spelas och för att fungera som en skräppostbuffert för när det är mycket non-stop motion.

medan sant: om pir.motion_detected: print ("Rörelse upptäckt!") thunder.play () # se till att uppspelningen har varit helt slutförd före återupptagande av rörelsedetektering, förhindrar "skräppost" av ljud sömn (15) thunder.stop () annat: tryck ("Nej rörelse")

Börja automatiskt

Vi vill förmodligen ställa in det här någonstans med ett batteri och ingen internetuppkoppling, så skriptet måste köras vid omstart utan att behöva öppna en kommandorad. För att göra detta använder vi den enklaste metoden som möjligt: crontab Hur man planerar uppgifter i Linux med Cron och CrontabFörmågan 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 du kör detta kommando börjar det med att fråga dig vilken redaktör du ska använda. Jag valde alternativ 2 för nano. Det startar i din valda redaktör, så lägg till följande rad:

@reboot python /home/pi/motion.py &

Detta innebär att ditt motion.py-skript körs vid varje start och gör det tyst (så att alla utskrifter från skriptet ignoreras). Starta om för att prova det.

Om ingenting spelas trots att det finns rörelse, eller om du bara hör ett litet klick, kanske du inte har använt den fulla filvägen, eller så kan din fil 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åkigt, så låt oss lägga till lite slumpmässighet till det. Ladda ner några Halloween-ljud, kom ihåg att skala dem ned till en förnuftig storlek och bitrate, skicka sedan över 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. Ljud variabel, skapar vi faktiskt en array av ljud. Detta är enkelt med Python, bara omge en kommaseparerad lista över dem med fyrkantiga parenteser, som så:

ljud = [pygame.mixer. Ljud ("/ home / pi / thunder.ogg"), pygame.mixer. Ljud ("/ home / pi / scary_scream.ogg"), pygame.mixer. Ljud ("/ home / pi / girl_scream.ogg"), pygame.mixer. Ljud ("/ home / pi / psycho_scream.ogg")]

Importera sedan det slumpmässiga biblioteket till din fil med:

importera slumpmässigt. 

Ändra nu den huvudsakliga rörelseavkänningsslingan enligt följande:

medan sant: om pir.motion_detected: print ("Rörelse upptäckt!") playSound = random.choice (ljud) playSound.play () # se till att uppspelningen har har fullständigt slutförts innan återupptagande av rörelsedetektering förhindrar "skräppost" av ljud sömn (15) playSound.stop () annat: print ("Nej rörelse")

Observera 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åra ljuduppsättningar och sedan spela det.

Här är den fullständiga koden om du har problem:

importera pygame. från pygame.mixer import Ljud. från gpiozero import MotionSensor. från tiden importera sömn. importera slumpmässigt pygame.init () pygame.mixer.init () # ladda en ljudfil, samma katalog som skript (inga mp3-filer) låter = [pygame.mixer. Ljud ("/ home / pi / thunder.ogg"), pygame.mixer. Ljud ("/ home / pi / scary_scream.ogg"), pygame.mixer. Ljud ("/ home / pi / girl_scream.ogg"), pygame.mixer. Ljud ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) medan sant: om pir.motion_detected: print ("Rörelse upptäckt!") playSound = random.choice (ljud) playSound.play () # se till att uppspelningen har har fullständigt slutförts innan återupptagande av rörelsedetektering förhindrar "skräppost" av ljud sömn (15) playSound.stop () annat: print ("Nej rörelse")

Med bara fyra prover finns det stor sannolikhet för upprepning varje gång, men du kan lägga till fler prover om det är irriterande.

Det är allt! Göm det i buskarna med några läskiga LED-monsterögon Hur man gör Spooky Halloween Glowing Eyes för mindre än $ 5Vill du krydda dina Halloween-dekorationer i år? Lär dig hur man gör LED-ögon för mindre än $ 5 i detta nybörjarelektronikprojekt. Läs mer , och du borde kunna rädda dig lite godis när alla barn springer skrikande innan de ens når dörren. Eller göm dig i garderoben eftersom en arg mamma är ute efter blod efter att du fick lite Johnny att gråta.

Ansvarsfriskrivning: MakeUseOf ansvarar inte för någon personskada som kan uppstå genom din användning av detta projekt!

Kommer du att göra denna rörelseaktiverade ljudlåda för att skrämma de lokala trick-eller-behandlarna? Har du skapat några läskiga effekter med en Raspberry Pi denna Halloween? Låt oss veta om det i kommentarerna nedan!

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.