Inhaltsverzeichnis:
- Schritt 1: Kennenlernen des Ultraschall-Distanzsensors
- Schritt 2: Wahl des ESP8266 Boards
- Schritt 3: Erstellen Sie einen ThingSpeak-Kanal
- Schritt 4: Programmieren des ESP-12F
- Schritt 5: Hochladen der Skizze
- Schritt 6: Aufbau der elektronischen Schaltung
- Schritt 7: Fertigstellen des Sensors
Video: Batteriebetriebener Wassersammler-Niveausensor - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Unser Haus verfügt über einen Wassertank, der vom auf das Dach fallenden Regen gespeist wird und für die Toilette, die Waschmaschine und die Bewässerung der Pflanzen im Garten verwendet wird. Die letzten drei Jahre waren die Sommer sehr trocken, deshalb haben wir den Wasserstand im Tank im Auge behalten. Bisher haben wir einen Holzstab verwendet, den wir in den Tank gesteckt und den Füllstand markiert. Aber das muss doch sicher noch verbessert werden können!
Hier kommt dieses Projekt ins Spiel. Die Idee ist, einen Ultraschall-Abstandssensor oben am Tank anzubringen. Dieser Sensor arbeitet als Sonar, das Schallwellen aussendet, die dann von der Wasseroberfläche reflektiert werden. Aus der Zeit bis die Wellen zurückkommen und der Schallgeschwindigkeit können Sie die Entfernung zur Wasseroberfläche berechnen und feststellen, wie voll der Tank ist.
Da ich keinen Netzanschluss in der Nähe des Tanks habe, ist es wichtig, dass das komplette Gerät mit Batterien funktioniert. Das bedeutet, dass ich mir den Stromverbrauch aller Teile bewusst sein musste. Um die Daten zurückzusenden, entschied ich mich, das eingebaute Wifi eines ESP8266-Mikrochips zu verwenden. Obwohl das Wifi ziemlich stromhungrig ist, hat es einen Vorteil gegenüber einer anderen Art von Funkverbindung: Sie können sich direkt mit dem WLAN-Router Ihres Hauses verbinden, ohne ein weiteres Gerät bauen zu müssen, das als Relais fungiert.
Um Strom zu sparen, werde ich den ESP8266 die meiste Zeit in den Tiefschlaf versetzen und jede Stunde eine Messung durchführen. Für meinen Zweck, den Wasserstand zu verfolgen, reicht dies mehr als aus. Die Daten werden an ThingSpeak gesendet und können dann über eine App auf einem Smartphone ausgelesen werden.
Noch ein Detail! Die für die Entfernungsmessung wesentliche Schallgeschwindigkeit hängt von der Temperatur und in geringerem Maße von der Luftfeuchtigkeit ab. Für eine genaue Außenmessung über die Jahreszeiten haben wir einen BME280-Sensor eingebaut, der Temperatur, Luftfeuchtigkeit und Druck misst. Als Bonus macht dies aus unserem Wasserstandssensor auch eine Mini-Wetterstation.
Teile:
- 1x ESP8266 ESP-12F.
- 1x ESP-12F Adapterplatte.
- 1x FT232RL FTDI: USB-zu-Seriell-Adapter.
- 1x HC-SR04-P: Ultraschall-Entfernungsmessmodul. Beachten Sie, dass das P wichtig ist, da dies die Version ist, die eine niedrige minimale Betriebsspannung von 3 V hat.
- 1x BME280 3.3V Version: Temperatur-, Druck- und Feuchtigkeitssensor.
- 1x IRL2203N: n-Kanal-MOSFET-Transistor.
- 1x MCP1700-3302E 3.3V Version: Spannungsregler.
- 3x wiederaufladbare AA-Batterie, z. B. 2600mAh.
- 1x Batteriehalter für 3 Batterien.
- 1x Steckbrett.
- Widerstände: 1x 470K, 1x 100K, 4x 10K.
- Kondensatoren: 2x Keramik 1uF.
- 3x Kippschalter.
- U-förmige Steckbrettdrähte.
- Überbrückungsdrähte.
- Suppenbehälter aus Kunststoff 1l.
- Befestigungsring für den Behälter.
Ich habe den Code auf GitHub zur Verfügung gestellt.
Schritt 1: Kennenlernen des Ultraschall-Distanzsensors
Den Abstand zur Wasseroberfläche messen wir mit einem Ultraschallsensor, dem HC-SR04-P. Genau wie eine Fledermaus verwendet dieser Sensor ein Sonar: Er sendet einen Schallimpuls mit einer für das menschliche Ohr zu hohen Frequenz, also Ultraschall, und wartet darauf, dass er auf ein Objekt trifft, reflektiert und zurückkommt. Die Entfernung kann dann aus der Zeit bis zum Empfang des Echos und der Schallgeschwindigkeit berechnet werden.
Konkret, wenn der Trig-Pin für mindestens 10 μs hochgezogen wird, sendet der Sensor einen Burst von 8 Impulsen mit einer Frequenz von 40 Hz. Die Antwort wird dann auf dem Echo-Pin in Form eines Impulses mit einer Dauer erhalten, die der Zeit zwischen dem Senden und Empfangen des Ultraschallimpulses entspricht. Dann müssen wir durch 2 dividieren, da der Ultraschallimpuls hin und her geht und wir die Einweglaufzeit benötigen, und mit der Schallgeschwindigkeit multiplizieren, die etwa 340 m/s beträgt.
Aber warte eine Minute! Tatsächlich hängt die Schallgeschwindigkeit von der Temperatur und in geringerem Maße von der Luftfeuchtigkeit ab. Bin ich pingelig oder ist das relevant? Mit einem Berechnungstool stellen wir fest, dass wir im Winter (bei -5 °C) 328,5 m/s und im Sommer (bei 25 °C) 347,1 m/s haben könnten. Angenommen, wir finden eine einfache Reisezeit von 3 ms. Im Winter wären das 98,55 cm und im Sommer 104,13 cm. Das ist schon ein Unterschied! Um also über die Jahreszeiten und sogar Tag und Nacht eine ausreichende Genauigkeit zu erhalten, müssen wir unserem Setup ein Thermometer hinzufügen. Ich habe mich für den BME280 entschieden, der Temperatur, Luftfeuchtigkeit und Druck misst. Im Code habe ich in der Funktion speedOfSound eine Formel verwendet, die die Schallgeschwindigkeit in Bezug auf alle drei Parameter berechnet, obwohl die Temperatur wirklich der wichtigste Faktor ist. Die Feuchtigkeit hat noch einen geringeren Einfluss, aber der Einfluss des Drucks ist vernachlässigbar. Wir könnten eine einfachere Formel verwenden, die nur die Temperatur berücksichtigt, die ich in speedOfSoundSimple implementiert habe.
Beim HC-SR04 gibt es noch einen weiteren wichtigen Punkt. Es stehen zwei Versionen zur Verfügung: Die Standardversion arbeitet mit 5V, während der HC-SR04-P mit einem Spannungsbereich von 3V bis 5V betrieben werden kann. Da die 3 wiederaufladbaren AA-Batterien etwa 3x1,25V=3,75V liefern, ist es wichtig, die P-Version zu kaufen. Einige Verkäufer senden möglicherweise das falsche. Schauen Sie sich also die Bilder an, wenn Sie einen kaufen. Die beiden Versionen sehen sowohl hinten als auch vorne unterschiedlich aus, wie auf dieser Seite erklärt. Auf der Rückseite sind bei der P-Version alle drei Chips horizontal, bei der Standard-Version einer vertikal. An der Front hat die Standardversion eine zusätzliche silberne Komponente.
In der elektronischen Schaltung verwenden wir einen Transistor als Schalter, um die Stromversorgung des Ultraschallsensors auszuschalten, wenn unser Setup in den Tiefschlaf wechselt, um die Batterielebensdauer zu sparen. Andernfalls würde es immer noch etwa 2 mA verbrauchen. Der BME280 hingegen verbraucht im inaktiven Zustand nur ca. 5 µm, sodass ein Abschalten mit dem Transistor nicht notwendig ist.
Schritt 2: Wahl des ESP8266 Boards
Um den Sensor möglichst lange mit einer Batterie zu betreiben, müssen wir beim Stromverbrauch sparen. Das Wifi des ESP8266 bietet zwar eine sehr bequeme Möglichkeit, unseren Sensor mit der Cloud zu verbinden, ist aber auch ziemlich stromhungrig. Im Betrieb verbraucht der ESP8266 ca. 80mA. Mit Akkus von 2600 mAh könnten wir unser Gerät also nur maximal 32 Stunden betreiben, bevor sie leer sind. In der Praxis wird es weniger sein, da wir nicht die volle Kapazität von 2600 mAh nutzen können, bevor die Spannung auf ein zu niedriges Niveau sinkt.
Zum Glück hat der ESP8266 auch einen Deep-Sleep-Modus, in dem fast alles ausgeschaltet ist. Der Plan ist also, den ESP8266 die meiste Zeit in den Tiefschlaf zu versetzen und ihn immer wieder aufzuwecken, um eine Messung durchzuführen und die Daten über das Wifi an ThingSpeak zu senden. Laut dieser Seite lag die maximale Tiefschlafzeit bei etwa 71 Minuten, aber seit dem ESP8266 Arduino Core 2.4.1 ist sie auf etwa 3,5 Stunden angestiegen. In meinem Code habe ich mich für eine Stunde entschieden.
Ich habe zuerst das praktische NodeMCU-Entwicklungsboard ausprobiert, aber schade, im Tiefschlaf verbraucht es immer noch etwa 9 mA, was uns höchstens 12 Tage reinen Tiefschlaf beschert, ohne die Aufwachintervalle zu berücksichtigen. Ein wichtiger Schuldiger ist der Spannungsregler AMS1117, der Strom verbraucht, auch wenn Sie versuchen, ihn zu umgehen, indem Sie den Akku direkt an den 3,3-V-Pin anschließen. Auf dieser Seite wird erklärt, wie Sie den Spannungsregler und den USB-UART entfernen. Das habe ich jedoch nie geschafft, ohne mein Board zu zerstören. Darüber hinaus können Sie nach dem Entfernen des USB-UART keine Verbindung mehr zum ESP8266 herstellen, um herauszufinden, was schief gelaufen ist.
Die meisten ESP8266-Entwicklungsboards scheinen den verschwenderischen Spannungsregler AMS1117 zu verwenden. Eine Ausnahme bildet die WEMOS D1 mini (Bild links), die mit dem sparsameren ME6211 ausgeliefert wird. Tatsächlich habe ich festgestellt, dass der WEMOS D1 mini im Tiefschlaf etwa 150 μA verbraucht, was eher so ist. Das meiste davon liegt wahrscheinlich am USB-UART. Bei dieser Platine müssen Sie die Header für die Pins jedoch selbst verlöten.
Viel besser geht es jedoch mit einem Barebone-Board wie dem ESP-12F (Bild rechts), das weder über einen USB-UART noch über einen Spannungsregler verfügt. Beim Einspeisen des 3,3-V-Pins stellte ich einen Tiefschlafverbrauch von nur 22 μA fest!
Aber um den ESP-12F zum Laufen zu bringen, bereiten Sie sich auf einige Lötarbeiten und etwas mehr Mühe beim Programmieren vor! Sofern die Batterien nicht direkt die richtige Spannung liefern, die zwischen 3 V und 3,6 V liegt, müssen wir unseren eigenen Spannungsregler bereitstellen. In der Praxis erweist es sich als schwierig, ein Batteriesystem zu finden, das über seinen vollen Entladezyklus eine Spannung in diesem Bereich liefert. Denken Sie daran, dass wir auch den HC-SR04-P-Sensor mit Strom versorgen müssen, der theoretisch mit einer Spannung von nur 3 V funktionieren kann, aber genauer funktioniert, wenn die Spannung höher ist. Außerdem wird in meinem Diagramm der HC-SR04-P von einem Transistor eingeschaltet, der einen kleinen zusätzlichen Spannungsabfall induziert. Wir verwenden den Spannungsregler MCP1700-3302E. Die maximale Eingangsspannung beträgt 6V, daher speisen wir es mit bis zu 4 AA-Batterien. Ich habe mich für 3 AA-Batterien entschieden.
Schritt 3: Erstellen Sie einen ThingSpeak-Kanal
Wir verwenden ThingSpeak, einen IoT-Cloud-Dienst, um unsere Daten zu speichern. Gehen Sie zu https://thingspeak.com/ und erstellen Sie ein Konto. Sobald Sie eingeloggt sind, klicken Sie auf die Schaltfläche Neuer Kanal, um einen Kanal zu erstellen. Geben Sie in den Kanaleinstellungen den Namen und die Beschreibung nach Belieben ein. Als nächstes benennen wir die Kanalfelder und aktivieren sie durch Anklicken der Checkboxen rechts. Wenn Sie meinen Code unverändert verwenden, sind die Felder wie folgt:
- Feld 1: Wasserstand (cm)
- Feld 2: Batteriestand (V)
- Feld 3: Temperatur (°C)
- Feld 4: Luftfeuchtigkeit (%)
- Feld 5: Druck (Pa)
Notieren Sie sich zum späteren Nachschlagen die Channel ID, den Read API Key und den Write API Key, die im Menü API Keys zu finden sind.
Per App können Sie die ThingSpeak-Daten auf Ihrem Smartphone auslesen. Auf meinem Android-Handy verwende ich das IoT ThingSpeak Monitor-Widget. Sie müssen es mit der Channel ID und dem Read API Key konfigurieren.
Schritt 4: Programmieren des ESP-12F
Wir brauchen ein Bare-Bones-Board, um Akkulaufzeit zu sparen, aber der Nachteil ist, dass es etwas schwieriger zu programmieren ist als ein Entwicklungsboard mit integriertem USB-UART.
Wir verwenden die Arduino-IDE. Es gibt andere Instructables, die erklären, wie man es benutzt, also werde ich mich hier kurz fassen. Die Schritte, um es für den ESP8266 vorzubereiten, sind:
- Laden Sie die Arduino-IDE herunter.
- Installieren Sie die Unterstützung für die ESP8266-Platine. Fügen Sie im Menü Datei - Einstellungen - Einstellungen die URL https://arduino.esp8266.com/stable/package_esp8266com_index.json zu Additional Board Manager URLs hinzu. Als nächstes im Menü Tools - Board - Boards Manager installieren Sie esp8266 by esp8266 community.
- Wählen Sie als Board: Generic ESP8266 Module.
Für die Handhabung des ESP-12F habe ich eine Adapterplatte verwendet, die üblicherweise in Online-Shops erhältlich ist. Ich lötete den Chip an die Platte und lötete dann die Header an die Platte. Erst dann habe ich festgestellt, dass die Adapterplatte für ein Standard-Steckbrett zu breit ist! Es lässt keine freien Pins an der Seite, um Ihre Verbindungen herzustellen.
Die Lösung, die ich gewählt habe, besteht darin, U-förmige Drähte zu verwenden und sie wie im Bild rechts zu verbinden, bevor Sie den ESP8266 mit der Adapterplatte auf das Steckbrett legen. So werden GND und VCC mit den Schienen des Steckbretts verbunden und die restlichen Pins werden weiter unten auf dem Steckbrett verfügbar gemacht. Der Nachteil ist, dass Ihr Steckbrett ziemlich mit Drähten überfüllt ist, sobald Sie den kompletten Stromkreis abgeschlossen haben. Eine andere Lösung besteht darin, zwei Steckbretter zusammenzusetzen, wie in diesem Video gezeigt.
Um den ESP-12F über den USB-Port Ihres Computers zu programmieren, benötigen wir als nächstes einen USB-Seriell-Adapter. Ich habe den FT232RL FTDI-Programmierer verwendet. Der Programmierer verfügt über einen Jumper zur Auswahl zwischen 3,3 V oder 5 V. Es sollte für den ESP8266 auf 3,3 V gestellt werden. Vergessen Sie es nicht, da 5V Ihren Chip braten könnten! Die Installation der Treiber sollte automatisch erfolgen, aber wenn die Programmierung nicht funktioniert, können Sie versuchen, sie manuell von dieser Seite aus zu installieren.
Der ESP8266 verfügt über einen Programmiermodus zum Hochladen neuer Firmware auf den Flash und einen Flash-Modus zum Ausführen der aktuellen Firmware aus dem Flash-Speicher. Um zwischen diesen Modi wählen zu können, müssen einige Pins beim Booten einen bestimmten Wert annehmen:
- Programmierung: GPIO0: niedrig, CH-PD: hoch, GPIO2: hoch, GPIO15: niedrig
- Flash: GPIO0: hoch, CH-PD: hoch, GPIO2: hoch, GPIO15: niedrig
Die Adapterplatte kümmert sich bereits um das Hochziehen von CH-PD und das Herunterziehen von GPIO15 mit 10K-Widerständen.
In unserer elektronischen Schaltung müssen wir also noch GPIO2 hochziehen. Wir bieten auch einen Schalter, um den ESP8266 in den Programmier- oder Flash-Modus zu versetzen und einen Schalter, um ihn zurückzusetzen, was durch Verbinden von RST mit Masse erfolgt. Stellen Sie außerdem sicher, dass Sie den TX-Pin des FT232RL mit dem RXD-Pin des ESP8266 verbinden und umgekehrt.
Der Programmierablauf ist wie folgt:
- Setzen Sie GPIO2 auf niedrig, indem Sie den Programmierschalter schließen.
- Setzen Sie den ESP8266 zurück, indem Sie den Reset-Schalter schließen und dann wieder öffnen. Der ESP8266 bootet nun im Programmiermodus.
- Setzen Sie GPIO2 wieder auf High, indem Sie den Programmierschalter öffnen.
- Laden Sie die neue Firmware von der Arduino IDE hoch.
- Setzen Sie den ESP8266 erneut zurück, indem Sie den Reset-Schalter schließen und wieder öffnen. Der ESP8266 bootet nun im Flash-Modus und führt die neue Firmware aus.
Jetzt können Sie testen, ob die Programmierung funktioniert, indem Sie die berühmte Blink-Skizze hochladen.
Wenn das alles funktioniert, sind zumindest die Pins GND, VCC, GPIO2, RST, TXD und RXD korrekt verlötet und verbunden. Was für eine Erleichterung! Aber bevor Sie fortfahren, würde ich empfehlen, auch die anderen Pins mit Ihrem Multimeter zu testen. Ich hatte selbst ein Problem mit einem der Pins. Sie können diese Skizze verwenden, die alle Pins nacheinander für 5 Sekunden auf High setzt und anschließend den ESP8266 für 20 Sekunden in den Tiefschlaf versetzt. Damit der ESP8266 nach dem Tiefschlaf aufwachen kann, müssen Sie RST mit GPIO16 verbinden, der das Wecksignal ausgibt.
Schritt 5: Hochladen der Skizze
Ich habe den Code auf GitHub zur Verfügung gestellt, es ist nur eine Datei: Level-Sensor-Deepsleep.ino. Laden Sie es einfach herunter und öffnen Sie es in der Arduino IDE. Oder Sie können Datei - Neu auswählen und einfach den Code kopieren/einfügen.
Es gibt einige Informationen, die Sie am Anfang der Datei eingeben müssen: den Namen und das Passwort des zu verwendenden WLANs, statische IP-Details und die Kanal-ID und den Schreib-API-Schlüssel des ThingSpeak-Kanals.
Dem Tipp in diesem Blog folgend, verwenden wir anstelle von DHCP, bei dem der Router dynamisch eine IP zuweist, eine statische IP, bei der wir die IP-Adresse des ESP8266 selbst festlegen. Das geht viel schneller, wir sparen also aktive Zeit und damit Batterieenergie. Wir müssen also eine verfügbare statische IP-Adresse sowie die IP des Routers (Gateway), die Subnetzmaske und einen DNS-Server bereitstellen. Wenn Sie sich nicht sicher sind, was Sie ausfüllen sollen, lesen Sie im Handbuch Ihres Routers nach, wie Sie eine statische IP einrichten. Starten Sie auf einem Windows-Computer, der über Wifi mit Ihrem Router verbunden ist, eine Shell (Windows button-r, cmd) und geben Sie ipconfig /all ein. Die meisten Informationen, die Sie benötigen, finden Sie im Abschnitt WLAN.
Wenn Sie den Code untersuchen, sehen Sie, dass im Gegensatz zu anderem Arduino-Code die meisten Aktionen in der Setup-Funktion statt in der Schleifenfunktion stattfinden. Dies liegt daran, dass der ESP8266 nach Abschluss der Setup-Funktion in den Tiefschlaf wechselt (es sei denn, wir haben im OTA-Modus gestartet). Nach dem Aufwachen ist es wie ein Neustart und es wird das Setup erneut ausgeführt.
Hier sind die hervorstechenden Merkmale des Codes:
- Nach dem Aufwachen setzt der Code switchPin (Standard GPIO15) auf hoch. Dadurch wird der Transistor eingeschaltet, der wiederum den HC-SR04-P-Sensor einschaltet. Bevor es in den Tiefschlaf geht, setzt es den Pin wieder auf Low, schaltet den Transistor und den HC-SR04-P aus, um sicherzustellen, dass er nicht mehr wertvolle Batterieleistung verbraucht.
- Wenn die modePIN (Standard GPIO14) niedrig ist, geht der Code in den OTA-Modus statt in den Messmodus. Mit OTA (Over-the-Air-Update) können wir die Firmware über Wifi statt über die serielle Schnittstelle aktualisieren. In unserem Fall ist dies sehr praktisch, da wir für weitere Updates den Seriell-zu-USB-Adapter nicht mehr anschließen müssen. Setzen Sie einfach GPIO14 auf niedrig (mit dem OTA-Schalter in der elektronischen Schaltung), setzen Sie den ESP8266 (mit dem Reset-Schalter) zurück und er sollte in der Arduino IDE zum Hochladen verfügbar sein.
- Am analogen PIN (A0) messen wir die Spannung der Batterie. Dies ermöglicht es uns, unser Gerät, auch bekannt als permanenter Tiefschlaf, auszuschalten, wenn die Spannung unter minVoltage zu niedrig wird, um die Batterien vor Tiefentladung zu schützen. Die analoge Messung ist nicht sehr genau, wir führen numMeasuresBattery (Standard 10) Messungen durch und nehmen den Durchschnitt, um die Genauigkeit zu verbessern.
- Die Distanzmessung des HC-SR04-P Sensors erfolgt in der Funktion Distanzmessung. Um die Genauigkeit zu verbessern, wird die Messung numMeasuresDistance (Standardeinstellung 3) Mal wiederholt.
- Es gibt eine Funktion zur Berechnung des speedOfSound aus der Temperatur-, Feuchtigkeits- und Druckmessung des BME280-Sensors. Die Standard-I2C-Adresse des BME280 ist 0x76, aber wenn sie nicht funktioniert, müssen Sie sie möglicherweise auf 0x77 ändern: bool bme280Started=bme280.begin(0x77);
- Wir verwenden das BME280 im erzwungenen Modus, d. h. es dauert eine Messung und geht wieder in den Ruhezustand, um Strom zu sparen.
- Wenn Sie Kapazität (l), fullDistance (cm) und Fläche (m2) einstellen, berechnet der Code das verbleibende Volumen des Wassertanks aus der Distanzmessung: double restVolume=capacity+10.0*(fullDistance-distanz)*area; und laden Sie diese auf ThingSpeak hoch. Wenn Sie die Standardwerte beibehalten, wird die Entfernung zur Wasseroberfläche in cm hochgeladen.
Schritt 6: Aufbau der elektronischen Schaltung
Oben ist das Diagramm der elektronischen Schaltung. Es ist ziemlich groß für ein Steckbrett, besonders mit der übergroßen Adapterplatte und dem Trick mit den U-förmigen Drähten. Irgendwann wünschte ich mir sicherlich, ich hätte die Alternative verwendet, zwei Steckbretter zu verbinden, aber am Ende habe ich es geschafft.
Hier die wichtigsten Merkmale der Schaltung:
- Dabei spielen zwei Spannungen eine Rolle: die Eingangsspannung der Batterie (ca. 3,75 V) und die 3,3 V, die den ESP8266 und den BME280 speisen. Ich habe die 3,3 V auf die linke Schiene des Breakboards und die 3,75 V auf die rechte Schiene gelegt. Der Spannungsregler wandelt die 3,75V in 3,3V um. Nach den Anweisungen im Datenblatt habe ich 1 μF-Kondensatoren am Eingang und Ausgang des Spannungsreglers hinzugefügt, um die Stabilität zu erhöhen.
- GPIO15 des ESP8266 ist mit dem Gate des Transistors verbunden. Dadurch kann der ESP8266 den Transistor und damit den Ultraschallsensor im aktiven Zustand einschalten und im Tiefschlaf ausschalten.
- GPIO14 ist mit einem Switch verbunden, dem OTA-Switch. Das Schließen des Schalters gibt dem ESP8266 das Signal, dass wir als nächstes im OTA-Modus starten möchten, d.
- Die Pins RST und GPIO2 werden wie im Programmierschema beschaltet. Der RST-Pin ist jetzt auch mit GPIO16 verbunden, damit der ESP8266 aus dem Tiefschlaf aufwachen kann.
- Die Pins TRIG und ECHO des Ultraschallsensors sind mit GPIO12 und GPIO13 verbunden, während die Pins SCL und SDA des BME280 mit GPIO5 und GPIO4 verbunden sind.
- Schließlich ist der analoge Pin ADC über einen Spannungsteiler mit der Eingangsspannung verbunden. Dies ermöglicht es, die Eingangsspannung zu messen, um den Ladezustand der Batterien zu überprüfen. Der ADC-Pin kann Spannungen zwischen 0V und 1V messen. Für den Spannungsteiler haben wir Widerstände von 100K und 470K gewählt. Dies bedeutet, dass die Spannung am ADC-Pin gegeben ist durch: V_ADC = 100K/(100K+470K) V_in. Bei V_ADC = 1 V bedeutet dies, dass wir Eingangsspannungen bis zu V_in = 570/100 V_ADC = 5,7 V messen können. Was den Stromverbrauch betrifft, so leckt auch etwas Strom durch den Spannungsteiler. Mit V_in=3,75V von den Batterien finden wir I_leak = 3,75V/570K=6,6 μA.
Auch wenn die Schaltung mit Batterien betrieben wird, ist es möglich, den USB-Seriell-Adapter anzuschließen. Stellen Sie einfach sicher, dass Sie VCC des Adapters abziehen und GND, RX und TX wie im Programmierdiagramm anschließen. Dies ermöglicht es, den Serial Monitor in der Arduino IDE zu öffnen, um die Debug-Meldungen zu lesen und sicherzustellen, dass alles wie erwartet funktioniert.
Für die komplette Schaltung habe ich im Tiefschlaf bei Batteriebetrieb eine Stromaufnahme von 50 µA gemessen. Dazu gehören der ESP8266, der BME280, der Ultraschallsensor (durch den Transistor ausgeschaltet) und Leckagen durch den Spannungsteiler und möglicherweise andere Leckagen. Das ist also nicht weiter schlimm!
Ich habe festgestellt, dass die gesamte aktive Zeit etwa 7 Sekunden beträgt, davon 4,25 Sekunden für die Verbindung zum Wifi und 1,25 Sekunden für das Senden der Daten an ThingSpeak. Bei einem Wirkstrom von 80mA habe ich also 160 μAh pro Stunde für die Aktivzeit gefunden. Addiert man 50 µAh pro Stunde für den Tiefschlafzustand, so ergeben sich insgesamt 210 µAh pro Stunde. Das bedeutet, dass 2600-mAh-Akkus theoretisch 12400 Stunden = 515 Tage halten. Dies ist das absolute Maximum, wenn wir die volle Kapazität der Akkus nutzen könnten (was nicht der Fall ist) und es keine Leckagen gibt, die ich bei meinen aktuellen Messungen nicht gefunden habe. Ich muss also noch sehen, ob das wirklich aufgeht.
Schritt 7: Fertigstellen des Sensors
Ich habe den Sensor in einen 1-Liter-Kunststoffbehälter gesteckt, der früher Suppe enthielt. Unten habe ich zwei Löcher gemacht, um die "Augen" des HC-SR04-P-Sensors zu passen. Abgesehen von den Löchern sollte der Behälter wasserdicht sein. Es wird dann mit einem kreisförmigen Ring, der normalerweise für ein Regenwasserabflussrohr verwendet wird, an der Wand des Wassertanks befestigt.
Viel Spaß mit dem Projekt!