# Spannungsmessung mit einem Raspberry Pi ## Einleitung Heutzutage funktioniert vieles nicht mehr ohne eine Stromversorgung. Verschiedene elektrische System haben für diese Stromversorung gewisse Anforderungen, in den meisten Fällen besteht mindestens die Anforderung einer konstanten elektrischen Spannung. Um einen fehlerfreien Betrieb der elektrischen Systeme zu garantieren, muss die Spannung kontinuierlich überwacht werden. Jedoch kann auch für die Entwicklung von eingebetteten Systemen oder anderen Systemen eine Spannungsmessung von Nöten sein, zum Beispiel soll für ein Warnsystem sobald eine gewisse Spannung anliegt, die höher als eine Warngrenze ist, eine Warnmail verschickt werden. Durch Mikrocontroller und Einplatinenrechnern wie den Raspberry Pis können über Schnittstellen und Spannungsmessplatinen diese Vorgänge der Spannungsmessung im heimischen Zimmer automatisiert und nachvollzogen werden. Dieses Projekt handelt von der Spannungsmessung mithilfe eines Raspberry Pis und des INA219-Chips. Im Nachfolgenden werden die Grundlagen und die Durchführung des Projekts beschrieben. ## Grundlagen Der Raspberry Pi Zero 2W ist ein kompakter Einplatinencomputer, der ein Broadcom-System-on-a-Chip (SoC) mit einer ARM-CPU enthält und auf einer Platine in Kreditkartengröße untergebracht ist. Er bietet eine Vielzahl von Schnittstellen wie GPIO, I2C und SPI, die es ermöglichen, externe Geräte anzuschließen und zu steuern. Der Einplatinencomputer verwendet das offizielle gleichnamige Betriebssystem Raspberry Pi OS, welches auf Linux basiert. Dieses Betriebssystem ist für die Hardware optimiert, unterstützt zahlreiche Anwendungen und bietet eine benutzerfreundliche Oberfläche. Python ist auf dem Raspberry Pi besonders beliebt, da es eine große Auswahl an Bibliotheken bietet, die für die Steuerung von Hardware, wie GPIO-Pins oder Sensoren entwickelt wurden. Mithilfe von virtuellen Umgebungen (venv) können diese Bibliotheken projektbezogen installiert werden, wodurch Abhängigkeiten voneinander getrennt und die Stabilität des Systems verbessert werden. ### I2C & INA219 I2C (Inter-Integrated Circuit) ist ein Zweidraht-Kommunikationsprotokoll, das die Verbindung mehrere Geräte über kurze Distanzen ermöglicht. Es folgt dem Master-Slave-Prinzip, wobei ein Master-Gerät die Kommunikation steuert und Slave-Geräte über eindeutige Adressen angesprochen werden. I2C kann in der Kommandozeile aktiviert und anschließend verwendet werden. Befehl zur Adressprüfung: ``` bash sudo i2cdetect -y 1 # Zeigt aktive Adressen (z.B. 0x40 für INA219) ``` Der INA219 ist ein bidirektionaler Strom-/Leistungsmesser. Dieser misst den Strom, die Spannung und die Leistung über einen Shunt-Widerstand (0,1 Ω) gemäß dem Ohmschen Gesetz: ```{math} R = \frac{U}{I} ``` Er verstärkt die minimale Spannung am Shunt, digitalisiert sie via 12-Bit-ADC und kommuniziert die Werte per I2C. Der INA219 wird in einer High-Side-Montage verwendet, bei der der Shunt-Widerstand zwischen der Stromquelle und dem Verbraucher platziert wird. Er misst die Shunt-Spannung (der Spannungsabfall am Widerstand), die Bus-Spannung (die Spannung am Verbraucher) und berechnet daraus die Leistung. Die Kommunikation erfolgt über den I2C-Bus, wobei bis zu vier Adressen (0x40, 0x41, 0x44 und 0x45) durch Lötbrücken konfiguriert werden können. Der INA219 eignet sich ideal für Batterieüberwachung und Energieanalysen, stößt jedoch bei höhen Strömen über 3,2 A oder sehr niedrigen Strömen unter 1 mA an seine Grenzen. ## Durchführung ### Hardware Der erste Schritt der Durchführung bestand darin, das INA219 Modul zusammenzulöten. Das Modul wird in drei Teilen geliefert: * INA219 Chip * Schraubklemmen * Pins für Verbindung zum Raspberry Pi Das fertig zusammengebaute Modul sieht wie folgt aus: ```{image} images/ina219.png :alt: INA219 :width: 300px ``` Der Aufbau erfolgte entsprechend des folgenden Schaltplanes basierend auf [Rahner-Edu](#RahnerEdu): ```{image} images/schaltplan.png :alt: Schaltplan :width: 500px ``` Um einen späteren Wechsel des INA219 Moduls zu ermöglichen, wurden zuerst einzelne Drähte mit dem Raspberry Pi verlötet. Diese wurden dann über Wagoklemmen mit dem INA219 Modul verbunden. Für die Verbindung des INA219 mit der Batterie, deren Spannung gemessen werden soll, werden Krokodilklemmen verwendet. Der Positive Pol der Batterie ist direkt mit dem positiven Pol des INA219 verbunden. Normalerweise wird zwischen dem negativen Pol des INA219 und der Batterie ein Verbraucher geklemmt, dessen Spannung und Leistung gemessen werden kann. In unserem Fall ist keine Leistungsmessung vorgesehen, weshalb ein Widerstand zwischen Batterie und INA219 geklemmt wird. Damit die Messung der Batteriespannung korrekt funktioniert, müssen alle Teile dasselbe Potential haben. Dementsprechend wird der negative Pol der Batterie ebenfalls mit dem Gnd Pin des Raspberry Pi verbunden. ### Software Die Software für den RaspberryPi ist in Python geschrieben. Für die Interaktion mit dem INA219 wird die Bibliothek [pi-ina219](#Pi-INA219) genutzt. Zum Start der Software wird eine INA219-Instanz mit der höchstmöglichen Präzision erstellt. Da wir keine Leistungsmessung durchführen, wird die maximale erwartete Stromstärke auf den Minimalwert gesetzt. Nachfolgend wird in einer Schleife wiederholt die anliegende Spannung gemessen und in einer Liste gesammelt. Wurden genug Messungen gesammelt, wird ein Durchschnitt gebildet, welcher dann auf drei Nachkommastellen gerundet ausgegeben wird. Zusätzlich wird bei Abbruch des Skripts ein Graph zum Spannungsverlauf generiert und als Datei abgespeichert. ### Ausgabe ``` [01.04.2025 13:45:09] Voltage: 0.023 [01.04.2025 13:45:10] Voltage: 0.022 [01.04.2025 13:45:12] Voltage: 0.022 [01.04.2025 13:45:13] Voltage: 0.022 [01.04.2025 13:45:14] Voltage: 0.021 [01.04.2025 13:45:15] Voltage: 0.022 [01.04.2025 13:45:17] Voltage: 11.372 [01.04.2025 13:45:18] Voltage: 12.666 [01.04.2025 13:45:19] Voltage: 12.670 [01.04.2025 13:45:21] Voltage: 12.672 [01.04.2025 13:45:22] Voltage: 12.672 [01.04.2025 13:45:23] Voltage: 12.673 [01.04.2025 13:45:25] Voltage: 12.674 ``` Bei der Analyse dieser Ausgabe kann man erkennen, dass um 13:45:17 Uhr eine Batterie mit einer ungefähren Spannung von 12 Volt angeschlossen wurde. Der Raspberry Pi ist also in der Lage eine Spannungsveränderung zu erkennen und kann somit in Betrieb genommen werden. Folgender Graph zeigt einen leichten Spannungsabfall der Batterie ohne angeschlossene Last: ```{image} images/spannungsgraph.png :alt: Spannungsverlauf ``` ## Quellen (RahnerEdu)= Rahner-Edu: (Pi-INA219)= pi-ina219: