Skræmme Trick-or-Treaters Med en DIY Motion-Activated Soundbox

Det er den årstid igen, når det anses for socialt acceptabelt at frygte unge børn og give dem slik. Åh glæde.

Det er den årstid igen, når det anses for socialt acceptabelt at frygte unge børn og give dem slik.  Åh glæde.
Reklame

Det er den årstid igen, når det anses for socialt acceptabelt at frygte unge børn og give dem slik. Åh glæde. Jeg er her for at gøre dit arbejde nemmere ved at vise dig, hvordan du laver en simpel bevægelsesfølsom Raspberry Pi Halloween lydboks. Her er en demo:

Her er hvad du skal bruge

Sandsynligvis den eneste del, du ikke allerede har, er bevægelsesføleren, en lille og billig del, du bør kunne finde på dit lokale Microcenter eller Maplin.

  • Hindbær Pi (enhver model vil gøre).
  • Bevægelsessensor (~ $ 3).
  • Hookup ledninger.
  • Kablet højttaler (de fleste Bluetooth-højttalere har mulighed for at bruge line-in).
  • 3, 5 mm stereo-kabel, mand-til-mand.

Når du er færdig, vil du måske tilføje nogle synkroniserede lyseffekter Sådan synkroniseres hjemmelygter og musik til Halloween Sådan synkroniseres hjemmelygter og musik til Halloween Uanset om du er vært for en Halloween-husfest eller ønsker det fedeste hjemsøgte hus i kvarter, der gør dit lys blitz i tide til musik og lydeffekter er afgørende. Læs mere også, men i denne øvelse dækker vi kun den skræmmende lydebit!

Sætte op

Vi bruger Raspbian Jessie Lite og Python 2.7, men enhver Linux distro der kører på din Pi skal være fint. Jeg har forladt det på standardværtsnavnet "raspberrypi.local", så start med at logge ind eksternt ved hjælp af SSH (Åbn et Terminal vindue, hvis du er på Mac. Sådan gør du det samme i Windows 4 Easy Ways at bruge SSH In Windows 4 nemme måder at bruge SSH i Windows SSH er de facto-løsningen for sikker adgang til eksterne terminaler på Linux og andre UNIX-lignende systemer. Hvis du har en ekstern SSH-server, du vil have adgang, skal du downloade en SSH-klient .... Læs mere) - eller hvis du har valgt at bruge en fuld Raspbian med desktop GUI, er du velkommen til at springe over til opdatering.

ssh [email protected] (enter raspberry as the password) sudo apt-get update sudo apt-get install python-pip sudo pip install gpiozero 

Dette installerer et simpelt bibliotek til at arbejde med GPIO-benene i Python med mange typer indbyggede sensorer og knapper. Træk din sensor op med signalstiften på GPIO4, VCC tilsluttet 5V, og GND tilsluttet GND. Dette kan variere alt efter din eksakte model, så bekræft med et pinout diagram.

Hindbær Pi GPIO Diagram
Billedkredit: raspberrypi.org

Hjælpsomt, mit Pi 2-tilfælde fra Pimoroni har et pinoutdiagram, der er laser-ætset direkte på det.

Etiket Raspberry Pi Case

Lad os nu lave vores bevægelsesdetektering script.

 nano motion.py 

Indsæt i:

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

Tryk CTRL-X og Y for at gemme og afslutte, og kør med:

 python motion.py 

Du skal se meddelelsen "ingen bevægelse" gentages på skærmen, indtil du bøjer din hånd foran sensoren, når den kommer til at lyde på "Motion Detected!"

Bevægelse registreret i terminal

Hvis meddelelsen ikke ændrer sig overhovedet, har du koblet det op forkert.

Hvis du er interesseret i at lære mere om dette simple GPIOZero-bibliotek, så tag et kig på dette fantastiske cheatsheet.

Afspilning af lyd

Tilslut din bærbare højttaler og sørg for, at den er drevet, hvis den skal være. Vi bruger pygame biblioteket til at afspille lyde, så fortsæt og installer det:

 sudo apt-get install python-pygame 

For det første har vi brug for en lydfil, der skal afspilles. Hvis du gør dette inden for skrivebordsmiljøet, skal du gå videre og downloade en WAV- eller OGG- fil fra et sted (jeg fandt et godt udvalg af gratis Halloween lyde her) og sætte det i din hjemmekatalog. Jeg vil foreslå downsampling først og konvertere til et lille OGG-format alligevel.

Hvis du forbinder fjernt og kun bruger kommandolinjen, har vi lidt mere problemer med nogle websteder, da wget- kommandoen muligvis ikke får fat i den aktuelle fil. I stedet kan vi hente det lokalt til vores desktop og bruge kommandoen scp (Secure Copy) til at kopiere over kommandolinjen. Du kan lære mere om scp her, men nu skal du åbne en ny Terminal-faneblad og skrive:

 scp thunder.ogg [email protected]: 

Omdøb thunder.ogg, hvis det er hensigtsmæssigt, men glem ikke det endelige : (kommandoen afsluttes uden det, men det vil ikke gøre, hvad vi vil have det til at gøre). Som standard overfører filen filen til Pi-brugerens hjemmemappe.

Lad os nu ændre scriptet for at afspille en lyd. Start med at importere nogle nye moduler:

 import pygame.mixer from pygame.mixer import Sound 

Så lige efter de eksisterende importangivelser slår vi den samme lyd igen og igen til testformål. Forlad resten af ​​din bevægelsesfølerkode som det er for nu - det kommer bare ikke til at køre, da det vil sidde fast i denne lydafspilingsløkke for altid.

 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() 

Bemærk, at når jeg oprindeligt prøvede denne proces, nægtede lyden at afspille og bare klikket i stedet. Størrelsen på filen eller bithastigheden var synderen: den var 24 bit og over 5 MB for et 15 sekunders klip. Skalering der ned til 16-bit ved hjælp af konverteren, jeg linkede til ovenfor, gjorde alt godt, og størrelsen blev reduceret til kun 260KB!

Hvis du bemærker et ubehageligt lys fra dine højttalere, når din Python app kører, men ikke ellers, skal du skrive:

 sudo nano /boot/config.txt 

Og tilføj denne linje i slutningen:

 disable_audio_dither=1 

Genstart for ændringerne træde i kraft. Eller gider ikke, da det lignede en slags regn til mig alligevel.

Endelig, lad os ændre hovedgennemgangsløkken for at afspille lyden, når bevægelsen er registreret. Vi bruger en 15-sekunders forsinkelse, så hele sløjfen kan afspilles, og at fungere som en spam-buffer, når der er masser af 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") 

Start automatisk

Vi vil sandsynligvis sætte dette op et sted med et batteri og ingen internetforbindelse, så scriptet skal køre på genstart uden at skulle åbne en kommandolinje. For at gøre dette bruger vi den enkleste metode: crontab Sådan planlægger du opgaver i Linux med Cron og Crontab Sådan planlægger du opgaver i Linux med Cron og Crontab Evnen til at automatisere opgaver er en af ​​de futuristiske teknologier, der allerede er her . Enhver Linux-bruger kan drage fordel af planlægningssystemet og brugeropgaver, takket være cron, en brugervenlig baggrundstjeneste. Læs mere . Type:

 sudo crontab -e 

Hvis dette er første gang, der kører denne kommando, begynder det med at spørge dig, hvilken editor der skal bruges. Jeg valgte valgmulighed 2, til nano. Det starter i din valgte editor, så tilføj følgende linje:

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

Dette betyder, at din motion.py script kører ved hver idrifttagning, og gør det stille (så enhver output fra scriptet bliver ignoreret). Genstart for at prøve det.

Hvis der ikke afspilles noget, selv om der er bevægelse, eller hvis du kun hører et lille klik, har du muligvis ikke brugt den fulde filsti, eller din fil kan muligvis konvertere til en lavere bitrate og mindre filstørrelse.

Tilføj flere lyde

At spille den samme effekt igen og igen er lidt kedeligt, så lad os tilføje noget tilfældighed til det. Download nogle flere Halloween lyde, husk at skala dem ned til en fornuftig størrelse og bitrate, så send dem til din Pi ved hjælp af scp som før. Jeg tilføjede tre forskellige typer skrige.

Modificer koden, så i stedet for at definere en enkelt pygame.mixer.Sound- variabel, skaber vi faktisk en række lyde. Dette er simpelt med Python, bare omgive en kommasepareret liste med dem med firkantede parenteser som sådan:

 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") ] 

Herefter importerer du tilfældigt bibliotek til din fil med:

 import random 

Nu ændrer du main motion-sensing loop som følger:

 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") 

Bemærk den lille ændring: I stedet for at spille single-variablen bruger vi random.choice- funktionen til at vælge en tilfældig lyd fra vores lyde array og derefter afspille det.

Her er den fulde kode, hvis du har problemer:

 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 kun fire prøver er der en høj sandsynlighed for gentagelse hver gang, men du kan tilføje flere prøver, hvis det er irriterende.

Det er det! Skjul det i buskene med nogle skræmmende LED monster øjne Sådan laver du Spooky Halloween Glødende øjne for mindre end $ 5 Hvordan laver du Spooky Halloween Glødende øjne for mindre end $ 5 Vil du krydre dine Halloween dekorationer i år? Lær hvordan du laver LED-øjne til mindre end $ 5 i dette nybegynderens elektronikprojekt. Læs mere, og du bør være i stand til at spare dig selv lidt slik, da alle børn løber væk og skrige, før de selv når døren. Eller gå i skabet i skabet, fordi en vred mor er ude for blod, når du har lavet Johnny græd.

Ansvarsfraskrivelse: MakeUseOf er ikke ansvarlig for personskader, der måtte opstå som følge af din brug af dette projekt!

Vil du lave denne bevægelsesaktiverede lydboks for at skræmme de lokale trick-or-treaters? Har du oprettet nogen skræmmende effekter med en Raspberry Pi denne Halloween? Lad os vide om det i kommentarerne nedenfor!

In this article