Annonse

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

Her er hva du trenger

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

  • Raspberry Pi (hvilken som helst modell vil gjøre).
  • Bevegelsessensor (~ $ 3).
  • Koblingsledninger.
  • Kablet høyttaler (de fleste Bluetooth-høyttalere har muligheten til å bruke line-in).
  • 3,5 mm stereokabel, mann-til-mann.

Når du er ferdig, vil du kanskje legge til noen synkroniserte lyseffekter Hvordan synkronisere hjemmelys og musikk til HalloweenEnten du er vert for en Halloween-fest eller vil ha det kuleste hjemsøkte huset i nabolaget, er det viktig å få lysene til å blinke i tide til musikk og lydeffekter. Les mer også, men i denne opplæringen dekker vi bare de skumle lydene litt!

Setter opp

Vi bruker Raspbian Jessie Lite og Python 2.7, men all Linux-distro som kjører på din Pi, skal være i orden. Jeg har lagt igjen det på standard vertsnavnet “raspberrypi.local”, så begynn med å logge på eksternt ved å bruke SSH (åpne et terminalvindu hvis du er på Mac. her er hvordan du gjør det samme i Windows 4 enkle måter å bruke SSH i WindowsSSH 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, kan du gjerne hoppe til å oppdatere.

ssh [email protected]. (skriv inn bringebær som passord) sudo apt-get-oppdatering. sudo apt-get 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. Koble opp sensoren din med signalstiften på GPIO4, VCC koblet til 5V, og GND koblet til GND. Dette kan variere i henhold til din eksakte modell, så bekreft med et pinout-diagram.

Raspberry Pi GPIO Diagram
Bildekreditt: raspberrypi.org

Hjelpsomt har min Pi 2-sak fra Pimoroni et pinout-diagram som er etset direkte på den.

Merket bringebær Pi-sak

La oss nå lage skriptet vårt for bevegelsesdeteksjon.

nano motion.py. 

Lim inn:

fra gpiozero import MotionSensor pir = MotionSensor (4) mens sant: Hvis pir.motion_detected: print ("Bevegelse oppdaget!") annet: print ("Ingen bevegelse")

Trykk CTRL-X deretter 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 vil henge med på "Motion Detected!"

Bevegelse oppdaget i terminal

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

Hvis du er interessert i å lære mer om dette enkle GPIOZero-biblioteket, kan du se på dette fantastiske juksearket.

Spiller lyd

Koble opp den bærbare høyttaleren din og sørg for at den drives av den hvis den trenger å være det. 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 for å spille av. Hvis du gjør dette fra skrivebordsmiljøet, kan du laste ned en WAV eller OGG fil fra et sted (jeg fant et godt utvalg av gratis Halloween lyder her), og legg den i hjemmekatalogen. Jeg vil foreslå å downsample først og konvertering til et lite OGG-format uansett.

Hvis du kobler til eksternt og bare bruker kommandolinjen, har vi litt vanskeligere med noen nettsteder, siden wget kommandoen kan ikke hente den faktiske filen. I stedet kan vi laste det 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 foreløpig, åpne en ny terminal-fane og skriv:

scp thunder.ogg [email protected]: 

Gi nytt navn til thunder.ogg etter behov, men ikke glem den finalen : (kommandoen vil fullføres uten den, men den vil ikke gjøre det vi vil at den skal gjøre). Som standard vil dette overføre filen til Pi-brukerens hjemmekatalog.

La oss nå endre skriptet slik at det spilles av en lyd. Begynn med å importere noen nye moduler:

import pygame.mixer. fra pygame.mixer import Sound. 

Så rett etter de eksisterende importuttalelsene, sløyfer vi den samme lyden om og om igjen for testformål. La resten av bevegelsessensoren din være som nå - den vil bare ikke kjøres, siden den vil sitte fast i denne lydavspillingsløkken for alltid.

pygame.init () pygame.mixer.init () # last inn en lydfil, i hjemmekatalogen til Pi-brukeren (ingen mp3-er) torden = pygame.mixer. Lyd ("/ home / pi / thunder.ogg") mens 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 den skyldige: den var 24-bits og over 5 MB for et 15 sekunders klipp. Å skalere ned til 16-bit ved hjelp av omformeren jeg koblet til over, gjorde at alt fungerte fint, og størrelsen ble redusert til bare 260 kB!

Hvis du merker en stygg sus fra høyttalerne når Python-appen kjører, men ikke ellers, skriver du inn:

sudo nano /boot/config.txt. 

Og legg til denne linjen på slutten:

disable_audio_dither = 1. 

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

La oss til slutt endre hovedbevegelseskontrollsløyfen for å spille av lyden når bevegelse oppdages. Vi bruker en 15-sekunders forsinkelse slik at hele sløyfen kan spilles, og for å fungere som en spam-buffer for når det er mye non-stop motion.

mens sant: Hvis pir.motion_detected: print ("Bevegelse oppdaget!") thunder.play () # sikre at avspillingen er fullstendig fullført før gjenoppta bevegelsesdeteksjon, forhindrer "spamming" av lydsøvn (15) thunder.stop () annet: print ("No bevegelse")

Start automatisk

Vi vil sannsynligvis sette dette opp et sted med et batteri og ingen internettforbindelse, så skriptet må kjøres på nytt uten å måtte åpne en kommandolinje. For å gjøre dette, bruker vi den enkleste metoden som mulig: crontaben Hvordan planlegge oppgaver i Linux med Cron og CrontabEvnen til å automatisere oppgaver er en av de futuristiske teknologiene som allerede er her. Hver Linux-bruker kan dra nytte av planleggingssystem 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 den med å spørre deg om hvilken redigerer du skal bruke. Jeg valgte alternativ 2, for nano. Det starter i den valgte redigereren, så legg til følgende linje:

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

Dette betyr at motion.py-skriptet ditt kjøres ved hver oppstart, og gjør det lydløst (så all utgave fra skriptet blir ignorert). Start på nytt for å prøve det.

Hvis ingenting spiller til tross for at det er bevegelse, eller hvis du bare hører et lite klikk, kan det hende at du ikke har brukt hele filstien, eller filen din kan trenge å konvertere til en lavere bithastighet og mindre filstørrelse.

Legg til flere lyder

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

Endre koden slik at i stedet for å definere en enkelt pygame.mixer. Lyd variabel, oppretter vi faktisk en matrise av lyder. Dette er enkelt med Python, bare omgi en kommaseparert liste over dem med firkantede parenteser, slik:

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

Deretter importerer du det tilfeldige biblioteket til filen din, med:

import tilfeldig. 

Endre nå den viktigste bevegelsesfølende løkken som følger:

mens sant: Hvis pir.motion_detected: print ("Bevegelse oppdaget!") playSound = random.choice (lyder) playSound.play () # sikre at avspilling har blitt fullstendig fullført før gjenoppta bevegelsesdeteksjon, forhindrer "spamming" av lydsøvn (15) playSound.stop () annet: print ("No bevegelse")

Legg merke til den mindre endringen: i stedet for å spille den enkle lydvariabelen, bruker vi random.choice funksjon for å velge en tilfeldig lyd fra lydgruppen vår og deretter spille den.

Her er den fulle koden i tilfelle du har problemer:

importer pygame. fra pygame.mixer import Sound. fra gpiozero import MotionSensor. fra tid importer søvn. importere tilfeldig pygame.init () pygame.mixer.init () # last inn en lydfil, samme katalog som skript (uten mp3) 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. Sound ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) mens sant: Hvis pir.motion_detected: print ("Bevegelse oppdaget!") playSound = random.choice (lyder) playSound.play () # sikre at avspilling har blitt fullstendig fullført før gjenoppta bevegelsesdeteksjon, forhindrer "spamming" av lydsøvn (15) playSound.stop () annet: print ("No bevegelse")

Med bare fire prøver er det stor sannsynlighet for repetisjon hver gang, men du kan legge til flere prøver hvis det er irriterende.

Det er det! Gjem den i buskene med noen skumle LED monsterøyne Slik lager du uhyggelige Halloween glødende øyne for mindre enn 5 dollarVil du krydre Halloween-dekorasjonene dine i år? Lær hvordan du lager LED-øyne for under $ 5 i dette nybegynnerelektronikkprosjektet. Les mer , og du burde være i stand til å redde deg litt godteri når alle barna stikker av og skriker før de selv kommer til døra. Eller gå gjemme i skapet fordi en sint mamma er ute etter blod etter at du fikk lille Johnny til å gråte.

Ansvarsfraskrivelse: MakeUseOf er ikke ansvarlig for personskade som kan oppstå som følge av din bruk av dette prosjektet!

Vil du lage denne bevegelsesaktiverte lydboksen for å skremme de lokale triks-eller-behandlerne? Har du satt opp noen skumle effekter med en Raspberry Pi denne Halloween? Gi oss beskjed om det i kommentarfeltet nedenfor!

James har en BSc i kunstig intelligens, og er CompTIA A + og Network + sertifisert. Han er hovedutvikler av MakeUseOf, og bruker fritiden sin på å spille VR paintball og brettspill. Han har bygd pc-er siden han var liten.