Publicitate

Este din acea perioadă a anului, când este considerat social acceptabil să îngrozească copiii mici și să le ofere bomboane. O bucurie. Sunt aici pentru a-ți face munca mai ușoară, arătându-ți cum să faci o casetă de sunet Raspberry Pi Halloween senzorială în mișcare. Iată o demonstrație:

Iată ce vei avea nevoie

Probabil singura parte pe care nu o aveți deja este senzorul de mișcare, o parte mică și ieftină pe care ar trebui să o puteți găsi la microcentrul sau maplinul local.

  • Raspberry Pi (orice model va face).
  • Senzor de mișcare (~ 3 $).
  • Cabluri de conectare.
  • Difuzor cu fir (majoritatea boxelor Bluetooth vor avea opțiunea de a utiliza linia în linie).
  • Cablu stereo de 3,5 mm, de la bărbat la bărbat.

După ce ați terminat, este posibil să doriți să adăugați unele efecte de iluminare sincronizate Cum să sincronizați luminile de casă și muzica de HalloweenIndiferent dacă găzduiești o petrecere în casă de Halloween sau îți dorești cea mai tare casă bântuită din cartier, făcând luminile să se aprindă la timp pentru muzică și efecte sonore este esențial. Citeste mai mult

instagram viewer
de asemenea, dar în acest tutorial vom acoperi doar sunetele înfricoșătoare!

Configurare

Folosim Raspbian Jessie Lite și Python 2.7, dar orice distro Linux care rulează pe Pi ar trebui să fie bine. L-am lăsat pe numele de gazdă standard „raspberrypi.local”, așa că începeți să vă conectați de la distanță folosind SSH (deschideți o fereastră Terminal dacă sunteți pe Mac. Iată cum să procedați la fel în Windows 4 modalități ușoare de a utiliza SSH în WindowsSSH este soluția de facto pentru accesarea în siguranță a terminalelor la distanță pe Linux și alte sisteme similare UNIX. Dacă aveți un server SSH la distanță la care doriți să accesați, va trebui să descărcați un client SSH ... Citeste mai mult ) - sau dacă ați ales să utilizați un Raspbian complet cu GUI pentru desktop, nu ezitați să săriți la actualizare.

ssh [email protected]. (introduceți zmeura ca parolă) sudo apt-get update. sudo apt-get install python-pip. sudo pip instala gpiozero. 

Aceasta instalează o bibliotecă simplă pentru lucrul cu pinii GPIO din Python cu multe tipuri de senzori și butoane încorporate. Conectați senzorul cu pinul de semnal de pe GPIO4, VCC conectat la 5V și GND conectat la GND. Acest lucru poate varia în funcție de modelul dvs. exact, așa că confirmați cu o diagramă fixă.

Zmeură Pi GPIO Diagrama
Credit imagine: raspberrypi.org

În mod util, carcasa mea Pi 2 de la Pimoroni are o diagramă cu pin gravată cu laser direct pe ea.

Carcasă cu zmeură Pi etichetată

Acum să facem scriptul nostru de detectare a mișcărilor.

nano motion.py. 

Lipiți în:

de la gpiozero import MotionSensor pir = MotionSensor (4) while True: if pir.motion_detected: print ("Mișcare detectată!") else: print ("Fără mișcare")

Apăsați CTRL-X, apoi Y pentru a salva și ieși, apoi executați cu:

python motion.py. 

Ar trebui să vedeți mesajul „Fără mișcare” repetat pe ecran până când vă învârtiți mâna în fața senzorului, atunci când va rămâne pe „Moviment detectat!”.

Mișcare detectată în terminal

Dacă mesajul nu se schimbă deloc, l-ați conectat greșit.

Dacă sunteți interesat să aflați mai multe despre această simplă bibliotecă GPIOZero, aruncați o privire această foaie de înșelare fantastică.

Redarea sunetului

Conectați-vă difuzorul portabil și asigurați-vă că este alimentat dacă trebuie. Vom folosi pygame biblioteca pentru a reda sunete, așa că mergeți mai departe și instalați-l:

sudo apt-get install python-pygame. 

În primul rând, avem nevoie de un fișier sonor pentru a reda. Dacă faceți acest lucru din mediul desktop, mergeți mai departe și descărcați un WAV sau OGG fișier de undeva (am găsit o selecție bună de Halloween gratuit sună aici) și puneți-l în directorul de acasă. Vă sugerez prima dată eșantionarea și convertirea la un format mic OGG oricum.

Dacă vă conectați de la distanță și utilizați doar linia de comandă, avem unele dificultăți mai mari cu unele site-uri, deoarece wget comanda nu poate apuca fișierul real. În schimb, îl putem descărca local pe desktopul nostru și vom folosi funcția scp (copiere sigură) comandă de copiat peste linia de comandă. Puteți afla mai multe despre scp aici, dar deocamdată, deschideți o nouă filă Terminal și tastați:

scp thunder.ogg [email protected]: 

Redenumiți thunder.ogg după caz, dar nu uitați de finalul respectiv : (comanda se va finaliza fără ea, dar nu va face ceea ce vrem să facem). În mod implicit, acesta va transfera fișierul în directorul principal al utilizatorului Pi.

Acum modificăm scriptul pentru a reda un sunet. Începeți prin a importa câteva module noi:

import pygame.mixer. din pygame.mixer import Sound. 

Apoi, imediat după instrucțiunile de import existente, vom acoperi același sunet repetat pentru scopuri de testare. Lăsați restul codului de detectare a mișcării așa cum este deocamdată - nu va mai rula, deoarece va fi blocat în această buclă de redare a sunetului pentru totdeauna.

pygame.init () pygame.mixer.init () # descărcați un fișier sonor, în directorul principal al utilizatorului Pi (fără fișiere mp3) thunder = pygame.mixer. Sunet ("/ home / pi / thunder.ogg") în timp ce True: thunder.play () sleep (10) thunder.stop ()

Rețineți că, atunci când am încercat inițial acest proces, sunetul a refuzat să se redea și am făcut doar clic pe loc. Mărimea fișierului sau rata de biți a fost vinovată: a fost de 24 de biți și peste 5 MB pentru un clip de 15 secunde. Reducerea până la 16 biți folosind convertorul la care am legat mai sus a făcut ca totul să funcționeze frumos, iar dimensiunea a fost redusă la doar 260 KB!

Dacă observați un sunet urât din partea boxelor dvs. când aplicația Python rulează, dar nu altfel, tastați:

sudo nano /boot/config.txt. 

Și adăugați această linie la sfârșit:

disable_audio_dither = 1. 

Reporniți pentru ca modificările să aibă efect. Sau nu vă deranjează, deoarece oricum mi s-a părut ploaie.

În cele din urmă, să modificăm bucla principală de verificare a mișcării pentru a reda sunetul atunci când este detectată mișcarea. Vom folosi o întârziere de 15 secunde pentru a putea fi redată întreaga buclă și pentru a acționa ca un buffer de spam pentru când există o mulțime de mișcare non-stop.

while True: if pir.motion_detected: print ("Motion detectat!") thunder.play () # asigurați-vă că redarea a fost completă finalizată înainte de a relua detectarea mișcării, previne „spamarea” somnului sonor (15) thunder.stop () else: print („Nu mişcare")

Porniți automat

Probabil dorim să configurați acest lucru undeva cu o baterie și fără conexiune la internet, astfel încât scriptul trebuie să funcționeze la repornire fără a fi necesar să deschideți o linie de comandă. Pentru a face acest lucru, vom folosi cea mai simplă metodă posibilă: crontab Cum să planificați sarcinile în Linux cu Cron și CrontabCapacitatea de a automatiza sarcinile este una dintre acele tehnologii futuriste care există deja aici. Fiecare utilizator Linux poate beneficia de planificarea sistemului și de sarcinile utilizatorului, datorită cron, un serviciu de fundal ușor de utilizat. Citeste mai mult . Tip:

sudo crontab -e. 

Dacă este prima dată când se execută această comandă, va începe prin a vă întreba ce editor să utilizați. Am ales varianta 2, pentru nano. Se va porni în editorul ales, așa că adăugați următoarea linie:

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

Aceasta înseamnă că scriptul dvs. motion.py va rula la fiecare pornire și face acest lucru în tăcere (astfel încât orice ieșire din script va fi ignorată). Reporniți pentru a încerca.

Dacă nu se joacă nimic, în ciuda faptului că există o mișcare sau auziți doar un mic clic, este posibil să nu fi folosit calea completă a fișierului, sau este posibil ca fișierul dvs. să fie nevoie de o conversie la un bitrate mai mic și o dimensiune mai mică a fișierului.

Adăugați mai multe sunete

Jucând același efect de mai multe ori este un pic plictisitor, așa că să adăugăm un pic de aleatoriu. Descărcați alte sunete de Halloween, amintindu-vă că le reduceți la o dimensiune sensibilă și un bitrate, apoi trimiteți-le la Pi cu dvs. scp Ca înainte. Am adăugat trei tipuri diferite de țipete.

Modificați codul astfel încât în ​​loc să definiți unul singur pygame.mixer. Sunet variabilă, creăm de fapt o mulțime de sunete. Acest lucru este simplu cu Python, încercați doar o listă separată de virgule cu paranteze pătrate, ca atare:

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

Apoi, importați biblioteca aleatorie în fișierul dvs., cu:

import la întâmplare. 

Acum modificați bucla principală de detectare a mișcării, după cum urmează:

while True: if pir.motion_detected: print ("Motion detectat!") playSound = random.choice (sunete) playSound.play () # asigura redarea are a fost completat înainte de a relua detectarea mișcării, previne „spamarea” somnului sonor (15) playSound.stop () else: print („Nu mişcare")

Rețineți modificarea minoră: în loc să redăm variabila de sunet unică, folosim funcția random.choice funcție pentru a alege un sunet aleatoriu din tabloul nostru de sunete, apoi redarea aia.

Iată codul complet în cazul în care aveți probleme:

import pygame din pygame.mixer import Sound. de la gpiozero import MotionSensor. din timp importa somnul. import random pygame.init () pygame.mixer.init () # descărcați un fișier de sunet, același director ca și sunetul scriptului (fără fișiere mp3) = [pygame.mixer. Sunet ("/ home / pi / thunder.ogg"), pygame.mixer. Sunet ("/ home / pi / scary_scream.ogg"), pygame.mixer. Sunet ("/ home / pi / girl_scream.ogg"), pygame.mixer. Sunet ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: if pir.motion_detected: print ("Motion detectat!") playSound = random.choice (sunete) playSound.play () # asigura redarea are a fost completat înainte de a relua detectarea mișcării, previne „spamarea” somnului sonor (15) playSound.stop () else: print („Nu mişcare")

Cu doar patru probe, există o mare probabilitate de repetare de fiecare dată, dar puteți adăuga mai multe eșantioane dacă acest lucru este enervant.

Asta e! Ascundeți-l în tufișuri cu unele ochi monstru LED înfricoșători Cum să faceți ochi strălucitori de Halloween strălucitori pentru mai puțin de 5 dolariVrei să condimentezi decorațiile tale de Halloween anul acesta? Aflați cum puteți face ochi LED cu mai puțin de 5 USD în acest proiect de electronice pentru începători. Citeste mai mult și ar trebui să fiți capabil să vă salvați niște bomboane, deoarece toți copiii fug de urlând înainte să ajungă chiar la ușă. Sau mergi să te ascunzi în dulap, pentru că o mamă supărată este afară pentru sânge după ce l-ai făcut pe micuțul Johnny să plângă.

Renunțare la răspundere: MakeUseOf nu este responsabil pentru nicio vătămare corporală care ar putea rezulta din utilizarea acestui proiect!

Vei crea această casetă sonoră activată în mișcare pentru a speria trucurile sau tratatoarele locale? Ai setat efecte înfricoșătoare cu un Raspberry Pi în acest Halloween? Vă rugăm să ne informați despre asta în comentariile de mai jos!

James are licență în inteligență artificială și este certificat CompTIA A + și Network +. Este dezvoltatorul principal al MakeUseOf și își petrece timpul liber jucând VR paintball și boardgames. Construiește calculatoare de când era mic.