Sadržaj:

Relej alarma za zamrzivač: 5 koraka
Relej alarma za zamrzivač: 5 koraka

Video: Relej alarma za zamrzivač: 5 koraka

Video: Relej alarma za zamrzivač: 5 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Srpanj
Anonim
Relej alarma za zamrzivač
Relej alarma za zamrzivač

Naš zamrzivač nalazi se u pomoćnoj prostoriji koja je izolirana od našeg životnog prostora. Povremeno se vrata zamrzivača ne zatvaraju pravilno i alarm se uključuje. Problem je u tome što ga ne možemo čuti ako smo u svom životnom prostoru. Kako dobivamo poruku da su vrata zamrzivača otvorena? Ovo je uobičajen problem, u našim domovima imamo uređaje koji razgovaraju s nama, ali što se događa ako ih iz bilo kojeg razloga ne možemo čuti. Započeo sam ovo kao zabavu, ali može biti od koristi u ozbiljnijim aplikacijama.

Postoje dva dijela ovog problema: potrebna nam je metoda za otkrivanje da se alarm oglasio i metoda za prenošenje te činjenice u naš životni prostor. Dizajn na koji sam se odlučio bio je upotrijebiti Raspberry Pi za osluškivanje alarma u zamrzivaču, a zatim za slanje zvučne poruke alarma na moj domaći radio koji ima omogućen uPNP. Univerzalni Plug and Play (UpnP) standard je za otkrivanje i interakciju sa uslugama koje nude različiti uređaji na mreži, uključujući medijske poslužitelje i playere, iako ne mislim da su zamrzivači bili predviđeni prilikom razvoja standarda. Poruka upozorenja bila je glasna i iritantna i ponavljala se beskonačno dok se radio ne isključi.

Odlučio sam detektirati alarm pomoću Raspberry Pi Zero W i Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero je jeftina verzija Raspberry Pi i W opcija ima ugrađen WiFi, dok Seeed Pi HAT prodaje manje od 10 USD, ima ugrađene LED diode i korisnički gumb. Pi HAT su produžne kartice koje se priključuju izravno na Raspberry Pi čineći vrlo jednostavan postupak sastavljanja. Bilo koja Pi verzija bila bi više nego sposobna za posao, a odabrani mikrofon može se zamijeniti, iako sam u ovoj verziji koristio ugrađene LED diode.

Lako je provjeriti radi li vam radio ili televizor. Vjerojatnije će se opisati kao "omogućen DLNA" ili slično. Ovo koristi uPNP za komunikaciju. Na računalu sa sustavom Windows odaberite mp3 datoteku i "Emitiraj na uređaj". Ako se vaš uređaj pojavi i možete reproducirati datoteku, onda ste spremni.

Podijelio sam softver na 2 python skripte, checkFreezer.py da provjerim je li aktivirano upozorenje za zamrzivač i raiseAlarm.py za podizanje alarma. Ti se skripti mogu zasebno razviti i testirati te se lako mogu prilagoditi ili zamijeniti različitim metodama alarmiranja mikrofona.

Pribor

  • Softver -https://github.com/wapringle/freezer-alarm
  • Malina PI Zero W
  • Vidjeli ReSpeaker 2-Mics Pi HAT
  • radio s omogućenim uPNP -om

Korak 1: Dizajniranje detektora

Kad vrata zamrzivača ostanu otvorena i temperatura poraste, zamrzivač daje zvučni alarm "bip bip bip bip". Kao i kod većine elektroničkih zvučnih signala, ovo je jedna frekvencija. Ideja je uzorkovati audio ulaz, izvesti brzu Fourierovu transformaciju (FFT) koja pretvara vremenski bazirani signal u frekvencijski, drugim riječima razbija signal za prikaz različitih frekvencija u signalu. Pogledajte instruktorski analizator spektra Raspberry Pi s RGB LED trakom Možemo tražiti vrhunac na frekvenciji zujalice i aktivirati alarm kada je zujalica već neko vrijeme aktivna.

Ovaj detektor ima 2 zahtjeva

  • Trebao bi otkriti zujalicu, čak i u prisutnosti buke iz okoline (ukloniti lažno negativan rezultat)
  • Ne smije ga pokretati buka iz okoline (eliminirati lažno pozitivno)

Odlučio sam da bi pokretanje Hoovera u pomoćnom prostoru bio dobar test. Ne bi trebao aktivirati alarm, a alarm bi se trebao aktivirati kada se zvučni signal zamrzivača isključi i Hoover radi.

Korak 2: Konfiguriranje detektora

Konfiguriranje detektora
Konfiguriranje detektora
Konfiguriranje detektora
Konfiguriranje detektora
Konfiguriranje detektora
Konfiguriranje detektora

Telefonom sam uzimao audio uzorke kao WAV datoteke samo zujalice zamrzivača, s bučnom pozadinom i s uključenim Hooverom. Prilagodio sam kôd za izvođenje FFT -a iz članka Čitanje audio streama za FFT (Kad ste u nedoumici, plagarise) i upotrijebio skriptu fourierTest.py za iscrtavanje sirovih i Fourierovih transformiranih uzoraka zujalice u tihoj, bučnoj i vrlo bučnoj pozadini. Skok u razini na frekvenciji 645 izražen je u prvom grafikonu i još uvijek je značajan s vrlo bučnom pozadinom.

Korak 3: Konstrukcija detektora

Sastavljanje detektora

Jako jednostavno. Pi W dolazi s ugrađenim Wifi-jem, a HAT je priključen na GPIO pinove na Pi-u. Konfiguriranje softvera zahtijeva korake

  • Instalirajte raspbian distro na Raspberry Pi. Postoji mnogo vodiča o tome koji to mogu objasniti puno bolje nego ja.
  • Postavite Wifi (isto tako gore)
  • Potrebno je instalirati alsa paket

$ sudo apt-get install libasound-dev

$ pip instalirajte pyalsaaudio

  • Spojite ŠEŠIR na PI maline
  • Slijedite Upute na web stranici za instaliranje upravljačkih programa za HAT.
  • Pokrenite dijagnostičku dijagnostiku kako biste provjerili radi li HAT ispravno i pravilno konfigurirano.

Program detektora čita blok podataka kao uzorak iz mikrofona, radi FFT i odlučuje je li u uzorku otkrio zujalicu ili ne. Pokušao sam učiniti blok što duljim smanjenjem frekvencije uzorkovanja zvuka na 16 kHz i korištenjem najvećeg međuspremnika koji bi čitatelj prihvatio. Bio sam zabrinut da bi proračun FFT -a mogao uzrokovati ispuštanje okvira, ali to se nije dogodilo.

Nakon što sam unaprijed snimio uzorke na telefonu, znatno sam olakšao izradu detektora jer sam mogao napraviti kompletnu gradnju na klupi prije testiranja na licu mjesta u zamrzivaču.

Obuka detektora

Detektor je obučen skeniranjem svakog uzorka kada se na detektoru reproduciralo WAV snimka zujalice. Program emitira položaj u FFT spektru s najvećom razinom snage (vršna frekvencija), zajedno s razinom te vršne frekvencije. Bilo je jednostavno pronaći frekvenciju zujalice i razinu snage koju emitira.

Postoje dva načina za otkrivanje je li se oglasio zvučni signal:-

  1. Je li frekvencija zujalice bila vršna frekvencija u uzorku?
  2. ili je razina snage na frekvenciji zujalice prešla prag?

Bilo koja od metoda radila je u tihom uzorku, ali druga je bila bolja s bučnim uzorkom, pa sam to upotrijebio.

Ponekad je uzorak obuhvatio zvučni signal, ponekad je to bio između zvučnih signala, a nakon svaka 3 zvučna signala uslijedila je duga stanka prije sljedećih zvučnih signala. Kako bi se pouzdano otkrilo da se dogodio skup zvučnih signala, svaki uzorak imao je pozitivan glas ako je zvučni signal detektiran, a negativan ako nije. Ovi glasovi su ponderirani kako bi se postavilo računanje koje će se pojaviti uz zvučni signal i polako će se raspasti između vremena. Nakon što je brojanje doseglo prag, alarm se mogao aktivirati. Ako bi se slučajni šum otkrio kao uzorak zvučnog signala, odbrojavanje bi se vratilo na nulu.

Zatim su nam potrebni utezi za pozitivan glas i negativan glas zajedno s pragom. To sam učinio pokušajem i pogreškom u više uzoraka. Nisam trebao utvrđivati stvarnu frekvenciju zujalice, samo sam tražio istaknutu frekvenciju u fft spektru.

Korak 4: Slanje poruke radiju

Podizanje alarma učinjeno je zasebnom skriptom. Posao je uključiti radio ako je potrebno, provaliti u ono što radio svira i ponavljati poruku alarma dok se radio ponovno ne isključi. Morao sam preokrenuti uPnP protokol koji sam koristio jer sam imao velikih problema s dobivanjem pouzdanih informacija ili primjera. Par referenci koje sam smatrao korisnima bile su

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Ovo ima lijep pregled kako se sve to uklapa
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Koristio sam Wireshark pokrenut na Windows PC -u da odznačim redoslijed poruka prilikom reprodukcije uzorka datoteke s računala na radiju, a nakon malo petljanja dobio sam naredbeni slijed koji je uspio. Ovo je

  • Pokrenite skočni web -poslužitelj za posluživanje poruke upozorenja kad je radio zatraži
  • Postavite glasnoću na GLASNO (Poruka upozorenja trebala bi privući svačiju pozornost)
  • Prenesite uri poruke upozorenja radiju
  • Anketirajte radio sve dok trenutno stanje nije "STOPPED"
  • Uključite radio da "reproducira" uri
  • Ponavljajte posljednja 2 koraka dok trenutno stanje ne bude "NEMA MEDIJA", što znači da je alarm potvrđen isključivanjem radija
  • Konačno zatvorite web poslužitelj i izađite.

Ovo je skripta raiseAlarm.py

Korak 5: Učinite to sami

Učinite to sami
Učinite to sami

Model "detektor" i "podizanje alarma" nije samo za zamrzivače, mogao bi biti koristan bilo gdje gdje se automatizirani alarm mora prenijeti putem drugog medija. Ako bi vas ovo zanimalo, slobodno krenite.

Postavljanje PI Zero W, uključujući mikrofon

  • Sastavite hardver kao u koraku 3
  • Preuzmite skripte alarma za zamrzavanje iz ovog Instructable-a ili iz git spremišta koje uključuje nekoliko bonus pjesama

klon $ git

Također morate instalirati softver za korištenje ugrađenih APA102 LED dioda. Uključio sam kopiju apa102.py u radni direktorij git

Obuka vašeg detektora

Dodao sam opciju obuke u skriptu checkFreezer.py. Ovo ga pokreće samostalno i ispisuje dijagnostiku u naredbeni redak, ali prvo morate snimiti neke uzorke alarma u mirnom okruženju kao WAV datoteke, a isto učiniti u bučnom. Da biste dovršili obuku, prvo morate pronaći frekvenciju FFT -a s najvišom razinom ("vršna frekvencija"), a zatim razinu praga za tu frekvenciju kako biste postavili okidač. Da biste to učinili, pokrenite skriptu checkFreezer u načinu treninga, s opcijom '-t' i reproducirajte snimku alarma.

$ python checkFreezer.py -t

Ovo pokreće skriptu u načinu rada za obuku. Ispisuje se "spremno" kada se inicirali ugledani HAT i LED zasvijetli zeleno, zatim redak za svaku netrivijalnu buku koju čuje, npr.

$ python checkFreezer.py -t

Spremna aktivirana vršna frekvencija 55, razina okidača 1? Pokrenuta lažna vršna frekvencija 645, razina okidača 484? Pokrenuta lažna vršna frekvencija 645, razina okidača 380? Netočno

Vršna frekvencija je, u ovom slučaju 645 i to postaje frekvencija okidača. Sada da biste dobili razinu okidača, ponovno pokrenite checkFreezer i postavite okidač

$ python checkFreezer.py -t --trigger = 645

Spremna aktivirana vršna frekvencija 645, razina okidača 1273? Pokrenuta lažna vršna frekvencija 645, razina okidača 653? Pokrenuta lažna vršna frekvencija 645, razina okidača 641? Pokrenuta lažna vršna frekvencija 645, razina okidača 616? Netočno

Konačno, potreban nam je prag okidača koji se aktivira kada se detektira zvučni signal, ali zanemaruje šum, npr

$ python checkFreezer.py -t --trigger = 645 --threshold = 500

Spremna aktivirana vršna frekvencija 645, razina okidača 581? Istinska vršna frekvencija 645 aktivirana razina okidača 798? Istinska vršna frekvencija 645 aktivirana razina okidača 521? Pravi

Testirajte ovo na nekoliko bučnih uzoraka i trebali biste moći ustanoviti graničnu vrijednost koja razlikuje zvuk blefera i okolnu buku. Također biste trebali vidjeti LED diodu koja postaje crvena kada se nekoliko sekundi reproducira promjenjivanje zvučnog signala. Ako želite brzo/sporo doći, uredite postavke u skripti

Spajanje na radio

Da biste konfigurirali skripte za svoje postavljanje, morate pronaći IP adresu i broj porta koji vaš uređaj koristi za UPnP usluge. Radijske postavke trebale bi to omogućiti. Zadani broj porta je 8080 i bilo bi iznenađenje ako se razlikuje.

Poslao sam zadanu alarmnu poruku, zamrzivač.mp3. Slobodno zamijenite vlastitom porukom.

Uredite skriptu s odgovarajućim IP adresama i pokrenite skriptu.

$ python raiseAlarm.py

Ako je sve u redu, glasna i iritantna poruka alarma izvirat će iz vašeg radija sve dok se radio ne isključi, poništavajući alarm.

Dok je skripta pokrenuta, pokreće mini web poslužitelj za posluživanje alarma mp3 radiju, moguće sigurnosni problem, ali aktivan je samo dok se reproducira poruka alarma.

Uživo

Uklonite zastavicu '-t' za obuku i pokrenite checkFreezer sa vlastitim vrijednostima, npr

$ python checkFreezer.py --trigger = 645 --threshold = 200

Da biste pokrenuli ponovno podizanje sustava, dodajte u /etc/rc.local, cd/home/pi/zamrzivač-alarm

(python checkFreezer.py --trigger = 645 --threshold = 200> /tmp /freezer 2> /tmp /freezererror &) & exit 0

Zasvijetlit će zelena LED dioda i spremni ste za akciju. Pustite snimku zvučnog signala alarma i nakon nekoliko sekundi LED dioda će postati crvena, a poruka alarma će se reproducirati na vašem radiju.

Konačno

Postavite PI na mjesto blizu zamrzivača, s puta i do izvora napajanja. Uključite napajanje i trebala bi se upaliti zelena LED dioda. Pokušajte aktivirati alarm ostavljajući vrata otvorena. Svjetlo bi trebalo postati crveno, a alarmna poruka se reproducira na radiju.

Uspjeh !! Učinili ste to. Priuštite si dugo piće s ledom iz zamrzivača, ali ne zaboravite zatvoriti vrata zamrzivača!

Preporučeni: