Scare Trick-sau-Treaters cu un DIY Motion-Activated Soundbox

Scare Trick-sau-Treaters cu un DIY Motion-Activated Soundbox / DIY

Este din nou momentul acelui moment când este considerat acceptabil din punct de vedere social să sperie copiii mici și să le dărui bomboane. O bucurie. Sunt aici pentru a vă face munca mai ușoară, arătându-vă cum să faceți o simplă mișcare de sesizare a cutiei de sunet Raspberry Pi Halloween. Iată un demo:

Iată ce aveți 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 Microcenter sau Maplin.

  • Raspberry Pi (orice model va face).
  • Senzor de mișcare (~ 3 $).
  • Fire de legătură.
  • Difuzor cu fir (majoritatea difuzoarelor Bluetooth vor avea opțiunea de a utiliza linia de intrare).
  • Cablu stereo de 3,5 mm, de la bărbat la bărbat.

Odată ce ați terminat, ați putea dori să adăugați unele efecte de iluminat sincronizat Cum să sincronizați Lumini de Acasă și Muzică pentru Halloween Cum de a sincroniza Lumini de Acasă și Muzică pentru Halloween Fie că sunteți găzduiește o petrecere casa de Halloween sau doriți cea mai tare bântuit casa în vecinătate, făcând lumina să clipească în timp, pentru muzică și efecte sonore este esențială. Citește mai mult, dar în acest tutorial vom acoperi doar sunetele infricosatoare!

Configurare

Folosim Raspbian Jessie Lite și Python 2.7, dar orice distribuție Linux care rulează pe Pi trebuie să fie bine. Am lăsat-o pe numele de gazdă standard “raspberrypi.local”, Deci, începeți prin conectarea la distanță folosind SSH (deschideți o fereastră Terminal dacă sunteți pe Mac. Iată cum puteți face același lucru în Windows 4 Modalități ușoare de utilizare a SSH în Windows 4 Modalități ușoare de a utiliza SSH În Windows SSH este soluția de facto pentru accesul sigur la terminalele la distanță de pe Linux și alte sisteme similare UNIX Dacă aveți un server SSH la distanță pe care doriți să îl accesați, va trebui să descărcați un client SSH ... Citiți mai mult) - sau dacă ați optat pentru utilizarea unui Raspbian complet cu GUI desktop, nu ezitați să treceți la actualizare.

ssh [email protected] (introduceți zmeura ca parolă) sudo apt-get actualizare sudo apt-get instalare python-pip sudo pip instalare gpiozero 

Aceasta instalează o bibliotecă simplă pentru a lucra cu pinii GPIO din Python cu mai multe tipuri de senzori și butoane încorporate. Introduceț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, prin urmare, confirmați cu o diagramă pinout.

Credit de imagine: raspberrypi.org

Cu ușurință, cazul meu Pi 2 de la Pimoroni are o diagrama de pinout gravată direct pe ea.

Acum, să facem scripturile noastre de detectare a mișcării.

nano motion.py 

Lipiți în:

din gpiozero Import MotionSensor pir = MotionSensor (4) în timp ce True: dacă pir.motion_detected: print ("Motion detected!") alt: print ("No motion" 

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

python motion.py 

Ar trebui să vezi “nici o mișcare” mesajul repetat pe ecran până când vă loviți mâna în fața senzorului, când acesta va rămâne pe ecran “Mișcarea a fost detectată!”

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

Dacă sunteți interesat să aflați mai multe despre această bibliotecă simplă GPIOZero, aruncați o privire la acest cheatsheet fantastic.

Redarea sunetului

Conectați-vă difuzorul portabil și asigurați-vă că este alimentat dacă trebuie să fie. Vom folosi pygame biblioteca pentru a reda sunete, așa că continuați și instalați-o:

sudo apt-get instala python-pygame 

În primul rând, avem nevoie de un fișier audio pentru a juca. Dacă faceți acest lucru din mediul desktop, continuați și descărcați a WAV sau OGG fișier de undeva (am găsit o bună selecție de sunete gratuite de Halloween aici) și l-ați pus în directorul de acasă. Aș sugera mai întâi o reducere a eșantionului și oricum o conversie la un format OGG mic.

Dacă vă conectați de la distanță și numai folosind linia de comandă, avem o mică dificultate cu unele site-uri, din moment ce wget comanda nu poate lua fișierul real. În schimb, îl putem descărca local pe desktopul nostru și îl putem folosi scp (copie securizată) pentru copierea peste linia de comandă. Puteți afla mai multe despre scp aici, dar pentru moment, deschideți o nouă filă Terminal și tastați:

scp thunder.ogg [email protected]: 

Redenumiți thunder.ogg după caz, dar nu uitați acel final : (comanda se va termina fără ea, dar nu va face ceea ce dorim să facă). În mod implicit, acest lucru va transfera fișierul în directorul de domiciliu al utilizatorului Pi.

Acum, să modificăm scriptul pentru a reda un sunet. Începeți prin importarea unor module noi:

importul pygame.mixer de la importul de fișiere pygame.mixer Sound 

Apoi, imediat după declarațiile de import existente, vom relua același sunet pentru verificări. Lăsați restul codului dvs. de detectare a mișcării așa cum este pentru moment - pur și simplu nu va rula, deoarece va fi blocat în această bucla de sunet pentru totdeauna.

pygame.mixer.init () #load un fișier de sunet, în directorul de domiciliu al utilizatorului Pi (fără mp3) thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg") în timp ce True : thunder.play () somn (10) thunder.stop () 

Rețineți că atunci când am încercat inițial acest proces, sunetul a refuzat să se joace și doar a făcut clic în schimb. Mărimea fișierului sau rata de biți a fost vinovatul: a fost de 24 de biți și de peste 5 MB pentru o clipă de 15 secunde. Scaling că până la 16 biți folosind convertor am legat la mai sus făcut totul de lucru frumos, iar dimensiunea a fost redus la doar 260KB!

Dacă observați un suier urât din difuzoare atunci când rulează aplicația dvs. Python, 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 te deranjează, pentru că mi-a sunat ca ploaia oricum.

Î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, astfel încât întreaga bucla să poată fi jucată și să acționeze ca un tampon pentru spam atunci când există o mulțime de mișcări non-stop.

în timp ce True: dacă pir.motion_detected: print ("Motion detected!") thunder.play () # asigură redarea completă înainte de a relua detectarea mișcării, împiedică "spam" print ("Nici o mișcare") 

Porniți automat

Probabil vrem să stabilim acest lucru undeva cu o baterie și fără conexiune la internet, așa că scriptul trebuie să ruleze la repornire fără a trebui să deschidă o linie de comandă. Pentru a face acest lucru, vom folosi cea mai simplă metodă posibilă: crontab Cum să programați sarcinile în Linux cu Cron și Crontab Cum să programați sarcini în Linux cu Cron și Crontab Abilitatea de a automatiza sarcinile este una dintre acele tehnologii futuriste care este deja aici . Fiecare utilizator Linux poate beneficia de sarcini de sistem și de utilizare a programelor, grație cron, un serviciu de fundal ușor de utilizat. Citeste mai mult . Tip:

sudo crontab -e 

Dacă aceasta este prima dată când executați această comandă, va începe prin a vă întreba ce editor să utilizați. Am ales opțiunea 2, pentru nano. Se va încărca în editorul ales, adăugați următoarea linie:

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

Aceasta inseamna ca scriptul dvs. motion.py va rula la fiecare pornire si va face acest lucru in mod silentios (astfel incat orice iesire din script va fi ignorata). Reporniți-l pentru al încerca.

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

Adăugați mai multe sunete

Redarea aceluiași efect mereu și repede este puțin plictisitoare, deci să adăugăm o anumită aleatorie. Descărcați mai multe sunete de Halloween, amintindu-le să le scalați până la o dimensiune și bitrate sensibile, apoi trimiteți-le la Pi utilizând scp Ca înainte. Am adăugat trei tipuri diferite de urlet.

Modificați codul astfel încât să nu definiți un singur pygame.mixer.Sound variabilă, de fapt creăm un mulțime de sunete. Acest lucru este simplu cu Python, înconjoară doar o listă separată prin virgulă, cu paranteze pătrate, cum ar fi:

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

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

importă aleatoriu 

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

în timp ce True: dacă pir.motion_detected: print ("Detectare mișcare!") playSound = random.choice (sunete) playSound.play () # asigurați-vă că redarea a fost finalizată complet înainte de a relua detectarea mișcării. ) playSound.stop () alt: print ("Nici o mișcare") 

Rețineți modificarea minoră: în loc să jucăm singura variabilă de sunet, folosim random.choice funcția de a alege un sunet aleatoriu din matricea sunetului nostru, apoi redarea acestuia.

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

import pygame de la importul pygame.mixer Sunet de la gpiozero import MotionSensor de la importul de timp importul de somn intamplare pygame.init () pygame.mixer.init () #load un fisier de sunet, acelasi director ca si scriptul (fara mp3) sounds = [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) în timp ce True: dacă pir.motion_detected: print ("Motion detect!") playSound = random.choice .play () # asigura ca redarea a fost finalizata inainte de a relua detectarea miscarii, impiedica "spam-ul" de somn sunet (15) playSound.stop () altceva: print (" 

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

Asta e! Ascunde-l în tufișuri cu niște ochi monștri cu LED-uri înfricoșătoare Cum să faci ochi strălucitori Halloween strălucitori pentru mai puțin de 5 dolari Cum să faci ochi strălucitori Halloween strălucitori pentru mai puțin de 5 dolari Vrei să-ți spice decoratiunile de Halloween în acest an? Aflați cum puteți face ochii cu LED-uri pentru mai puțin de 5 dolari în proiectul pentru începători în domeniul electronicii. Citiți mai multe și ar trebui să vă puteți salva niște bomboane, pe măsură ce toți copiii vor fugi țipând înainte să ajungă chiar la ușă. Sau să te ascunzi în dulap, pentru că o mamă furioasă a ieșit din sânge după ce ai făcut puținul plânge lui Johnny.

Disclaimer: MakeUseOf nu este responsabil pentru vătămări corporale care ar putea rezulta în urma utilizării acestui proiect!

Veți face această casetă de sunet activată de mișcare pentru a sperie trucurile locale? Ați înființat efecte înfricoșătoare cu un zmeu Pi acest Halloween? Vă rugăm să ne anunțați în comentariile de mai jos!

.