Mit dem Arduino lässt sich ein einfaches Spannungsmessgerät bauen, mit dem man z.B. Batterien testen kann.
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 eine simple Schaltung für die
Spannungsmessung aufbauen.
Achtung: Vor der Messung sicherstellen, dass die zu messende Spannungsquelle definitiv
unter 5V liegt, sonst kann der Arduino beschädigt werden!
#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);
}
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 = 100kΩ 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).
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.
Hinweis: die Werte für R1 und R2 sollten im Sketch sehr exakt angegeben werden, d.h. es empfiehlt sich, diese vorher mit dem Multimeter genau zu messen. Da die verwendete Diode eine Vorwärtsspannung UV besitzt (üblicherweise von ca. 0,5V) muss dies in der Messung ebenfalls berücksichtigt werden. UV sollte daher vorher ebenfalls mit dem Multimeter vorher gemessen und in den Sketch eingetragen werden.
#define PIN_TEST A0
#define REF_VOLTAGE 5.0
#define PIN_STEPS 1024.0
const float diodeVoltage = 0.538; // forward voltage of the used diode in Volts
const float R1 = 99200.0; // exact resistance of R1 (= 100 kOhm)
const float R2 = 9990.0; // exact resistance of R2 (= 10 kOhm)
float vout = 0.0, vin = 0.0;
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));
if (vin < 0.09) {
vin = 0.0; // suppress noise
} else {
vin += diodeVoltage;
}
Serial.println("U = " + String(vin) + " V");
delay(1000);
}
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.
zurück