A10|01 Der Spannungssensor
Voltage Sensor


Sensorwerte / Strom und Spannung messen

Einen Spannungssensor verwendet man, um z.B. die Nennspannung einer Batterie zu messen. Über die gemessene Spannung können wir Rückschlüsse auf die aktuelle Akkuladung ziehen und z.B. mit einer RGB-LED visuell darstellen:

Grün = Batterie voll
Rot = Energie neigt sich dem Ende zu
Rot blinkend = kritisches Ladeniveau

 

Spezifikationen
- Spannung: 0V bis 25V DC
- Signalart: Analog
- Pinabstand: 2.54mm

Normalerweise ist es kein Problem, mit dem Arduino-Board eine Spannung direkt über die Pins zu messen, vorausgesetzt die zu messende Spannung übersteigt keine 5V! Schließt man mehr als 5V an einen Arduino-Pin an, wird der Pin zerstört. Eventuell ist der Schaden größer und der Mikrocontroller ist danach funktionsunfähig. Soll mehr als 5V gemessen werden benötigen wir den Spannungssensor. Dieser kann bis zu 25V gefahrlos einlesen. Das Funktionsprinzip des Spannungssensors ist der Spannungsteiler.

 

Der Spannungsteiler

Spannungsteiler sind eine der grundlegendsten Schaltungen in der Elektronik. Es ist eine einfache Schaltung, die eine größere Spannung in kleinere Spannungen zerteilt. Mit nur zwei Reihenwiderständen (R1, R2) kann das Modul eine Ausgangsspannung erzeugen, die unterhalb der gesunden 5V liegt.

U = Gesamtspannung in V

R1 = bekannter Teilwiderstand in Ohm

R2 = bekannter Teilwiderstand in Ohm

Die untere Abbildung zeigt die Schematik des Spannungssensors. Er besteht aus zwei Reihenwiderständen mit R1 = 30,1kOhm und R2 = 7,6kOhm. Es ist äußerst wichtig auf die richtige Polung zu achten! Gib genau acht, dass du die Kabel richtig anschließt. Der Positive-Pol der Batterie wird auf die Seite des höheren R1 angeschlossen. Die Wahl dieser beiden Widerstände bestimmt die Berechnung der Nennspannung. Ein wichtiger Faktor ist natürlich, dass sie den Strom und die Spannung herab setzen.

 

Die Berechnung der Spannung läuft in 3 Schritten ab. Schritt #1: Zuerst brauchen wir das Verhältnis der beiden Widerstände R1 und R2 zueinander. In Schritt #2 übersetzen wir dieses Verhältnis auf die Auflösung des Analog-Digital-Converters (ADC). Dabei handelt es sich um den analogen Pin A0 auf dem Arduino. Dieser hat eine Resolution von 1024 Steps. Im letzten Schritt #3 setzen wir alles in Beziehung, in dem wir die Spannungsformel anwenden.

 

Schritt #1 DasvVerhältnis der Widerstände R1 und R2

Die Formel für das Verhältnis der beiden Widerstände im Spannungsteiler lautet:
Widerstandsverhältnis = R2 / (R1 + R2) = 30,1 / (30,1 + 7,6) = 1 : 5

Das Verhältnis beträgt ca. 1:5 (0,2). Dieses Verhältnis wird dann in Bezug zur 5V-Referenzspannung des Arduino gesetzt.

 

Schritt #2 Das Verhältnis von 1:5 auf den ADC-Bereich übertragen

Die Auflösung aller analogen INPUT-Pins des Arduino beträgt 10Bit. Das ergibt insgesamt 0 bis 1023 Schritte (mit der 0 sind es 1024 Werte). Die 5V-Referenzspannung (VREF) entspricht dem Wert 1024 ADC. Die 5V-Spannung wird in 1024 Schritte geteilt. Das ergibt eine Auflösung von rund 0,0049V (5V / 1024). Das sind umgerechnet 4,89mV (Millivolt) pro Schritt.

 

Wird die Referenzspannung mit dem Widerstandsverhältnis multipliziert, setzen wir beide in Beziehung und erhalten das Widerstand-ADC-Verhältnis. Diesen brauchen wir für die Berechnung der elektrischen Spannung. Wir benutzen die obere Formel mit der Auflösung des ADC und erhalten das Widerstand-ADC-Verhältnis:

Widerstand-ADC-Verhältnis = 1024 * (R2 / (R1 + R2)) => 1024 * (30,1 / (30,1 + 7,6) = ca. 5115

 
 

Schritt #3 Die Berechnung der Spannung

Die elektrische Spannung errechnen wir, in dem wir den aktuellen Analog-Input-Wert durch den Widerstandsfaktor dividieren und zum Schluss mit der Referenzspannung multiplizieren. Bei dem aktuellen ADC-Wert handelt es sich um den eingelesenen Wert aus dem analogen Arduino Pin, der mit dem Befehl analogRead() erfasst wird.

Voltzahl = (aktueller ADC Wert / Widerstand ADC Verhältnis) * 5V Referenzspannung

 
 

Der Aufbau

Verbinde dein Arduino mithilfe der Jumper Wire mit dem Modul. Achte sehr genau, dass du das Board richtig verkabelst!!! Ein Verkabelungsfehler kann zur Zerstörung des Sensors führen. Mit diesem Sensor kannst du bis zu 25V messen. Löse die Schrauben am Sensor, führe die Anschlüsse der Batterie ein und verschraube die Kabel, sodass sie fest im Sensor sitzen. Achte auch hier auf die Verkabelung: VCC zum Plus-Pol und GND zum Minus-Pol der Batterie.

 
 

Der minimal Sketch

Kopiere den unteren Sketch, füge ihn in die Arduino IDE ein und lade ihn auf das Arduino-Board rauf.

/**************************************************
A10|01 Der Spannungssensor
Der minimal Sketch
Mr Robot UXSD / www.mrrobotuxsd.com
***************************************************/

const float referenceVolts = 5; //5V-Referenzspannung VREF

const float R1 = 30.1; //Widerstandswert in Kilo-Ohm
const float R2 = 7.58; //Widerstandswert in Kilo-Ohm

//Widerstand-ADC-Verhältnis = 1024 * (R2 / (R1 + R2)) 
const float resistorADCrelation = 1023 * (R2/(R1 + R2));
const int batteryPin = A0; //Pin an dem der Sensorwert abgelesen wird


void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600); 
}


void loop() 
{
  int batteryValue = analogRead(batteryPin); //Lies den aktuellen Wert am Pin A0

  //Berechnung der Spannung:
  //Voltzahl = (aktueller ADC Wert / Widerstand ADC Verhältnis) * 5V Referenzspannung
  float volts = (batteryValue / resistorADCrelation) * referenceVolts ; 

  Serial.print("Batterie-Spannung: ");
  Serial.println(volts,6); //Wert in Volt am seriellen Monitor ausgeben
  
  delay(500); //Verzögerung
}
 

Die Referenzspannung (referenceVolts) ist die maximale Spannung, die uns das Arduino liefern kann. R1 und R2 enthalten die Widerstandswerte, die auf dem Spannungsteiler-Board verbaut sind. Alle drei float-Variablen sind unveränderlich (const).

const float referenceVolts = 5; //5V-Referenzspannung VREF

const float R1 = 30.1; //Widerstandswert in Kilo-Ohm
const float R2 = 7.58; //Widerstandswert in Kilo-Ohm
 

Das Widerstand-ADC-Verhältnis halten wir in der Variablen resistorADCrelation fest.

//Widerstand-ADC-Verhältnis = 1024 * (R2 / (R1 + R2)) 
const float resistorADCrelation = 1023 * (R2/(R1 + R2));
 

Wenn beispielsweise eine AAA NiMH-Batterie neu und vollgeladen ist, sollte sie im seriellen Monitor einen Wert um die 1,3V anzeigen - bei älteren Batteriezellen sind es ca. 1,2V oder weniger. Ein Multimeter ist hier sehr hilfreich. Dann kannst du überprüfen, ob die ausgegebene Spannung am seriellen Monitor mit der tatsächlichen übereinstimmt. Übrigens kannst du bei float Variablen bestimmen wie hoch die Auflösung nach dem Komma sein soll, in dem du, wie unten gezeigt, nach der Variable volts eine Zahl angibst. Im unteren Beispiel sind es sechs Stellen vor dem Komma.

Serial.print("Batterie-Spannung: ");
Serial.println(volts,6); //Wert in Volt am seriellen Monitor ausgeben
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst.

Du solltest nun die folgende Anzeige sehen:

 

Falls du die hier beschriebenen Elektronik-Module nicht hast, kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite, erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.