Reklame
Det er den tid på året igen, hvor det betragtes som socialt acceptabelt at skræmme små børn og give dem slik. Å glæde. Jeg er her for at gøre dit job lettere, ved at vise dig, hvordan du laver en simpel bevægelsessenserende Raspberry Pi Halloween-lydkasse. Her er en demo:
Her er hvad du har brug for
Den eneste del, du ikke allerede har, er sandsynligvis bevægelsessensoren, en lille og billig del, du burde være i stand til at finde på dit lokale Microcenter eller Maplin.
- Raspberry Pi (enhver model vil gøre).
- Bevægelsessensor (~ $ 3).
- Koblingsledninger.
- Kabelforbundet højttaler (de fleste Bluetooth-højttalere har mulighed for at bruge line-in).
- 3,5 mm stereokabel, han-til-han.
Når du er færdig, skal du muligvis tilføje nogle synkroniserede lyseffekter Sådan synkroniseres hjemmelys og musik til HalloweenUanset om du er vært for en Halloween-fest, eller du vil have det fedeste hjemsøgte hus i nabolaget, er det vigtigt at få dine lys til at blinke til musik og lydeffekter. Læs mere også, men i denne selvstudie dækker vi kun den skræmmende lyde lidt!
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 i orden. Jeg har efterladt det på standardværtsnavnet "raspberrypi.local", så start med at logge ind eksternt ved hjælp af SSH (åbne et terminalvindue, hvis du er på Mac. Her er hvordan man gør det samme i Windows 4 lette måder at bruge SSH i Windows påSSH er de facto-løsningen til sikker adgang til fjernterminaler på Linux og andre UNIX-lignende systemer. Hvis du har en ekstern SSH-server, du vil have adgang til, 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]. (indtast hindbær som adgangskode) sudo apt-get-opdatering. sudo apt-get install python-pip. sudo pip installer gpiozero.
Dette installerer et simpelt bibliotek til at arbejde med GPIO-stifterne i Python med mange typer indbyggede sensorer og knapper. Tilslut din sensor med signalstiften på GPIO4, VCC tilsluttet 5V og GND tilsluttet GND. Dette kan variere i henhold til din nøjagtige model, så bekræft med et pinout-diagram.

Heldigvis har min Pi 2-sag fra Pimoroni et pinout-diagram laser-ætset direkte på det.

Lad os nu lave vores bevægelsesskript-script.
nano motion.py.
Indsæt:
fra gpiozero import MotionSensor pir = MotionSensor (4) mens sandt: hvis pir.motion_detected: print ("Bevægelse opdaget!") ellers: print ("Ingen bevægelse")
Tryk på CTRL-X og derefter Y for at gemme og afslutte, kør derefter med:
python motion.py.
Du skal se meddelelsen "ingen bevægelse" gentaget på skærmen, indtil du vinker din hånd foran sensoren, når den vil blive hængende på "Bevægelse opdaget!"

Hvis meddelelsen overhovedet ikke ændres, har du tilsluttet den forkert.
Hvis du er interesseret i at lære mere om dette enkle GPIOZero-bibliotek, kan du tage et kig på dette fantastiske snyderis.
Afspilning af lyd
Tilslut din bærbare højttaler, og sørg for, at den er drevet, hvis den skal være det. Vi bruger PyGame bibliotek for at afspille lyde, så gå videre og installer det:
sudo apt-get install python-pygame.
Først har vi brug for en lydfil for at afspille. Hvis du gør dette fra skrivebordsmiljøet, skal du gå videre og downloade en WAV eller OGG fil et eller andet sted (jeg fandt et godt udvalg af gratis Halloween lyde her), og læg det i dit hjemmekatalog. Jeg vil foreslå at downsample først og konvertering til et lille OGG-format alligevel.
Hvis du opretter forbindelse via fjernbetjening og kun bruger kommandolinjen, har vi lidt mere besvær med nogle sider, siden wget kommandoen griber muligvis ikke den faktiske fil. I stedet kan vi downloade det lokalt til vores skrivebord og bruge scp (sikker kopi) kommando til kopiering over kommandolinjen. Du kan lære mere om scp her, men for nu, åbne en ny fane Terminal og skriv:
scp thunder.ogg [email protected]:
Omdøb thunder.ogg efter behov, men glem ikke den sidste : (kommandoen afsluttes uden den, men den vil ikke gøre, hvad vi ønsker, at den skal gøre). Som standard overfører dette filen til Pi-brugerens hjemmekatalog.
Lad os nu ændre scriptet til at afspille en lyd. Start med at importere nogle nye moduler:
import pygame.mixer. fra pygame.mixer import Sound.
Så lige efter de eksisterende importangivelser sløjfer vi den samme lyd igen og igen til testformål. Lad resten af din bevægelsessensorkode være, som den er lige nu - den kører bare ikke, da den sidder fast i denne lydafspilningssløjfe for evigt.
pygame.init () pygame.mixer.init () #læs en lydfil i Pi-brugerens hjemmekatalog (ingen mp3'er) torden = pygame.mixer. Lyd ("/ home / pi / thunder.ogg"), mens sandt: thunder.play () sleep (10) thunder.stop ()
Bemærk, at da jeg oprindeligt prøvede denne proces, nægtede lyden at afspille og bare klikkede i stedet. Størrelsen på filen eller bitraten var den skyldige: Den var 24-bit og over 5 MB i et klip på 15 sekunder. Skalering ned til 16-bit ved hjælp af den konverter, jeg linkede til ovenfor, fik alt til at fungere pænt, og størrelsen blev reduceret til kun 260 KB!
Hvis du bemærker en grim sus 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 at ændringerne får virkning. Eller gider det ikke, da det alligevel lyder som regn for mig.
Lad os til sidst ændre den vigtigste bevægelseskontrolsløjfe for at afspille lyden, når der registreres bevægelse. Vi bruger en forsinkelse på 15 sekunder, så hele loopen kan afspilles, og til at fungere som en spambuffer til, når der er masser af non-stop bevægelse.
mens sandt: Hvis pir.motion_detected: print ("Bevægelse detekteret!") thunder.play () # sikre, at afspilningen er fuldt ud afsluttet før genoptagelse af bevægelsesdetektion, forhindrer "spamming" af lydsøvn (15) thunder.stop () andet: print ("Nej bevægelse")
Start automatisk
Vi vil sandsynligvis sætte dette op et sted med et batteri og ingen internetforbindelse, så scriptet skal køre ved genstart uden at skulle åbne en kommandolinje. For at gøre dette bruger vi den mest enkle metode: crontab Sådan planlægges opgaver i Linux med Cron og CrontabEvnen til at automatisere opgaver er en af de futuristiske teknologier, der allerede er her. Hver Linux-bruger kan drage fordel af planlægningssystemer og brugeropgaver takket være cron, en let at bruge 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 redaktør du skal bruge. Jeg valgte mulighed 2 til nano. Det starter i din valgte editor, så tilføj følgende linje:
@reboot python /home/pi/motion.py &
Dette betyder, at dit motion.py-script kører ved hver opstart og gør det lydløst (så enhver output fra scriptet ignoreres). Genstart for at prøve det.
Hvis intet spiller på trods af, at 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 blive konverteret 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 lidt tilfældighed til det. Download nogle flere Halloween-lyde, husk at skalere dem ned til en fornuftig størrelse og bitrate, og send dem derefter videre til din Pi vha. scp som før. Jeg tilføjede tre forskellige typer skrig.
Ændre koden, så i stedet for at definere en enkelt pygame.mixer. Lyd variabel, opretter vi faktisk en matrix af lyde. Dette er enkelt med Python, bare omring en kommasepareret liste over dem med firkantede parenteser, som sådan:
lyder = [pygame.mixer. Lyd ("/ home / pi / thunder.ogg"), pygame.mixer. Lyd ("/ home / pi / scary_scream.ogg"), pygame.mixer. Lyd ("/ home / pi / girl_scream.ogg"), pygame.mixer. Lyd ("/ home / pi / psycho_scream.ogg")]
Importer derefter det tilfældige bibliotek til din fil med:
import tilfældigt.
Rediger nu den vigtigste bevægelsesfølende løkke som følger:
mens sandt: Hvis pir.motion_detected: print ("Bevægelse detekteret!") playSound = random.choice (lyder) playSound.play () # sikre, at afspilning har er fuldstændig afsluttet før genoptagelse af bevægelsesdetektion, forhindrer "spamming" af lydsøvn (15) playSound.stop () ellers: print ("Nej bevægelse")
Bemærk den mindre ændring: i stedet for at afspille den enkelte lydvariabel, bruger vi random.choice funktion til at vælge en tilfældig lyd fra vores lydgruppe og derefter afspille den.
Her er den fulde kode, hvis du har problemer:
importer pygame. fra pygame.mixer import Sound. fra gpiozero import MotionSensor. fra tidspunktet import søvn. import tilfældigt pygame.init () pygame.mixer.init () #læs en lydfil, det samme bibliotek som script (ingen mp3'er) lyder = [pygame.mixer. Lyd ("/ home / pi / thunder.ogg"), pygame.mixer. Lyd ("/ home / pi / scary_scream.ogg"), pygame.mixer. Lyd ("/ home / pi / girl_scream.ogg"), pygame.mixer. Lyd ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) mens sandt: Hvis pir.motion_detected: print ("Bevægelse detekteret!") playSound = random.choice (lyder) playSound.play () # sikre, at afspilning har er fuldstændig afsluttet før genoptagelse af bevægelsesdetektion, forhindrer "spamming" af lydsøvn (15) playSound.stop () ellers: print ("Nej bevægelse")
Med kun fire prøver er der stor 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 gør du uhyggelige Halloween-glødende øjne til mindre end $ 5Vil du krydre dine Halloween-dekorationer i år? Lær hvordan man laver LED-øjne til mindre end $ 5 i dette begynderelektronikprojekt. Læs mere , og du burde være i stand til at redde dig noget slik, da alle børnene løber væk og skriger, før de selv når døren. Eller gå og skjule dig i skabet, fordi en vred mor er ude efter blod, efter at du fik lille Johnny til at græde.
Ansvarsfraskrivelse: MakeUseOf er ikke ansvarlig for nogen personskade, der måtte være resultatet af din brug af dette projekt!
Vil du lave denne bevægelsesaktiverede lydboks for at skræmme de lokale trick-eller-behandlere? Har du konfigureret nogen skræmmende effekter med en Raspberry Pi denne Halloween? Fortæl os venligst om det i kommentarerne nedenfor!
James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.