Inhaltsverzeichnis:

Bewegungssensor ESP-01 mit Tiefschlaf - Gunook
Bewegungssensor ESP-01 mit Tiefschlaf - Gunook

Video: Bewegungssensor ESP-01 mit Tiefschlaf - Gunook

Video: Bewegungssensor ESP-01 mit Tiefschlaf - Gunook
Video: WLAN-Thermometer, preiswert selbst bauen 2024, November
Anonim
Image
Image

Ich habe daran gearbeitet, selbstgebaute Bewegungssensoren herzustellen, die beim Auslösen eine E-Mail-Nachricht senden. Es gibt viele Beispiel instructables und andere Beispiele dafür. Ich musste dies kürzlich mit einem batteriebetriebenen PIR-Bewegungssensor und einem ESP-01 tun. Das ESP-01 ist sehr funktional und verfügt über alle erforderlichen Funktionen. Warum also nicht das Minimum und das günstigste verwenden? Der Mischung wurde ein weiteres separates und abgesetztes ESP-01-Modul hinzugefügt, das einen Summer auslöste, wenn der Bewegungssensor ausgelöst wurde.

Der Code und das eventuelle Schaltungslayout wurden aus zahlreichen Quellen im Internet zusammengetragen und ich glaube nicht, dass ich sie spezifisch identifizieren kann. Die Idee, E-Mails über Google Mail zu senden, stammte aus einer anweisbaren und anderen Quellen und der endgültige Code ist ein Amalgam aus diesen Quellen. Der Tiefschlaf zur Arbeit führte mich auf viele Wege, die sich oft als fruchtlos erwiesen. Das Lustige daran ist, dass Sie aufhören, nach weiteren Wegen zu suchen, sobald sich ein Weg als fruchtbar erweist. Ich bedanke mich also bei allen, die zu meinem Erfolg beigetragen haben und noch unbekannt sind.

Ich hatte das gleiche Problem, den PIR-Sensor dazu zu bringen, den ESP-01-Tiefschlaf auszulösen. Viele Wege, bis es einen gab, der funktionierte.

Unnötig zu erwähnen, dass es einige interessante Hürden gab oder vielleicht noch relevanter, ein besseres Verständnis der von mir benötigten Elektronik. Du lernst so lange, bis etwas funktioniert und musst dann nicht mehr lernen.

Das ESP-01 macht Tiefschlaf sowie jedes andere ESP8266-Modul, solange Sie keinen zeitgesteuerten Schlaf benötigen. Wenn Sie möchten, dass das Modul nach einer bestimmten verstrichenen Zeit aufwacht, ist ESP-01 nicht das zu verwendende Modul. Aber das wollte ich nicht. Die verstrichene Zeit ist bei Verwendung eines PIR sinnlos. Ich wollte, dass das ESP-01 nur aufwacht, wenn es durch eine vom PIR wahrgenommene Bewegung ausgelöst wird. Wenn stunden- oder tagelang keine Bewegung wahrgenommen wird, schläft das ESP-01 mit minimaler Batterieleistung.

Sie werden viele Schaltungen sehen, die GPIO16 verwenden, die mit dem ESP8266-Reset verbunden sind, da GPIO16 das Wake-Signal ist. Dies ist wahr, aber es ist das Wecksignal aus dem zeitgesteuerten Schlaf. Wir können diese PIN ignorieren, was gut ist, da sie auf dem ESP-01 nicht verfügbar ist.

Im Grunde brauchen wir nur das Signal vom PIR, um den ESP-01 Reset-Pin auszulösen. Die erste Schwierigkeit, die Sie vermuten werden, ist, dass Reset bei einem LOW-Signal ausgelöst wird und der PIR beim Auslösen ein HIGH-Signal sendet. Reset muss auch HIGH sein oder beim Booten schweben. Um dies kurz zu halten, habe ich mich nach dem Ausprobieren einiger verschiedener Schaltungen für die Verwendung eines NPN-Transistors mit einem Pull-up-Widerstand entschieden, um den RESET-Pin während des Bootens auf HIGH zu halten. Der Ausgang des PIR ist minimal, liefert aber genügend Basisstrom, um den Transistor einzuschalten.

Wie Sie im Schaltplan unten sehen werden, wurde der ESP-01 jedes Mal aus dem Tiefschlaf geweckt, wenn der PIR eine Bewegung wahrnahm.

Aber es gab ein anderes Problem. Das Zurücksetzen des ESP-01 erfolgte erst, nachdem der PIR aufgehört hatte, Bewegung zu erkennen und zu einem niedrigen Signal zurückgekehrt war, wodurch der Transistor ausgeschaltet und der Reset-Pin aufgrund des Pullup-Widerstands auf HIGH zurückgesetzt wurde. Dies würde bedeuten, dass die E-Mail nicht gesendet wird und der Summer nicht aktiviert wird, bis der PIR aufhört, die Bewegung zu erkennen. Ich wollte, dass der Trigger ausgelöst wird, sobald eine Bewegung wahrgenommen wird.

Was ich anhand dieses Verhaltens festgestellt habe, ist, dass der ESP-01 tatsächlich auf der steigenden Flanke des Signals triggert. Das Halten des Reset-Pins auf Masse löst den ESP-01 nicht wirklich aus dem Tiefschlaf aus, aber in dem Moment, in dem die Spannung auf das HIGH-Signal ansteigt, erfolgt der Reset.

Meine sehr einfache Reaktion auf dieses Verhalten bestand darin, der Leitung zwischen dem PIR-Ausgang und der Transistorbasis einen Kondensator hinzuzufügen. Dies führte dazu, dass der Transistor nur eingeschaltet wurde, während der Kondensator aufgeladen wurde. Nach dem Aufladen gab es keinen Strom mehr und der Transistor schaltete ab. Der 5k-Widerstand lässt den Strom nach Masse abfließen. Ich habe dies mit einer LED anstelle des ESP-01 getestet und konnte sehen, wie die LED für einen Bruchteil einer Sekunde aufleuchtet, bevor sie ausgeschaltet wird. Dieser kleine Impuls reichte aus, um den Reset-Pin kurzzeitig auf Masse zu ziehen und lange genug, um den Reset aus dem Tiefschlaf auszulösen.

Schritt 1: ESP-01 Tiefschlafmodul

ESP-01 Tiefschlafmodul
ESP-01 Tiefschlafmodul
ESP-01 Tiefschlafmodul
ESP-01 Tiefschlafmodul

Das Deep-Sleep-Modul verwendet zwei Arbeitsspannungen. Die zufälligen 5V+ des Akkus für den PIR und auch eine 3,3-Volt-Reglerplatine für den ESP-01. Ich baue auch eine Diode in die Schaltung ein, um beschädigte Teile durch Sperrspannungen zu verhindern. Dies verbraucht etwas mehr Strom und senkt die Akkuspannung um 0,7 Volt. Die Diode kann aus dem Stromkreis weggelassen werden, wenn Sie sicher sind, dass Sie die Kabel des Akkupacks niemals vertauschen. Ein Schalter ist auch aus Bequemlichkeit hinzugefügt.

Dieses Modul ist eine kleine Aktualisierung meines ursprünglichen Layouts für den Nicht-Tiefschlaf. In der Nicht-Tiefschlaf-Konfiguration ist der PIR direkt mit dem RX-Pin des ESP-01 verbunden. Ich verwende den RX-Pin des ESP-01 aus einigen Gründen als Eingangspin für den PIR. GPIO0 funktionierte nicht, da die PIR-Ausgangs-PIN beim Booten LOW wäre, was dazu führte, dass das ESP-01 in den Flash-Modus wechselte. Ich habe GPIO2 nicht verwendet, weil ich dann die eingebaute LED nicht für visuelles Feedback verwenden konnte. Die RX- und TX-Pins werden oft als zusätzliche IO-Pins beschrieben, aber meiner Erfahrung nach ist RX ein zusätzlicher INPUT-Pin und TX ein zusätzlicher OUTPUT-Pin.

In der Deep-Sleep-Konfiguration ist die RX-Verbindung nicht unbedingt erforderlich. Ich verwende es nur, um zu überwachen, wie lange der PIR ausgelöst wird, indem die LED eingeschaltet wird, während der Eingang HIGH ist. Wie bereits erwähnt, ist die RX-Verbindung unnötig, wenn Sie die Loop-Funktion löschen und nur die Setup-Routine verwenden.

Hier ist die Teileliste für das ESP-01 Tiefschlafmodul:

1 - 5 x 7 cm PCB-Prototypplatine

1 - 2-poliger Stecker

2 - 1 x 3 Buchsenleisten

1 - AMS1117 - 3.3 Spannungsreglerplatine

1 - 1 x 3 rechtwinkliger Stiftleistenstift

1 - 1 x 3 Buchsenleistenstift

1 - 1 x 4 Buchsenleistenstift

1 - 2 x 4 Buchsenleiste

1 - 1uf Kondensator

1 - HC-SR501 PIR-Bewegungssensor

1 - 2N2222 Transistor

1 - 10k Widerstand

1 - 4.7k Widerstand

1 - 1k Widerstand

1 - 1N4148 Diode

1 - Schalter SS12D00G4 SPDT

1 - ESP-01

1 - 4AA Batteriepack

Bitte beachten Sie, dass die Platine im Video einen ESP-01 Breadboard-Adapter anstelle des 2 x 4 Headers verwendet. Während dieser Adapter einfacher zu löten ist, funktioniert der 2 x 4 Header gut und passt tatsächlich besser.

Schritt 2: ESP-01 Tiefschlafcode

Der Deep Sleep-Code führt zwei Funktionen aus. Senden Sie eine E-Mail-Nachricht (standardmäßig über Gmail) und senden Sie eine HTTP-Webanfrage an das zugehörige ESP-01-Summermodul, um den Summer auszulösen.

Wenn dieses Modul ausgelöst wird, bietet es zwei Benachrichtigungsoptionen und kann besonders nützlich sein, wenn Sie nicht auf E-Mail-Nachrichten achten.

Sie müssen sechs Codezeilen mit Ihren spezifischen Werten aktualisieren, damit die Skizze funktioniert:

const char* ssid = "xxxxx"; // Ihr WLAN SSIDconst char* Passwort = "xxxxx"; // Ihr WLAN-Passwort String Senders_Login = "xxxxx"; // Login Ihres E-Mail-Anbieters String Senders_Password = "xxxxx"; // Ihr E-Mail-Provider-Passwort

An = "xxxxxx"; Von = "xxxxxx"; // Gmail bevorzugt im Allgemeinen, dass dies mit Senders_Login identisch ist und kann es ersetzen

Ich habe festgestellt, dass das Tiefschlafmodul unvorhersehbar funktioniert, wenn der PIR-Sensor für die Dauer des Triggerereignisses auf unter 10 Sekunden eingestellt wurde. Ich habe meine auf 20 Sekunden eingestellt. Dies hat sich als sehr zuverlässig erwiesen, bedeutet aber auch, dass auslösende Ereignisse mit dieser Häufigkeit auftreten können.

Ich habe der Schleifenfunktion auch Code hinzugefügt, um die ESP-01-LED so lange eingeschaltet zu lassen, wie der PIR noch Bewegung erkennt. Der gesamte Code in der Loop-Funktion kann entfernt und der Aufruf zum Tiefschlaf an das Ende der Setup-Funktion verschoben werden.

Ich verwende die Blinkfunktion für eine visuelle Aktivitätsanzeige mit dem ESP-01-Modul.

Während ich die Konnektivität mit Google Mail verwendet und getestet habe, funktionieren auch andere E-Mail-Anbieter. Ich habe ein paar ausprobiert. Tatsächlich fand ich Google Mail schwieriger. Gmail erfordert, dass Ihr Konto für den Zugriff durch weniger sichere Apps konfiguriert ist. Diese Kontoeinstellung ist standardmäßig deaktiviert, also stellen Sie sicher, dass Sie sie finden und ändern Sie sie in weniger sicher. Gmail funktioniert sonst NICHT.

Wenn Sie sich für mehr als ein Summermodul entscheiden, fügen Sie einfach zusätzliche Aufrufe des http-Clients hinzu (wiederholen Sie die drei Codezeilen, ändern Sie jedoch die verwendete IP-Adresse und definieren Sie die Variable httpCode nur einmal als int!

Beachten Sie, dass die IP-Adresse des Summers in diesem Modul fest codiert ist. Sie müssen nicht die von mir gewählte IP-Adresse verwenden, aber Sie müssen die IP-Adresse des Webaufrufs in diesem Modul mit der IP-Adresse des Webserver-Setups im nächsten Modul abgleichen.

Schritt 3: ESP-01 Summermodul

ESP-01 Summermodul
ESP-01 Summermodul
ESP-01 Summermodul
ESP-01 Summermodul
ESP-01 Summermodul
ESP-01 Summermodul

Das Summermodul hat ein ziemlich einfaches Setup. Es verwendet einen USB-Anschluss anstelle eines Akkus, da dieses Modul meiner Meinung nach nicht für einen Akku geeignet ist. Es muss ständig eingeschaltet und mit dem Netzwerk/WLAN verbunden bleiben, da es nie weiß, wann eine Webanfrage gestellt wird. Dies erfordert mehr kontinuierliche Leistung, als Akkupacks nützlich sind.

Buzzer-Module können bequem an mehreren Orten platziert werden und informieren über ein Bewegungssensor-Auslöseereignis, egal wo Sie sich befinden!

Der Summer ist an die 5V des USB-Anschlusses angeschlossen und es gibt eine weitere 3,3-V-Reglerplatine, die den ESP-01 mit Strom versorgt.

Das Summermodul funktioniert mit TX, GPIO0 oder GPIO2 für den Ausgang. In meiner Konfiguration verwende ich GPIO0. (Im Bild des Moduls ist das Kabel mit GPIO2 verbunden, aber ich habe es seitdem verschoben.) Während GPIO0 für das Tiefschlafmodul (als INPUT) nicht funktionierte, funktioniert es mit diesem Layout als OUTPUT gut. Es wird beim Booten nicht auf den Boden gezogen, was zu Problemen führen kann. Ich habe GPIO2 verwendet, aber dann konnte ich die Onboard-LED nicht für Feedback verwenden, aber mit GPIO0 für OUTPUT kann ich die Onboard-LED verwenden.

Ich habe versucht, einen NPN-Transistor zu verwenden, um den Summer in der Schaltung mit Strom zu versorgen, als der ESP-01 ein HIGH-Signal an den GPIO0-Pin legte, aber die Ergebnisse waren schrecklich inkonsistent. Der Summer schien die ganze Zeit ertönen zu wollen, selbst bei sehr geringer Leistung. Stattdessen habe ich einen N-Kanal-MOSFET (2n7000) verwendet und das Ergebnis war großartig. Der IO-Pin steuert das Gate nach Bedarf an.

Während wir nur zwei Pins vom USB-Anschluss Vcc (+) und Gnd (-) benötigen, verwende ich einen 5-Pin-Header, um eine Verbindung zur Platine für zusätzliche Stabilität und zum Löten herzustellen, bevor ich den USB an den Regler anschließe. Meine 3,3-V-Reglerplatine wurde mit vorinstallierten Pins und in meinem Kopf verkehrt herum geliefert. Um den Regler in die Header-Pins zu stecken, können Sie sehen, dass die Platine versteckt ist, aber schlimmer noch, vcc und gnd am Regler sind von vcc und gnd am USB-Anschluss umgekehrt. Die Drähte kreuzen sich also.

Beachten Sie auch, dass + Strom für den aktiven Summer von den 5 V des USB kommt. Außerdem funktioniert eine 4-polige Buchsenleiste gut mit der Pinplatzierung des Summers.

Teileliste des ESP-01 Summermoduls:

1 - 5 x 7 PCB-Platine

1 - USB-Mini-Anschluss mit Stiftleisten (7-polig)

2 - 1 x 3 Buchsenleisten

1 - AMS1117-3,3 V Spannungsreglerplatine

1 - 2 x 4 Buchsenleiste

2 - 1 x 4 Buchsenleisten

1 - 2N7000 N-Kanal-MOSFET

1 - 10 Ohm Widerstand

1 - 5v aktiver Summer

Schritt 4: ESP-01 Summermodul-Code

Das Summermodul fungiert als einfacher ESP-01-Webserver. Es antwortet mit einer einfachen Nachricht auf eine Root-Anfrage und wenn es die Buzz-Anfrage erhält, wird der Summer ausgelöst. GPIO0 wird für den GPIO-Pin für das Summersignal verwendet.

Beachten Sie, dass das ESP-01 mit einer hartcodierten IP-Adresse konfiguriert ist. Dies ist erforderlich, damit das Tiefschlafmodul mit der Summeradresse gekoppelt wird.

Wie im vorherigen Modul müssen Sie zwei Codezeilen mit Ihren spezifischen Werten aktualisieren:

//SSID und Passwort Ihres WLAN-Routersconst char* ssid = "xxxxxxx";

const char* Passwort = "xxxxxxxx";

Wenn Sie mehrere Summermodule erstellt haben, sollte jedes mit seiner eigenen eindeutigen IP-Adresse geladen werden.

Sie können auch verschiedene Buzz-Methoden hinzufügen, die unterschiedliche Buzzer-Melodien erzeugen. Wenn Sie beispielsweise einen PIR-Sensor an der Vordertür und einen an der Hintertür haben, können sie jeweils eine Webanfrage an jedes Ihrer Summermodule senden, aber ein Sensor hat möglicherweise eine Skizze, die Buzz aufruft, und die andere Skizze kann Buzz2 aufrufen damit Sie anhand des Tons erkennen können, welcher Sensor ausgelöst wurde. Und so weiter und so weiter! Die Buzz2-Funktion existiert nicht, aber kopieren Sie einfach die Buzz-Funktion und ändern Sie die Verzögerungswerte.

Für den Webserver müssten Sie nur eine Codezeile wie diese hinzufügen:

server.on("/buzz2", Summen2);

Schritt 5: Abschließende Gedanken

Dies ist mein erstes instructable, also habe ich möglicherweise einige praktische Dinge verpasst, die ich hätte aufnehmen sollen. Die von mir verwendete Reglerplatine AMS1117-3.3 enthält eine kleine LED, die beim Einschalten aufleuchtet. Für das Tiefschlafmodul wollte ich nicht, dass diese LED eingeschaltet ist und unnötig Strom verbraucht. Also entlötete ich, was ich auf einer Seite der LED auf der Platine konnte, und benutzte dann ein Cuttermesser, um die Spurlinie zu schneiden. Das war einfacher als ich dachte und verhindert das Aufleuchten der LED. Ich konnte nicht feststellen, wie hoch der Stromverbrauch ist, wenn sich der ESP-01 im Tiefschlaf befindet, aber vielleicht habe ich in ein paar Wochen eine Antwort. Ein Kollege von mir ließ den Sensor laufen (nicht im Tiefschlaf) und stellte fest, dass die Batterien (5AA) in etwa einer Woche leer waren. Ich denke, dieses Setup sollte einen Monat oder sogar mehr geben. Wir werden sehen.

Das Deep-Sleep-Modul kostete in Teilen ca. 8 US-Dollar (Batterien nicht im Lieferumfang enthalten!) und das Summermodul 5 US-Dollar.

Empfohlen: