Aus Raspberry Pi Geek 10/2022

Günstiger Strommesser auf Basis des Pi Pico im Eigenbau (Seite 3)

Abbildung 6: Wechsel durch die Konfigurationsdialoge: Messintervall, Messdauer und Update-Intervall.

Abbildung 6: Wechsel durch die Konfigurationsdialoge: Messintervall, Messdauer und Update-Intervall.

Aus dem Ready-Modus starten Sie die Messung mit der Start-Taste. Die Messung läuft dabei erst los, wenn Strom anliegt. Beenden können Sie per [Stop]. Ein automatischer Stopp erfolgt nach Ende der Messdauer oder wenn die Spannung unter 1 Volt sinkt. Damit wird das gemessene Minimum nicht durch Start- und Stoppeffekte verzerrt.

Während die Messung läuft, wechseln Sie zwischen den Messwerten, der Zeit und den Plots mit der View-Taste (Abbildung 7). Die Ausgabe auf dem Bildschirm ist “kostspielig”, sie dauert auf dem Pico 330 ms. Ist Ihr Messintervall kleiner als dieser Wert, verlieren Sie Messwerte. Um das zu verhindern, setzen Sie das Update-Intervall auf null: Dann erfolgt keine Ausgabe der Werte während der Messung. In diesem Modus erreichen Sie auf dem Pico ein minimales Messintervall von 9,5 ms. Der Pi Zero liegt bei knapp über 10 ms, der RasPi 3B+ schafft sogar 6,1 ms. Da es hier nicht um ein Oszilloskop geht, sind Messintervalle von 10 ms für fast alle Anwendungsfälle mehr als ausreichend.

Abbildung 7: Die Anzeige w&auml;hrend der Messung: Mit einem Klick auf die <span class="ui-element">View</span>-Taste wechseln Sie durch die Seiten.

Abbildung 7: Die Anzeige während der Messung: Mit einem Klick auf die View-Taste wechseln Sie durch die Seiten.

Neben der optionalen Anzeige auf dem Display gibt das Programm grundsätzlich alle Messwerte auf der Konsole aus. Wollen Sie die Daten abgreifen und später analysieren, dann verbinden Sie sich mit dem Pico über /dev/ttyACM0. Sehr bequem klappt das zum Beispiel mit dem Terminalprogramm Tio. Die Programmoption -l Logfile leitet dann die komplette Ein- und Ausgabe in die angegebene Datei. Das ebenfalls beliebte Tool Screen benötigt dagegen die Optionen -L -l Logfile. Auf dem RasPi leiten Sie die Ausgabe des Programms cp-vameter einfach in eine Datei um. Für eine ansprechende grafische Darstellung der Daten nutzen Sie dann anschließend das Kommandozeilenwerkzeug py-datamon [4].

Das Beispiel in Abbildung 8 zeigt einen ESP-01S am Pico. Hier ging es darum, den Stromverbrauch des Chips zu messen. Im Fokus stand dabei der Verbrauch, wenn der EN-Pin auf Masse gezogen wird. Der Messaufbau ist zwischen dem 3V3-Pin des Pico und dem kleinen WLAN-Chip eingeschleift. Wie Sie sehen, liefert der Pico nur 3,25 statt 3,3 Volt. Bei ungefähr 01:05 Sekunden hat das Programm den EN-Pin dann umgeschaltet, ohne die erhoffte dauerhafte Senkung des Stromverbrauchs.

Abbildung 8: Die grafische Aufbereitung der Messergebnisse am Desktop-PC mittels Py-datamon.

Abbildung 8: Die grafische Aufbereitung der Messergebnisse am Desktop-PC mittels Py-datamon.

Anpassungen

Das eigentliche Messprogramm lässt sich dank der verfügbaren INA219-Bibliothek sehr einfach halten, eine abgespeckte Minimalversion zeigt Listing 3. Die Library erlaubt das Anpassen verschiedener Register des ICs für ein Feintuning. Das betrifft sowohl den Messbereich als auch das Oversampling (Zeilen 13 bis 16). Letzteres verhindert Rauschen und kann in einem weiten Bereich variiert werden. Die Klasse INA219DataProvider (im Verzeichnis lib/) verwendet achtfaches Oversampling, was zu einem minimalen Messintervall von knapp unter 5 ms führt. Außerdem ist es möglich, neben Spannung und Stromstärke auch die Leistung auszugeben.

Listing 3

Minimales Messprogramm

import time
import board
import busio
from adafruit_ina219 import ADCResolution, INA219
PIN_SDA = board.GP2
PIN_SCL = board.GP3
i2c     = busio.I2C(sda=PIN_SDA,scl=PIN_SCL)
# 8x Oversampling für Spannung vor und nach dem Messwiderstand
# Konfiguration für max 32V, 2A
ina219 = INA219(i2c)
ina219.bus_adc_resolution   = ADCResolution.ADCRES_12BIT_8S
ina219.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_8S
ina219.set_calibration_32V_2A()
while True:
  v = ina219.shunt_voltage
  a = ina219.current
  print("%f V, %f mA" % (v,a))
  time.sleep(0.1)

Das Rahmenprogramm ist völlig agnostisch, was die Messwerte angeht. Sie könnten also den INA219DataProvider einfach durch einen INA260DataProvider ersetzen, wenn Sie den größeren Bruder des INA219 im Einsatz haben, oder messen über einen BMP280DataProvider statt Spannung und Strom Temperatur und Luftdruck. Wichtig ist, dass jeder DataProvider alle Methoden bereitstellt und der neue DataProvider dann in main.py auch geladen wird.

Falls Sie ein anderes Display nutzen oder einfach etwas Farbe ins Spiel bringen wollen, dann passen Sie lib/View.py an. Dasselbe gilt analog für die Tastatur, den relevanten Code finden Sie in lib/Touchpad.py. Die Klasse wird ebenfalls in main.py geladen, wo Sie sie bei Bedarf durch eine andere Implementation ersetzen, etwa mit Taster und Dreh-Encoder. Ein Adafruit PyPortal (SAMD51 mit Touch-Display) ersetzt den Pico, das OLED-Display und die Tastatur komplett – vorausgesetzt, Sie implementieren die Tastatur virtuell über den Touch-Bildschirm.

Fazit

Dieser Artikel zeigt: Auch für richtige Anwendungen brauchen Sie nicht unbedingt einen ausgewachsenen Raspberry Pi. Die großen Boards bieten zwar etwas kürzere Messintervalle, aber das für mehr als den zehnfachen Preis.

Außer bei den Kosten punktet der Pico aber auch mit minimalen Boot-Zeiten, denn ein Messgerät mit Pico ist nach dem Einschalten fast sofort einsatzbereit und lässt sich danach einfach abschalten. Dank I2C fällt die Verkabelung sehr schlicht aus, dank CircuitPython klappt der Betrieb (fast) plattformneutral und mit vergleichsweise wenig Code. Der ganze Spaß kostet gerade einmal 20 Euro und deckt den Bereich zwischen 1 mA und 2 A ab. Für höhere Stromstärken könnten Sie auf den INA260 umsteigen, für Messungen im Mikroampere-Bereich benötigen Sie jedoch deutlich teureres Profi-Equipment.

Dieser Artikel konnte nicht auf alle Details des Projekts eingehen. Interessieren Sie sich für einen Nachbau oder Änderungen am Projekt, sollten Sie deshalb auf alle Fälle die Dokumentation auf der Projektseite lesen. Bei Änderungen und Verbesserungen sind Pull-Requests sehr willkommen, denn dann können auch andere Nutzer davon profitieren. (cla)

Der Autor

Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Hört er nicht Musik oder ist mit dem Rad respektive zu Fuß unterwegs, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:[email protected].

Infos

  1. Hardkernel SmartPower 3: Bernhard Bablok, “Nachgemessen”, RPG 06/2022, S. 58, https://www.raspi-geek.de/47013
  2. Projekt-Repository: https://github.com/bablokb/circuitpython-vameter
  3. CircuitPython: Bernhard Bablok, “Einer für alle(s)”, RPG 04/2020, S. 80, https://www.raspi-geek.de/43118
  4. Realtime Python Datamonitor: https://github.com/bablokb/py-datamon
  5. CircuitPython herunterladen: https://circuitpython.org/downloads
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben