zurück zur Übersicht...
17.06.2018

Spannungsmessung mit dem Arduino

Mit dem Arduino lässt sich ein einfaches Spannungsmessgerät bauen, mit dem man z.B. Batterie testen kann.

Messungen bis 5V

Dadurch, dass die I/O-Pins des Arduino zwischen 0V und 5V belastbar sind und als Eingang auch gültige Ergebnisse liefern, kann man für alle Spannungsquellen unter 5V einen sehr simplen Aufbau für die Spannungsmessung erdenken.
Achtung: Vor der Messung sollte man sich absolut sicher sein, dass die zu messende Spannungsquelle definitiv unter 5V liegt, sonst kann der Arduino irreserviblen Schaden nehmen

Verwendete Bauteile

Schaltung & Aufbau

Schaltplan
Abb.: Schaltplan
Aufbau der Schaltung
Abb.: Aufbau der Schaltung

Code

#define PIN_TEST A0

#define REF_VOLTAGE 5.0
#define PIN_STEPS 1024.0

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

void loop()
{
    Serial.print("U = ");
    Serial.print(analogRead(PIN_TEST)*REF_VOLTAGE/PIN_STEPS);
    Serial.println(" V");
    delay(2000);
}
Ausgabe in der seriellen Konsole
Abb.: Ausgabe in der seriellen Konsole: Die anliegende Spannung am Pin A0 wird ausgegeben

Messungen bis 30V

Da die I/O-Pins des Arduino nur für max. 5V ausgelegt sind, wir aber auch Spannungsquellen überhalb dieses Wertes messen wollen, z.B. Auto-Batterie, benötigen wir einen etwas anderen Aufbau der Schaltung.
Die Widerstände (R1 = 100Ω und R2 = 10kΩ) reduzieren die zu messende Spannung auf ein Elftel des ursprünglichen Werts (Spannungsteiler). Wenn an den I/O-Pins des Arduino nicht mehr als 5V ankommen dürfen, ergibt sich so eine theoretisch mögliche Eingangsspannung von 55V (=11 * 5V).
(Zum Schutz vor Verpolung setzen wir noch eine Diode ein).

Erklärung

Zur Berechnung der Teilspannung U2 über R2 muss zunächst der Gesamtwiderstand berechnet werden:
Rges = R1 + R2
Wenn die Gesamtspannung und die Widerstände bekannt sind, lässt sich nach dem Ohmschen Gesetz die Stromstärke (I) bestimmen:
I = U/Rges = U/R1 + R2
Nach den Regeln der Reihenschaltung ist der Strom durch alle Bauteile gleich, somit lässt sich das gesuchte U2 bestimmen:
U2 = I * R2
Setzt man die Formel für den gemeinsamen Strom (I = U/Rges) ein, ergibt sich die Ausgangsspannung (in Abhängigkeit von den Widerständen und der Eingangsspannung):
U2 = U/Rges * R2
Setzt man die oben angegebenen Werte ein, ergibt sich:
U2 = 55/110 * 10 = 5
Weil bei realen Widerständen die angegebenen Werte nur näherungsweise zutreffen, empfiehlt es sich, einen Sicherheitsbereich zu den errechneten Grenzwerten einzuhalten und die Eingangsspannung auf 30V zu begrenzen.

Verwendete Bauteile

Schaltung & Aufbau

Schaltplan
Abb.: Schaltplan
Aufbau der Schaltung
Abb.: Aufbau der Schaltung (hier mit 9V-Batterie als Test-Spannungsquelle)

Code

Hinweis: die Werte für R1 und R2 sollten im Sketch sehr exakt angegeben werden, d.h. es empfiehlt sich, diese vorher genau zu messen.

#define PIN_TEST A0

#define REF_VOLTAGE 5.0
#define PIN_STEPS 1024.0

float vout = 0.0, vin = 0.0;
float R1 = 100000.0; // resistance R1 (= 100 KOhm)
float R2 =  10000.0; // resistance R2 (= 10 KOhm)
int rawValue = 0;

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_TEST, INPUT);
}

void loop()
{
    rawValue = analogRead(PIN_TEST);
    vout = (rawValue * REF_VOLTAGE) / PIN_STEPS;
    vin = vout / (R2 / (R1 + R2));

    // suppress noise
    if (vin < 0.09) {
        vin = 0.0;
    }

    Serial.println("U = " + String(vin) + " V");
    delay(1000);
}
Ausgabe in der seriellen Konsole
Abb.: Ausgabe in der seriellen Konsole: Die anliegende Spannung am Pin A0 wird ausgegeben

Weitere Möglichkeiten

Es ist auch möglich externe Module wie den INA226 zusammen mit dem Arduino zu verwenden. Damit ließe sich Spannung bis zu 36V messen. In einer späteren Anleitung werde ich den INA226 genauer unter die Lupe nehmen.