Indholdsfortegnelse:

Fryser Alarm Relæ: 5 trin
Fryser Alarm Relæ: 5 trin

Video: Fryser Alarm Relæ: 5 trin

Video: Fryser Alarm Relæ: 5 trin
Video: Переход. Я нашёл нечто страшное в доме своего дяди. Джеральд Даррелл 2024, Juli
Anonim
Fryser Alarm Relæ
Fryser Alarm Relæ

Vores fryser er i et bryggers, der er isoleret fra vores boligareal. Af og til lukker fryseren ikke ordentligt, og alarmen går. Problemet er, at vi ikke kan høre det, hvis vi er i vores boligareal. Hvordan får vi en besked om, at frysedøren er åben? Dette er et almindeligt problem, vi har enheder i vores hjem, der taler til os, men hvad sker der, hvis vi ikke kan høre dem af en eller anden grund. Jeg startede dette som lidt sjovt, men det kan være nyttigt i en mere seriøs applikation.

Der er to dele til dette problem, vi har brug for en metode til at opdage alarmen er gået og en metode til at videresende denne kendsgerning til vores boligareal. Det design, jeg besluttede mig for, var at bruge en Raspberry Pi til at lytte efter fryseralarmen, der gik, og derefter sende en hørbar alarmmeddelelse til min hjemlige radio, som er uPNP -aktiveret. Universal Plug and Play (UpnP) er en standard for at opdage og interagere med tjenester, der tilbydes af forskellige enheder på et netværk, herunder medieservere og afspillere, selvom jeg ikke tror, at frysere var påtænkt, da standarden blev udviklet. Advarselsmeddelelsen blev gjort højt og irriterende og gentages uendeligt, indtil radioen er slukket.

Jeg valgte at opdage alarmen med en Raspberry Pi Zero W og Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero er en billig udgave af Raspberry Pi, og W-indstillingen har indbygget WiFi, mens Seeed Pi HAT sælges for mindre end $ 10, har indbyggede lysdioder og en brugerknap. Pi HAT er forlængelseskort, der sluttes direkte til Raspberry Pi, hvilket gør en meget enkel montageprocedure. Enhver Pi-version ville være mere end i stand til jobbet, og den valgte mikrofon kan erstattes, selvom jeg brugte de indbyggede lysdioder i denne build.

Det er let at kontrollere, om en radio eller fjernsyn ville fungere for dig. Det vil mere sandsynligt blive beskrevet som "DLNA -aktiveret" eller lignende. Dette bruger uPNP til at kommunikere. På en Windows -pc skal du vælge en mp3 -fil og "Cast til enhed". Hvis din enhed vises, og du kan afspille filen, er du klar til at gå.

Jeg opdelte softwaren i 2 python -scripts, checkFreezer.py for at kontrollere, om en fryser -alarm er blevet udløst, og raiseAlarm.py for at slå alarm. Disse scripts kunne udvikles og testes separat og kan let tilpasses eller erstattes af forskellige mikrofoner til alarmopkaldsmetoder.

Forbrugsvarer

  • Software -https://github.com/wapringle/freezer-alarm
  • Hindbær PI Zero W
  • Set ReSpeaker 2-Mics Pi HAT
  • uPNP -aktiveret radio

Trin 1: Design af detektoren

Når fryserdøren efterlades åben, og temperaturen stiger, giver fryseren en hørbar "bip bip bip" alarm. Ligesom de fleste elektroniske bip er dette en enkelt frekvens. Ideen er at prøve lydindgangen, udføre en Fast Fourier Transform (FFT), som omdanner et tidsbaseret signal til et frekvensbaseret signal, med andre ord bryder et signal ned for at vise de forskellige frekvenser i signalet. Se Instructable Raspberry Pi Spectrum Analyzer With RGB LED Strip Vi kan lede efter en top ved summerfrekvensen og udløse alarmen, når summeren har været aktiv i et stykke tid.

Denne detektor har 2 krav

  • Det skal registrere summeren, selv i nærværelse af omgivende støj (eliminere falsk negativ)
  • Det bør ikke udløses af omgivende støj (eliminer falsk positivt)

Jeg besluttede at køre en Hoover i bryggerset ville være en god test. Det bør ikke udløse alarmen, og alarmen skal udløses, når fryseren summer går og Hoover kører.

Trin 2: Konfiguration af detektoren

Konfiguration af detektoren
Konfiguration af detektoren
Konfiguration af detektoren
Konfiguration af detektoren
Konfiguration af detektoren
Konfiguration af detektoren

Med min telefon tog jeg lydprøver som WAV -filer af fryseren summer alene, med en støjende baggrund og med Hoover kørende. Jeg tilpassede koden til at udføre FFT fra posten Læsning af lydstrøm til FFT (når du er i tvivl, plagarise) og brugte scriptet fourierTest.py til at plotte rå og Fourier -transformerede prøver af summeren i stille, støjende og meget støjende baggrunde. Spidsen i niveau ved frekvens 645 er udtalt i det første plot og er stadig signifikant med en meget støjende baggrund.

Trin 3: Konstruktion af detektoren

Montering af detektoren

Meget simpelt. Pi W leveres med indbygget Wifi, og hatten tilsluttes direkte til GPIO-benene på Pi. Konfiguration af softwaren kræver trinene

  • Installer raspbian distro på Raspberry Pi. Der er masser af guider om dette, der kan forklare det meget bedre, at jeg kan.
  • Konfigurer Wifi (ditto ovenfor)
  • Den skal have alsa -pakken installeret

$ sudo apt-get install libasound-dev

$ pip installer pyalsaaudio

  • Tilslut HAT til hindbær PI
  • Følg instruktionerne på det viste websted for at installere driverne til HAT.
  • Kør den viste diagnose for at kontrollere, at HAT'en fungerer og er korrekt konfigureret.

Detektorprogrammet læser en datablok som en prøve fra mikrofonen, laver FFT og beslutter, om det har detekteret summeren i prøven eller ej. Jeg forsøgte at gøre blokken så lang som muligt ved at reducere lydprøvehastigheden til 16 kHz og bruge den største buffer, læseren ville acceptere. Jeg var bekymret for, at FFT -beregningen kunne få frames til at falde, men det skete ikke.

Efter at have forudindspillede prøver på min telefon gjorde det meget lettere at bygge detektoren, da jeg kunne lave den komplette opbygning på bænken, før jeg testede in situ ved fryseren.

Træning af detektoren

Detektoren blev trænet ved at scanne hver prøve, når WAV -optagelsen af summeren blev afspillet til detektoren. Programmet udsender positionen i FFT -spektret med det højeste effektniveau (spidsfrekvensen) sammen med niveauet for denne spidsfrekvens. Det var en enkel sag at finde summerfrekvensen og det effektniveau, den udsendte.

Der er 2 måder at registrere, om der var et bip:-

  1. Var summerfrekvensen topfrekvensen i prøven?
  2. eller var effektniveauet ved summerfrekvensen over en tærskel?

Begge metoder fungerede i en stille prøve, men den anden var bedre med en støjende prøve, så jeg brugte det.

Nogle gange dækkede en prøve et bip, nogle gange var det mellem bip, og efter hvert 3. bip var der en lang pause før de næste bip. For pålideligt at opdage, at der var forekommet et sæt bip, havde hver prøve en upvote, hvis der blev opdaget et bip og en downvote, hvis ikke. Disse stemmer blev vægtet for at angive en optælling, der ville støde op med en bip -prøve og langsomt falde ind imellem tidspunkterne. Når tællingen nåede en tærskel, kunne alarmen udløses. Hvis tilfældig støj blev detekteret som en bip -prøve, ville tællingen falde tilbage til nul.

Vi har derefter brug for vægte til upvote og downvote sammen med tærsklen. Dette gjorde jeg med trial and error over et antal prøver. Jeg behøvede ikke at bestemme den faktiske summerfrekvens, jeg ledte bare efter den standout -frekvens i fft -spektret.

Trin 4: Afsendelse af en besked til radioen

Alarmen blev foretaget med et separat script. Det er jobbet at tænde for radioen, hvis det er nødvendigt, bryde ind i hvad radioen afspiller og gentage alarmmeddelelsen, indtil radioen slukkes igen. Jeg var nødt til at reverse reverse uPnP -protokollen, da jeg havde store problemer med at få pålidelige oplysninger eller eksempler. Et par referencer, jeg fandt nyttige var

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Dette har et godt overblik over, hvordan det hele hænger sammen
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Jeg brugte Wireshark, der kørte på en Windows -pc, til at fjerne markeringen af meddelelsessekvensen, når jeg spillede en prøvefil fra min pc på min radio, og efter lidt rodning fik jeg en kommandosekvens, der fungerede. Dette er

  • Start en popup -webserver for at vise advarselsmeddelelsen, når radioen beder om det
  • Indstil lydstyrken til LOUD (advarselsmeddelelsen skal tiltrække alles opmærksomhed)
  • Videregiv uri -meddelelsen til radioen
  • Afstem radioen, indtil den aktuelle tilstand er "STOPPET"
  • Få radioen til at "PLAY" uri'en
  • Gentag de sidste 2 trin, indtil den aktuelle tilstand er "NO MEDIA PRESENT", hvilket betyder, at alarmen er blevet kvitteret ved at slukke for radioen
  • Luk endelig webserveren ned og afslut.

Dette er scriptet raiseAlarm.py

Trin 5: Gør det selv

Gør det selv
Gør det selv

"Detektor" og "alarm alarm" -modellen er ikke kun til frysere, den kan være nyttig hvor som helst, hvor en automatisk alarm skal videresendes via et andet medie. Hvis dette ville være af interesse, er du velkommen til at prøve.

Opsætning af PI Zero W, inklusive mikrofonen

  • Saml hardware som i trin 3
  • Download fryser-alarm-scripts fra denne Instructable eller fra git-depotet, der indeholder et par bonusspor

$ git-klon

Du skal også installere softwaren for at bruge de indbyggede APA102-lysdioder. Jeg har inkluderet en kopi af apa102.py i git -arbejdskataloget

Uddannelse af din detektor

Jeg har tilføjet en træningsmulighed til checkFreezer.py -scriptet. Dette kører det enkeltstående og udskriver en diagnostik til kommandolinjen, men først skal du registrere nogle prøver af alarmen i et roligt miljø som WAV-filer og gøre det samme i en støjende. For at fuldføre træningen skal du først finde FFT -frekvensen med det højeste niveau ("topfrekvensen") og derefter et tærskelniveau for denne frekvens for at indstille en trigger. For at gøre dette skal du køre script checkFreezer i træningstilstand med '-t' og afspille alarmen.

$ python checkFreezer.py -t

Dette kører scriptet i træningstilstand. Den udskriver "klar", når den set HAT er blevet initialiseret, og LED'en bliver grøn, derefter en linje for hver ikke-triviel støj, den hører, f.eks.

$ python checkFreezer.py -t

Klar spidsfrekvens 55 udløser niveau 1 udløst? Falsk spidsfrekvens 645 udløser niveau 484 udløst? Falsk spidsfrekvens 645 udløser niveau 380 udløst? Falsk

Spidsfrekvensen er i dette tilfælde 645, og det bliver triggerfrekvensen. Nu for at få triggerniveauet skal du genstarte checkFreezer og indstille triggeren

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

Klar spidsfrekvens 645 udløser niveau 1273 udløst? Falsk spidsfrekvens 645 udløser niveau 653 udløst? Falsk spidsfrekvens 645 udløser niveau 641 udløst? Falsk spidsfrekvens 645 udløser niveau 616 udløst? Falsk

Endelig har vi brug for en trigger -tærskel, der udløses, når der registreres et bip, men ignorerer støj, f.eks

$ python checkFreezer.py -t --trigger = 645 --grænse = 500

Klar spidsfrekvens 645 udløser niveau 581 udløst? Ægte spidsfrekvens 645 udløser niveau 798 udløst? Ægte spidsfrekvens 645 udløser niveau 521 udløst? Sand

Test dette mod et par støjende prøver, og du bør være i stand til at fastsætte en tærskelværdi, der skelner mellem lyden af blæser og omgivende støj. Du bør også se LED'en blive rød, når bipoptagelsen afspilles i få sekunder. Hvis det er for hurtigt/langsomt at komme på, rediger indstillingerne i scriptet

Tilslutning til radioen

For at konfigurere scripts til din egen opsætning skal du finde den IP -adresse og portnummer, som din enhed bruger til UPnP -tjenester. Radioopsætningen bør levere disse. Standardportnummeret er 8080, og det ville være en overraskelse, hvis det er anderledes.

Jeg har leveret en standardalarmmeddelelse, fryser.mp3. Erstat gerne med din egen besked.

Rediger scriptet med de relevante IP -adresser, og kør scriptet.

$ python raiseAlarm.py

Hvis alt er godt, vil den høje og irriterende alarmmeddelelse sprænge ud af din radio, indtil radioen slukkes, og alarmen annulleres.

Mens scriptet kører, kører det en mini -webserver til at betjene alarmen mp3 til radioen, muligvis et sikkerhedsproblem, men det er kun aktivt, mens alarmmeddelelsen afspilles.

Går live

Fjern ‘-t’ træningsflaget, og kør checkFreezer med dine egne værdier, f.eks

$ python checkFreezer.py --trigger = 645 --grænse = 200

For at få det til at starte ved genstart skal du tilføje til /etc/rc.local, cd/home/pi/fryser-alarm

(python checkFreezer.py --trigger = 645 --threshold = 200> /tmp /fryser 2> /tmp /freezererror &) og afslut 0

Den grønne LED lyser, og du er klar til handling. Afspil optagelsen af dit alarmbip, og efter et par sekunder lyser LED'en rødt, og alarmmeddelelsen afspilles på din radio.

Endelig

Placer PI'en et sted tæt ved fryseren, uden for vejen og ved en strømforsyning. Tænd og den grønne LED skal lyse. Test at udløse alarmen ved at lade døren stå åben. Lyset skal blive rødt, og alarmmeddelelsen afspilles på radioen.

Succes !! Du har gjort det. Forkæl dig selv med en lang drink med is fra fryseren, men glem ikke at lukke fryserdøren!

Anbefalede: