Auf aliexpress.com bin ich zufällig auf eine Platine, die mit dem IC BQ25570 bestückt ist, gestoßen. Dieser IC von Texas Instruments ermöglicht es mit seinem Boost Converter relativ kleine Spannungen (>=0.6V) auf bis zu 5.5V setzen. Ein angeschlossener Speicher, wie etwa ein Akku oder Kondensator, nimmt diese Energie auf und gibt sie bei Bedarf an einen angeschlossenen Verbraucher ab. Ein integrierter Spannungsregler setzte die Spannung des Speichers auf den gewünschten Wert herunter.
In meinem konkreten Fall möchte ich mit zwei Solarzellen (Leerlaufspannung pro Zelle ~0.5V) einen Superkondensator laden. Bei entsprechender Ladung wird der Mikrocontroller ESP-12F über den integrierten Spannungsregler mit 3.3V versorgt werden. Messdaten sollen so generiert und an meinem FHEM Server gesendet werden. Auf dem Mikrocontroller läuft auch hier wieder das von mir gerne genutzte ESP Easy.
Was steckt hinter dem IC BQ25570
Ein Blick auf das Datenblatt zeigt, dass die Spannung am Eingang mittels Boost Charger auf ein höheres Spannungsniveau gesetzt wird. Am Pin VSTOR wird ein kleiner Speicher in Form eines Kondensators platziert. Ist dieser entsprechend geladen, so wird der PFET leitend und Energie wird in den Hauptspeicher am Pin VBAT umgeladen. An VBAT kann etwa ein Kondensator oder ein Akku angeschlossen werden.
Ein Buck Converter ermöglicht eine geregelte Spannung am Ausgang. In meinem Fall sehr hilfreich, da der ESP-12F mit 3.3 Volt versorgt wird. Dieser Buck Converter liefert typ. 110mA, sollte also für den Mikrocontroller ausreichen. Mit Stützkondensatoren sollte dennoch nicht gespart werden, da der Mikrocontroller beim Senden kurzzeitig sehr viel Strom zieht… Aber dazu unten mehr.
Auf welches Spannungsniveau der Ausgang geregelt werden soll, wird mit einem Spannungsteiler am Pin VOUT_SET bestimmt.
Dies gilt auf für die Spannung, auf welche der Speicher geladen werden soll (vgl. VBAT_OV).
Zusätzlich gibt es einen Logik Pin VBAT_OK, welcher dem Benutzer signalisiert, wann er seine Last (in meinem Fall den Mikrokontroller) ein- oder ausschalten soll (vgl. VBAT_OK_HYST und VBAT_OK).
Zur Berechnung der Parameter VBAT_OV, VOUT, VBAT_OK und VBAT_OK_HYST habe ich ein OpenOffice Dokument erstellt. Hier kann sich jeder seine passenden Widerstandswerte berechnen.
Änderung der Bestückung
Die Bestückung der Platine von Aliexpress.com ist leider für meine Anwendung nicht geeignet. So habe ich die unten gezeigten Widerstände getauscht, um folgende Werte zu erhalten:
- VBAT_OV = 5.336V -> R_OV2 = 1.1Meg, R_OV1 = 560k
- VOUT = 3.343V -> R_OUT1 = 560k, R_OUT2 = 1Meg
- VBAT_OK = 3.523V, VBAT_OK_HYST = 5.284V -> R_OK3 = 910k, R_OK2 = 1.2Meg, R_OK1 = 620k
So wird der angeschlossene auf maximal 5.336V geladen. Der Spannungsregler ist auf 3.343V gesetzt, um den Mikrokontroller mit seiner typischen Spannung zu versorgen. Ist der Superkondensator auf 5.284V geladen, so wird der VBAT_OK auf HIGH gesetzt. Dies nutze ich um den Mikrocontroller zu aktivieren (-> Enable Pin ESP-12F). Fällt die Spannung am Superkondensator unter 3.523V, so wird VBAT_OK auf LOW gesetzt und der Mikrocontroller wird deaktiviert.
Super Cap
Für die Dimensionierung des Superkondesators habe ich mich folgender Formel bedient: I = C * dU / dt
Die Formel wird nach C umgeformt und folgende Annahmen getroffen:
- Strom I: 150mA
- Spannungsdelta dU: 500mV
- Zeitdelta dt: 5s
Somit ergibt sich ein Kapazitätswert von 1.5 Farad. Diese Annahme ist nur richtig, falls der Stromverbrauch bei fallender Spannung konstant bleibt. Aber mit dieser einfachen Formel kann man sich schnell der gewünschten Kapazität nähern. Für das erste Design habe ich zwei Mal 1 Farad genommen.
Level Shifter
Das Problem ist, wenn VBAT_OK auf HIGH ist, dann ist dieser Pin auf dem gleichen Spannungsniveau wie VBAT. Das heißt in meinem konkreten Fall, dass die Spannung bei VBAT_OK zwischen 5.284V und 3.523V liegen wird. Laut Datenblatt besitzt der Mikrokontroller eine snap-back circuit die Schutz vor Überspannung und ESD bietet. Die holding voltage ist mit 5.8V angegeben, daher sollten die bis zu 5.284V kein Problem darstellen. Dennoch möchte ich die Spannung an den Inputs auf dem Level der Spannungsversorgung haben. Ein NPN-Transistor hilft hierbei.
Die 3.3V sind vom Spannungsregler und die angenommen 5V vom Pin VBAT_OK, wenn dieser auf HIGH ist. Am Pin CHIP_EN des Mikrokontroller liegen dann aber nur 3.3V an.
Sensor – Capacitive Moisture Sensor
Für den ersten Anwendungsfall werde ich einen autarken Bodenfeuchtesensor für meine Zimmer- und Balkonpflanzen bauen.
Da das Modul ESP-12F einen ADC integriert hat, werde ich auf diesen zugreifen und die Spannung des kapazitiven Bodenfeuchtesensor damit auswerten. Der 10bit ADC ist in diesem Fall auch vollkommen ausreichend.
Wie dieser Sensor funktioniert, werde ich hier nur kurz anschneiden. Der Sensor wird mit 3.3V versorgt und gibt eine analoge Spannung aus. Diese Spannung ist indirekt proportional zur Feuchte in der Erde. Ist die Erde trocken (0%), liegt die Spannung bei 2.01 Volt. Ist die Erde komplett feucht (100%), liegt die Spannung bei 0.76 Volt. Simuliert wird dies, indem ich den Sensor in ein Glas Wasser halte (natürlich nicht die elektronischen Komponenten). Dazwischen wird linear interpoliert, da ich keine weitere Messpunkte darstellen kann.
Diese Messung sollte für jeden Sensor individuell gemacht werden, da es hier leichte Streuungen gibt.
Der interne ADC wird über ESP Easy mit dem Device Analog input – internal ausgelesen. Mithilfe einer Zwei-Punkt Kalibrierung wird jedem Bit-Wert der passende Spannungswert zugeordnet.
Die Auswertung der Sensorspannung erfolgt über den FHEM Server. Hierzu erstelle ich das Attribute userReadings mit nachfolgendem Code:
soilmoisture {if (100-((ReadingsVal("ESPEasy_ESP_Easy_BQ25570_Test_Bodenfeuchtigkeit","Analog",0)-0.76)/0.0125) <= 0) {return 0} else {return sprintf("%i",100-((ReadingsVal("ESPEasy_ESP_Easy_BQ25570_Test_Bodenfeuchtigkeit","Analog",0)-0.76)/0.0125))}}
Wie oben erwähnt, erfolgt eine lineare Interpolation zwischen den Spannungswerten 0.76 und 2.01. Mithilfe der Formel zur linearen Funktion f(x) = m*x + n, errechne ich die prozentuelle Feuchte der Pflanzenerde. Der Offset n ist 0.76V. Die Steigung m errechnet sich aus der Zweipunktform m = (y2-y1)/(x2-x1). Dabei ist y2 = 2,01V, y1 = 0.76V, x2 = 100 und x1 = 0. Somit ergibt sich für die Steigung m 0.0125V/%.
Da die Messung und die Auswertung nicht ganz exakt sind, kann es vorkommen, dass der Prozentwert leicht unter Null geht. Dafür ist meist nur 1Bit verantwortlich und somit in der Nachkommastelle ersichtlich. Damit der Prozentwert nicht unter Null geht, habe ich noch eine IF-Bedingung integriert.
Quick and Dirty – Ein schneller Zusammenbau
Um zu überprüfen ob meine Konzept funktioniert, baue ich meistens die Schaltung vorher auf bevor ich eine Platine erstelle. So auch in diesem Fall und dabei kamen folgende Komponenten zum Einsatz:
- NodeMCU, Link: aliexpress.com
- BQ25570 Platine von CJMCU, Link: aliexpress.com
- 2x Super Kondensator, Link :aliexpress.com
- 2x Solarzelle, Link: aliexpress.com
- 2x 220uF Kondensator
- NPN Transistor BD135, Link: aliexpress.com
- Kapazitiver Bodenfeuchtesensor, Link: alixpress.com
Die Solarzellen werden an den zwei Pins mit der Bezeichnung Input der BQ25570 Platine angeschlossen. Um eine höhere Spannung zu erhalten sind diese in Serie geschalten. An den zwei Pins mit der Bezeichnung BAT werden die zwei Super Kondensator angeschlossen. Die Output Pins werden mit den 3.3V/GND Pins des NodeMCU verbunden. Zwei Mal 220uF Stützkondensatoren werden zusätzlich angebracht, um die Stromspitzen des ESP-12 zu puffern.
Der EN Pin des BQ25570 ist Active Low und wird mit GND verbunden, um den IC zu aktivieren. Der V_EN Pin ist Active High und wird mit V_STOR verbunden. V_STOR kann über den 0.22uF Kondensator, welcher auf der Rückseite der Platine ist, abgegriffen werden. Der Pin V_OK geht auf die Basis des NPN Transistors, dazwischen kommt noch ein 10kOhm Widerstand.
Der Emitter des NPN Transistor ist direkt mit dem Pin EN des ESP-12 verbunden, also nicht mit der Platine des NodeMCU. Der NodeMCU ist so bestückt, dass dieser den EN Pin auf High/3.3V zieht und somit den Mikrocontroller permanent einschaltet. Um dies zu umgehen, kann z.B. die Leiterbahn aufgetrennt werden, welche den Pin mit 3.3V verbindet. Diese befindet sich an der Unterseite des ESP-12, zwischen erstem und zweiten Pad von Links.
Der Emitter ist weiters mit GND über einen 10kOhm Widerstand verbunden.
Grundsätzlich kann der ADC des ESP-12 nur Spannungen bis 1V korrekt verarbeiten. Die NodeMCU Platine weißt jedoch einen Spannungsteiler auf und so sind auch 3.3V möglich. Eine entsprechende Umrechnung ist über ESP Easy leicht gemacht. Um die Werte für die Zwei-Punkt-Kalibrierung richtig zu setzen, kann der A0 Pin einmal mit GND und einmal mit 3.3V verbunden werden.
Damit der kapazitive Bodenfeuchtesensor nicht permanent mit dem OUTPUT des BQ25570 verbunden ist, werden die NodeMCU Pins D1 und D2 für die Versorgung genutzt. Jeder Pin kann bis zu 12mA Strom lieferen. Eigentlich reicht ein Pin aus, aber da genügend übrig sind, habe ich einen zweiten Pin spendiert.
Unter dem Reiter Hardware kann der boot state fast jeder Pins definiert werden. In meinem Fall möchte ich, dass die Pins D1 und D2 nach dem Start des ESP-12 auf HIGH/3.3V gesetzt sind und so den kapazitiven Bodenfeuchtesensor versorgen.
Erste Messungen und Ausblick
Erste Messungen zu dieser Jahreszeit haben gezeigt, dass die Sonneneinstrahlung an meiner Fensterbank ausreicht, damit der Sensor zwischen 11:30 und 15:00 im Abstand von fünf Minuten Messdaten an den FHEM Server sendet. Für die Messung der Bodenfeuchtigkeit ist dies mehr als ausreichend, da sich dieser Zustand nicht schlagartig ändert. Auch wenn die Sonne einmal mehrere Tage nicht stark genug scheint und ich somit nicht an das Gießen erinnert werde, wenn die Zimmerpflanzen schon nicht vertrocknen.
Parallel habe ich schon mit der Erstellung der Leiterplatte begonnen. Ziel war es, dass die Platine genau so groß ist, wie die zwei verwendeten Solarzellen. Die Maße sind somit 36mm x 53mm.
Hey Michael!
Erstmal vielen Dank, dass du diesen Artikel verfasst hast, er war sehr hilfreich!
Zur Info, da es mich verwirrt hatte:
Die Beschriftungen von R_out1 und R_out2 sind in dem Bild vertauscht 🙂
Schönen Tag dir!
Felix
Servus Felix,
danke für den Hinweis! Wird geändert.
Schönen Tag,
Michael