Tartalomjegyzék:

Fagyasztó riasztó relé: 5 lépés
Fagyasztó riasztó relé: 5 lépés

Videó: Fagyasztó riasztó relé: 5 lépés

Videó: Fagyasztó riasztó relé: 5 lépés
Videó: Почти как Сейлор Мун ► 5 Прохождение Fatal Frame: Mask of the Lunar Eclipse 2024, Július
Anonim
Fagyasztó riasztó relé
Fagyasztó riasztó relé

Fagyasztónk egy háztartási helyiségben van, amely elszigetelt az életterünktől. Előfordul, hogy a fagyasztó ajtaja nem csukódik be megfelelően, és a riasztó megszólal. A probléma az, hogy nem halljuk, ha az életterünkben vagyunk. Hogyan kaphatunk üzenetet arról, hogy a fagyasztó ajtaja nyitva van? Ez gyakori probléma, otthonunkban vannak olyan eszközök, amelyek beszélnek hozzánk, de mi történik, ha bármilyen okból nem halljuk őket. Ezt egy kicsit szórakoztatásnak indítottam, de lehet, hogy hasznos lesz egy komolyabb alkalmazásban.

Ennek a problémának két része van, szükségünk van egy módszerre a riasztás észlelésének észlelésére és egy módszerre, amellyel ezt a tényt továbbíthatjuk lakóhelyünkre. A tervezés szerint az volt, hogy egy Raspberry Pi -t használtam a fagyasztó riasztásának hallgatására, majd hangos riasztási üzenetet küldtem a hazai rádiómnak, amely engedélyezve van az uPNP -n. Az Univerzális Plug and Play (UpnP) szabvány a hálózat különböző eszközei által kínált szolgáltatások, köztük a médiaszerverek és lejátszók felfedezésére és azokkal való interakcióra, bár nem hiszem, hogy a szabvány kidolgozásakor fagyasztókat terveztek. A figyelmeztető üzenet hangos és irritáló volt, és végtelenül ismétlődik, amíg a rádiót ki nem kapcsolják.

A riasztást Raspberry Pi Zero W és Seeed ReSpeaker 2-Mics Pi HAT segítségével választottam $ 10, beépített LED-ekkel és felhasználói gombbal rendelkezik. A Pi HAT olyan bővítőkártyák, amelyek közvetlenül a Raspberry Pi -hez csatlakoznak, és nagyon egyszerű összeszerelési eljárást tesznek lehetővé. Bármely Pi verzió több mint alkalmas a feladatra, és a választott mikrofon helyettesíthető, bár ebben a konstrukcióban a beépített LED-eket használtam.

Könnyű ellenőrizni, hogy rádió vagy TV működne -e az Ön számára. Valószínűleg "DLNA engedélyezett" vagy hasonló lesz. Ez az uPNP -t használja a kommunikációhoz. Windows PC -n válassza ki az mp3 fájlt, és válassza a „Cast to Device” lehetőséget. Ha megjelenik az eszköze, és le tudja játszani a fájlt, akkor készen áll.

A szoftvert 2 python szkriptre osztottam, a checkFreezer.py segítségével ellenőrizhetem, hogy a fagyasztó riasztása aktiválódott -e, és a raiseAlarm.py jelzéssel. Ezeket a szkripteket külön lehet fejleszteni és tesztelni, és könnyen adaptálhatók vagy helyettesíthetők a különböző mikrofonok riasztási módjaira.

Kellékek

  • Szoftver -https://github.com/wapringle/freezer-alarm
  • Málna PI Zero W
  • Látta a ReSpeaker 2-Mics Pi HAT-ot
  • uPNP -kompatibilis rádió

1. lépés: Az érzékelő tervezése

Amikor a fagyasztó ajtaja nyitva marad, és a hőmérséklet emelkedik, a fagyasztó hangjelzést ad. A legtöbb elektronikus hangjelzéshez hasonlóan ez egyetlen frekvencia. Az ötlet az, hogy mintát vesz az audió bemenetről, gyors Fourier -transzformációt (FFT) hajt végre, amely az időalapú jelet frekvenciaalapúvá alakítja, más szóval lebont egy jelet, hogy megjelenítse a jel különböző frekvenciáit. Lásd az Instructable Raspberry Pi spektrumanalizátort RGB LED szalaggal Kereshetünk egy csúcsot a zümmögő frekvenciáján, és riasztást indíthatunk, ha a zümmögő már egy ideje aktív.

Ennek az érzékelőnek 2 követelménye van

  • Érzékelnie kell a zümmögőt, még környezeti zaj jelenlétében is (kiküszöbölve a hamis negatívokat)
  • Nem válthatja ki a környezeti zaj (kiküszöböli a hamis pozitív eredményeket)

Úgy döntöttem, hogy egy Hoover futtatása a háztartási helyiségben jó teszt lesz. Nem indíthatja el a riasztást, és a riasztást akkor kell aktiválni, amikor a fagyasztó hangjelzője kikapcsol és a Hoover fut.

2. lépés: Az érzékelő konfigurálása

Az érzékelő beállítása
Az érzékelő beállítása
Az érzékelő beállítása
Az érzékelő beállítása
Az érzékelő beállítása
Az érzékelő beállítása

A telefonommal hangmintákat vettem egyedül a fagyasztó zümmere WAV fájljaiként, zajos háttérrel, és a Hoover futásával. A kódot úgy alakítottam ki, hogy végrehajtsa az FFT -t a Reading Audio Stream for FFT bejegyzésből (ha kétségei vannak, plagarizáljon), és a fourierTest.py szkriptet használva nyers és Fourier transzformált mintákat készítettem a zümmögőből csendes, zajos és nagyon zajos háttérben. A 645 -ös frekvencia szintjének emelkedése az első ábrán kifejezett, és továbbra is jelentős, nagyon zajos háttérrel.

3. lépés: Az érzékelő felépítése

Az érzékelő összeszerelése

Nagyon egyszerű. A Pi W beépített Wifi-vel érkezik, a HAT pedig rendesen be van dugva a Pi GPIO csapjaiba. A szoftver konfigurálása megköveteli a lépéseket

  • Telepítse a raspbian disztribúciót a Raspberry Pi -re. Rengeteg útmutató van ezzel kapcsolatban, amelyek sokkal jobban meg tudják magyarázni, mint én.
  • A Wifi beállítása (fent is)
  • Telepíteni kell az alsa csomagot

$ sudo apt-get install libasound-dev

$ pip install pyalsaaudio

  • Csatlakoztassa a kalapot a málna PI -hez
  • Kövesse a webhelyen található utasításokat a HAT illesztőprogramjainak telepítéséhez.
  • Futtassa a látott diagnosztikát, hogy ellenőrizze a HAT működését és megfelelő konfigurálását.

Az érzékelő program egy adatblokkot olvas be mintának a mikrofonból, elvégzi az FFT -t és eldönti, hogy észlelte -e a zümmögőt a mintában. Megpróbáltam a blokkot a lehető leghosszabbra állítani azáltal, hogy az audio mintavételi frekvenciát 16 kHz -re csökkentettem, és az olvasó által elfogadott legnagyobb puffert használtam. Aggódtam amiatt, hogy az FFT számítás a keretek leesését okozhatja, de ez nem történt meg.

A telefonon előre rögzített minták sokkal könnyebbé tették az érzékelő felépítését, mivel a teljes felépítést a padon végezhettem, mielőtt a fagyasztónál helyben teszteltem volna.

Az érzékelő képzése

Az érzékelőt az egyes minták szkennelésével képezték ki, amikor a zümmögő WAV felvételét lejátszották az érzékelőnek. A program az FFT spektrumban a pozíciót adja ki a legmagasabb teljesítményszinttel (csúcsfrekvencia), valamint a csúcsfrekvencia szintjével együtt. Egyszerű dolog volt megtalálni a zümmögő frekvenciáját és az általa kibocsátott teljesítményszintet.

Kétféleképpen lehet megállapítani, hogy sípolás történt-e:

  1. A zümmögési frekvencia volt a minta csúcsfrekvenciája?
  2. vagy a zümmögési frekvencia teljesítményszintje küszöbérték felett volt?

Bármelyik módszer csendes mintában működött, de a második jobb volt zajos mintával, ezért ezt használtam.

Néha egy minta elfedett egy hangjelzést, néha a hangjelzések között volt, és minden 3 hangjelzés után hosszú szünet következett a következő sípolás előtt. Annak érdekében, hogy megbízhatóan felderítsük, hogy egy csipogás történt, minden mintának volt egy felhangja, ha sípolást észlelt, és egy lefelé, ha nem. Ezeket a szavazatokat úgy súlyozták, hogy olyan számot állítsanak be, amely egy hangjelzéssel ütközik, és lassan csökken az idők között. Amint a szám elérte a küszöbértéket, a riasztás aktiválható. Ha csipogó mintaként véletlenszerű zajt észleltek, a szám visszaesik a nullára.

Szükségünk van a súlyokra a fel- és a leszavazáshoz a küszöbértékkel együtt. Ezt próbával és tévedéssel tettem számos mintán. Nem kellett meghatároznom a zümmögés tényleges frekvenciáját, csak a kiemelkedő frekvenciát kerestem az fft spektrumban.

4. lépés: Üzenet küldése a rádiónak

A riasztást külön szkripttel hajtották végre. Az a dolga, hogy szükség esetén bekapcsolja a rádiót, betörjön a rádió lejátszásába, és ismételje meg a riasztási üzenetet, amíg a rádió újra ki nem kapcsol. Meg kellett fordítanom az alkalmazott uPnP protokollt, mivel nagy gondot okozott a megbízható információk vagy példák megszerzése. Pár hasznosnak talált hivatkozás hasznos volt

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Ez egy szép áttekintést nyújt arról, hogyan illeszkedik minden
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

A Windows PC -n futó Wireshark segítségével feloldottam az üzenetsorozatot, amikor egy mintafájlt játszottam le a számítógépről a rádión, és egy kis hegedülés után kaptam egy működő parancssort. Ez

  • Indítson el egy felugró webszervert a figyelmeztető üzenet megjelenítésére, amikor a rádió kéri
  • Állítsa a hangerőt LOUD -ra (a figyelmeztető üzenetnek fel kell hívnia mindenki figyelmét)
  • A figyelmeztető üzenet uri -ját adja át a rádiónak
  • A rádió lekérdezése, amíg a jelenlegi állapot "STOPPED"
  • Kapcsolja be a rádiót az uri "PLAY" -jához
  • Ismételje meg az utolsó 2 lépést, amíg az aktuális állapot "NO MEDIA PRESENT" lesz, ami azt jelenti, hogy a riasztást a rádió kikapcsolásával nyugtázták
  • Végül zárja be a webszervert, és lépjen ki.

Ez a raiseAlarm.py szkript

5. lépés: Csináld magad

Csináld magad
Csináld magad

Az "érzékelő" és a "riasztás emelés" modell nem csak a fagyasztók számára készült, bárhol hasznos lehet, ahol az automatikus riasztást egy másik adathordozón keresztül kell továbbítani. Ha ez érdekelne, nyugodtan próbálkozzon.

A PI Zero W beállítása a mikrofonnal együtt

  • Szerelje össze a hardvert a 3. lépés szerint
  • Töltse le a fagyasztó-riasztási parancsfájlokat erről az utasításról, vagy a git tárolóból, amely néhány bónusz számot tartalmaz

$ git klón

A fedélzeti APA102 LED-ek használatához telepítenie kell a szoftvert is. Az apa102.py egy példányát beillesztettem a git munkakönyvtárába

Az érzékelő képzése

Hozzáadtam egy képzési lehetőséget a checkFreezer.py szkripthez. Ez önállóan futtatja, és diagnosztikát nyomtat a parancssorba, de először fel kell vennie néhány riasztási mintát csendes környezetben WAV fájlként, és ugyanezt kell tennie zajos környezetben. Az edzés befejezéséhez először meg kell találnia a legmagasabb FFT frekvenciát ("csúcsfrekvencia"), majd az adott frekvencia küszöbszintjét a trigger beállításához. Ehhez futtassa a checkFreezer szkriptet edzés üzemmódban a „-t” opcióval, és játssza le a riasztás felvételét.

$ python checkFreezer.py -t

Ez a szkriptet edzési módban futtatja. "Készen" nyomtat, amikor a látott kalapot inicializálja, és a LED zöldre vált, majd egy sort minden nem triviális zajhoz, pl.

$ python checkFreezer.py -t

Kész csúcsfrekvencia 55 trigger 1. szint aktiválódik? Hamis csúcsfrekvencia 645 trigger 484 szint aktiválódott? Hamis csúcsfrekvencia 645 trigger 380 szint aktiválódott? Hamis

A csúcsfrekvencia ebben az esetben 645, és ez lesz a triggerfrekvencia. Most, hogy megkapja a trigger szintet, futtassa újra a checkFreezer programot, állítsa be a ravaszt

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

Készen áll a csúcsfrekvencia 645 trigger 1273 szintje? Hamis csúcsfrekvencia 645 trigger 653 szint aktiválva? Hamis csúcsfrekvencia 645 trigger 641 aktivált szint? Hamis csúcsfrekvencia 645 trigger 616 szint aktiválódott? Hamis

Végül szükségünk van egy trigger küszöbértékre, amely egy hangjelzés észlelésekor aktiválódik, de figyelmen kívül hagyja a zajt, pl

$ python checkFreezer.py -t --trigger = 645 --küszöb = 500

Készen áll a csúcsfrekvencia 645 trigger 581 szintje? Valódi csúcsfrekvencia 645 trigger szint 798 aktiválódott? Valódi csúcsfrekvencia 645 trigger 521 szint aktiválva? Igaz

Tesztelje ezt néhány zajos mintával, és meg kell tudnia határozni egy küszöbértéket, amely megkülönbözteti a hangszóró hangját és a környezeti zajt. Azt is látnia kell, hogy a LED pirosan világít, ha a hangjelzés néhány másodpercig lejátszódik. Ha gyors/lassú a bekapcsolás, módosítsa a parancsfájl beállításait

Csatlakozás a rádióhoz

A szkriptek saját beállításához történő konfigurálásához meg kell találnia azt az IP -címet és portszámot, amelyet az eszköz UPnP -szolgáltatásokhoz használ. Ezeket a rádióbeállításnak kell biztosítania. Az alapértelmezett portszám 8080, és meglepő lenne, ha más lenne.

Alapértelmezett riasztási üzenetet küldtem, freezer.mp3. Nyugodtan cserélje le saját üzenetére.

Szerkessze a szkriptet a megfelelő IP -címekkel, és futtassa a szkriptet.

$ python raiseAlarm.py

Ha minden rendben van, akkor a hangos és irritáló riasztási üzenet addig hallatszik a rádióból, amíg ki nem kapcsolja a rádiót, és nem törli a riasztást.

Amíg a szkript fut, egy mini webszervert futtat a riasztó mp3 -nak a rádióba való adására, esetleg biztonsági probléma, de csak a riasztási üzenet lejátszása közben aktív.

Élőben

Távolítsa el a „-t” edzési zászlót, és futtassa a checkFreezer programot saját értékeivel, pl

$ python checkFreezer.py --trigger = 645 --küszöb = 200

Az újraindításkor való elinduláshoz adja hozzá az /etc/rc.local, cd/home/pi/fagyasztó-riasztó

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

A zöld LED kigyullad, és készen áll a cselekvésre. Játssza le a riasztási hangjelzés felvételét, és néhány másodperc múlva a LED pirosan világít, és a riasztási üzenet megszólal a rádión.

Végül

Helyezze a PI -t a fagyasztóhoz közeli helyre, távol az útból és a tápegységtől. Kapcsolja be, és a zöld LED -nek világítania kell. Tesztelje a riasztás aktiválását az ajtó nyitva hagyásával. A lámpának pirosra kell váltania, és a riasztási üzenet megszólal a rádióban.

Siker !! Megcsináltad. Kényeztesse magát egy hosszú itallal a fagyasztó jégével, de ne felejtse el becsukni a fagyasztó ajtaját!

Ajánlott: