Inhaltsverzeichnis:

Benachrichtigungssensor der Waschmaschine - Gunook
Benachrichtigungssensor der Waschmaschine - Gunook

Video: Benachrichtigungssensor der Waschmaschine - Gunook

Video: Benachrichtigungssensor der Waschmaschine - Gunook
Video: Smarte Waschmaschine mit Handy Benachrichtigung 2024, Juli
Anonim
Image
Image
Prototyp
Prototyp

Dieser Waschmaschinensensor sitzt auf meiner Waschmaschine und verwendet einen Beschleunigungsmesser, um Vibrationen von der Maschine zu erkennen. Wenn es erkennt, dass der Waschgang beendet ist, sendet es mir eine Benachrichtigung auf meinem Telefon. Ich habe das gebaut, weil die Maschine selbst nicht mehr piept, wenn sie fertig ist und ich es satt hatte, zu vergessen, die Wäsche herauszunehmen.

Den Code finden Sie hier:

Vollständige Teileliste:

  • WEMOS LOLIN32
  • Steckbrett halber Größe (für Prototyping)
  • ABS Projektbox mit Matrix Board 59x88x30mm
  • Sparkfun LIS3DH - Dreiachsiger Beschleunigungsmesser Breakout
  • 1x ZVP3306A P-Kanal MOSFET, 160 mA, 60 V, 3-Pin E-Line
  • 1x BC549B TO92 30V NPN Transistor
  • 5mm LED Blau 68 mcd
  • 1x 100k 0,125W CF-Widerstand
  • 1x 330k 0,125W CF-Widerstand
  • 2x 10k 0,250W CF-Widerstand
  • 1x 100 0,250W CF-Widerstand
  • 2-Pin Buchse JST PH-Style Kabel (14cm)
  • 4x M1219-8 Neodym-Scheibenmagnet 6x4mm

Schritt 1: Prototyp

Prototyp
Prototyp

Das Gerät verwendet einen ESP32-Mikrocontroller. In diesem Fall verwende ich das Lolin32-Entwicklungsboard von Wemos, das Sie bei AliExpress für etwa 7 US-Dollar kaufen können. Der Beschleunigungsmesser ist der Sparkfun LIS3DH - es ist wichtig, dass der Beschleunigungsmesser digital und nicht analog ist, wie Sie später sehen werden. Die Batterie habe ich aus einem alten Satz Bluetooth-Lautsprecher genommen.

Der ESP32 ist über I2C mit dem Beschleunigungsmesser verbunden. Die erste Version des Codes hat einfach alle 20 ms die drei Beschleunigungsachsen (x, y und z) nach dem gemessenen Beschleunigungswert abgefragt. Nachdem ich den Steckbrett-Prototyp auf die Waschmaschine gelegt habe, habe ich das obige Diagramm erstellt, das Beschleunigungsspitzen während verschiedener Phasen des Waschzyklus zeigt. Die Peaks, bei denen die absolute Beschleunigung größer als 125 mg (125 Tausendstel der normalen Schwerkraft) war, sind orange dargestellt. Diese Zeiträume wollen wir erkennen und daraus den Zustand der Waschmaschine ermitteln.

Wie kann man feststellen, ob die Maschine ein- oder ausgeschaltet ist?

Eines der Ziele beim Bau dieses Geräts war, dass es vollständig passiv ist. D.h. es müssen keine Tasten gedrückt werden; es würde einfach funktionieren. Es sollte auch sehr wenig Strom haben, da es in meinem Fall nicht wirklich möglich war, Stromkabel zur Waschmaschine zu verlängern.

Glücklicherweise verfügt der LIS3DH-Beschleunigungsmesser über eine Funktion, mit der er einen Interrupt auslösen kann, wenn die Beschleunigung einen bestimmten Schwellenwert überschreitet (beachten Sie, dass dies den eingebauten Hochpassfilter des Beschleunigungsmessers erfordert - Details finden Sie im Code auf Github) und der ESP32 kann aufgeweckt werden über einen Interrupt aus dem Tiefschlafmodus hochfahren. Wir können diese Kombination von Funktionen verwenden, um einen Schlafmodus mit sehr geringem Stromverbrauch zu erstellen, der durch Bewegung ausgelöst wird.

Der Pseudocode würde ungefähr so aussehen:

# Gerät aufwachen

notification_threshold = 240 counter = 10 accelerometer.set_threshold(96) #96mg while counter > 0: if accelerometer.above_threshold(): counter++ else: counter-- if counter > notification_threshold: # finaler Schleuderzyklus erkannt Sleep (1 Sekunde) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt() esp32.deep_sleep()

Sie können hier sehen, dass wir einen Zähler verwenden, um zu erkennen, wie viele Sekunden der Beschleunigung wir während der aktuellen Wachperiode erkannt haben. Wenn der Zähler auf Null fällt, können wir das Gerät wieder in den Ruhezustand versetzen. Wenn der Zähler 240 (die Benachrichtigungsschwelle) erreicht, bedeutet dies, dass wir eine Vibration von 4 Minuten festgestellt haben. Wir können die Werte dieser Schwellenwerte optimieren, um sicherzustellen, dass das Gerät den letzten Schleudergang korrekt erkennt. Sobald eine ausreichende Vibration erkannt wird, können wir einfach weitere 5 Minuten schlafen (in meinem Fall dauert es so lange, bis der Waschvorgang tatsächlich abgeschlossen ist), bevor wir eine Benachrichtigung senden.

Schritt 2: Senden einer Benachrichtigung über Blynk

Senden einer Benachrichtigung über Blynk
Senden einer Benachrichtigung über Blynk

Blynk ist ein Dienst, der die Interaktion mit IoT-Geräten mit einer App auf Ihrem Telefon ermöglicht. In diesem Fall verwende ich die Push-Benachrichtigungs-API, die durch einen einfachen HTTP-POST an die Blynk-API ausgelöst wird.

Schritt 3: Leistungsaufnahme messen und Batterielebensdauer schätzen

Messung des Stromverbrauchs und Schätzung der Batterielebensdauer
Messung des Stromverbrauchs und Schätzung der Batterielebensdauer

Der ESP32-Chip wird mit einem sehr geringen Stromverbrauch im Tiefschlaf beworben (bis zu 5uA). Leider bieten die Schaltungen auf den vielen verschiedenen Entwicklungsboards sehr unterschiedliche Stromverbrauchseigenschaften - nicht alle ESP32-Entwicklungsboards sind gleich. Als ich beispielsweise mit diesem Projekt begann, habe ich das Sparkfun ESP32 Thing verwendet, das im Tiefschlafmodus etwa 1 mA Strom verbraucht (auch nach dem Deaktivieren der Power-LED). Seitdem verwende ich den Lolin32 (nicht die Lite-Version), an dem ich im Tiefschlafmodus einen Strom von 144,5uA gemessen habe. Für diese Messung habe ich einfach ein Multimeter in Reihe mit der Batterie und dem Gerät geschaltet. Dies ist beim Prototyping mit einem Steckbrett sicherlich einfacher. Ich habe auch die aktuelle Nutzung gemessen, wenn das Gerät wach ist:

  • Tiefschlaf: 144.5uA
  • Wach: 45mA
  • WLAN aktiviert: 150mA

Angenommen, ich benutze das Gerät zweimal pro Woche, habe ich die folgenden Zeitvorgaben für die Zeit geschätzt, die der Sensor in jedem Zustand verbringt:

  • Tiefschlaf: 604090 Sekunden (~1 Woche)
  • Wach: 720 Sekunden (12 Minuten)
  • WLAN aktiviert: 10 Sekunden

Anhand dieser Zahlen können wir abschätzen, wie lange der Akku halten wird. Ich habe diesen handlichen Taschenrechner verwendet, um einen durchschnittlichen Stromverbrauch von 0,2 mA zu erhalten. Die geschätzte Batterielebensdauer beträgt 201 Tage oder etwa 6 Monate! In Wirklichkeit habe ich festgestellt, dass das Gerät nach etwa 2 Monaten nicht mehr funktioniert, sodass es zu Fehlern bei den Messungen oder der Kapazität des Akkus kommen kann.

Schritt 4: Messen des Batteriestands

Messen des Batteriestands
Messen des Batteriestands
Batteriestand messen
Batteriestand messen

Ich dachte, es wäre schön, wenn das Gerät mir sagen könnte, wenn der Akku fast leer ist, damit ich weiß, wann ich es aufladen muss. Um dies zu messen, müssen wir die Spannung der Batterie messen. Die Batterie hat einen Spannungsbereich von 4,3V - 2,2V (die minimale Betriebsspannung des ESP32). Leider beträgt der Spannungsbereich der ADC-Pins des ESP32 0-3,3V. Das bedeutet, dass wir die Spannung der Batterie von ihrem Maximum von 4,3 auf 3,3 reduzieren müssen, um eine Überlastung des ADC zu vermeiden. Dies ist mit einem Spannungsteiler möglich. Einfach zwei Widerstände mit den entsprechenden Werten von der Batterie nach Masse verdrahten und die Spannung in der Mitte messen.

Leider entzieht eine einfache Spannungsteilerschaltung der Batterie auch dann Strom, wenn die Spannung nicht gemessen wird. Sie können dies durch die Verwendung hochwertiger Widerstände abmildern, aber der Nachteil ist, dass der ADC möglicherweise nicht genug Strom ziehen kann, um eine genaue Messung durchzuführen. Ich habe mich entschieden, Widerstände mit Werten von 100kΩ und 330kΩ zu verwenden, die gemäß dieser Spannungsteilerformel um 4,3 V auf 3,3 V abfallen. Bei einem Gesamtwiderstand von 430 kΩ würden wir eine Stromaufnahme von 11,6 uA erwarten (nach dem Ohmschen Gesetz). Da unser Tiefschlaf-Stromverbrauch 144 uA beträgt, ist dies eine ziemlich signifikante Steigerung.

Da wir die Batteriespannung nur einmal kurz vor dem Versenden einer Benachrichtigung messen möchten, ist es sinnvoll, die Spannungsteilerschaltung in der Zeit, in der wir nichts messen, auszuschalten. Glücklicherweise können wir dies mit ein paar Transistoren tun, die an einen der GPIO-Pins angeschlossen sind. Ich habe die in dieser Stapelaustauschantwort angegebene Schaltung verwendet. Sie können mich auf dem Foto oben sehen, wie ich die Schaltung mit einem Arduino und einem Steckbrett teste (beachten Sie, dass in der Schaltung ein Fehler vorliegt, der der Grund ist, warum ich eine höhere Spannung als erwartet messe).

Mit der obigen Schaltung verwende ich den folgenden Pseudocode, um einen Batterieprozentwert zu erhalten:

Batterie_Prozent ():

# Batteriespannungsschaltung aktivieren gpio_set_level(BATTERY_EN_PIN, HIGH) # Batteriestand wird als Ganzzahl zwischen 0 und 4095 zurückgegeben adc_value = adc1_get_value(ADC_PIN) # Batteriespannungsschaltung aktivieren gpio_set_level(BATTERY_EN_PIN, LOW) float adc_voltage = adc_value * 3.3 3,3 / 4095 Teiler verwendet 100k / 330k Ohm Widerstände # 4,3V -> 3,223, 2,4 -> 1,842 erwartet_max = 4,3*330/(100+330) erwartet_min = 2,4*330/(100+330) Batterie_Stand = (adc_volt-expected_min)/(expected_max -expected_min) Batterie_Level zurückgeben * 100.0

Schritt 5: Schöner machen

Schöner machen
Schöner machen
Schöner machen
Schöner machen
Schöner machen
Schöner machen

Während die Steckbrettversion gut funktioniert, wollte ich sie in ein Paket packen, das ordentlicher und zuverlässiger ist (keine Drähte, die sich lösen oder kurzschließen können). Ich habe es geschafft, die perfekte Projektbox für meine Bedürfnisse zu finden, die die richtige Größe hatte, inklusive einer Pinnwand, Halterungen und Schrauben, um alles zusammenzubauen. Außerdem war es mit weniger als 2 Pfund absolut günstig. Nach Erhalt der Box musste ich nur noch die Bauteile auf die Pinnwand löten.

Der vielleicht schwierigste Teil davon war, alle Komponenten des Batteriespannungsschaltkreises auf dem kleinen Raum neben dem Lolin32 unterzubringen. Zum Glück passt die Schaltung mit ein bisschen ruckelndem Poker und den entsprechenden Anschlüssen mit Lötzinn gut hinein. Da das Wemos Lolin32 auch keinen Pin hat, um den Pluspol der Batterie freizulegen, musste ich einen Draht vom Batteriestecker an die Pinnwand löten.

Ich habe auch eine LED hinzugefügt, die blinkt, wenn das Gerät eine Bewegung erkannt hat.

Schritt 6: Feinschliff

Image
Image
Feinschliff
Feinschliff
Feinschliff
Feinschliff

Ich habe 4 6 mm x 4 mm Neodym-Magnete auf den Boden der Box geklebt, damit sie sicher an der Metalloberseite der Waschmaschine haften bleibt.

Die Projektbox wird bereits mit einem kleinen Loch geliefert, um den Zugang für Kabel zu ermöglichen. Glücklicherweise konnte ich die ESP32-Platine in der Nähe dieses Lochs positionieren, um Zugang zum Micro-USB-Anschluss zu erhalten. Nach dem Vergrößern des Lochs mit einem Cuttermesser passt das Kabel perfekt, um ein einfaches Aufladen des Akkus zu ermöglichen.

Wenn Sie an Details zu diesem Projekt interessiert sind, können Sie gerne einen Kommentar hinterlassen. Wenn Sie den Code sehen möchten, überprüfen Sie ihn bitte auf Github:

github.com/alexspurling/waschmaschine

Empfohlen: