Oglas

To je doba godine kad se smatra da je društveno prihvatljivo prestrašiti malu djecu i dati im slatkiše. Oh radost. Tu sam da vam olakšam posao pokazujući vam kako napraviti jednostavan zvučni okvir Raspberry Pi Halloween koji osjeti gibanje. Evo prikaza:

Evo što će vam trebati

Vjerojatno jedini dio koji još nemate senzor pokreta, mali i jeftini dio koji biste trebali pronaći u lokalnom Microcentru ili Maplinu.

  • Raspberry Pi (bilo koji model će učiniti).
  • Senzor kretanja (~ 3 USD).
  • Žice za spajanje.
  • Ožičeni zvučnik (većina Bluetooth zvučnika imat će mogućnost korištenja line-in-a).
  • 3,5 mm stereo kabel, muško-muški.

Nakon što završite, možda biste ih željeli dodati sinkronizirani svjetlosni efekti Kako sinkronizirati kućne lampice i glazbu za HalloweenBilo da ste domaćin zabave za Noć vještica ili želite najslađu kuću s ukletom u blizini, vaša svjetla će vremenom bljesnuti glazbom i zvučnim efektima. Čitaj više također, ali u ovom ćemo udžbeniku biti samo pokrivanje zastrašujućih zvukova!

Postavljanje

instagram viewer

Koristimo Raspbian Jessie Lite i Python 2.7, ali svaki Linux distrogram koji radi na vašem Pi-u trebao bi biti u redu. Ostavio sam ga na uobičajenom nazivu glavnog računala "raspberrypi.local", pa počnite tako da se daljinski prijavite pomoću SSH (otvorite prozor Terminala ako ste na Macu. Evo kako to isto učiniti u sustavu Windows 4 jednostavna načina za korištenje SSH-a u sustavu WindowsSSH je de facto rješenje za siguran pristup udaljenim terminalima na Linuxu i ostalim sustavima sličnim UNIX-u. Ako imate udaljeni SSH poslužitelj kojem želite pristupiti, morat ćete preuzeti SSH klijent ... Čitaj više ) - ili ako ste odlučili koristiti puni Raspbian s GUI na radnoj površini, slobodno prijeđite na ažuriranje.

ssh [email protected]. (unesite malinu kao lozinku) sudo apt-get update. sudo apt-get install python-pip. sudo pip instalirati gpiozero. 

Ovo instalira jednostavnu knjižnicu za rad s GPIO pinovima na Python-u s mnogim vrstama ugrađenih senzora i tipki. Uključite senzor signalnim pinom na GPIO4, VCC povezan s 5V, a GND spojen na GND. To se može razlikovati ovisno o vašem modelu, pa potvrdite dijagramom "pinout".

Raspberry Pi GPIO dijagram
Kreditna slika: raspberrypi.org

Pomoglo je što moj slučaj Pi 2 iz Pimoronija ima lakirani dijagram na kojem je izravno utisnut.

Označen slučaj maline Pi

Sada napravimo skriptu otkrivanja pokreta.

nano motion.py. 

Lijepljenje:

iz uvoza gpiozero MotionSensor pir = MotionSensor (4) dok je istina: ako je pir.motion_detected: print ("Motion detected!") else: print ("Nema pokreta")

Pritisnite CTRL-X, zatim Y da biste je spremili i napustili, a zatim pokrenite s:

python motion.py. 

Trebali biste vidjeti poruku "bez pokreta" ponavlja se na ekranu dok ne mahnete rukom ispred senzora, kada će zaviriti u "Motion Detected!"

Kretanje je otkriveno u terminalu

Ako se poruka uopće ne promijeni, pogrešno ste je spojili.

Ako vas zanima više o ovoj jednostavnoj biblioteci GPIOZero, pogledajte ovaj fantastični varalica.

Sviranje zvuka

Priključite svoj prijenosni zvučnik i osigurajte da je napajan ako treba. Koristit ćemo se pygame knjižnica za reprodukciju zvukova, pa nastavite i instalirajte je:

sudo apt-get install python-pygame. 

Prvo nam treba zvučna datoteka za reprodukciju. Ako to radite iz radnog okruženja, idite naprijed i preuzmite WAV ili OGG datoteka odnekud (našao sam dobar izbor od besplatni zvuci Noći vještica ovdje), i stavite ga u svoj kućni imenik. Predlažem prvo smanjenje downsamplinga i pretvaranje u mali OGG format u svakom slučaju.

Ako se daljinsko spajate i upotrebljavate samo naredbeni redak, imamo nekoliko više poteškoća s nekim web lokacijama od wget naredba možda neće zgrabiti stvarnu datoteku. Umjesto toga, možemo ga preuzeti lokalno na radnu površinu i koristiti ga sCP (sigurna kopija) naredba za kopiranje preko naredbenog retka. Možete naučiti više o scp ovdje, ali za sada otvorite novu karticu Terminala i utipkajte:

scp thunder.ogg [email protected]: 

Preimenujte thunder.ogg po potrebi, ali nemojte zaboraviti taj konačni : (naredba će se izvršiti bez nje, ali neće raditi ono što želimo). Ovo će datoteku prebaciti u početni direktorij Pi korisnika.

Sada hajde da izmijenimo skriptu za reprodukciju zvuka. Započnite s uvozom novih modula:

uvoz pygame.mixer. s pygame.mixer uvoz zvuka. 

Zatim ćemo tek nakon postojećih izjava o uvozu petiti isti zvuk za potrebe ispitivanja. Ostavite ostatak koda za otkrivanje pokreta kao i do sad - on se jednostavno neće pokrenuti jer će zauvijek ostati u ovoj petlji za reprodukciju zvuka.

pygame.init () pygame.mixer.init () # učitajte zvučnu datoteku u kućnom direktoriju korisnika Pi (nema mp3-ova) grom = pygame.mixer. Zvuk ("/ home / pi / thunder.ogg") dok je True: thunder.play () sleep (10) thunder.stop ()

Imajte na umu da sam, kada sam izvorno isprobao ovaj postupak, zvuk odbio svirati i umjesto toga jednostavno kliknuo. Veličina datoteke ili brzina prijenosa bila je krivac: bila je 24-bitna i preko 5 MB za isječak od 15 sekundi. Smanjivanje skaliranja do 16-bitnog pretvarača s kojim sam bio povezan gore je sve lijepo funkcioniralo, a veličina je smanjena na samo 260 KB!

Ako primijetite jezivo šištanje iz svojih zvučnika kada se aplikacija Python pokreće, ali ne u suprotnom, upišite:

sudo nano /boot/config.txt. 

I dodajte ovaj redak na kraju:

disable_audio_dither = 1. 

Ponovno pokrenite kako bi promjene stupile na snagu. Ili ne smetajte jer mi je nekako zvučalo kao kiša.

Na kraju, promijenimo glavnu petlju za provjeru kretanja kako bi reproducirao zvuk kada je detektirano kretanje. Koristit ćemo kašnjenje od 15 sekundi kako bismo mogli reproducirati čitavu petlju i djelovati kao spremnik neželjene pošte kad ima puno non-stop pokreta.

Dok je istina: ako je pir.motion_detected: print ("Motion detected!") thunder.play () # osigurajte da je reprodukcija u potpunosti dovršeno prije nastavka otkrivanja pokreta, sprječava "spam" zvučno spavanje (15) thunder.stop () ostalo: print ("Ne pokret")

Pokreni se automatski

Vjerojatno to želimo postaviti negdje s baterijom i bez internetske veze, pa se skripta mora pokrenuti pri ponovnom pokretanju bez otvaranja naredbene linije. Da bismo to učinili, upotrijebit ćemo najjednostavniju moguću metodu: krontab Kako zakazati zadatke u Linuxu pomoću Cron-a i CrontabaSposobnost automatizacije zadataka jedna je od onih futurističkih tehnologija koja se već nalazi ovdje. Svaki korisnik Linuxa može imati koristi od sustava zakazivanja i zadataka korisnika, zahvaljujući cron-u, pozadinskoj usluzi jednostavnoj upotrebi. Čitaj više . Tip:

sudo crontab -e. 

Ako se prvi put pokreće ova naredba, započet će vas pitati koji editor trebate koristiti. Odabrao sam opciju 2, za nano. Uključit će se u vaš odabrani uređivač, pa dodajte sljedeći redak:

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

To znači da će se vaše script.py skripta pokrenuti pri svakom pokretanju, i to učinite tiho (tako da će se svaki izlaz iz skripte zanemariti). Ponovno se pokrenite da biste ga isprobali.

Ako se ništa ne reproducira unatoč pokretu ili čujete samo mali klik, možda niste koristili potpunu putanju datoteke ili će možda trebati pretvaranje datoteke u manju brzinu i manju veličinu datoteke.

Dodajte još zvukova

Igranje istog efekta iznova i iznova pomalo je dosadno, pa tome dodajmo malo slučajnosti. Preuzmite još nekoliko zvukova za Noć vještica, sjećajući se da ih smanjite do osjetljive veličine i brzine, a zatim ih pošaljite na svoj Pi koristeći sCP kao prije. Dodao sam tri različite vrste vriska.

Izmijenite kôd tako da umjesto definiranja jednog pygame.mixer. Zvuk mi zapravo stvaramo red zvukova. Ovo je jednostavno s Pythonom, samo zaokružite njihov popis razdvojenim zarezima uglatim zagradama:

zvukovi = [pygame.mixer. Zvuk ("/ home / pi / thunder.ogg"), pygame.mixer. Zvuk ("/ home / pi / scary_scream.ogg"), pygame.mixer. Zvuk ("/ home / pi / girl_scream.ogg"), pygame.mixer. Zvuk ("/ home / pi / psycho_scream.ogg")]

Zatim uvezite slučajnu biblioteku u svoju datoteku sa:

uvoz slučajnim. 

Sada izmijenite glavnu petlju osjetljivosti kretanja na sljedeći način:

dok je True: ako je pir.motion_detected: print ("Motion detected!") playSound = random.choice (zvukovi) playSound.play () # osigurajte da reprodukcija ima u potpunosti je dovršeno prije nastavka otkrivanja pokreta, sprječava "spam" zvučno stanje mirovanja (15) playSound.stop () ostalo: print ("Ne pokret")

Imajte na umu manju promjenu: umjesto da reprodukujemo jednu varijablu zvuka, mi koristimo random.choice funkcija za odabir nasumičnog zvuka iz našeg zvučnog niza, a zatim reprodukciju toga.

Evo punog koda u slučaju da imate problema:

uvoz pigame. s pygame.mixer uvoz zvuka. iz gpiozero uvoza MotionSensor. od vremena uvođenja sna. uvoz slučajnih pygame.init () pygame.mixer.init () #load zvučna datoteka, isti direktorij kao i skripta (bez mp3-ova) zvuči = [pygame.mixer. Zvuk ("/ home / pi / thunder.ogg"), pygame.mixer. Zvuk ("/ home / pi / scary_scream.ogg"), pygame.mixer. Zvuk ("/ home / pi / girl_scream.ogg"), pygame.mixer. Zvuk ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) dok je True: ako je pir.motion_detected: print ("Motion detected!") playSound = random.choice (zvukovi) playSound.play () # osigurajte da reprodukcija ima u potpunosti je dovršeno prije nastavka otkrivanja pokreta, sprječava "spam" zvučno stanje mirovanja (15) playSound.stop () ostalo: print ("Ne pokret")

Sa samo četiri uzorka, svaka je vjerojatnost ponavljanja, ali možete dodati još uzoraka ako je to neugodno.

To je to! Sakrij ga u grmlje s nekima zastrašujuće oči LED čudovišta Kako napraviti sablasne svijetleće oči za Halloween za manje od 5 dolaraŽelite li ove godine začiniti Halloween ukrase? Saznajte kako napraviti LED oči za manje od 5 USD u ovom početničkom elektroničkom projektu. Čitaj više , i trebali biste se moći spremiti slatkiša jer sva djeca bježe vrišteći prije nego što uopće stignu do vrata. Ili se sakrij u ormar jer ljuta mama nema krvi nakon što si natjerao malog Johnnyja da plače.

Izjava o odricanju odgovornosti: MakeUseOf nije odgovoran za bilo kakve osobne ozljede koje mogu nastati zbog upotrebe ovog projekta!

Hoćete li napraviti ovu zvučnu kutiju koja se aktivira pokretom kako biste uplašili lokalne trikove ili trezore? Jeste li postavili neke zastrašujuće efekte s Raspberry Pi ovog Halloweena? Javite nam o tome u komentarima ispod!

James je diplomirao iz umjetne inteligencije i certificiran je CompTIA A + i Network +. Vodeći je programer MakeUseOf-a, a svoje slobodno vrijeme provodi igrajući VR paintball i boardgames. Gradio je računala još od djeteta.