Spannung messen mit dem Arduino

Bei einem meiner Projekte wird zur Stromversorgung ein 12V Blei-Akku verwendet. Um dessen Spannung überwachen zu können wollte ich mit dem Arduino eine externe Spannung messen können.

Benötigt werden dazu lediglich zwei Widerstände, mit denen ein Spannungsteiler konstruiert wird. Die Widerstandswerte können mit dem passenden Code ziemlich frei gewählt werden. Zu beachten gilt nur, dass die Bedingung

5 * (R1+R2) / R2 <= U_messung

erfüllt wird. U_messung steht dabei für die maximale Spannung in Volt, die gemessen werden soll (bei einem Blei-Akku also ca. 14V). R1 & R2 sind die erwähnten Widerstände und der Faktor 5 gibt die Referenzspannung von 5V an (die liefert der Arduino).

Wenn der Spannungsteiler am Arduino angeschlossen wurde, müssen im folgenden Beispiel-Code nur noch die Widerstandswerte als r1 & r2 hinterlegt werden. Zur genaueren Messung wird zusätzlich die Refferenzspannung mittels readVcc() ermittelt und in die Berechnung miteinbezogen. Die gemessene Spannung wird dann über den Serial Monitor ausgegeben.

int voltagePin = A1; 

float u_max = 0;
float u_measure = 0;
float u_reference = 0;

int r1 = 390; //Widerstand 390 Ohm
int r2 = 100; //Widerstand 100 Ohm

void setup() {
   Serial.begin(9600);
} 

void loop() {
  u_reference = readVcc() / 1000.0;
  Serial.print("Referenzspannung: ");
  Serial.println( u_reference );
  
  u_max = u_reference*(r1+r2) / r2;
  
  u_measure = u_max/1024*analogRead(voltagePin);
  Serial.print("Akkuspannung: ");
  Serial.println(u_measure); 
 
  delay(1000);
}

long readVcc() {
  long result;
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2);
  ADCSRA |= _BV(ADSC);
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1126400L / result;
  return result;
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.