Ein ganz einfaches Voltmeter kann man mithilfe eines Spannungsteilers aufbauen. Hier werden, abgesehen
von einer Visualisierungseinrichtung, lediglich zwei Widerstände benötigt.
In dem Versuch konstruieren wird ein solches Voltmeter, das Spannung im Bereich 0 bis 30 VDC messen soll. Das
Ergebnis wird auf einem TFC-LCD – Display sichtbar gemacht. Die Umwandlung der Messgröße in eine Zahl, die der gemessenen
Spannung entspricht, übernimmt Arduino Mega.
Arduino Mega
Der Mikrocontroller Arduino Mega (Hier Nachbau aus China) stellt die Schnittstelle zwischen dem Spannungsteiler,
der in der Schaltung als unsere Messeinrichtung fungiert, und dem Display, auf dem das Ergebnis angezeigt wird, dar.
Der Arduino Mega stellt 54 I/Os und 16 analoge Eingänge zur Verfügung. Für die Spannungsmessung wird lediglich ein
einziger analoger Eingang benutzt. Es ist also reichlich Reserve für andere Aufgaben vorhanden.
Bei dem kleinen Touch-Display handelt es sich um ein aufsteckbares Display-Modul. Das Teil wird einfach auf
Arduino gesteckt, alles andere wird mit Software erledigt. Eine Diskussion, ob ein so leistungsfähiges Dispaly für
eine so einfache Aufgabe die richtige Wahl ist, soll an dieser Stelle nicht entfachtet
werden.
Die zu messende Spannung wird an den Klemmen A und B angeschlossen. Sie soll die Spannung von 30VDC
nicht übersteigen. Der Spannungsteiler R1-R2 teilt die Spannung und sorgt dafür, dass das Potenzial am Punkt C den Wert
von 5V nicht übersteigt. Spannung von 5 V ist nämlich für Arduino die maximale Spannung, die an seinen Eingang gelegt
werden darf. Eine höhere Spannung kann das Gerät beschädigen. Für den Fall der Fälle hängt am Punkt C noch ein Bauteil:
eine Zenerdiode. Sie schneidet, sollte es notwendig sein, bei Werten über 5,1V die Spannung einfach ab. Sie spielt in
der Schaltung die Rolle eines Wächters und hat mit der eigentlichen Messung nichts zu tun.
Die Berechnung des Spannungsteilers erfolgt nach der Formel:
Uc = Umess * R2 / (R1 + R2)
Wenn wir festlegen, dass der Widerstand R2 10kOhm betragen soll, ergibt sich für den Widerstand R1:
R1 = (Umess – Uc) * R2 / Uc = (30 – 5) * 10 / 5 = 50 kOhm.
In der Schaltung setzen wir einen 51 kOhm Widerstand ein. Damit ergibt sich eine kleine Reserve „von oben“.
Bei den Berechnungen eines Spannungsteilers kann der E-Rechner behilflich sein:
// -------------------------------------------------------------------------------------
// Arduino - Sketch
// Voltmeter mit Spannungsteiler und Arduino
// Mit Arduino Mega 2560 R3, TFT LCD 320x240
//
// MCUFRIEND_kbv.h - V 2.9.9
// Arduino IDE - V 1.8.19
// -------------------------------------------------------------------------------------
#include<MCUFRIEND_kbv.h> // Bibliothek einbinden
MCUFRIEND_kbv tft;
#define BLACK 0x0000 // Farben Hexadezimal
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
float Korrekturfaktor = 1.03; // Messwert-Korrektur
float Spannung; // Endergebnis gemessene Spannung
String Ausgabe_NEU; // Ausgabe Variable
String Ausgabe_ALT;
void setup(void) { // SetUp (einmaliger Durchlauf)
tft.begin(0x9341);
tft.setRotation(1); // Ausrichtung
tft.fillScreen(BLUE); // Hintergrundfarbe
tft.setTextSize(4); // Schriftgrösse
tft.setTextColor(CYAN); // Textfarbe
tft.setCursor(50, 25); // Cursorposition
tft.print("VOLTMETER"); // Display Beschriftung
tft.setCursor(270, 160);
tft.print("V"); // V für Volt
tft.setTextSize(10); // Schriftgröße für Spannungswert
}
void loop(void) {
float Wert_am_Eingang = analogRead(A8); // Eingang analog lesen
Spannung = (Wert_am_Eingang * 5) / 1023 * 6; // Berechnung der Spannung
Spannung = Spannung * Korrekturfaktor; // Abgleich mit Korrekturfaktor
Ausgabe_NEU = String(Spannung,1); // Spannungswert in String umwandeln
for (int i = 0; i < 4; i++) { // Wertausgabe stellenweise
int X_Pos = 20 + (i * 60); // X Position auf dem Display
tft.setCursor(X_Pos, 120); // Koordinaten setzen
if (Ausgabe_NEU.charAt(i) != Ausgabe_ALT.charAt(i)) { // Soll der alte Wert gelöscht werden?
tft.setTextColor(BLUE); // Löschen = Überschreiben mit
// Hintergrundfarbe
tft.print(Ausgabe_ALT.charAt(i)); // Alten Wert schreiben
tft.setCursor(X_Pos, 120); // Zurück auf die Startposition (x,y)
}
tft.setTextColor(YELLOW); // Ausgabe Farbe
tft.print(Ausgabe_NEU.charAt(i)); // Neuen Wert schreiben
}
Ausgabe_ALT = Ausgabe_NEU; // Variable Ausgabe_Alt neu belegen
delay(250); // Wartezeit
}
// -------------------------------------------------------------------------------------
Das Programm besteht aus zwei Teilen. In dem ersten Teil wird der analoge Ausgang ausgelesen und das
Ergebnis errechnet. In dem zweiten Teil befasst sich das Programm mit der Ausgabe des Ergebnisses auf dem Display.
Der erste Teil der Rechnung basiert auf der Tatsache, dass der analoge Eingang bei 5V den Wert 1023 liefert. Da die
Abhängigkeiten linear verlaufen, ergibt sich für jeden beliebigen Wert vom anlogen Eingang direkt eine konkrete Spannung:
U = (Ermittelter Wert * 5) / 1023;
Da wir mit einem Spannungsteiler, der die Messspannung um das Sechsfache verringert, arbeiten, muss der errechnete Wert
mit 6 multipliziert werden. Schließlich, da wir einen etwas größeren Wert für R1 gewählt haben und zusätzlich die Toleranzen
der Komponenten ins Spiel kommen, muss das Endergebnis ein wenig korrigiert werden. In diesem Fall beträgt der Korrekturfaktor, mit dem
das Ergebnis multipliziert wird, 1,03. Er muss empirisch für jede Schaltung separat ermittelt werden.
Dazu stellt man die Messspannung auf 30V und liest den angezeigten Wert ab.
Korrekturfaktor = 30 / abgelesener Wert
Möchte man größere Spannungen mit dem Voltmeter messen, muss der Widerstand R1 größer gewählt werden und die ganze
Rechnung wiederholt werden.
Bei der Ausgabe des Ergebnisses auf dem Display muss beachtet werden, dass die alte Anzeige, bevor neue Messergebnisse
angezeigt werden, zunächst gelöscht werden muss. Das kann man dadurch erreichen, dass der alte Wert einfach mit Farbe des
Hintergrunds überschrieben wird. Genau diese Methode kommt in dem Programm zum Einsatz. Lediglich um die Anzeige zu
beruhigen, wird nicht der gesamte Ausgabewert, sondern nur die Zeichen, die sich geändert haben,
überschrieben