In diesem Artikel möchte ich dir erklären, wie du beim Arduino mithilfe der seriellen Kommunikation Daten auf der seriellen Schnittstelle ausgeben kannst. Außerdem zeige ich dir, wie du in der Arduino IDE mit dem seriellen Plotter numerische Werte in Form eines Liniendiagramms visualisieren kannst. Ich persönlich halte dieses Feature für äußerst faszinierend.
Dieser Beitrag soll eine Ergänzung zu den bestehenden Beiträgen auf meinem Blog zum Thema serielle Kommunikation dienen und eine Lücke schließen. Zusätzlich zu diesem Beitrag findest du auch noch auf TikTok zwei passende Videos.
Inhaltsverzeichnis
- Wozu kann man die serielle Kommunikation nutzen?
- Ausgeben von Daten auf der seriellen Schnittstelle am Arduino
- Visualisieren von Daten im seriellen Plotter
Wozu kann man die serielle Kommunikation nutzen?
Mit dem Mikrocontroller Arduino kannst du Messdaten von Sensoren aufnehmen und diese sammeln. Du könntest diese nun auf eine SD-Karte schreiben oder ganz einfach via serieller Schnittstelle versenden.
Zusätzlich kannst du die Ausgabe von seriellen Daten auch nutzen, um dir Debugausgaben zur Fehleranalyse zu erzeugen.
Beispiel
Ich habe in der Vergangenheit einen Vergleich von Temperatursensoren in einem Klimaschrank durchgeführt und die Daten der Sensoren im CSV-Format ausgegeben. Die Daten habe ich dann mit dem Tool Putty in eine Datei schreiben lassen, welche ich später wiederum in Microsoft Excel aufbereiten konnte.
Ebenso kannst du über die serielle Schnittstelle Daten zwischen zwei Geräten austauschen. Im nachfolgenden Bild habe ich zwei Arduinos miteinander verbunden und kann somit zum Beispiel über die Taster Funktionen auf dem anderen Gerät ausführen lassen.
Den passenden Beitrag dazu findest du unter Arduino Lektion 96: serielle Kommunikation.
Ausgeben von Daten auf der seriellen Schnittstelle am Arduino
Im ersten Schritt möchte ich dir zeigen, wie du Daten auf der seriellen Schnittstelle ausgeben kannst. Dazu musst du jedoch erstmal diese Kommunikation starten.
Schritt 1 – starten der seriellen Kommunikation
Dazu schreiben wir in der Funktion “setup”:
void setup() { Serial.begin(9600); }
Damit starten wir die serielle Kommunikation mit 9600 Baud.
Was ist Baud?
Mit dem Begriff ‘Baud’ wird die Anzahl der Signalwechsel pro Sekunde in einer digitalen Kommunikation angegeben, was die Übertragungsgeschwindigkeit von Daten darstellt.
Schritt 2 – Ausgeben von seriellen Daten
Um jetzt Daten auf der seriellen Schnittstelle auszugeben, haben wir zwei Funktionen zur Verfügung.
Serial.print(); Serial.println(); // am Ende mit Zeilenumbruch
Funktion print
Die Funktion print erzeugt eine Ausgabe auf der seriellen Schnittstelle ohne einen Zeilenumbruch am Ende. Du kannst diese Funktion nutzen, um Daten zu verketten, ohne dass deine Codezeile zu lang wird.
void setup() { Serial.begin(9600); } void loop() { Serial.print("Text1"); Serial.print("Text2"); delay(500); }
Der Code erzeugt die Ausgabe:
Man erkennt, dass die Daten hintereinanderweg geschrieben werden.
Funktion println
Die Funktion println wirst du wahrscheinlich öfters verwenden, denn diese erzeugt nicht nur eine Ausgabe, sondern erzeugt am Ende auch ein Zeilenumbruch.
void setup() { Serial.begin(9600); } void loop() { Serial.println("Text1"); Serial.println("Text2"); delay(500); }
Der Code erzeugt die Ausgabe:
Hier werden nach jeder Zeile ein Zeilenumbruch geschrieben und du erhältst eine saubere, lesbare Ausgabe.
Visualisieren von Daten im seriellen Plotter
Die Arduino IDE verfügt seit dem Update 1.8.10 über den seriellen Plotter, in welchem wir Zahlenwerte in einem Liniendiagramm anzeigen lassen können.
Die Visualisierung der Daten ist hier besonders einfach, denn wir müssen lediglich die Zahlenwerte mit der zuvor gezeigten Funktion println auf der seriellen Schnittstelle ausgeben.
void setup() { //beginn der seriellen Kommunikation mit 9600 baud Serial.begin(9600); } void loop() { //erzeugen einer Zufallszahl //zwischen 0 und 500 int num1 = random(0,500); //ausgeben der Zufallszahl inkl. Zeilenumbruch Serial.println(num1); //eine kleine Pause von 500 ms. delay(500); }
Aufbau des seriellen Plotters
Der serielle Plotter ist wiefolgt aufgebaut:
Visualisieren von Zahlenwerten
Wenn du eine Zahl mit der Funktion println auf der seriellen Schnittstelle ausgibst, dann kannst du dir diese recht einfach auch im seriellen Plotter anzeigen lassen. Du musst jedoch eine kleine Pause zwischen den Werten einlegen, ansonsten ist das Diagramm zu schnell, zu klein.
Troubleshooting – Zahlen & Text gemischt
Der serielle Plotter kann wie erwähnt nur Zahlenwerte visualisieren, solltest du jedoch noch zusätzlich Text mit ausgeben, so funktioniert dieser nicht mehr korrekt.
Mehrere Zahlenwerte visualisieren
Eingangs habe ich dir gezeigt, wie du einen Zahlenwert visualisieren kannst, wenn du jedoch unterschiedliche Daten hast, dann möchtest du diese ggf. auch in separaten Linien visualisieren. Dazu musst du die Daten in einem bestimmten Format absenden.
Im nachfolgenden Beispiel verwende ich den DHT11 Sensor, welcher die Temperatur und die rel. Luftfeuchtigkeit liefert.
Wie du diesen Sensor am Arduino programmierst, habe ich dir bereits im Beitrag Arduino Lesson #11 – Humidity & Temperaturesensor DHT11 ausführlich erläutert. Hier möchte ich dir gerne zeigen, wie du beide Sensorwerte separat visualisieren kannst.
Wie erwähnt, müssen die Daten in einem bestimmten Format abgesendet werden:
"Legendenbeschriftung1[:]"+<Messwert>+",""Legendenbeschriftung2[:]"+<Messwert>
Im Code würde dieses wie folgt aussehen:
Serial.print("rel.Luftfeuchtigkeit(%):"); Serial.print(65); Serial.print(","); Serial.print("Temperatur(°C):"); Serial.println(21);
Serial.print("rel.Luftfeuchtigkeit(%):"); Serial.print(DHT.getHumidity(), 1); Serial.print(","); Serial.print("Temperatur(°C):"); Serial.println(DHT.getTemperature(), 1);
Die Ausgabe ist dann wie folgt:
Im seriellen Plotter werden jeweils für die Temperatur und für die rel. Luftfeuchtigkeit eine Linie angezeigt. Des Weiteren findest du in der Legende den entsprechenden Text mit der Farbe der Linie.
Über die Checkbox vor der Bezeichnung kannst du die entsprechende Linie ausblenden / einblenden.