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.

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.
Annons

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 som du borde kunna hitta på ditt lokala Microcenter eller Maplin.

  • Raspberry Pi (vilken modell som helst).
  • Rörelsesensor (~ $ 3).
  • Hookup-ledningar.
  • Kabelhö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 In Windows 4 enkla sätt att använda SSH I Windows SSH är de facto-lösningen för säker tillgång till 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, var god att hoppa över till uppdatering.

ssh [email protected] (enter raspberry as the password) sudo apt-get update sudo apt-get install python-pip sudo pip install 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. Detta kan variera beroende på din exakta modell, så bekräfta med ett pinoutdiagram.

Raspberry Pi GPIO Diagram
Bildkrediter: raspberrypi.org

Hjälpsam, mitt Pi 2-fodral från Pimoroni har ett pinoutdiagram laser-etsat direkt på det.

Märkt Raspberry Pi-fall

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

 nano motion.py 

Klistra in:

 from gpiozero import MotionSensor pir = MotionSensor(4) while True: if pir.motion_detected: print("Motion detected!") else: print ("No motion") 

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

 python motion.py 

Du bör se meddelandet "inget rörelse" upprepas på skärmen tills du vinkar din hand framför sensorn när den kommer att ligga kvar på "Motion Detected!"

Motion detekterad i terminal

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 biblioteket 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 sedan och ladda ner en WAV- eller OGG- fil från någonstans (jag hittade ett bra urval av gratis Halloween-ljud här) och lägg det i din hemkatalog. Jag skulle föreslå downsampling först och konvertera till ett litet OGG-format ändå.

Om du ansluter fjärråtkomst och bara använder kommandoraden har vi lite svårare med vissa webbplatser, eftersom wget- kommandot inte kan ta tag i den aktuella filen. Istället kan vi ladda ner det lokalt till vårt skrivbord och använda kommandot scp (secure copy) 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:

 import pygame.mixer from pygame.mixer import Sound 

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 springa, eftersom det kommer att sitta fast i den här ljudspelsleden för alltid.

 pygame.init() pygame.mixer.init() #load a sound file, in the home directory of Pi user (no mp3s) thunder = pygame.mixer.Sound("/home/pi/thunder.ogg") while True: thunder.play() sleep(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örelse-kontrollslingan 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 non-stop motion.

 while True: if pir.motion_detected: print("Motion detected!") thunder.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) thunder.stop() else: print ("No motion") 

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 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 till en förnuftig storlek och bitrate, skicka sedan dem till din Pi med scp som tidigare. Jag lade till tre olika typer av skrik.

Ändra koden så att vi istället för att definiera en enda pygame.mixer.Sound- variabel skapar en mängd ljud. Det här är enkelt med Python, bara omger en kommaseparerad lista över dem med kvadratkonsoler, som så:

 sounds = [ 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:

 import random 

Ändra nu huvudrörelseavkänningslingan enligt följande:

 while True: if pir.motion_detected: print("Motion detected!") playSound = random.choice(sounds) playSound.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) playSound.stop() else: print ("No motion") 

Notera den mindre förändringen: istället för att spela den enda ljudvariabeln använder vi funktionen random.choice 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:

 import pygame from pygame.mixer import Sound from gpiozero import MotionSensor from time import sleep import random pygame.init() pygame.mixer.init() #load a sound file, same directory as script (no mp3s) sounds = [ 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) while True: if pir.motion_detected: print("Motion detected!") playSound = random.choice(sounds) playSound.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) playSound.stop() else: print ("No motion") 

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 detta projekt!

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!

In this article