Inhaltsverzeichnis:
- Schritt 1: Prototyp
- Schritt 2: Senden einer Benachrichtigung über Blynk
- Schritt 3: Leistungsaufnahme messen und Batterielebensdauer schätzen
- Schritt 4: Messen des Batteriestands
- Schritt 5: Schöner machen
- Schritt 6: Feinschliff
Video: Benachrichtigungssensor der Waschmaschine - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
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
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
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
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
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
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
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:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Raspberry Pi mit Node.js mit der Cloud verbinden – wikiHow
So verbinden Sie Raspberry Pi mit Node.js mit der Cloud: Dieses Tutorial ist nützlich für alle, die einen Raspberry Pi mit Node.js mit der Cloud, insbesondere mit der AskSensors IoT-Plattform, verbinden möchten. Sie haben keinen Raspberry Pi? Wenn Sie derzeit keinen Raspberry Pi besitzen, empfehle ich Ihnen, sich einen Raspberry Pi zuzulegen
ESP-01 Programmier-Hack - der Einfache :): 6 Schritte
ESP-01 Programmierer Hack - der Einfache :): Hallo ESPer, In diesem anweisbaren zeige ich Ihnen einen einfachen Hack, um einen Programmierer für ESP-01 / ESP8266-01 / ES-01-Modul zu machen. Die meisten von uns haben ein Arduino-Board oder FTDI USB-TTL-Geräte als Programmierer für dieses Modul verwendet. Beide Methoden funktionieren gut. Aber t
Der Sanity Check: 5 Schritte (mit Bildern)
Der Sanity Check: Bei diesem Projekt dreht sich alles um die Gesundheit oder darum, dass er regelmäßig überprüft wird. Der beste Weg, dies zu erreichen, besteht darin, eine Maske zu bauen, deren Augen zufällig rot leuchten. Oft genug, damit es auffällt, aber spärlich genug, um die Leute zweifeln zu lassen
So erstellen Sie einen Smart Pot mit NodeMCU, der von der App gesteuert wird – wikiHow
So erstellen Sie einen Smart Pot mit NodeMCU, der von einer App gesteuert wird: In dieser Anleitung bauen wir einen Smart Pot, der von einem ESP32 und einer Anwendung für Smartphones (iOS und Android) gesteuert wird. Wir verwenden NodeMCU (ESP32) für die Konnektivität und die Blynk-Bibliothek für das Cloud-IoT und die Anwendung auf dem Smartphone. Endlich haben wir