Raspberry Pi Pico: Batterie-Lade-Zustand anzeigen
Beim Mikrocontroller-Board Raspberry Pi Pico ist der ADC 3 (GPIO 29) intern über einen Spannungsteiler mit VSYS (Pin 39) verbunden. Da bietet es sich regelrecht an, die Versorgungsspannung an VSYS zu messen und zu überwachen. Beispielsweise um einen Batterie-Lade-Zustand anzuzeigen oder auszuwerten. Aber, ein korrektes Ergebnis zu bekommen ist nicht so ganz einfach, wie man sich das vielleicht denkt.
Bei der Messung von VSYS sind unterschiedliche Vorgehensweisen beim Raspberry Pi Pico und Pico W notwendig, weil der GPIO 29 (ADC 3) beim Pico W (mit WLAN-Chip) eine doppelte Funktion hat.
Hinweis: Der folgende Programmcode berücksichtigt die Unterschiede beim Messen von VSYS. Der Programmcode kann für einen Pico mit und ohne WLAN-Chip verwendet werden.
Programmcode
Das Messen von VSYS ist eigentlich nur ein Nebenaspekt in diesem Programmcode. Wichtiger ist die Umrechnung und Interpretation des gemessenen Werts.
Bevor der Programmcode verwendet werden kann, müssen die Werte für eine volle Batterie (BAT_FULL) und den Schwellenwert, ab dem eine Batterie als nahezu leer (BAT_EMPTY) betrachtet wird, festgelegt werden. Diese Werte sollten in die entsprechenden Konstanten im Programmcode eingetragen werden.
Damit definiert man eine obere und eine untere Spannungsgrenze, die für den Ladezustand von 0 bis 100 % gilt. Dabei bedeutet 0 % nicht, dass die Batterie vollständig entladen ist, sondern entspricht der unteren Schwelle, bei der der Betrieb nicht mehr möglich ist.
Im Programmcode wird dann rechnerisch in Prozent ermittelt, welchen Ladezustand die Batterie hat.
Hinweis: Der Programmcode stellt keine Verbindung zum WLAN her.
# Bibliotheken laden import machine import time # Batterie-Spannung an VSYS BAT_FULL = 4.7 # Referenz-Spannung in Volt für eine volle Batterie BAT_EMPTY = 2.8 # niedrigster akzeptabler Wert (in Volt) # Funktion: VSYS (Pin 39) über GPIO 29 (ADC 3) messen def get_vsys_voltage(): try: import network except ImportError: # Konfiguration: GPIO 29 ohne Pulldown-Widerstand adc_vsys = machine.ADC(machine.Pin(29, machine.Pin.IN, pull=None)) time.sleep(.1) # kurze Wartezeit # Messung: VSYS adc_raw = adc_vsys.read_u16() else: # Konfiguration: GPIO 25 und 29 machine.Pin(25, machine.Pin.OUT, pull=machine.Pin.PULL_DOWN, value=1) adc_vsys = machine.ADC(machine.Pin(29, machine.Pin.IN, pull=None)) time.sleep(.1) # kurze Wartezeit # Messung: VSYS adc_raw = adc_vsys.read_u16() # Konfiguration: GPIO 25 und GPIO 29 machine.Pin(25, machine.Pin.OUT, pull=machine.Pin.PULL_DOWN, value=0) # GPIO 29 wiederherstellen und WLAN aktivieren machine.Pin(29, machine.Pin.ALT, pull=machine.Pin.PULL_DOWN, alt=7) # Spannung in Volt umrechnen return round(adc_raw * 3.3 / 65536 * 3, 2) # Funktion: Batterie-Ladung ermitteln def get_battery_level(voltage): percent = int(100 * ((voltage - BAT_EMPTY) / (BAT_FULL - BAT_EMPTY))) if percent > 100: percent = 100 return percent # Daten ermitteln vsys_voltage = get_vsys_voltage() battery_percent = get_battery_level(vsys_voltage) # Daten ausgeben print(' VSYS-Spannung:', vsys_voltage, 'V', '(gemessen)') print('Batterie-Level:', battery_percent, '%', '(berechnet)')
Ideen für Erweiterungen
- Ladezustand mit einer Ladeanzeige mit LEDs signalisieren.
- Niedriger Ladezustand über MQTT an eine zentrale Stelle melden.
- Fehlerprotokollierung / Logging
- Signalisierung an übergeordnetes System
Weitere verwandte Themen:
- Raspberry Pi Pico: Stromversorgung prüfen
- Raspberry Pi Pico im Akku- und Batterie-Betrieb
- Raspberry Pi Pico: Grundlagen zum Strom sparen
- Raspberry Pi Pico: Grundlagen der Energieversorgung / Stromversorgung
- Raspberry Pi Pico im Stand-alone-Betrieb
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.