Inhaltsverzeichnis:

Gefrierschrank-Alarmrelais - Gunook
Gefrierschrank-Alarmrelais - Gunook

Video: Gefrierschrank-Alarmrelais - Gunook

Video: Gefrierschrank-Alarmrelais - Gunook
Video: Обязательно запомни эту хитрость! Как можно моментально вывести йод с одежды? #shorts 2024, November
Anonim
Gefrierschrank-Alarmrelais
Gefrierschrank-Alarmrelais

Unser Gefrierschrank befindet sich in einem Hauswirtschaftsraum, der von unserem Wohnraum isoliert ist. Gelegentlich schließt die Gefrierschranktür nicht richtig und der Alarm ertönt. Das Problem ist, dass wir es nicht hören können, wenn wir in unserem Wohnraum sind. Wie erhalten wir eine Meldung, dass die Gefrierschranktür offen ist? Dies ist ein häufiges Problem. Wir haben Geräte zu Hause, die mit uns sprechen, aber was passiert, wenn wir sie aus irgendeinem Grund nicht hören können? Ich habe damit angefangen, ein bisschen Spaß zu machen, aber es kann in einer ernsthafteren Anwendung von Nutzen sein.

Dieses Problem besteht aus 2 Teilen: Wir brauchen eine Methode, um zu erkennen, dass der Alarm ausgelöst wurde, und eine Methode, um diese Tatsache an unseren Wohnraum weiterzugeben. Das Design, für das ich mich entschieden habe, bestand darin, einen Raspberry Pi zu verwenden, um auf das Auslösen des Gefrieralarms zu hören und dann eine akustische Alarmmeldung an mein Heimradio zu senden, das uPNP-aktiviert ist. Universal Plug and Play (UpnP) ist ein Standard zum Erkennen und Interagieren mit Diensten, die von verschiedenen Geräten in einem Netzwerk angeboten werden, einschließlich Medienservern und Playern, obwohl ich glaube nicht, dass Freezers vorgesehen waren, als der Standard entwickelt wurde. Die Warnmeldung wurde laut und irritierend gemacht und wiederholt sich endlos, bis das Radio ausgeschaltet wird.

Ich habe mich entschieden, den Alarm mit einem Raspberry Pi Zero W und einem Seeed ReSpeaker 2-Mics Pi HAT zu erkennen $ 10, hat eingebaute LEDs und eine Benutzertaste. Pi HAT sind Erweiterungskarten, die direkt auf den Raspberry Pi gesteckt werden, was einen sehr einfachen Montagevorgang ermöglicht. Jede Pi-Version wäre für den Job mehr als geeignet, und das gewählte Mikrofon kann ersetzt werden, obwohl ich in diesem Build die eingebauten LEDs verwendet habe.

Ob ein Radio oder ein Fernseher für Sie geeignet ist, können Sie ganz einfach überprüfen. Es wird eher als "DLNA aktiviert" oder ähnlich beschrieben. Dies verwendet uPNP zur Kommunikation. Wählen Sie auf einem Windows-PC eine MP3-Datei und "Auf Gerät übertragen". Wenn Ihr Gerät angezeigt wird und Sie die Datei abspielen können, können Sie loslegen.

Ich habe die Software in 2 Python-Skripte aufgeteilt, checkFreezer.py, um zu überprüfen, ob ein Freezer-Alarm ausgelöst wurde, und raiseAlarm.py, um den Alarm auszulösen. Diese Skripte könnten separat entwickelt und getestet werden und können leicht angepasst oder für verschiedene Methoden zur Alarmauslösung durch Mikrofone ersetzt werden.

Lieferungen

  • Software -https://github.com/wapringle/freezer-alarm
  • Raspberry PI Zero W
  • Seeed ReSpeaker 2-Mikrofon Pi HAT
  • uPNP-fähiges Radio

Schritt 1: Entwerfen des Detektors

Wenn die Gefrierschranktür geöffnet bleibt und die Temperatur ansteigt, gibt der Gefrierschrank einen hörbaren „Beep Beep Beep“-Alarm aus. Wie bei den meisten elektronischen Signaltönen ist dies eine einzelne Frequenz. Die Idee besteht darin, den Audioeingang abzutasten, eine schnelle Fourier-Transformation (FFT) durchzuführen, die ein zeitbasiertes Signal in ein frequenzbasiertes umwandelt, mit anderen Worten, ein Signal zerlegt, um die verschiedenen Frequenzen im Signal anzuzeigen. Sehen Sie sich den anweisbaren Raspberry Pi Spectrum Analyzer mit RGB-LED-Streifen an. Wir können nach einer Spitze bei der Summerfrequenz suchen und den Alarm auslösen, wenn der Summer seit einiger Zeit aktiv war.

Dieser Detektor hat 2 Anforderungen

  • Es sollte den Summer auch bei Umgebungsgeräuschen erkennen (eliminieren falsch negative)
  • Es sollte nicht durch Umgebungsgeräusche ausgelöst werden (falsch positiv eliminieren)

Ich entschied, dass es ein guter Test wäre, einen Hoover im Hauswirtschaftsraum zu betreiben. Es sollte keinen Alarm auslösen, und der Alarm sollte ausgelöst werden, wenn der Summer des Gefrierschranks ertönt und der Hoover läuft.

Schritt 2: Konfigurieren des Detektors

Konfigurieren des Detektors
Konfigurieren des Detektors
Konfigurieren des Detektors
Konfigurieren des Detektors
Konfigurieren des Detektors
Konfigurieren des Detektors

Mit meinem Telefon habe ich Audio-Samples als WAV-Dateien des Gefriersummers allein aufgenommen, mit einem verrauschten Hintergrund und mit laufendem Hoover. Ich habe den Code zur Durchführung der FFT aus dem Beitrag Reading Audio Stream for FFT (Im Zweifelsfall plagarise) angepasst und das Skript fourierTest.py verwendet, um rohe und Fourier-transformierte Samples des Summers in leisen, verrauschten und sehr verrauschten Hintergründen darzustellen. Die Pegelspitze bei der Frequenz 645 ist im ersten Plot ausgeprägt und bei einem sehr verrauschten Hintergrund immer noch signifikant.

Schritt 3: Aufbau des Detektors

Zusammenbau des Detektors

Sehr einfach. Der Pi W kommt mit eingebautem Wifi und der HAT wird direkt in die GPIO-Pins des Pi gesteckt. Die Konfiguration der Software erfordert die Schritte

  • Installieren Sie die Raspbian-Distribution auf dem Raspberry Pi. Es gibt viele Anleitungen dazu, die es viel besser erklären können, als ich es kann.
  • WLAN einrichten (dito oben)
  • Es muss das als Paket installiert sein

$ sudo apt-get install libasound-dev

$ pip installieren pyalsaaudio

  • Verbinden Sie den HUT mit dem Himbeer-PI
  • Befolgen Sie die Anweisungen auf der Seed-Website, um die Treiber für den HAT zu installieren.
  • Führen Sie die Seed-Diagnose aus, um zu überprüfen, ob der HAT funktioniert und richtig konfiguriert ist.

Das Detektorprogramm liest einen Datenblock als Sample aus dem Mikrofon, führt die FFT durch und entscheidet, ob es den Summer im Sample erkannt hat oder nicht. Ich habe versucht, den Block so lang wie möglich zu machen, indem ich die Audio-Sample-Rate auf 16 kHz verringert und den größten Puffer verwendet habe, den der Leser akzeptieren würde. Ich hatte Bedenken, dass die FFT-Berechnung dazu führen könnte, dass Frames ausgelassen werden, aber das ist nicht passiert.

Das Aufzeichnen von Proben auf meinem Telefon machte den Bau des Detektors viel einfacher, da ich den kompletten Bau auf der Werkbank durchführen konnte, bevor ich ihn vor Ort am Gefrierschrank testete.

Den Detektor trainieren

Der Detektor wurde trainiert, indem jede Probe gescannt wurde, wenn die WAV-Aufzeichnung des Summers auf den Detektor gespielt wurde. Das Programm gibt die Position im FFT-Spektrum mit dem höchsten Leistungspegel (der Spitzenfrequenz) zusammen mit dem Pegel dieser Spitzenfrequenz aus. Es war einfach, die Summerfrequenz und die abgegebene Leistung herauszufinden.

Es gibt 2 Möglichkeiten, um zu erkennen, ob ein Signalton aufgetreten ist:

  1. War die Summerfrequenz die Spitzenfrequenz in der Probe?
  2. oder lag der Leistungspegel bei der Summerfrequenz über einem Schwellenwert?

Beide Methoden funktionierten bei einem leisen Sample, aber die zweite war bei einem verrauschten Sample besser, also habe ich das verwendet.

Manchmal überdeckte eine Probe einen Piepton, manchmal war es zwischen Pieptönen und nach jedem 3 Piepsen gab es eine lange Pause vor dem nächsten Piepsen. Um zuverlässig zu erkennen, dass ein Satz von Signaltönen aufgetreten war, hatte jede Probe eine positive Bewertung, wenn ein Signalton erkannt wurde, und eine negative Bewertung, wenn nicht. Diese Stimmen wurden gewichtet, um eine Zählung festzulegen, die mit einem Piepsen hochfährt und zwischendurch langsam abklingt. Sobald die Zählung einen Schwellenwert erreicht hat, kann der Alarm ausgelöst werden. Wenn zufälliges Rauschen als Signalton-Sample erkannt würde, würde die Zählung auf Null zurückfallen.

Wir brauchen dann die Gewichte für das Upvote und Downvote zusammen mit dem Schwellenwert. Dies habe ich mit Versuch und Irrtum über eine Reihe von Beispielen getan. Ich musste die tatsächliche Summerfrequenz nicht bestimmen, ich suchte nur nach der herausragenden Frequenz im fft-Spektrum.

Schritt 4: Senden einer Nachricht an das Radio

Das Auslösen des Alarms wurde mit einem separaten Skript erledigt. Seine Aufgabe ist es, das Radio bei Bedarf einzuschalten, die Radiowiedergabe zu unterbrechen und die Alarmmeldung zu wiederholen, bis das Radio wieder ausgeschaltet wird. Ich musste das verwendete uPnP-Protokoll zurückentwickeln, da ich große Schwierigkeiten hatte, zuverlässige Informationen oder Beispiele zu erhalten. Ein paar Referenzen, die ich nützlich fand, waren

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Dies hat einen schönen Überblick darüber, wie alles zusammenpasst
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Ich benutzte Wireshark, das auf einem Windows-PC ausgeführt wurde, um die Nachrichtensequenz beim Abspielen einer Beispieldatei von meinem PC auf meinem Radio aufzuheben, und nach ein wenig Herumfummeln bekam ich eine Befehlssequenz, die funktionierte. Das ist

  • Starten Sie einen Popup-Webserver, um die Warnmeldung anzuzeigen, wenn das Radio danach fragt
  • Stellen Sie die Lautstärke auf LAUT (Die Warnmeldung sollte alle Aufmerksamkeit auf sich ziehen)
  • Übergeben Sie die uri der Warnmeldung an das Funkgerät
  • Rufen Sie das Radio ab, bis der aktuelle Status "STOPPED" ist
  • Holen Sie sich das Radio, um die uri. zu "SPIELEN"
  • Wiederholen Sie die letzten 2 Schritte, bis der aktuelle Status "NO MEDIA PRESENT" ist, was bedeutet, dass der Alarm durch Ausschalten des Radios bestätigt wurde
  • Schließen Sie abschließend den Webserver und beenden Sie ihn.

Dies ist das Skript raiseAlarm.py

Schritt 5: Selber machen

Selber machen
Selber machen

Das Modell "Melder" und "Alarm auslösen" ist nicht nur für Gefrierschränke gedacht, sondern kann überall dort nützlich sein, wo ein automatischer Alarm über ein anderes Medium weitergeleitet werden muss. Wenn dies von Interesse wäre, probieren Sie es einfach aus.

Aufstellen des PI Zero W inklusive Mikrofon

  • Montieren Sie die Hardware wie in Schritt 3
  • Laden Sie die Freezer-Alarm-Skripte aus diesem Instructable oder aus dem Git-Repository herunter, das ein paar Bonustracks enthält

$ git clone

Sie müssen auch die Software installieren, um die integrierten APA102-LEDs zu verwenden. Ich habe eine Kopie von apa102.py in das git-Arbeitsverzeichnis eingefügt

Trainieren Sie Ihren Detektor

Ich habe dem checkFreezer.py-Skript eine Trainingsoption hinzugefügt. Dadurch wird es eigenständig ausgeführt und eine Diagnose an die Befehlszeile ausgegeben, aber zuerst müssen Sie einige Beispiele des Alarms in einer ruhigen Umgebung als WAV-Dateien aufzeichnen und dasselbe in einer lauten Umgebung tun. Um das Training abzuschließen, müssen Sie zuerst die FFT-Frequenz mit dem höchsten Pegel (die "Spitzenfrequenz") und dann einen Schwellenwert für diese Frequenz finden, um einen Trigger zu setzen. Führen Sie dazu das Skript checkFreezer im Trainingsmodus mit der Option ‚-t‘aus und spielen Sie die Aufzeichnung des Alarms ab.

$ python checkFreezer.py -t

Dadurch wird das Skript im Trainingsmodus ausgeführt. Es wird "bereit" gedruckt, wenn der Seeed-HAT initialisiert wurde und die LED grün wird, dann eine Zeile für jedes nicht triviale Geräusch, das es hört, z

$ python checkFreezer.py -t

Bereit Spitzenfrequenz 55 Triggerstufe 1 ausgelöst? Falsche Spitzenfrequenz 645 Triggerpegel 484 getriggert? Falsche Spitzenfrequenz 645 Triggerlevel 380 getriggert? Falsch

Die Spitzenfrequenz beträgt in diesem Fall 645 und wird zur Triggerfrequenz. Um nun den Triggerpegel zu erhalten, führen Sie checkFreezer erneut aus und setzen Sie den Trigger

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

Bereit Spitzenfrequenz 645 Triggerpegel 1273 getriggert? Falsche Spitzenfrequenz 645 Triggerpegel 653 getriggert? Falsche Spitzenfrequenz 645 Triggerpegel 641 getriggert? Falsche Spitzenfrequenz 645 Triggerpegel 616 getriggert? Falsch

Schließlich brauchen wir eine Triggerschwelle, die ausgelöst wird, wenn ein Signalton erkannt wird, aber Rauschen ignoriert, z

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

Bereit Spitzenfrequenz 645 Triggerlevel 581 getriggert? Wahre Spitzenfrequenz 645 Triggerpegel 798 getriggert? Wahre Spitzenfrequenz 645 Triggerpegel 521 getriggert? Wahr

Testen Sie dies mit ein paar verrauschten Samples und Sie sollten in der Lage sein, einen Schwellenwert festzulegen, der zwischen dem Ton des Piepsers und Umgebungsgeräuschen unterscheidet. Sie sollten auch sehen, dass die LED rot wird, wenn die Tonaufzeichnung einige Sekunden lang abgespielt wird. Wenn es zu schnell/langsam kommt, bearbeiten Sie die Einstellungen im Skript

Verbindung zum Radio herstellen

Um die Skripte für Ihr eigenes Setup zu konfigurieren, müssen Sie die IP-Adresse und Portnummer finden, die Ihr Gerät für UPnP-Dienste verwendet. Das Radio-Setup sollte diese bereitstellen. Die Standardportnummer ist 8080 und es wäre eine Überraschung, wenn sie anders wäre.

Ich habe eine Standard-Alarmnachricht bereitgestellt, Freezer.mp3. Fühlen Sie sich frei, durch Ihre eigene Nachricht zu ersetzen.

Bearbeiten Sie das Skript mit den entsprechenden IP-Adressen und führen Sie das Skript aus.

$ python raiseAlarm.py

Wenn alles in Ordnung ist, ertönt die laute und irritierende Alarmmeldung aus Ihrem Radio, bis das Radio ausgeschaltet wird, wodurch der Alarm abgebrochen wird.

Während das Skript läuft, läuft ein Mini-Webserver, um die Alarm-MP3 an das Radio zu senden, möglicherweise ein Sicherheitsproblem, aber er ist nur aktiv, während die Alarmnachricht abgespielt wird.

Live gehen

Entfernen Sie das Trainingsflag „-t“und führen Sie checkFreezer mit Ihren eigenen Werten aus, z

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

Damit es beim Neustart startet, fügen Sie /etc/rc.local hinzu, cd /home/pi/freezer-alarm

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

Die grüne LED leuchtet und Sie sind einsatzbereit. Spielen Sie die Aufnahme Ihres Alarmtons ab und nach einigen Sekunden wird die LED rot und die Alarmmeldung wird auf Ihrem Radio abgespielt.

Schließlich

Positionieren Sie den PI an einem Ort in der Nähe des Gefrierschranks, außerhalb des Weges und in der Nähe einer Stromversorgung. Schalten Sie das Gerät ein und die grüne LED sollte aufleuchten. Testen Sie die Auslösung des Alarms, indem Sie die Tür offen lassen. Das Licht sollte rot werden und die Alarmmeldung im Radio abgespielt werden.

Erfolg !! Du hast es geschafft. Gönnen Sie sich einen Longdrink mit Eis aus dem Gefrierschrank, aber vergessen Sie nicht, die Gefrierschranktür zu schließen!