Forum: Mikrocontroller und Digitale Elektronik Pflanzensensor Akkulaufzeit


von Benjamin P. (ben21684)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgende Komponenten nach angehängtem Schaubild zu einem 
kostengünstigen Pflanzensensor kombiniert, der per WLAN die Daten an 
einen MQTT Broker sendet. Das funktioniert auch ganz gut, allerdings 
hält der Akku max. einen Tag. Ist der Stromverbrauch zu hoch, um das 
ganze per Akku zu betreiben?
Ich habe zwei 3,7V Akkus parallel geschaltet.

Anbei der Code:
1
#include <ESP8266WiFi.h>
2
#include <PubSubClient.h>
3
#ifndef STASSID
4
#define STASSID "xxxxxx"
5
#define STAPSK  "xxxxxxx"
6
#endif
7
8
const char* ssid     = STASSID;
9
const char* password = STAPSK;
10
const char* MQTT_BROKER = "192.168.xxx.xxx";
11
const int AirValue = 1024;   
12
const int WaterValue = 628;  
13
int soilmoisturepercent = 0;
14
15
WiFiClient espClient;
16
PubSubClient client(espClient);
17
18
void setup() {
19
  pinMode(LED_BUILTIN, OUTPUT);
20
  delay(100);
21
 
22
  WiFi.begin(ssid, password);
23
 
24
  while (WiFi.status() != WL_CONNECTED) {
25
    delay(100);
26
    digitalWrite(LED_BUILTIN, HIGH);  
27
    delay(100);                      
28
    digitalWrite(LED_BUILTIN, LOW);    
29
 
30
client.setServer(MQTT_BROKER, 1883);
31
  
32
}
33
34
void loop() 
35
{
36
  int i = 0;
37
  while (i != 10)
38
  {
39
    int sensorValue = analogRead(A0);
40
    if (WiFi.status() == WL_CONNECTED) 
41
    {
42
      digitalWrite(LED_BUILTIN, LOW);
43
      delay(100);
44
      if (!client.connected()) {
45
          while (!client.connected()) {
46
              client.connect("Plant_Sensor_001");
47
              delay(100);
48
          }
49
      }
50
      client.loop();
51
      delay(1000);
52
      soilmoisturepercent = map(sensorValue, AirValue, WaterValue, 0, 100);
53
      char Value [10];
54
      itoa (soilmoisturepercent,Value,10);
55
      client.publish("/Plant_Sensor_001/data", Value);
56
   }
57
   i++;
58
  }
59
  ESP.deepSleep(3600e6); 
60
}

von Sebastian R. (sebastian_r569)


Lesenswert?

Benjamin P. schrieb:
> Ist der Stromverbrauch zu hoch, um das
> ganze per Akku zu betreiben?

Keine Ahnung. Das müsstest du mal messen. Das geht nicht aus der Ferne.

von Jan F. (fenki)


Lesenswert?

Es geht stromsparender:
https://blog.m3k.cc/2021/01/ultra-low-power-soil-monitor/

... die wollte ich mir wschon lange mal basteln...

von STK500-Besitzer (Gast)


Lesenswert?

Benjamin P. schrieb:
> Ist der Stromverbrauch zu hoch, um das
> ganze per Akku zu betreiben?

Lässt sich vermuten.
Einfach mal die Stromaufnahme messen (und loggen).
Wie lange hält die Batterie ohne den Feuchtigkeitssensor?

Als Beispiel, dass es auch länger geht:
Mein ESP-01 mit DHT-22 lutscht eine 18650-LiIon-Zelle in einer Woche 
leer.
Er misst ein Mal pro Minute und läuft ohne Sleepmode durch.
Der Datenversand erfolgt an ein HTTP-Server per WLAN nach jeder Messung.

von pegel (Gast)


Lesenswert?

Die delay() Aufrufe sind sicher schon mal gut geeignet um Leistung zu 
verbraten.

von Benjamin P. (ben21684)


Lesenswert?

pegel schrieb:
> Die delay() Aufrufe sind sicher schon mal gut geeignet um Leistung zu
> verbraten.

Oh, das stimmt, da hab ich gar nicht dran gedacht, dass ja die LED mit 
delay auch ordentlich was zieht. Hatte ich anfangs zur Kontrolle um zu 
schauen ob der Sensor läuft. Die schmeiß ich dann mal raus.

von Benjamin P. (ben21684)


Lesenswert?

STK500-Besitzer schrieb:
> Mein ESP-01 mit DHT-22 lutscht eine 18650-LiIon-Zelle in einer Woche
> leer.

Den wollte ich erst auch nehmen, hat aber leider keinen Analog PIN.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Benjamin P. schrieb:
> Ist der Stromverbrauch zu hoch, um das ganze per Akku zu betreiben?
Nimm ein Messgerät und messe den Strom. Allerdings wird das Ding mit den 
schnellen Pulsen beim Senden etwas überfordert sein.

Deshalb ist der Ansatz der Spannungsmessung mit einem Oszilloskop schon 
zielführender.
1. Wie sieht die Versorgungsspanung aus? Bricht sie beim Senden ein?
2. Nimm einen 0,1 Ohm Shunt und miss den Spannungsabfall darüber. der 
ist wegen I = U/R proportional zum Strom.

Benjamin P. schrieb:
> Den wollte ich erst auch nehmen, hat aber leider keinen Analog PIN.
Da gibt es solche schnuckeligen externen ADC, die allemal besser sind 
als das, was in den ESP drin ist.

BTW: es wäre mit Sicherheit gut, wenn du da einen 100µF-Elko zum Puffern 
dazuschalten würdest.

BTW2: wenn es wirklich richtig ans Stromsparen geht (um Laufzeiten im 
Bereich von mehreren Monaten), dann muss man das Datenblatt der 
verwendeten Bauteile und die darin aufgeführten Stromsparmodi genau 
studieren.

von Thomas D. (tom_d)


Lesenswert?

Ich habe vor einigen Jahren eine Platine für so einen Erdfeuchtesensor 
entworfen: Layout von dem kapazitiven Sensor grob übernommen, ESP32, 
LiPo mit ca. 500mAh und Mikro-USB-Buchse mit Ladecontroller. 
Kommunikation einmal pro Stunde über MQTT, ansonsten im Sleep-Modus. 
Akkulaufzeit ist ca. ein halbes Jahr. Ich kann heute Abend ein paar mehr 
Infos dazu hochladen.

Wichtig ist vor allem, den Strom im Ruhezustand zu minimieren und die 
meiste Zeit auch in diesem Zustand zu verbringen. Das fängt mit dem 
Schaltungsdesign schon an: Ein Spannungsteiler, um die Batteriespannung 
zu messen? Darf nicht ständig aktiv sein, zieht sonst die Batterie leer.

von Benjamin P. (ben21684)


Lesenswert?

Sebastian R. schrieb:
> Benjamin P. schrieb:
>> Ist der Stromverbrauch zu hoch, um das
>> ganze per Akku zu betreiben?
>
> Keine Ahnung. Das müsstest du mal messen. Das geht nicht aus der Ferne.

Ich habe mit dem o.g. Code zwischen 77 und 86mA. Im DeepSleep dann 9,6mA 
gemessen. Ich werde nachher mal den Code anpassen und berichten.

von Thomas D. (tom_d)



Lesenswert?

Benjamin P. schrieb:
>  Im DeepSleep dann 9,6mA gemessen.

Wenn du das um den Faktor 1000 reduzieren kannst, wird es gut.

Im Anhang zur Inspiration mein Sensor. Bin aber noch nicht ganz 
glücklich damit. Die Bauteile sitzen zu nahe an der Erde. Beim gießen 
wird dann doch mal alles nass und trotz Schutzlack gammelt dann langsam 
alles weg ;)

von Wolfgang (Gast)


Lesenswert?

Benjamin P. schrieb:
> Ich habe mit dem o.g. Code zwischen 77 und 86mA. Im DeepSleep dann 9,6mA
> gemessen.

Dann darfst du dich nicht wundern. Beim Senden sind es eher mehr als 
350mA.

von Johnny B. (johnnyb)


Lesenswert?

Benjamin P. schrieb:
> Ist der Stromverbrauch zu hoch, um das
> ganze per Akku zu betreiben?

Ja. Dein Ziel sollte ein durchschnittlicher Stromverbrauch von unter 
100µA sein. Wenn Du nur alle paar Stunden sendest und dazwischen alles 
was nicht gebraucht wird sauber ausschaltest bzw. mittels Transistoren 
abtrennst, sollte das möglich sein.

Habe selber mit einem STM32F103C8T6 so einen Pflanzensensor gebastelt 
und der braucht im Durchschnitt ca. 30µA, ist aber ohne Funk, misst alle 
2 Sekunden und nach der Messung blitzt jeweils kurz eine grüne oder rote 
LED auf.

von Helmut -. (dc3yc)


Lesenswert?

Ich betreibe meine Akku- bzw. Batteriesensoren mit einem Atmega328 mit 
ca. 3.3V und als Sender ein LoRa-Modul. Das verbraucht viel weniger 
Strom und ist von der Reichweite günstiger. Im Haus steht dann ein 
Empfänger, der die LoRa-Daten aller Sensoren ins WLAN sendet. Da hab ich 
Netzanschluss, da ist der Stromverbrauch egal.

von Siehste (Gast)


Lesenswert?

Die kapazitiven Sensoren sind an und für sich gut. Aaaaber:
Die chonesischen Sensoren haben einen Fehler: Sie haben keine 
Beschichtung. Die Platine säuft sich langsam an und die Measungen werden 
mehr als träge.
Habe den originalen Sensor im Einsatz:

https://www.ramser-elektro.at/shop/bausaetze-und-platinen/giesomat-kapazitiver-bodenfeuchtesensor-erdfeuchtesensor-mit-beschichtung/


Der wurde hier im Forum entwickelt:
https://www.mikrocontroller.net/articles/Giess-o-mat

Ist versiegelt mit PU.

von Schlaumaier (Gast)


Lesenswert?

Leg das Dingen pennen.

Und wieso musst du jede Sekunde abfragen.  Das ist schon lt. Anleitung 
für das Teil nicht erlaubt.

Mein Tipp.

Leg das Teil 30 Min pennen, dann frag ab und lege es wieder pennen.

Das sollte für eine Blumenüberwachung locker reichen. Ich habe meine am 
Strom hängen und frage nur alle akt. 3 Std. ab. Hängt aber am Strom weil 
das System auch die Pumpe anschmeißen kann.

von Benjamin P. (ben21684)


Lesenswert?

Vielen Dank für die vielen Hilfreichen Tipps. Wenn ich nächste Woche 
wieder zu Hause bin, werde ich mich mal an die Umsetzung machen und das 
Ergebnis hier berichten.

von Jan F. (fenki)


Lesenswert?

Schlaumaier schrieb:
> Leg das Teil 30 Min pennen, dann frag ab und lege es wieder pennen.

Genau so.
Und: Merk Dir den Wert und schmeiss das WiFi nur an wenn eine bestimmte 
Differenz gemessen wird. Das reicht locker - Pflanzen saufen das Wasser 
nicht so schnell wie wir das Bier ;-)

von Mike J. (linuxmint_user)


Lesenswert?

Benjamin P. schrieb:
> Ich habe mit dem o.g. Code zwischen 77 und 86mA. Im DeepSleep dann 9,6mA
> gemessen. Ich werde nachher mal den Code anpassen und berichten.

Was zieht denn da so viel Strom?

Wenn das normale LiIon-Akkus sind, mit jeweils etwa 2Ah, dann hast du 
4Ah.
Beo 10mA permanenten Verbrauch, ohne dabei aufzuwachen würde dein Gerät 
nur etwa 2 Wochen damit auskommen. Wenn du dann noch aufwachst um die 
Datenpakete weg zu schicken, dann kann man mit einer Woche rechnen.

Ist der Feuchtigkeitssensor permanent aktiv? Versuch den einfach mal mit 
Hilfe eines Transistors abzuschalten und dann nur jede Stunde zu 
aktivieren, kurz bevor der ESP die Daten abgreift.

von Benjamin P. (ben21684)


Lesenswert?

> Ist der Feuchtigkeitssensor permanent aktiv? Versuch den einfach mal mit
> Hilfe eines Transistors abzuschalten und dann nur jede Stunde zu
> aktivieren, kurz bevor der ESP die Daten abgreift.

So heute weitergebastelt und festgestellt, das der Sensor defekt war. 
Heute kam ein neuer. Will gleich mal weiter den Stromverbrauch testen.

Wie muss ich denn einen Transistor in die Schaltung integrieren? Was für 
einen Transistor muss ich nehmen. Hast Du evtl. ein Bsp. Schaltbild?

von Mike J. (linuxmint_user)


Lesenswert?

Benjamin P. schrieb:
> So heute weitergebastelt und festgestellt, das der Sensor defekt war.
> Heute kam ein neuer. Will gleich mal weiter den Stromverbrauch testen.
Stimmt die Spannung am Sensor? Braucht er 3,3V oder 5V?

> Wie muss ich denn einen Transistor in die Schaltung integrieren? Was für
> einen Transistor muss ich nehmen. Hast Du evtl. ein Bsp. Schaltbild?

Am besten du nimmst eine P-Kanal MosFET zum schalten des Stroms für den 
Sensor. Source an 3,3V und Drain geht zur positiven Versorgung der 
Sensorplatine. GND der Sensorplatine liegt auf GND des ESP.

Gate mit 100k bis 1MOhm nach 3,3V.

Das Gate würde ich dann mit einem NPN-Transisor nach Masse ziehen. Die 
Basis über 50k an einen I/O-Pin, Collektor an das Gate, Emitter an GND.

von Benjamin P. (ben21684)


Lesenswert?

Kannst Du mir das zum besseren Verständnis mal aufzeichnen? 🫣

von Helmut -. (dc3yc)


Lesenswert?

Vieviel Strom braucht denn der Sensor? Kann man da nicht direkt einen 
Prozessorpin verwenden?

von Benjamin P. (ben21684)


Lesenswert?

Helmut -. schrieb:
> Vieviel Strom braucht denn der Sensor?
Leider habe ich keine verlässigen Angaben gefunden.
angeblich 5mA

Kann man da nicht direkt einen
> Prozessorpin verwenden?

Habe ich versucht, aber dann kommen am A0 nur unsinnige Werte. Ich 
vermute, die Leistung reicht nicht aus.

von MaWin O. (mawin_original)


Lesenswert?

Wie wird der ESP versorgt?
Die üblichen ESP-Boards haben meistens ineffiziente Linearregler. Da 
wird die meiste Leistung im Regler verbraten und nicht im ESP selbst.

von Benjamin P. (ben21684)


Angehängte Dateien:

Lesenswert?

Ich habe mir folgendes überlegt.
Spannungsversorgung zwei in Reihe geschaltete 3,7V Akkus = 7,4V.
Da der D1 mini einen Spannungsregler hat, sollte das funktionieren, 
oder?
Dazu die Transistorschaltung um den Sensor nur zum messen über D4 zu 
aktivieren. Sollte doch eigentlich so funktionieren. Oder habe ich einen 
Denkfehler?

: Bearbeitet durch User
von Benjamin P. (ben21684)


Lesenswert?

Kurzes Update:
Habe die Schaltung jetzt einfach mal ausprobiert, allerdings mit nur 
einem Akku, also einer Eingangsspannung von 3,7V. das Funktioniert auch, 
nur müssen im Programm die Werte für den Sensor (Airvalue & Watervalue 
angepasst werden.

Der bereinigte Code (keine LED mehr, keine Serial.print und weniger 
delays):
1
#include <ESP8266WiFi.h>
2
#include <PubSubClient.h>
3
#ifndef STASSID
4
#define STASSID "xxxxxxxxxxxx"
5
#define STAPSK  "xxxxxxxxxxxx"
6
#endif
7
8
const char* ssid     = STASSID;
9
const char* password = STAPSK;
10
const char* MQTT_BROKER = "192.168.xxx.xxx";
11
const int AirValue = 700;   
12
const int WaterValue = 200;  
13
int soilmoisturepercent = 0;
14
int sensorValue = 0;
15
16
WiFiClient espClient;
17
PubSubClient client(espClient);
18
19
void setup() {
20
  pinMode(D8, OUTPUT);
21
  delay(100);
22
 
23
  WiFi.begin(ssid, password);
24
 
25
  while (WiFi.status() != WL_CONNECTED) {
26
    delay(100); 
27
  }
28
  client.setServer(MQTT_BROKER, 1883);  
29
}
30
31
void loop() 
32
{
33
  digitalWrite(D8, HIGH);   
34
  delay(2000);
35
    sensorValue = analogRead(A0);
36
    if (WiFi.status() == WL_CONNECTED){
37
      delay(100);
38
      if (!client.connected()) {
39
          while (!client.connected()) {
40
              client.connect("Plant_Sensor_001");
41
              delay(100);
42
          }
43
      }
44
      client.loop();      
45
      soilmoisturepercent = map(sensorValue, AirValue, WaterValue, 0, 100);     
46
      char Value [10];
47
      char aValue [10];
48
      itoa (soilmoisturepercent,Value,10);
49
      itoa (sensorValue,aValue,10);
50
      client.publish("/Plant_Sensor_001/data", Value);
51
      client.publish("/Plant_Sensor_001/analog", aValue);
52
      delay(1000);
53
  }  
54
  digitalWrite(D8, LOW);
55
  ESP.deepSleep(3600e6); 
56
}

von MaWin O. (mawin_original)


Lesenswert?

Benjamin P. schrieb:
> char Value [10];
>       char aValue [10];
>       itoa (soilmoisturepercent,Value,10);
>       itoa (sensorValue,aValue,10);

10 chars reichen nicht aus, um alle Werte im ganzen Wertebereich eines 
int abzudecken. Mindestens 10 + Vorzeichen + Nul, also 12.

von Benjamin P. (ben21684)


Lesenswert?

Danke für den Hinweis. Theoretisch auch richtig. Praktisch gesehen 
bräuchte ich aber noch nicht mal die zehn, da der Sensor nicht über 1024 
ausgibt. Naja und alles was über 100% Feuchtigkeit geht ist eh falsch.

von Ate E. (drigo)


Lesenswert?

Aha. Du nimmst also den doch den Billigsensor ohne richtigen Verguss 
her.
Nadann: 
https://hackaday.com/2022/03/02/soil-moisture-sensor-coating-lessons-learned-the-hard-way/

Da wirst du noch zig Seiten finden, mit defekten Sensoren.
Hör auf die Leute hier.
Da gab es in einem anderen Forum einen Langzeittest mit verschiedenen 
Vergussmaterialien.
Was kam bei raus:
Ohne Polyurethanverguss wird das nichts.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.