Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Schaltpläne & Quellcode
- Schritt 2: Funktionsweise der Schaltung
- Schritt 3: Gesundheitscheck
- Schritt 4: Leistungsmessungen und Batterielebensdauer
- Schritt 5: Zukünftige Verbesserungen
Video: Drahtloser Türsensor - Ultra Low Power - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Noch ein Türsensor !! Nun, die Motivation für mich, diesen Sensor zu entwickeln, war, dass viele, die ich im Internet gesehen habe, die eine oder andere Einschränkung hatten. Einige der Ziele des Sensors für mich sind:
1. Der Sensor sollte sehr schnell sein - vorzugsweise weniger als 5 Sek.
2. Der Sensor sollte mit einer 3,7-V-Lithium-Ionen-Batterie betrieben werden, da ich Dutzende davon herumliegen habe
3. Der Sensor sollte mit einer einzigen Akkuladung viele Monate laufen. Es sollte im Schlafmodus < 10uA verbrauchen
4. Der Sensor sollte in der Lage sein, kritische Daten wie den Batteriestatus zu übermitteln, auch wenn die Tür längere Zeit nicht bedient wird.
5. Der Sensor soll sowohl beim Öffnen der Tür als auch beim Schließen der Tür Daten an ein MQTT-Thema senden
6. Der Sensor sollte unabhängig vom Zustand der Tür gleich viel Strom verbrauchen
Funktionsweise des Sensors:
Der Sensor hat 2 Hauptcontroller. Der erste ist der winzige Mikrocontroller ATiny 13A. Das zweite ist das ESP, das sich normalerweise im Schlafmodus befindet und nur aufwacht, wenn der ATiny es aktiviert. Die gesamte Schaltung kann auch nur durch das ESP im Schlafmodus hergestellt werden, aber der Strom, den es verbraucht, ist weitaus höher als für eine Batterie benötigt, um monatelang zu halten, so dass der ATTiny zur Rettung kommt. Es dient nur dazu, alle N Sekunden aufzuwachen, nach einem Türereignis oder einem Health-Check-Ereignis zu suchen, falls vorhanden, hält es den CH_PD-Pin des ESP auf HIGH und sendet das entsprechende Signal des Ereignistyps an das ESP. Dort endet seine Rolle.
Das ESP übernimmt dann, liest den Signaltyp aus, verbindet sich mit WiFi/MQTT, veröffentlicht die erforderlichen Meldungen inklusive Batteriestand und schaltet sich dann selbst AUS, indem es den EN-Pin wieder auf LOW bringt.
Durch die Verwendung dieser Chips auf diese Weise nutze ich den niedrigen Ruhestrom des ATtiny und den Null-Leerlaufstrom des ESP, wenn der Chip über den CH_PD-Pin deaktiviert wird.
Lieferungen
Vorab:
- Kenntnisse in der Programmierung eines ATTiny & ESP 01
- Kenntnisse im Löten von Bauteilen auf einer Leiterplatte
ESP-01 (oder irgendein ESP)
ATTiny 13A - AVR
LDO 7333-A - Low-Dropout-Spannungsregler
Widerstände - 1K, 10K, 3K3
Kondensatoren: 100uF, 0,1 uF
Druckknopfschalter, Mikro-EIN/AUS-Schalter - (beide optional)
Diode - IN4148 (oder gleichwertig)
Li-Ionen-Akku
Reed-Schalter
Ein Fall, um alles zu beherbergen
Löten, PCB usw.
Schritt 1: Schaltpläne & Quellcode
Der Schaltplan ist wie im beigefügten Diagramm gezeigt.
Ich habe einen P-Kanal-MOSFET zum Verpolungsschutz eingebaut. Wenn Sie dies nicht benötigen, können Sie es weglassen. Jeder P-Kanal-MOSFET mit einem niedrigen Rds-ON ist ausreichend.
Derzeit verfügt das ESP nicht über die Fähigkeit von OTA, aber das ist für zukünftige Verbesserungen.
Quellcode Smart-Tür-Sensor
Schritt 2: Funktionsweise der Schaltung
ATTiny Arbeitsablauf
Die Magie passiert hier darin, wie der ATTiny die Position des Türschalters überwacht.
Die normale Option wäre, einen Pull-Up-Widerstand an den Schalter anzuschließen und seinen Zustand weiter zu überwachen. Dies hat den Nachteil, dass der Pull-Up-Widerstand konstanten Strom verbraucht. Dies wurde hier vermieden, indem ich zwei Pins verwendet habe, um den Schalter zu überwachen, anstatt einen. Ich habe hier PB3 & PB4 verwendet. PB3 ist als Eingang und PB4 als Ausgang mit einem internen INPUT_PULLUP auf PB3 definiert. Normalerweise wird PB4 auf HIGH gehalten, wenn sich ATtiny im Schlafmodus befindet. Dies stellt sicher, dass unabhängig von der Position des Reed-Schalters kein Strom durch den Eingangs-Pull-Up-Widerstand fließt. dh. Wenn der Schalter geschlossen ist, sind sowohl PB3 als auch PB4 HIGH und daher fließt kein Strom zwischen ihnen. Wenn der Schalter geöffnet ist, gibt es keinen Weg zwischen ihnen und somit ist der Strom Null. Wenn der ATtiny aufwacht, schreibt er einen LOW auf PB4 und überprüft dann den Zustand von PB3. Wenn PB3 HIGH ist, ist der Reed-Schalter OFFEN, sonst GESCHLOSSEN. Es schreibt dann ein HIGH auf PB4 zurück.
Die Kommunikation zwischen ATtiny & ESP erfolgt über zwei Pins PB1 / PB2, die mit Tx/RX des ESP verbunden sind. Ich habe das Signal definiert als
PB1 PB2 ====== Tx Rx
0 0 ====== WAKE_UP (Gesundheitscheck)
0 1 ====== SENSOR_OPEN
1 0 ====== SENSOR_GESCHLOSSEN
1 1 ====== UNBENUTZT
Neben dem Senden des Signals an den ESP sendet er auch einen HIGH-Impuls an PB0, der mit dem ESP CH_PD-Pin verbunden ist. Dadurch wird das ESP geweckt. Das erste, was ESP tut, hält GPIO0 HIGH, das mit CH_PD verbunden ist, um sicherzustellen, dass es hochfährt, auch wenn der ATTiny das PB0 HIGH wegnimmt. Die Steuerung liegt jetzt beim ESP, um zu bestimmen, wann es herunterfahren möchte.
Es verbindet sich dann mit WiFi, MQTT, postet die Nachricht und schaltet sich selbst aus, indem es LOW auf GPIO0 schreibt.
ESP 01 Arbeitsablauf:
ESP-Fluss ist geradlinig. Es wacht auf und liest die Werte der Tx/Rx-Pins, um zu bestimmen, welche Art von Nachricht gesendet werden soll. Verbindet sich mit WiFi und MQTT, sendet die Nachricht und schaltet sich selbst aus.
Vor dem Herunterfahren überprüft es erneut die Werte der Eingangspins, um zu sehen, ob sie sich seit dem letzten Lesen geändert haben. Dieser sorgt für ein schnelles Öffnen und Schließen der Tür. Wenn Sie diese Prüfung nicht haben, können Sie in einigen Fällen das Schließen der Tür verpassen, wenn sie innerhalb von 5-6 Sekunden nach dem Öffnen geschlossen wird. Ein praktisches Szenario, in dem die Tür innerhalb von etwa 2 Sekunden geöffnet und geschlossen wird, wird durch die while-Schleife gut erfasst, die die Nachrichten so lange postet, wie sich der aktuelle Zustand der Tür vom vorherigen unterscheidet. Das einzige Szenario, in dem möglicherweise nicht alle Öffnungs-/Schließvorgänge aufgezeichnet werden, ist, wenn die Tür innerhalb eines 4-5-Sekunden-Fensters wiederholt geöffnet/geschlossen wird, was ein sehr unwahrscheinlicher Fall ist - wahrscheinlich ein Fall, in dem ein Kind mit der Tür spielt.
Schritt 3: Gesundheitscheck
Ich brauchte auch eine Möglichkeit, eine Gesundheitsprüfungsnachricht vom ESP zu erhalten, bei der auch der Batteriestand des ESP gesendet wird, um sicherzustellen, dass der Sensor ohne manuelle Inspektion einwandfrei funktioniert. Dazu sendet der ATTiny alle 12 Stunden ein WAKE_UP-Signal. Er kann über die Variable WAKEUP_COUNT im ATtiny-Code konfiguriert werden. Dies ist sehr nützlich bei Türen oder Fenstern, die selten geöffnet werden und Sie möglicherweise nicht wissen, ob mit dem Sensor oder seiner Batterie jemals etwas nicht stimmt.
Falls Sie die Integritätsprüfungsfunktion nicht benötigen, ist das gesamte Konzept der Verwendung von ATTiny nicht erforderlich. In diesem Fall finden Sie andere Designs, die von Leuten erstellt wurden, bei denen die Versorgung des ESP über einen MOSFET erfolgt und so eine Stromaufnahme von Null erreicht wird, wenn die Tür nicht betätigt wird. Es gibt andere Dinge zu beachten, wie zum Beispiel, dass die Stromaufnahme in der Türöffnungs- und Türschließposition gleich ist - dafür habe ich irgendwo ein Design gesehen, das einen 3-Zustands-Reed-Schalter anstelle des üblichen 2-Zustands verwendet.
Schritt 4: Leistungsmessungen und Batterielebensdauer
Ich habe den Stromverbrauch der Schaltung gemessen und er dauert beim Schlafen und in der Nähe ~30uA. Nach den Datenblättern von ATTiny sollte es für die gesamte Schaltung einschließlich Ruhestrom des LDO etwa 1-4 uA betragen, aber dann zeigen meine Messungen 30. Der MOSFET und LDO verbrauchen unbedeutenden Strom.
Ein 800mAH Akku sollte also lange halten. Ich habe keine genauen Statistiken, aber ich benutze es jetzt seit mehr als einem Jahr an 2 meiner Türen und jede 18650-Zelle mit etwa 800 mAh hält ungefähr 5-6 Monate an meiner Haupttür, die sich um öffnet und schließt mindestens 30 mal am Tag. Die an der Dachtür, die sich nur wenige Male in der Woche öffnet, hält 7-8 Monate.
Schritt 5: Zukünftige Verbesserungen
1. Der ESP bestätigt die Zustellung der MQTT-Nachricht nicht. Das Programm kann verbessert werden, indem das Thema abonniert wird, in dem die Nachricht veröffentlicht wird, um die Zustellung zu bestätigen, oder eine Async-MQTT-Bibliothek kann verwendet werden, um eine Nachricht mit QoS 1 zu posten.
2. OTA-Update: Der ESP-Code kann geändert werden, um ein MQTT-Thema für ein Update zu lesen und so in einen OTA-Modus zu wechseln, um eine Datei zu empfangen.
3. ESP01 kann durch ESP-12 ersetzt werden, um Zugriff auf mehr Eingabe-PINs zu erhalten und so mehr Sensoren daran anzuschließen. In diesem Fall ist eine Kommunikation über das 2-Bit-Verfahren nicht möglich. Dies kann dann verbessert werden, um die I2C-Kommunikation zwischen ATtiny und ESP zu implementieren. Das ist etwas kompliziert, aber machbar. Ich habe es in einem anderen Setup, bei dem ein ATTiny Drehgeberwerte über die I2C-Leitung an das ESP sendet.
4. Der Stromkreis überwacht die interne Vcc des ESP. Wenn wir ESP12 verwenden, kann dies geändert werden, um den tatsächlichen Batteriestand über den ADC-Pin zu lesen.
5. In Zukunft werde ich auch eine Modifikation dazu posten, die als Standalone-Sensor verwendet werden kann, ohne dass ein MQTT oder ein Heimautomationssystem erforderlich ist. Der Sensor arbeitet eigenständig und kann bei Auslösung einen Anruf tätigen - dafür benötigt er natürlich eine Internetverbindung.
6. Und die Liste geht weiter…
7. Verpolter Batterieschutz - FERTIG (Die tatsächlichen Gerätebilder sind alt und spiegeln daher nicht den MOSFET wider)