Innholdsfortegnelse:

Fryser Alarm Relé: 5 trinn
Fryser Alarm Relé: 5 trinn

Video: Fryser Alarm Relé: 5 trinn

Video: Fryser Alarm Relé: 5 trinn
Video: Как самой вылечить недержание мочи? Эти упражнения поднимут органы на место! 2024, Juli
Anonim
Fryser Alarm Relé
Fryser Alarm Relé

Fryseren vår er i et vaskerom som er isolert fra boligarealet vårt. Noen ganger stenges ikke frysedøren ordentlig, og alarmen går. Problemet er at vi ikke kan høre det hvis vi er i boområdet vårt. Hvordan får vi beskjed om at frysedøren er åpen? Dette er et vanlig problem, vi har enheter i hjemmene våre som snakker med oss, men hva skjer hvis vi ikke kan høre dem av en eller annen grunn. Jeg startet dette som litt morsomt, men det kan være nyttig i en mer seriøs applikasjon.

Det er to deler til dette problemet, vi trenger en metode for å oppdage alarmen har gått og en metode for å videresende dette til vårt boareal. Designet jeg bestemte meg for var å bruke en Raspberry Pi til å lytte etter fryseralarmen, og deretter sende en hørbar alarmmelding til min innenlandske radio som er uPNP -aktivert. Universal Plug and Play (UpnP) er en standard for å oppdage og samhandle med tjenester som tilbys av forskjellige enheter i et nettverk, inkludert medieservere og spillere, selv om jeg ikke tror frysere var planlagt da standarden ble utviklet. Advarselsmeldingen ble gjort høyt og irriterende og gjentas uendelig til radioen slås av.

Jeg valgte å oppdage alarmen med en Raspberry Pi Zero W og Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero er en rimelig versjon av Raspberry Pi og W-alternativet har innebygd WiFi, mens Seeed Pi HAT selges for mindre enn $ 10, har innebygde lysdioder og en brukerknapp. Pi HAT er forlengelseskort som kobles direkte til Raspberry Pi og gjør en veldig enkel monteringsprosedyre. En hvilken som helst Pi-versjon ville være mer enn i stand til jobben, og mikrofonen som er valgt kan erstattes, selv om jeg brukte de innebygde lysdiodene i denne bygningen.

Det er enkelt å sjekke om en radio eller TV ville fungere for deg. Det vil mer sannsynlig bli beskrevet som "DLNA -aktivert" eller lignende. Dette bruker uPNP for å kommunisere. Velg en mp3 -fil på en Windows -PC og "Cast til enhet". Hvis enheten din dukker opp og du kan spille av filen, er du i gang.

Jeg delte programvaren i 2 python -skript, checkFreezer.py for å sjekke om et fryservarsel er utløst og raiseAlarm.py for å slå alarm. Disse skriptene kan utvikles og testes separat og kan enkelt tilpasses eller erstattes med forskjellige mikrofoner for alarmheving.

Rekvisita

  • Programvare -https://github.com/wapringle/freezer-alarm
  • Bringebær PI Zero W
  • Så ReSpeaker 2-Mics Pi HAT
  • uPNP -aktivert radio

Trinn 1: Designe detektoren

Når frysedøren står åpen og temperaturen stiger, gir fryseren en hørbar "pipetone". I likhet med de fleste elektroniske pip er dette en enkeltfrekvens. Tanken er å prøve lydinngangen, utføre en Fast Fourier Transform (FFT) som transformerer et tidsbasert signal til et frekvensbasert signal, med andre ord bryter et signal ned for å vise de forskjellige frekvensene i signalet. Se Instructable Raspberry Pi Spectrum Analyzer With RGB LED Strip Vi kan se etter en topp på summerfrekvensen og utløse alarmen når summeren har vært aktiv en stund.

Denne detektoren har 2 krav

  • Det skal oppdage summer, selv i nærvær av omgivelsesstøy (eliminere falskt negativt)
  • Det bør ikke utløses av omgivelsesstøy (eliminere falskt positivt)

Jeg bestemte meg for at det å kjøre en Hoover i vaskerommet ville være en god test. Det skal ikke utløse alarmen, og alarmen bør utløses når fryseren summer går og Hoover kjører.

Trinn 2: Konfigurering av detektoren

Konfigurere detektoren
Konfigurere detektoren
Konfigurere detektoren
Konfigurere detektoren
Konfigurere detektoren
Konfigurere detektoren

Med telefonen min tok jeg lydprøver som WAV -filer av fryseren, bare med støyende bakgrunn og med Hoover -enheten. Jeg tilpasset koden for å utføre FFT fra innlegget Reading Audio Stream for FFT (Når du er i tvil, plagariser) og brukte scriptet fourierTest.py til å plotte rå og Fourier Transformerte prøver av summeren i stille, bråkete og veldig bråkete bakgrunner. Økningen i nivå ved frekvens 645 er uttalt i det første plottet og er fortsatt signifikant med en veldig bråkete bakgrunn.

Trinn 3: Konstruere detektoren

Montering av detektoren

Veldig enkelt. Pi W leveres med innebygd Wifi og HATEN kobles diekt til GPIO-pinnene på Pi. Konfigurering av programvaren krever trinnene

  • Installer raspbian distro på Raspberry Pi. Det er mange guider om dette som kan forklare det mye bedre enn jeg kan.
  • Sett opp Wifi (ditto ovenfor)
  • Den trenger alsa -pakken installert

$ sudo apt-get install libasound-dev

$ pip installer pyalsaaudio

  • Koble hatten til bringebær -PI
  • Følg instruksjonene på det viste nettstedet for å installere driverne for HAT.
  • Kjør den viste diagnosen for å kontrollere at HAT fungerer og er riktig konfigurert.

Detektorprogrammet leser en datablokk som en prøve fra mikrofonen, gjør FFT og bestemmer om den har oppdaget summeren i prøven eller ikke. Jeg prøvde å gjøre blokken så lang som mulig ved å redusere lydprøvehastigheten til 16 kHz og bruke den største bufferen leseren ville godta. Jeg var bekymret for at FFT -beregningen kunne føre til at rammer ble droppet, men det skjedde ikke.

Etter å ha forhåndsinnspilte prøver på telefonen min, ble det mye lettere å bygge detektoren da jeg kunne gjøre hele bygget på benken før jeg testet in situ ved fryseren.

Trener detektoren

Detektoren ble trent ved å skanne hver prøve når WAV -opptaket av summeren ble spilt til detektoren. Programmet sender ut posisjonen i FFT -spekteret med det høyeste effektnivået (toppfrekvensen), sammen med nivået for den toppfrekvensen. Det var enkelt å finne summerfrekvensen og effektnivået den sendte ut.

Det er 2 måter å oppdage om det hadde hørt et pip:-

  1. Var summerfrekvensen toppfrekvensen i prøven?
  2. eller var effektnivået ved summerfrekvensen over en terskel?

Hver metode fungerte i en stille prøve, men den andre var bedre med en støyende prøve, så jeg brukte det.

Noen ganger dekket en prøve et pip, noen ganger var det mellom pip, og etter hvert 3. pip var det en lang pause før de neste pipene. For pålitelig å oppdage at det hadde oppstått et sett med pip, hadde hver prøve en oppstemme hvis det ble oppdaget et pip og en nedstemme hvis ikke. Disse stemmene ble vektet for å sette en telling som ville støte opp med et pipeprøve og sakte forfalle mellom gangene. Når tellingen nådde en terskel, kunne alarmen utløses. Hvis tilfeldig støy ble oppdaget som en pipeprøve, ville tellingen glide tilbake til null.

Vi trenger deretter vektene for upvote og downvote sammen med terskelen. Dette gjorde jeg med prøving og feiling over en rekke prøver. Jeg trengte ikke å bestemme den faktiske summerfrekvensen, jeg så bare etter den standout -frekvensen i fft -spekteret.

Trinn 4: Sende en melding til radioen

Å heve alarmen var gjort med et eget skript. Det er jobben å slå på radioen om nødvendig, bryte inn i det radioen spiller og gjenta alarmmeldingen til radioen slås av igjen. Jeg måtte reversere uPnP -protokollen som ble brukt, da jeg hadde store problemer med å få pålitelig informasjon eller eksempler. Et par referanser jeg syntes var nyttige var

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Dette har en fin oversikt over hvordan det hele henger 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 brukte Wireshark som kjørte på en Windows -PC til å fjerne meldingssekvensen når jeg spilte en prøvefil fra min PC på radioen min, og etter litt fikling fikk jeg en kommandosekvens som fungerte. Dette er

  • Start en popup -webserver for å vise advarselen når radioen ber om det
  • Sett volumnivået til HØYT (advarselsmeldingen bør tiltrekke alles oppmerksomhet)
  • Send uri for varselmeldingen til radioen
  • Avstemm radioen til gjeldende tilstand er "STOPPET"
  • Få radioen til å "PLAY" uri
  • Gjenta de to siste trinnene til gjeldende tilstand er "NO MEDIA PRESENT", noe som betyr at alarmen er blitt kvittert ved å slå av radioen
  • Lukk til slutt webserveren og avslutt.

Dette er scriptet raiseAlarm.py

Trinn 5: Gjør det selv

Gjør det selv
Gjør det selv

Modellen "detektor" og "alarm" er ikke bare for frysere, den kan være nyttig hvor som helst der en automatisk alarm må videresendes gjennom et annet medium. Hvis dette er av interesse, kan du prøve.

Sette opp PI Zero W, inkludert mikrofonen

  • Monter maskinvaren som i trinn 3
  • Last ned fryser-alarm-skriptene fra denne instruksjonsboken, eller fra git-depotet som inneholder noen få bonusspor

$ git klon

Du må også installere programvaren for å bruke de innebygde APA102-lysdiodene. Jeg har tatt med en kopi av apa102.py i git -arbeidskatalogen

Trener din detektor

Jeg har lagt til et treningsalternativ i checkFreezer.py -skriptet. Dette kjører det frittstående og skriver ut en diagnostikk til kommandolinjen, men først må du registrere noen prøver av alarmen i et stille miljø som WAV-filer, og gjøre det samme i en bråkete. For å fullføre opplæringen må du først finne FFT -frekvensen med det høyeste nivået ("toppfrekvensen") og deretter et terskelnivå for denne frekvensen for å stille en trigger. For å gjøre dette, kjør script checkFreezer i treningsmodus, med alternativet ‘-t’ og spill av innspillingen av alarmen.

$ python checkFreezer.py -t

Dette kjører skriptet i treningsmodus. Den skriver ut "klar" når den såte HATEN er initialisert og LED-en blir grønn, deretter en linje for hver ikke-triviell støy den hører, f.eks.

$ python checkFreezer.py -t

Klar toppfrekvens 55 utløser nivå 1 utløst? Feil toppfrekvens 645 utløser nivå 484 utløst? Feil toppfrekvens 645 utløser nivå 380 utløst? Falsk

Toppfrekvensen er, i dette tilfellet 645, og det blir triggerfrekvensen. Nå for å få utløsernivået, kjør checkFreezer på nytt, og sett ut utløseren

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

Klar toppfrekvens 645 utløser nivå 1273 utløst? Falsk toppfrekvens 645 utløser nivå 653 utløst? Falsk toppfrekvens 645 utløser nivå 641 utløst? Feil toppfrekvens 645 utløser nivå 616 utløst? Falsk

Til slutt trenger vi en utløserterskel som utløses når et pip oppdages, men ignorerer støy, f.eks

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

Klar toppfrekvens 645 utløser nivå 581 utløst? Ekte toppfrekvens 645 utløser nivå 798 utløst? Sann toppfrekvens 645 utløser nivå 521 utløst? ekte

Test dette mot et par støyende prøver, så skal du kunne fastsette en terskelverdi som skiller mellom lyden av bleeper og omgivelsesstøy. Du bør også se LED -en bli rød når pipelyden spilles av i noen sekunder. Rediger innstillingene i skriptet hvis det er for raskt/sakte

Koble til radioen

For å konfigurere skriptene for ditt eget oppsett, må du finne IP -adressen og portnummeret som enheten bruker for UPnP -tjenester. Radiooppsettet bør gi disse. Standardportnummeret er 8080, og det ville være en overraskelse hvis det er annerledes.

Jeg har levert en standard alarmmelding, fryser.mp3. Erstatt gjerne med din egen melding.

Rediger skriptet med de riktige IP -adressene og kjør skriptet.

$ python raiseAlarm.py

Hvis alt er bra, vil den høye og irriterende alarmmeldingen blåse ut av radioen din til radioen slås av, og alarmen avbrytes.

Mens skriptet kjører, kjører det en mini -webserver for å vise alarmen mp3 til radioen, muligens et sikkerhetsproblem, men den er bare aktiv mens alarmmeldingen spilles.

Går live

Fjern ‘-t’ treningsflagget, og kjør checkFreezer med dine egne verdier, f.eks

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

For å få det til å starte ved omstart, legg til /etc/rc.local, cd/home/pi/fryser-alarm

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

Den grønne LED -lampen lyser, og du er klar for handling. Spill av innspillingen av alarmsignalet ditt, og etter noen sekunder lyser LED -en rød og alarmmeldingen spilles av på radioen din.

Endelig

Plasser PI -en på et sted like ved fryseren, utenom veien og ved en strømforsyning. Slå på strømmen og den grønne LED -lampen skal lyse. Test utløseren av alarmen ved å la døren stå åpen. Lyset skal bli rødt og alarmmeldingen spilles av på radioen.

Suksess !! Du har gjort det. Unn deg en lang drink med is fra fryseren, men ikke glem å lukke frysedøren!

Anbefalt: