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:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren