Pflanzensensor Akkulaufzeit

OP #7351288
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
}
Angehängte Dateien:
Gast #7351301
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.

Moderator (Firma: Titel) Persönliche Seite #7351332
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.

#7351349
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.

#7351369
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 ;)

#7351752
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.

#7351782
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.

Gast #7351795
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.

Gast #7351800
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.

#7352035
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.

OP #7358847
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?

#7358895
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.

OP #7359376
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?

Angehängte Dateien:
OP #7359465
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
}
#7361531
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren