Inhoudsopgave:

Alarmrelais vriezer - Ajarnpa
Alarmrelais vriezer - Ajarnpa

Video: Alarmrelais vriezer - Ajarnpa

Video: Alarmrelais vriezer - Ajarnpa
Video: Alarm delay 60s for Freezer, Fridge Door Not Closing Properly - Avoid Refrigerator that is too warm 2024, Juli-
Anonim
Alarmrelais vriezer
Alarmrelais vriezer

Onze vriezer staat in een bijkeuken die geïsoleerd is van onze leefruimte. Af en toe sluit de vriezerdeur niet goed en gaat het alarm af. Het probleem is dat we het niet kunnen horen als we in onze leefruimte zijn. Hoe krijgen we een melding dat de vriezerdeur open is? Dit is een veelvoorkomend probleem, we hebben apparaten in huis die met ons praten, maar wat gebeurt er als we ze om welke reden dan ook niet kunnen horen? Ik begon dit als een beetje leuk, maar het kan van pas komen in een serieuzere toepassing.

Dit probleem bestaat uit 2 delen, we hebben een methode nodig om te detecteren dat het alarm is afgegaan en een methode om dit feit door te geven aan onze leefruimte. Het ontwerp waar ik op uitkwam, was om een Raspberry Pi te gebruiken om te luisteren naar het afgaan van het vriezeralarm en vervolgens een hoorbaar alarmbericht naar mijn huisradio te sturen die uPNP ingeschakeld heeft. Universal Plug and Play (UpnP) is een standaard voor het ontdekken en gebruiken van diensten die worden aangeboden door verschillende apparaten op een netwerk, inclusief mediaservers en spelers, hoewel ik denk dat vriezers niet werden voorzien toen de standaard werd ontwikkeld. Het waarschuwingsbericht werd luid en irritant gemaakt en wordt eindeloos herhaald totdat de radio wordt uitgeschakeld.

Ik koos ervoor om het alarm te detecteren met een Raspberry Pi Zero W en Seeed ReSpeaker 2-Mics Pi HAT De Raspberry PI Zero is een goedkope versie van de Raspberry Pi en de W-optie heeft ingebouwde wifi, terwijl de Seeed Pi HAT voor minder dan $ 10, heeft ingebouwde LED's en een gebruikersknop. Pi HAT zijn uitbreidingskaarten die rechtstreeks op de Raspberry Pi worden aangesloten, waardoor een zeer eenvoudige montageprocedure wordt gemaakt. Elke Pi-versie zou meer dan geschikt zijn voor de klus, en de gekozen microfoon kan worden vervangen, hoewel ik in deze build gebruik heb gemaakt van de ingebouwde LED's.

Het is gemakkelijk om te controleren of een radio of tv voor u zou werken. Het zal waarschijnlijker worden beschreven als "DLNA ingeschakeld" of iets dergelijks. Deze gebruikt uPNP om te communiceren. Selecteer op een Windows-pc een mp3-bestand en "Cast to Device". Als uw apparaat wordt weergegeven en u het bestand kunt afspelen, bent u klaar om te gaan.

Ik heb de software opgesplitst in 2 python-scripts, checkFreezer.py om te controleren of een vriezerwaarschuwing is geactiveerd en raiseAlarm.py om alarm te slaan. Deze scripts kunnen afzonderlijk worden ontwikkeld en getest en kunnen eenvoudig worden aangepast of vervangen door verschillende methoden voor het opwekken van microfoons.

Benodigdheden

  • Software -https://github.com/wapringle/freezer-alarm
  • Raspberry PI Zero W
  • Seeed ReSpeaker 2-Mics Pi HOED
  • uPNP ingeschakelde radio

Stap 1: De detector ontwerpen

Wanneer de vriezerdeur open blijft staan en de temperatuur stijgt, geeft de vriezer een hoorbaar "piep piep piep" alarm. Net als bij de meeste elektronische pieptonen, is dit een enkele frequentie. Het idee is om de audio-invoer te samplen, een Fast Fourier Transform (FFT) uit te voeren die een op tijd gebaseerd signaal omzet in een op frequentie gebaseerd signaal, met andere woorden, een signaal afbreekt om de verschillende frequenties in het signaal weer te geven. Zie de Instructable Raspberry Pi Spectrum Analyzer Met RGB LED Strip We kunnen zoeken naar een piek in de zoemerfrequentie en het alarm activeren wanneer de zoemer al een tijdje actief is.

Deze detector heeft 2 vereisten:

  • Het zou de zoemer moeten detecteren, zelfs in de aanwezigheid van omgevingsgeluid (vals-negatief elimineren)
  • Het mag niet worden geactiveerd door omgevingsgeluid (elimineer vals positief)

Ik besloot dat een stofzuiger in de bijkeuken een goede test zou zijn. Het mag het alarm niet activeren en het alarm moet worden geactiveerd wanneer de zoemer van de vriezer afgaat en de stofzuiger in werking is.

Stap 2: De detector configureren

De detector configureren
De detector configureren
De detector configureren
De detector configureren
De detector configureren
De detector configureren

Met mijn telefoon nam ik audiosamples als WAV-bestanden van alleen de vriezerzoemer, met een lawaaierige achtergrond en terwijl de stofzuiger aan stond. Ik heb de code aangepast om de FFT uit te voeren uit de post Reading Audio Stream for FFT (Bij twijfel, plagariseer) en heb het script fourierTest.py gebruikt om onbewerkte en Fourier Transformed-samples van de zoemer te plotten in stille, luidruchtige en zeer luidruchtige achtergronden. De piek in niveau bij frequentie 645 is uitgesproken in de eerste plot en is nog steeds significant met een zeer luidruchtige achtergrond.

Stap 3: De detector bouwen

Montage van de melder

Erg makkelijk. De Pi W wordt geleverd met ingebouwde wifi en de HAT is rechtstreeks aangesloten op de GPIO-pinnen op de Pi. Het configureren van de software vereist de stappen

  • Installeer raspbian distro op Raspberry Pi. Er zijn heel veel handleidingen hierover die het veel beter kunnen uitleggen dan ik.
  • Wifi instellen (idem hierboven)
  • Het moet het als-pakket geïnstalleerd hebben

$ sudo apt-get install libasound-dev

$ pip installeer pyalsaaudio

  • Sluit de HAT aan op de Raspberry PI
  • Volg de instructies op de seeed-website om de stuurprogramma's voor de HAT te installeren.
  • Voer de seeed-diagnose uit om te controleren of de HAT werkt en correct is geconfigureerd.

Het detectorprogramma leest een datablok als een sample uit de microfoon, doet de FFT en beslist of het de zoemer in het sample heeft gedetecteerd. Ik heb geprobeerd het blok zo lang mogelijk te maken door de audiosamplefrequentie te verlagen tot 16 kHz en de grootste buffer te gebruiken die de lezer zou accepteren. Ik was bang dat de FFT-berekening ervoor zou kunnen zorgen dat frames worden weggelaten, maar dat is niet gebeurd.

Omdat ik vooraf samples op mijn telefoon had opgenomen, was het veel gemakkelijker om de detector te bouwen, omdat ik de volledige build op de bank kon doen voordat ik in-situ in de vriezer kon testen.

De detector trainen

De detector werd getraind door elk monster te scannen wanneer de WAV-opname van de zoemer naar de detector werd afgespeeld. Het programma geeft de positie in het FFT-spectrum met het hoogste vermogensniveau (de piekfrequentie) weer, samen met het niveau van die piekfrequentie. Het was eenvoudig om de zoemerfrequentie en het vermogensniveau te vinden.

Er zijn 2 manieren om te detecteren of er een piep heeft plaatsgevonden: -

  1. Was de zoemerfrequentie de piekfrequentie in het monster?
  2. of was het vermogensniveau bij de zoemerfrequentie boven een drempel?

Beide methoden werkten in een stille sample, maar de tweede was beter met een luidruchtige sample, dus die gebruikte ik.

Soms omvatte een monster een pieptoon, soms was het tussen de pieptonen, en na elke 3 pieptonen was er een lange pauze voor de volgende pieptonen. Om betrouwbaar te detecteren dat er een reeks pieptonen was opgetreden, kreeg elk monster een upvote als er een pieptoon werd gedetecteerd en een downvote als dat niet het geval was. Deze stemmen werden gewogen om een telling in te stellen die met een pieptoon zou stijgen en tussendoor langzaam zou afnemen. Zodra de telling een drempel bereikte, kon het alarm worden geactiveerd. Als willekeurige ruis werd gedetecteerd als een pieptoon, zou de telling teruglopen naar nul.

We hebben dan de gewichten voor de upvote en downvote nodig samen met de drempel. Dit deed ik met vallen en opstaan over een aantal monsters. Ik hoefde de werkelijke zoemerfrequentie niet te bepalen, ik zocht alleen naar de opvallende frequentie in het fft-spectrum.

Stap 4: Een bericht naar de radio verzenden

Aan de alarmbel trekken gebeurde met een apart script. Het is zijn taak om indien nodig de radio aan te zetten, in te breken in wat de radio ook speelt en het alarmbericht te herhalen totdat de radio weer wordt uitgeschakeld. Ik moest het gebruikte uPnP-protocol reverse-engineeren omdat ik grote moeite had om betrouwbare informatie of voorbeelden te krijgen. Een paar referenties die ik nuttig vond, waren:

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Dit heeft een mooi overzicht van hoe het allemaal in elkaar past
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Ik gebruikte Wireshark op een Windows-pc om de berichtenreeks te verwijderen bij het afspelen van een voorbeeldbestand vanaf mijn pc op mijn radio, en na een beetje gehannes kreeg ik een commandoreeks die werkte. Dit is

  • Start een pop-upwebserver om het waarschuwingsbericht weer te geven wanneer de radio erom vraagt
  • Zet het volume op LUID (het waarschuwingsbericht zou ieders aandacht moeten trekken)
  • Geef de uri van het waarschuwingsbericht door aan de radio
  • Poll de radio totdat de huidige status "STOPPED" is
  • Laat de radio de uri. "SPELEN"
  • Herhaal de laatste 2 stappen totdat de huidige status "GEEN MEDIA AANWEZIG" is, wat betekent dat het alarm is bevestigd door de radio uit te zetten
  • Sluit ten slotte de webserver af en sluit af.

Dit is het script raiseAlarm.py

Stap 5: Doe het zelf

Zelf doen
Zelf doen

Het model "detector" en "alarm instellen" is niet alleen voor diepvriezers, het kan overal nuttig zijn waar een automatisch alarm via een ander medium moet worden doorgegeven. Mocht dit je interesseren, kom dan gerust eens langs.

De PI Zero W instellen, inclusief de microfoon

  • Monteer de hardware zoals in stap 3
  • Download de vriezer-alarmscripts van deze Instructable, of van de git-repository die een paar bonustracks bevat

$ git clone

U moet ook de software installeren om de ingebouwde APA102 LED's te gebruiken. Ik heb een kopie van apa102.py opgenomen in de git-werkmap

Je detector trainen

Ik heb een trainingsoptie toegevoegd aan het checkFreezer.py-script. Hierdoor wordt het stand-alone uitgevoerd en wordt een diagnose naar de opdrachtregel afgedrukt, maar eerst moet u enkele voorbeelden van het alarm in een stille omgeving opnemen als WAV-bestanden en hetzelfde doen in een lawaaierige omgeving. Om de training te voltooien, moet je eerst de FFT-frequentie met het hoogste niveau (de "piekfrequentie") vinden en vervolgens een drempelniveau voor die frequentie om een trigger in te stellen. Om dit te doen, voert u het script checkFreezer uit in de trainingsmodus, met de optie '-t' en speelt u de opname van het alarm af.

$ python checkFreezer.py -t

Hierdoor wordt het script in de trainingsmodus uitgevoerd. Het drukt "klaar" af wanneer de Seeed HAT is geïnitialiseerd en de LED groen wordt, dan een lijn voor elk niet-triviaal geluid dat het hoort, bijv.

$ python checkFreezer.py -t

Klaar piekfrequentie 55 triggerniveau 1 geactiveerd? Valse piekfrequentie 645 triggerniveau 484 getriggerd? Valse piekfrequentie 645 triggerniveau 380 geactiveerd? niet waar

De piekfrequentie is in dit geval 645 en dat wordt de triggerfrequentie. Om nu het triggerniveau te krijgen, voert u checkFreezer opnieuw uit en stelt u de trigger in

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

Klaar piekfrequentie 645 triggerniveau 1273 geactiveerd? Valse piekfrequentie 645 triggerniveau 653 geactiveerd? Valse piekfrequentie 645 triggerniveau 641 geactiveerd? Valse piekfrequentie 645 triggerniveau 616 geactiveerd? niet waar

Ten slotte hebben we een triggerdrempel nodig die afgaat wanneer een pieptoon wordt gedetecteerd, maar ruis negeert, bijv

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

Klaar piekfrequentie 645 triggerniveau 581 geactiveerd? Ware piekfrequentie 645 triggerniveau 798 getriggerd? Ware piekfrequentie 645 triggerniveau 521 getriggerd? Waar

Test dit aan de hand van een paar ruisende samples en u zou een drempelwaarde moeten kunnen vaststellen die onderscheid maakt tussen het geluid van de pieper en omgevingsgeluid. U zou ook moeten zien dat de LED rood wordt wanneer de pieptoon een paar seconden wordt afgespeeld. Als het te snel/langzaam binnenkomt, bewerk dan de instellingen in het script

Aansluiten op de radio

Om de scripts voor uw eigen instellingen te configureren, moet u het IP-adres en poortnummer vinden dat uw apparaat gebruikt voor UPnP-services. De radio-opstelling zou deze moeten bieden. Het standaard poortnummer is 8080 en het zou een verrassing zijn als dit anders is.

Ik heb een standaard alarmbericht, vriezer.mp3, aangeleverd. Voel vrij om met uw eigen bericht te vervangen.

Bewerk het script met de juiste IP-adressen en voer het script uit.

$ python raiseAlarm.py

Als alles goed is, zal het luide en irritante alarmbericht uit je radio blazen totdat de radio wordt uitgeschakeld, waardoor het alarm wordt geannuleerd.

Terwijl het script draait, draait het een mini-webserver om de alarm-mp3 naar de radio te sturen, mogelijk een beveiligingsprobleem, maar het is alleen actief terwijl het alarmbericht wordt afgespeeld.

Live gaan

Verwijder de '-t'-trainingsvlag en voer checkFreezer uit met uw eigen waarden, bijvoorbeeld

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

Om het te laten starten bij het opnieuw opstarten, voegt u toe aan de /etc/rc.local, cd /home/pi/freezer-alarm

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

De groene LED gaat branden en u bent klaar voor actie. Speel de opname van uw alarmpiep af en na een paar seconden wordt de LED rood en wordt het alarmbericht op uw radio afgespeeld.

Eindelijk

Plaats de PI op een locatie dichtbij de vriezer, uit de weg en bij een stroomvoorziening. Schakel in en de groene LED moet gaan branden. Test het activeren van het alarm door de deur open te laten. Het lampje moet rood worden en het alarmbericht moet op de radio worden afgespeeld.

Succes !! Je hebt het gedaan. Trakteer uzelf op een longdrink met ijs uit de vriezer, maar vergeet niet de vriezerdeur te sluiten!

Aanbevolen: