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. 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 den skummellydbiten!
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 den på standard vertsnavn “raspberrypi.local”, så begynn å logge inn 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å i 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] (skriv inn bringebær som passord) sudo apt-get update sudo apt-install install python-pip sudo pip installer 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.
Hjertelig, min Pi 2-sak fra Pimoroni har et pinoutdiagram som er laser-etset direkte på den.
La oss nå lage vårt bevegelsesdeteksjonsskript.
nano motion.py
Lim inn:
fra gpiozero import MotionSensor pir = MotionSensor (4) mens True: hvis pir.motion_detected: print ("Motion detected!") ellers: print ("Ingen bevegelse")
Hit CTRL-X og Y for å lagre og avslutte, og kjør deretter med:
python motion.py
Du bør se “ingen bevegelse” meldingen gjentas på skjermen til du vinker hånden foran sensoren, når den kommer til å ligge på “Bevegelsesoppdaget!”
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 pygame bibliotek for å spille av 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 og last ned a 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 kan ikke gripe den faktiske filen. I stedet kan vi laste den ned lokalt til skrivebordet vårt og bruke scp (sikker kopi) kommando 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 siste : (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:
importer pygame.mixer fra pygame.mixer import lyd
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 lydspillsløyfen for alltid.
pygame.init () pygame.mixer.init () #load en lydfil, i hjemmekatalogen til Pi-brukeren (ikke mp3s) thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg") mens True : thunder.play () søvn (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 det 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.
mens True: Hvis pir.motion_detected: print ("Motion detected!") thunder.play () # sørg for at avspillingen er fullført før gjenopptakelse av bevegelsesdeteksjon, forhindrer "spamming" av lydsøvn (15) thunder.stop () skriv ut ("ingen bevegelse")
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 å skala dem ned til en fornuftig størrelse og bitrate, og send dem over til Pi ved hjelp av 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, skaper vi faktisk en matrise av lyder. Dette er enkelt med Python, bare omgir en kommaseparert liste over dem med firkantede parentes, slik som:
lyder = [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 tilfeldig
Endre nå hovedbevegelsessensoren slik:
mens True: hvis pir.motion_detected: print ("Motion detected!") playSound = random.choice (lyder) playSound.play () # sikre at avspillingen er fullført før gjenopptakelse av bevegelsesdeteksjon, forhindrer "spamming" av lydsøvn (15 ) playSound.stop () annet: print ("Ingen bevegelse")
Legg merke til den mindre endringen: i stedet for å spille single-lydvariabelen bruker vi random.choice funksjon for å plukke en tilfeldig lyd fra våre lyder array, og deretter spille det.
Her er den fulle koden hvis du har problemer:
importer pygame fra pygame.mixer import Lyd fra gpiozero import MotionSensor fra tid import søvn importer tilfeldig pygame.init () pygame.mixer.init () #load en lydfil, samme katalog som skript (ingen mp3s) høres = [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) mens True: hvis pir.motion_detected: print ("Motion detected!") playSound = random.choice (lyd) playSound .play () # sørg for at avspillingen er fullført før gjenopptakelse av bevegelsesdeteksjon, forhindrer "spamming" av lydsøvn (15) playSound.stop () annet: utskrift ("ingen bevegelse")
Med bare fire prøver, er det en stor sannsynlighet for gjentakelse hver gang, men du kan legge til flere prøver hvis det er irriterende.
Det er det! Skjul den 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. Vil 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 personskade som kan skyldes 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!
.