Skremme trick-or-Treaters Med en DIY Motion-aktivert lydboks

Det er den tiden av året igjen når det anses sosialt akseptabelt å skremme små barn og gi dem godteri. Å glede.

Det er den tiden av året igjen når det anses sosialt akseptabelt å skremme små barn og gi dem godteri.  Å glede.
Annonse

Det er den tiden av året igjen når det anses sosialt akseptabelt å skremme små barn og gi dem godteri. Å glede. Jeg er her for å gjøre jobben din enklere, ved å vise deg hvordan du lager en enkel bevegelses-sensing Raspberry Pi Halloween lydboks. Her er en demonstrasjon:

Her er hva du trenger

Sannsynligvis er den eneste delen du ikke allerede har, bevegelsessensoren, en liten og rimelig del du bør kunne finne på ditt lokale Microcenter eller Maplin.

  • Raspberry Pi (noen modell vil gjøre).
  • Bevegelsessensor (~ $ 3).
  • Hookup ledninger.
  • Kablet høyttaler (de fleste Bluetooth-høyttalere har mulighet til å bruke linjeinngang).
  • 3, 5 mm stereo-kabel, mann til mann.

Når du er ferdig, vil du kanskje legge til noen synkroniserte lyseffekter. Hvordan synkronisere hjemmelykter og musikk til Halloween. Hvordan synkronisere hjemmelykter og musikk til Halloween. Uansett om du er vert for en Halloween-fest eller ønsker det kuleste hjemsøkt huset i nabolag, gjør lysene dine blits i tide til musikk og lydeffekter er avgjørende. Les også også, men i denne opplæringen vil vi bare dekke de skummelt lyderbitene!

Setter opp

Vi bruker Raspbian Jessie Lite og Python 2.7, men noen Linux distro som kjører på Pi, bør være bra. Jeg har forlatt det på standard vertsnavn "raspberrypi.local", så begynn med å logge på eksternt ved hjelp av SSH (åpne et Terminal-vindu hvis du er på Mac. Slik gjør du det samme i Windows 4 enkle måter å bruke SSH på Windows 4 enkle måter å bruke SSH på i Windows SSH er de facto-løsningen for sikker tilgang til eksterne terminaler på Linux og andre UNIX-lignende systemer. Hvis du har en ekstern SSH-server du vil ha tilgang til, må du laste ned en SSH-klient .... Les mer) - eller hvis du har valgt å bruke en full Raspbian med desktop GUI, vær så snill å hoppe over til oppdatering.

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 enkelt bibliotek for å jobbe med GPIO-pinnene i Python med mange typer innebygde sensorer og knapper. Visk opp sensoren med signalstiftet på GPIO4, VCC-tilkoblet 5V, og GND-tilkoblet til GND. Dette kan variere i henhold til din eksakte modell, så bekreft med et pinout-diagram.

Raspberry Pi GPIO Diagram
Bildekreditt: raspberrypi.org

Hjertelig, min Pi 2-sak fra Pimoroni har et pinoutdiagram som er laser-etset direkte på den.

Merket Raspberry Pi-sak

La oss nå lage vårt bevegelsesdeteksjonsskript.

 nano motion.py 

Lim inn:

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

Hit CTRL-X og Y for å lagre og avslutte, og kjør deretter med:

 python motion.py 

Du bør se meldingen "ingen bevegelse" gjentatt på skjermen til du vinker hånden foran sensoren, når den kommer til å ligge på "Motion Detected!"

Bevegelse oppdaget i terminal

Hvis meldingen ikke endres i det hele tatt, har du koblet den opp feil.

Hvis du er interessert i å lære mer om dette enkle GPIOZero-biblioteket, ta en titt på dette fantastiske cheatsheet.

Spille av lyd

Koble til den bærbare høyttaleren og sørg for at den er drevet hvis den skal være. Vi bruker pygamebiblioteket til å spille lyder, så fortsett og installer det:

 sudo apt-get install python-pygame 

Først trenger vi en lydfil å spille. Hvis du gjør dette fra skrivebordsmiljøet, så fortsett å laste ned en WAV- eller OGG- fil fra et sted (jeg fant et godt utvalg av gratis Halloween-lyder her), og sett det i din hjemmekatalog. Jeg vil foreslå downsampling først og konvertere til et lite OGG-format uansett.

Hvis du kobler til eksternt og bare bruker kommandolinjen, har vi litt vanskeligere problemer med noen nettsteder, siden wget- kommandoen ikke kan gripe den faktiske filen. I stedet kan vi laste den ned lokalt til skrivebordet vårt, og bruk kommandoen SCP (Secure Copy) for å kopiere over kommandolinjen. Du kan lære mer om SCP her, men for nå åpner du en ny Terminal-faneblad og skriver inn:

 scp thunder.ogg [email protected]: 

Endre navn på thunder.ogg, men ikke glem det endelige : (kommandoen vil fullføre uten det, men det vil ikke gjøre det vi vil at den skal gjøre). Som standard overfører dette filen til Pi-brukerens hjemmekatalog.

La oss nå endre skriptet for å spille en lyd. Start med å importere noen nye moduler:

 import pygame.mixer from pygame.mixer import Sound 

Så like etter de eksisterende importerklæringene, slår vi den samme lyden om og om igjen til testformål. La resten av bevegelsessensorkoden være som den er for nå - det vil bare ikke løpe, siden det blir sittende fast i denne lydspillet for 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() 

Merk at når jeg opprinnelig prøvde denne prosessen, nektet lyden å spille og bare klikket i stedet. Størrelsen på filen eller bithastigheten var skyldige: den var 24-bit og over 5 MB for et 15 sekunders klipp. Skalering som ned til 16-bit ved hjelp av omformeren jeg koblet til ovenfor, gjorde alt bra, og størrelsen ble redusert til bare 260KB!

Hvis du oppdager en ekkel hiss fra høyttalerne dine når Python-appen din kjører, men ikke ellers, skriver du:

 sudo nano /boot/config.txt 

Og legg til denne linjen på slutten:

 disable_audio_dither=1 

Start på nytt for at endringene skal tre i kraft. Eller ikke bry deg, siden det hørtes ut som regn for meg uansett.

Til slutt, la oss endre hovedbevegelseskontrollsløyfen for å spille av lyden når bevegelse er oppdaget. Vi bruker en 15 sekunders forsinkelse slik at hele sløyfen kan spilles, og å fungere som en spambuffer for når det er mye 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 sannsynligvis sette opp dette med et batteri og ingen Internett-tilkobling, så skriptet må kjøre på omstart uten å måtte åpne en kommandolinje. For å gjøre dette, bruker vi den enkleste metoden: crontab Hvordan planlegger oppgaver i Linux med Cron og Crontab Hvordan planlegger oppgaver i Linux med Cron og Crontab Evnen til å automatisere oppgaver er en av de futuristiske teknologiene som allerede er her . Hver Linux-bruker kan dra nytte av planleggingssystemet og brukeroppgaver, takket være cron, en brukervennlig bakgrunnstjeneste. Les mer . Type:

 sudo crontab -e 

Hvis dette er første gang du kjører denne kommandoen, begynner det å spørre deg hvilken redaktør du skal bruke. Jeg valgte alternativ 2, for nano. Det starter opp i den valgte redigeringen, så legg til følgende linje:

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

Dette betyr at motion.py-skriptet kjører på hver oppstart, og gjør det stille (slik at noen utdata fra skriptet blir ignorert). Start på nytt for å prøve det.

Hvis ingenting spilles til tross for at det er bevegelse, eller du bare hører et lite klikk, kan du ikke ha brukt hele filbanen, eller filen må kanskje konverteres til en lavere bitrate og mindre filstørrelse.

Legg til flere lyder

Å spille den samme effekten om og om igjen, er litt kjedelig, så la oss legge til tilfeldighet til det. Last ned noen flere Halloween lyder, husk å skalere dem ned til en fornuftig størrelse og bitrate, og send dem over til Pi med scp som før. Jeg la til tre forskjellige typer skrik.

Endre koden slik at i stedet for å definere en enkelt pygame.mixer.Sound- variabel, lager vi faktisk en rekke lyder. Dette er enkelt med Python, bare omgir en kommaseparert liste over dem med firkantede parentes, slik som:

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

Deretter importerer du tilfeldig bibliotek til filen din, med:

 import random 

Endre nå hovedbevegelsessensoren slik:

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

Legg merke til den mindre endringen: i stedet for å spille single- lydvariabelen bruker vi random.choice- funksjonen til å velge en tilfeldig lyd fra vårt lydnivå, og deretter spille det.

Her er den fulle koden 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 bare fire prøver, er det en stor sannsynlighet for repetisjon hver gang, men du kan legge til flere prøver hvis det er irriterende.

Det er det! Skjul det i buskene med noen skummel LED monster øyne Hvordan lage Spooky Halloween Glødende Øyne for mindre enn $ 5 Hvordan lage Spooky Halloween Glødende Øyne for mindre enn $ 5 Ønsker du å krydre Halloween-dekorasjoner i år? Lær hvordan du lager LED-øyne for mindre enn $ 5 i dette nybegynnerens elektronikkprosjekt. Les mer, og du bør være i stand til å redde deg litt godteri ettersom alle ungene løper bort og skriker før de når til døren. Eller gå gjemt i skapet fordi en sint mor er ute etter blod etter at du har lavet Johnny gråte.

Ansvarsfraskrivelse: MakeUseOf er ikke ansvarlig for personskader som kan skyldes din bruk av dette prosjektet!

Vil du gjøre denne bevegelsesaktiverte lydboksen for å skremme lokale trick-or-treaters? Har du satt opp noen skremmende effekter med en Raspberry Pi denne Halloween? Vennligst gi oss beskjed om det i kommentarene nedenfor!

In this article