Arduino Mikrocontroller Tutorials - Softwaretechnik

Batterieladung messen mit analogReference(INTERN)

Der Ladezustand einer Batterie kann über eine Spannungsmessung ermittelt werden. Am besten misst man die Spannung während die Batterie gleichzeitig verwendet bzw. gerade belastet wird.

Beim Arduino kann die Spannung mit dem 10 Bit ADC über die analogen Eingänge gemessen werden. Gedanken müssen wir um die Referenzspannung machen. Die digitale Ausgabe ist immer ein Wert zwischen 0 und 1023. 0 entspricht dabei 0V und 1023 entspricht der Referenzspannung. Ohne weitere Einstellung ist dies VCC welche vom integrierten Spannungsregler abhängt und um 4,9 bis 5,1 V schwanken kann. Auch wenn die Spannungsversorgung auf 4V absinkt werden diese 4V als 1023 angenommen. Für eine Spannungsmessung ist diese Referenzspannung also ungeeignet.

Um das Problem zu lösen hat der Arduino eine internen fixe Spannung von 1,1V (1,1V beim Uno und 2,56V beim Mega) die mit analogReference(INTERNAL) als Referenz verwendet werden kann. Diese Spannung ist unabhängig von der Versorgungsspannung immer konstant bei 1,1V.

Schaltung und Programmcode

Mit der internen Referenzspannung können nur Spannungen von 0 - 1,1V gemessen werden. Die Spannung einer 9V Batterie muss also zunächst mit einem Spannungsteiler reduziert werden. Mit 1K und 10K teilt sich die Spannung nach dem ohmschen Gesetz so auf, dass bei einer vollen Batterie (=9V) am analogen Eingang 0,82V bzw. digital 763 gemessen wird und bei eine leeren Batterie (=7V) 0,64V bzw. digital 596.

Batterieladung
void setup() { analogReference(INTERNAL1V1); Serial.begin(9600); } void loop() { // Messwert lesen und begrenzen zwischen min 596 und max 763 int messwert = constrain(analogRead(A7), 596, 763); // begrenzte Messwerte umrechnen in 0 - 100% byte batterieladung = map(messwert, 596, 763, 0, 100); Serial.println("Batterieladung: " + String(batterieladung) + " %"); delay(200); }