Da der FiPy auf der BOB-Platine mit allen Sensoren und häufigen Messungen mit ca. 1100 mW recht viel Strom verbraucht, ist die Laufzeit mit der Ladung eines 2000 mAh LiPo-Akkus nur gering ( ca. 7-8 Stunden) Wenn man auch noch Solarstrom benutzen möchte, braucht man ein sehr grosses Solarmodul.
Da die Stromspar-Massnahmen per Software (sleep, lightsleep und deepsleep )nicht viel bringen, habe ich als Hardware-Lösung die Platine BOB-Strom-V2 entworfen, auf der die RTC DS3231 per Alarm die Stromversorgung über einen MOSFET ein/ausschalten kann. 2 x Stromsensoren INA219 messen den Ladestrom des Solarladers CN3065 und den Entladestrom des Akkus.
Die Platine in Fritzing: BOB-Strom-V2.fzz (59,4 KB)
BOB-Strom-V2_Schaltplan.pdf (1014,3 KB)
BOB-Strom-V2_Leiterplatte.pdf (1,6 MB)
Die Platine kann in 2 Varianten betrieben werden:
- nur mit DS3231 und MOSFET bestückt, die INA219 überbrückt
BOB-HAT-V6 und BOB-Strom-V2 nur mit DS3231 sind so konstruiert, dass sie zusammen mit einem Akku in das BOB-Gehäuse passen.
Dann kann die BOB-Software mit dem DS3231 die Stromspar-Pausen selbst einstellen und man benötigt keinen DeepSleep .
- zusätzlich bestückt mit CN3065 und 2 mal INA219.
Dann kann der Akku mit einem 6V-Solarmodul oder über USB geladen werden. Der erste INA219 misst Spannung, Strom und Leistung des Ladens. Der DS3231 kann über I2C so programmiert werden, dass der Alarm 1 im Sekundentakt die Stromversorgung schaltet und der zweite INA219 misst. Beispiel aus der Praxis: 30 sec ein ( booten, messen und senden) und 30 sec aus ergibt einen Messwert pro Minute bei einerAkku- Laufzeit von 20 Stunden.
Verlängert man die Pausenzeiten, verlängert man die Laufzeit ebenfalls.
Sinnvollerweise steuert man die Platine mit einem 2. FiPy über I2C an, der jede Sekunde misst. der BOB-FiPy misst ja nur noch selten
Die folgende Software BOB-Strom-V2.zip (32,2 KB)
enthält Testprogramme für DS3231 und INA219 und Programme, um die Versorgungsspannung des BOB-FiPy alarmgesteuert ein- und auszuschalten. Gleichzeitig wird der Stromverbrauch pro Sekunde gemessen und auf SD-Karte aufgezeichnet ( Datei cur2020-09-21.csv und *.plt ) die mit gnuplot angezeigt werden können.
sensor.ds3231.py enthält einen getesteten Treiber und sensor.timing.py Methoden, um die Zeit der internen RTC und des DS3231 per NTP auch auf Sommerzeit zu stellen und Alarm1 zu schalten.
Das folgende Bild zeigt die Spannung des geladenen 2000mAh-Akkus beim Betreiben des BOB mit seinen Sensoren.
Schon nach 7 Stunden ist Schluss mit Messen bei 3.3V. Da der Akku keinen Entladeschutz hat, sinkt die Spannung auf 0 V. Das ist ungesund für den Akku und sollte nicht oft vorkommen. Zieht man die Last ab, steigt die Spannung unregelmässig.
In die Software muss unbedingt eine Abschaltung bei Unterspannung eingebaut werden.
Bei der Strommessung ( gelb ) erkennt man, dass man mit einem Multimeter keine Chance zu messen hat. Die Werte variieren zu stark.
Die abgegebene Leistung ( blau ) schwankt stark um 1100 mW und wird erst kleiner, wenn der FiPy wegen Unterspannung nicht mehr messen kann.
Um Strom zu sparen, kann man versuchen, in der Software Energiesparmodi einzustellen.
Ich habe es mit folgenden versucht:
-
print(‘end of cycle: sleep 30 sec’)
time.sleep(30) # OK, spart kein Strom
nur alle 35 sec ein Messwert, spart aber kein Strom -
print(‘end of cycle: lightsleep 35 sec’)
machine.sleep(35*1000 ) # Wlanprobleme
das WLAN funktioniert nicht mehr und muss neu gestartet werden -
machine.sleep(35*1000, resume_wifi_ble=True) # Exception
fuhrt zu Absturz -
machine.lightsleep(30) # Excption
führt zu Absturz -
print(‘end of cycle: deepsleep 35 sec’)
machine.deepsleep(35*1000) # OK, spart etwas Strom
funktioniert, 1 Messwert pro Minute, spart etwas Strom, für jede Messung muss der FiPy booten
Die Laufzeit verlängert sich auf 12 Stunden
Der Akku wurde dann über den CN3065 an USB geladen. Der Akku war nach gut 3 Stunden voll.
Bei Strom und Leistung sieht man den Zyklus:
20 sec Booten, 5 sec Messen, 35 sec Deepsleep -> 1 Messung pro Minute
Die Leistung im Deepsleep beträgt immer noch 350 mW
Als weitere Stromsparmassnahme kann ich mit der Platine BOB-Strom-V2 die Versorgung des BOB-FiPy alarmgesteuert ein/ausschalten. Im folgenden Beispiel schalte ich den Strom für 30 sec ein und 30 sec aus:
Nun beträgt die Laufzeit schon 20 Stunden, danach wurde wieder mit USB geladen.
Ein Zyklus besteht aus 20 sec Booten, 5 sec Messen, 5 sec Deepsleep und 30 sec Strom aus
=> 1 Messwert pro Minute
Die Pausenzeiten können grösser eingestellt werden. Bei 30 sec ein und 150 sec aus erhält man nur alle 3 Minuten einen Messwert. Man könnte die Pausenzeiten auch abhängig von der Spannung machen:
USB-Betrieb mit 5 V => keine Pause und 1 Messung alle 5 sec,
Akku voll mit 4 V => 30 sec Pause 1 Messung jede Minute
Akku leer mt 3.2V => 570 sec Pause mit 1 Messung alle 10 Minuten