Innehållsförteckning:

Fryslarmrelä: 5 steg
Fryslarmrelä: 5 steg

Video: Fryslarmrelä: 5 steg

Video: Fryslarmrelä: 5 steg
Video: Swiss-O-Week 2014 - Stage 5 2024, Juli
Anonim
Fryslarmrelä
Fryslarmrelä

Vår frys är i ett grovkök som är isolerat från vårt bostadsutrymme. Ibland stängs inte frysdörren ordentligt och larmet går. Problemet är att vi inte kan höra det om vi är i vårt bostadsutrymme. Hur får vi ett meddelande om att frysdörren är öppen? Detta är en vanlig fråga, vi har enheter i våra hem som pratar med oss, men vad händer om vi inte kan höra dem av någon anledning. Jag började detta som lite roligt, men det kan vara till nytta i en mer seriös applikation.

Det finns två delar i detta problem, vi behöver en metod för att upptäcka att larmet har gått och en metod för att förmedla detta till vårt bostadsutrymme. Designen jag bestämde mig för var att använda en Raspberry Pi för att lyssna på fryslarmet som gick och sedan skicka ett hörbart larmmeddelande till min inhemska radio som är uPNP -aktiverad. Universal Plug and Play (UpnP) är en standard för att upptäcka och interagera med tjänster som erbjuds av olika enheter i ett nätverk, inklusive mediaservrar och spelare, även om jag inte tror att frysar var tänkta när standarden utvecklades. Varningsmeddelandet gjordes högt och irriterande och upprepas oändligt tills radion stängs av.

Jag valde att upptäcka larmet med en Raspberry Pi Zero W och Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero är en billig version av Raspberry Pi och W-alternativet har inbyggt WiFi, medan Seeed Pi HAT säljs för mindre än $ 10, har inbyggda lysdioder och en användarknapp. Pi HAT är förlängningskort som ansluts direkt till Raspberry Pi och gör en mycket enkel monteringsprocedur. Varje Pi-version skulle vara mer än kapabel för jobbet, och den valda mikrofonen kan ersättas, även om jag använde de inbyggda lysdioderna i den här byggnaden.

Det är lätt att kontrollera om en radio eller TV skulle fungera för dig. Det kommer sannolikt att beskrivas som "DLNA -aktiverat" eller liknande. Detta använder uPNP för att kommunicera. På en Windows -dator väljer du en mp3 -fil och "Cast till enhet". Om din enhet dyker upp och du kan spela upp filen är det bra att gå.

Jag delade programvaran i 2 python -skript, checkFreezer.py för att kontrollera om en frysvarning har utlösts och raiseAlarm.py för att aktivera larmet. Dessa skript kan utvecklas och testas separat och kan enkelt anpassas eller ersättas med olika mikrofonlarmhöjningsmetoder.

Tillbehör

  • Programvara -https://github.com/wapringle/freezer-alarm
  • Hallon PI Zero W
  • Har sett ReSpeaker 2-Mics Pi HAT
  • uPNP -aktiverad radio

Steg 1: Designa detektorn

När frysdörren lämnas öppen och temperaturen stiger, ger frysen ett larm "pip pip". Liksom de flesta elektroniska pip är detta en enda frekvens. Tanken är att sampla ljudingången, utföra en Fast Fourier Transform (FFT) som omvandlar en tidsbaserad signal till en frekvensbaserad, med andra ord bryter ner en signal för att visa de olika frekvenserna i signalen. Se den instruerbara Raspberry Pi -spektrumanalysatorn med RGB LED -remsa Vi kan leta efter en topp vid summerfrekvensen och utlösa larmet när summern har varit aktiv under en tid.

Denna detektor har 2 krav

  • Det ska detektera summern, även i närvaro av omgivande buller (eliminera falskt negativt)
  • Det ska inte utlösas av omgivande buller (eliminera falskt positivt)

Jag bestämde mig för att köra en Hoover i grovkammaren skulle vara ett bra test. Det ska inte utlösa larmet, och larmet ska utlösas när fryslarmet går och Hoover körs.

Steg 2: Konfigurera detektorn

Konfigurera detektorn
Konfigurera detektorn
Konfigurera detektorn
Konfigurera detektorn
Konfigurera detektorn
Konfigurera detektorn

Med min telefon tog jag ljudprover som WAV -filer från frysen bara, med en bullrig bakgrund och med Hoover igång. Jag anpassade koden för att utföra FFT från inlägget Reading Audio Stream för FFT (när du är osäker, plagarise) och använde manuset fourierTest.py för att plotta råa och Fourier -transformerade prover av summern i tysta, bullriga och mycket bullriga bakgrunder. Höjningen i nivå vid frekvens 645 uttalas i den första tomten och är fortfarande signifikant med en mycket bullrig bakgrund.

Steg 3: Konstruera detektorn

Montering av detektorn

Väldigt enkelt. Pi W levereras med inbyggd Wifi och hatten ansluts direkt till GPIO-stiften på Pi. Konfigurera programvaran kräver stegen

  • Installera raspbian distro på Raspberry Pi. Det finns massor av guider om detta som kan förklara det mycket bättre att jag kan.
  • Konfigurera Wifi (ditto ovan)
  • Det behöver alsa -paketet installerat

$ sudo apt-get install libasound-dev

$ pip installera pyalsaaudio

  • Anslut hatten till hallon PI
  • Följ instruktionerna på den visade webbplatsen för att installera drivrutinerna för HAT.
  • Kör den visade diagnosen för att kontrollera att HAT fungerar och är korrekt konfigurerad.

Detektorprogrammet läser ett block av data som ett prov från mikrofonen, gör FFT och avgör om det har detekterat summern i provet eller inte. Jag försökte göra blocket så långt som möjligt genom att sänka ljudprovhastigheten till 16 kHz och använda den största bufferten som läsaren skulle acceptera. Jag var orolig för att FFT -beräkningen kan orsaka att ramar tappas, men det hände inte.

Att ha förinspelade prover på min telefon gjorde det mycket lättare att bygga detektorn eftersom jag kunde göra hela byggnaden på bänken innan jag testade in situ vid frysen.

Utbildning av detektorn

Detektorn utbildades genom att skanna varje prov när WAV -inspelningen av summern spelades upp till detektorn. Programmet matar ut positionen i FFT -spektrumet med den högsta effektnivån (toppfrekvensen), tillsammans med nivån för denna toppfrekvens. Det var enkelt att hitta summerfrekvensen och effektnivån som den avgav.

Det finns två sätt att upptäcka om ett pip hörts:-

  1. Var summerfrekvensen toppfrekvensen i provet?
  2. eller var effektnivån vid summerfrekvensen över en tröskel?

Endera metoden fungerade i ett tyst prov, men den andra var bättre med ett bullrigt prov, så jag använde det.

Ibland täckte ett prov ett pip, ibland var det mellan pip, och efter var tredje pip var det en lång paus innan nästa pip. För att på ett tillförlitligt sätt upptäcka att en uppsättning pip hade inträffat hade varje prov en uppröstning om en pip detekterades och en nedröstning om inte. Dessa röster vägdes för att sätta ett antal som skulle stöta på med ett pipprov och långsamt förfalla mellan gånger. När räkningen nått en tröskel kunde larmet utlösas. Om slumpmässigt brus detekterades som ett pipprov skulle antalet rinna tillbaka till noll.

Vi behöver sedan vikterna för uppröstningen och nedrösten tillsammans med tröskeln. Detta gjorde jag med trial and error över ett antal prover. Jag behövde inte bestämma den faktiska summerfrekvensen, jag letade bara efter den utmärkta frekvensen i fft -spektrumet.

Steg 4: Skicka ett meddelande till radion

Larmet var gjort med ett separat manus. Det är jobbet att slå på radion om det behövs, bryta sig in i vad radion spelar och upprepa larmmeddelandet tills radion stängs av igen. Jag var tvungen att omkonstruera uPnP -protokollet eftersom jag hade stora problem med att få tillförlitlig information eller exempel. Ett par referenser som jag tyckte var användbara var

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Detta har en fin överblick över hur allt hänger ihop
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Jag använde Wireshark som körs på en Windows -dator för att plocka bort meddelandesekvensen när jag spelade upp en exempelfil från min dator på min radio, och efter lite tjafs fick jag en kommandosekvens som fungerade. Detta är

  • Starta en popup -webbserver för att visa varningsmeddelandet när radion ber om det
  • Ställ in volymen på LOUD (varningsmeddelandet ska locka allas uppmärksamhet)
  • Skicka varningsmeddelandets uri till radion
  • Poll radion tills det aktuella läget är "STOPPAT"
  • Få radion till "PLAY" uri
  • Upprepa de två sista stegen tills det aktuella läget är "INGEN MEDIA PRESENT", vilket innebär att larmet har kvitterats genom att stänga av radion
  • Stäng slutligen webbservern och avsluta.

Detta är manuset raiseAlarm.py

Steg 5: Gör det själv

Gör det själv
Gör det själv

Modellen "detektor" och "varningslarm" är inte bara för frysar, den kan vara användbar var som helst där ett automatiskt larm måste vidarebefordras via ett annat medium. Om detta skulle vara av intresse, ta gärna en titt.

Konfigurera PI Zero W, inklusive mikrofonen

  • Montera hårdvaran som i steg 3
  • Ladda ner fryslarmskripten från denna instruerbara eller från git-förvaret som innehåller några bonusspår

$ git-klon

Du måste också installera programvaran för att använda de inbyggda APA102-lysdioderna. Jag har inkluderat en kopia av apa102.py i git -arbetskatalogen

Träna din detektor

Jag har lagt till ett träningsalternativ i checkFreezer.py -skriptet. Detta kör det fristående och skriver ut en diagnostik till kommandoraden, men först måste du spela in några prover av larmet i en tyst miljö som WAV-filer och göra samma sak i en bullrig. För att slutföra utbildningen måste du först hitta FFT -frekvensen med den högsta nivån ("toppfrekvensen") och sedan en tröskelnivå för den frekvensen för att ställa in en trigger. För att göra detta, kör script checkFreezer i träningsläge, med alternativet ‘-t’ och spela inspelningen av larmet.

$ python checkFreezer.py -t

Detta kör skriptet i träningsläge. Den skriver ut "redo" när den sågade hatten har initierats och lysdioden blir grön, sedan en rad för varje icke-trivialt brus som den hör, t.ex.

$ python checkFreezer.py -t

Klar toppfrekvens 55 utlösare nivå 1 utlöst? Falsk toppfrekvens 645 triggnivå 484 utlöst? Falsk toppfrekvens 645 triggnivå 380 utlöst? Falsk

Toppfrekvensen är, i det här fallet 645 och det blir triggerfrekvensen. Nu för att få utlösningsnivån, kör på nytt checkFreezer, ställ in utlösaren

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

Klar toppfrekvens 645 utlösningsnivå 1273 utlöst? Falsk toppfrekvens 645 triggnivå 653 utlöst? Falsk toppfrekvens 645 utlösningsnivå 641 utlöst? Falsk toppfrekvens 645 utlösare nivå 616 utlöst? Falsk

Slutligen behöver vi en triggertröskel som avfyras när ett pip detekteras, men ignorerar buller, t.ex.

$ python checkFreezer.py -t --trigger = 645 --tröskel = 500

Klar toppfrekvens 645 utlösningsnivå 581 utlöst? Sann toppfrekvens 645 triggnivå 798 utlöst? Sann toppfrekvens 645 utlösningsnivå 521 utlöst? Sann

Testa detta mot ett par bullriga samplar så ska du kunna fastställa ett tröskelvärde som skiljer mellan ljudet från piparen och omgivande buller. Du bör också se lysdioden bli röd när ljudsignalen spelas upp i några sekunder. Redigera inställningarna i skriptet om det är för snabbt/långsamt

Ansluter till radion

För att konfigurera skripten för din egen installation måste du hitta IP -adressen och portnumret som din enhet använder för UPnP -tjänster. Radioinställningarna bör ge dessa. Standardportnumret är 8080 och det skulle vara en överraskning om det är annorlunda.

Jag har levererat ett standardlarmmeddelande, fryser.mp3. Ersätt gärna med ditt eget meddelande.

Redigera skriptet med lämpliga IP -adresser och kör skriptet.

$ python raiseAlarm.py

Om allt är bra kommer det högljudda och irriterande larmmeddelandet att sprängas ur din radio tills radion stängs av och larmet avbryts.

Medan skriptet körs kör det en mini -webbserver för att överföra alarmet mp3 till radion, möjligen ett säkerhetsproblem, men det är bara aktivt medan larmmeddelandet spelas.

Går live

Ta bort "-t" träningsflaggan och kör checkFreezer med dina egna värden, t.ex.

$ python checkFreezer.py --trigger = 645 --tröskel = 200

För att starta omstart, lägg till /etc/rc.local, cd/home/pi/frys-alarm

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

Den gröna lysdioden tänds och du är redo för åtgärder. Spela inspelningen av ditt larmsignal och efter några sekunder lyser lysdioden rött och larmmeddelandet spelas upp på din radio.

Till sist

Placera PI på en plats i närheten av frysen, ur vägen och genom en strömförsörjning. Slå på och den gröna lysdioden ska tändas. Testa att utlösa larmet genom att låta dörren stå öppen. Ljuset ska bli rött och larmmeddelandet spelas upp på radion.

Framgång !! Du har gjort det. Unna dig en lång drink med is från frysen, men glöm inte att stänga frysdörren!

Rekommenderad: