Arduino: Ein Spannungssensor und der Serielle Plotter

Ich bastle mir gerade eine USV für eienen Raspberry CarPC. Eigentlich kein Problem: Der Raspberry hängt am Dauerplus. Nebenbei wird das Zündungsplus überwacht. Wenn dieses wegbricht muss der Raspberry herunter gefahren werden. Wie gesagt kein Problem, aber …

Bei den Tests in der Werkstatt fährt der Raspberry immer mal wieder unmotiviert herunter. Der Grund war auch schnell gefunden: Um etwas erschwerte Bedingungen zu schaffen, hatte ich hier ein kleines Ladegerät als Spannungsquelle verwendet. Dieses liefert offenbar eine zwar gleichgerichtete aber überhaupt nicht geglättete Spannung. Irgendwann misst die Überwachung des Zündungsplus dann eben auch zufällig mal einen Nulldurchlauf. Den Wert kann man zwar problemlos softwaremäßig glätten indem man mehrere Werte mittelt. Ich wollte aber doch mal genauer wissen, was aus diesem Ladegerät heraus kommt.

Dafür eignet sich ganz wunderbar der sowieso vorhandene Spannungssensor und der Serielle Plotter in der neuen Arduino-IDE

Anschluss des Spannungssensors

Voltage Sensor

Voltage Sensor

Diese Spannungssensoren sind im Prinzip ganz simple Spannungsteiler. Sie besitzen meist drei Anschlüsse, nämlich GND, VCC und SIG. GND wird mit GND des Arduino verbunden, VCC kommt an 5V und die analoge Signalleitung habe ich auf A1 gelegt.

Auf der anderen Seite verbindet man die beiden Pole der Spannungsquelle mit den entsprechenden Anschlüssen am Spannungssensor.

Arduino Software

Ein erster Versuch einfach das Signal auszulesen und dann direkt seriell auszugeben ergab zwei Erkenntnisse:

  1. die Spannung schwankt zwischen knapp über null und ca. 16 Volt
  2. die Messungen erfolgen zu langsam um genaueres sagen zu können

Hier der Sopurcecode:


--- schnipp -------------------------------------
int analogInput = A1;

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

void loop(){
  Serial.println(analogRead(analogInput));
  delay(20);
}
--- schnapp -------------------------------------

und hier das Ergebnis im seriellen Plotter:

OK, zweiter Versuch: hier werden die Daten zunächst in einen Buffer geschrieben und erst anschließend an die serielle Schnittstelle weiter gegeben:

Sourcecode:


--- schnipp -------------------------------------
#define BUFSIZE 512
int analogInput = A1;

int buf[BUFSIZE];
int *p = buf;
int *p_end = p+BUFSIZE;

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

void loop(){
  p=buf;
  while(p<p_end) *p++ = analogRead(analogInput);

  p=buf;
  while(p<p_end)
  { Serial.println(*p++);
  }
  delay(5000);
}
--- schnapp -------------------------------------

und hier der Plot der Daten:

Das einlesen der 512 Werte in den Buffer dauert auf meinem Arduino Nano exakt 57 Millisekunden. Bei 50 Hz müssten also etwa 5,7 Halbwellen sichtbar sein. Und das scheint hier auch der Fall zu sein. Man kann den Arduino also sogar als Oszilloskop verwenden.


Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>