Neues Tutorial "Arduino-Daten visualisieren"

Hallo zusammen,

ich habe die Arbeit der letzten beiden Abende einmal als Tutorial zusammen geschrieben. Thema ist die Visualisierung von Daten. Zu finden nicht auf meiner eigenen Homepage sondern im Playground auf Arduino.cc ;-)

http://www.arduino.cc/playground/Deutsch/ShowSerialDataWithLogViewDe

Über Anregungen, Kritik, etc. würde ich mich freuen.

Lieben Gruß Euer Poldi

Sehr gute Anleitung, danke Poldi Nur bleib ich als Linux User aussen vor, LogView gibts nur für Windows. Hier ist gnuplot die erste Wahl, download für viele Plattformen.

Habe es zwar noch nicht getestet, aber ich finde es super, dass mal jemand im deutschen Playground neuen Content einstellt! Werde es diese Woche noch testen wenn ich wieder einen PC zur Hand habe.

wusste gar nicht dass es einen deutschen playground gibt

hmm hmm, LogView kannte ich noch gar nicht, sieht aber nett aus. Nach einigen Fehlversuchen hab ichs auch zum Laufen bekommen, jetzt steh ich aber vor einem anderen Problem: Deine Testgrafik mit den Analogwerten vom Nunchuk zeigt sehr saubere Kurven. Bei mir gibt es ein stetes auf und ab. In der Grafik sieht man z.B. angeschlossen einen Fototransistor, ca. von Sekunde 10-25 mit Finger davor, ab dann ohne Finger davor:

Messwerte kommen also richtig an, allerdings habe ich immer diese Welle drin (übrigens auch wenn ich einfache nur nen Poti an den Analog in hänge). Mit externem Netzteil ist die Amplitude geringfügig kleiner, noch kleiner wird sie wenn ich z.B. den Anschlussdraht des Widerstands der IR-LED anpacke. Irgendjemand eine Idee was das sein könnte? Netzbrumm vielleicht?

VG, Otacon2k Irgendjemand eine Idee was das sein könnte? Netzbrumm?

P.S.: achso, hier noch der kleine simple Code den ich benutze:

void setup(){
  Serial.begin(57600);
}

void loop(){
  Serial.print("$1;1;0;");
  Serial.print(analogRead(5)/4, DEC);
  Serial.println(";0");
  delay(100);
}

Autsch! Nachdem ich jetzt mal alle anderen Analog Ins auf Ground gesetzt hab, siehts schon viel besser aus...

Hätte nicht gedacht dass das so nen riesigen Unterschied macht...

Otacon2k

Ja, das sieht doch schon besser aus ;-)

Scheint als wäre die Anleitung ja brauchbar!

Ich hatte zu Anfang auch so meine Probleme mit LogView. Besonders die Auswahl meiner Ini-Datei hat mich fast zur Verzweiflung gebracht weil sie auch weiter oben in der Liste auftauchte - bis ich dann auf den Seiten gelesen habe das die OpenFormat-Dateien ganz unten in der Liste zu finden sind...

Lieben Gruß Poldi

Erstmal Hallo in die Runde, ich bin ein absoluter Arduino neuling und versuche gerade verzweifelt mit Logview mir die Daten anzusehen, die der Arduino ausgibt.

Vielleicht kann mir jemand von euch helfen.

Arduino Code

#define xaxis 0
#define yaxis 1
#define zaxis 2

int loop_cnt=0;

byte accx,accy,accz;

void setup() {

    Serial.begin(57600);
    
}

void loop() {

    if( loop_cnt > 100 ) { // every 100 msecs get new data
        loop_cnt = 0;

        
        accx  = analogRead(xaxis); // ranges from approx 70 - 182
        accy  = analogRead(yaxis); // ranges from approx 65 - 173
        accz  = analogRead(zaxis);
        
        //Datenausgabe LogView kompatibel 
        Serial.print("$1;1;0;"); 
        Serial.print((byte)accx,DEC);
        Serial.print(";"); 
        Serial.print((byte)accy,DEC);
        Serial.print(";");
        Serial.print((byte)accz,DEC);
        Serial.print(";");
        Serial.println(13,DEC);

    }
    loop_cnt++;
    delay(1);
}

ini Datei

[Gerät]
Name                            = Arduino
Hersteller                      = Arduino
Gruppe                          = 09
Device_ID                       = ID_OPENFORMAT
Used                            = 1
Abbildung                       = OpenFormat.jpg
ChangeSettings                  = 1
HerstellerLink1                 =
HerstellerLink2                 = 
LogViewLink                     = 
TimeStep_ms                     = 500
TimeGiven                       = 0
KanalAnzahl                     = 1
WerteFormat                     = ASCII
Prüfsummenberechnung            = keine
PrüfsummenFormat                = ASCII

[Stati]
StatiAnzahl                     = 1
001                             = ARDUINO

[serielle Schnittstelle]
Port                            = COM7
Baudrate                        = 57600
Datenbits                       = 4
Stopbits                        = 0
Parität                         = 0
Flusskontrolle                  = 0
ClusterSize                     = -100
SetDTR                          = 0
SetRTS                          = 0

[Schnittstelle TimeOuts]
RTOCharDelayTime                = 1100
RTOExtraDelayTime               = 190
WTOCharDelayTime                = 1100
WTOExtraDelayTime               = 190

[Anzeige Einstellungen Kanal 01]
Zeitbasis                       = Zeit
Einheit                         = s
Symbol                          = t
WerteAnzahl                     = 6

Messgröße1                      = Nunchuck_ACC_X
Einheit1                        = 
Symbol1                         = 
Faktor1                         = 
OffsetWert1                     = 
OffsetSumme1                    = 

Messgröße2                      = Nunchuck_ACC_Y
Einheit2                        = 
Symbol2                         = 
Faktor2                         = 
OffsetWert2                     = 
OffsetSumme2                    = 

Messgröße3                      = Nunchuck_ACC_Z
Einheit3                        = 
Symbol3                         = 
Faktor3                         = 
OffsetWert3                     = 
OffsetSumme3                    =

Das zeigt mir der Serial Monitor an

$1;1;0;0;25;40;13
$1;1;0;0;26;39;13
$1;1;0;0;25;39;13
$1;1;0;0;26;39;13
$1;1;0;0;25;41;13
$1;1;0;0;25;40;13
$1;1;0;0;25;40;13
$1;1;0;0;25;39;13
$1;1;0;0;25;39;13
$1;1;0;0;25;39;13
$1;1;0;0;24;38;13
$1;1;0;0;25;39;13
$1;1;0;0;25;39;13
$1;1;0;0;25;39;13
$1;1;0;0;25;39;13

Vielleicht könnte mir jemand erklären wo mein Fehler ist.

Danke schonmal für eure mühen.

Hallo G-Evil,

auf den ersten Blick fällt mir auf das in der vorletzten Serial print Anweisung eine Null fehlt. Die ist glaube ich wichtig (vergleiche mal mit meinem Code im Playground).
Und dann ist noch ein Fehler in der INI-Datei vorhanden. “Datenbits = 8”!!!

Ansonsten schreib doch mal bitte wie sich LogView verhält. Gibt es eine Fehlermeldung? Ist der Com Port richtig und bei Verwendung von LogView auch frei (Arduino-IDE / Serial Monitor aus)??? Kannst Du in LogView das “Gerät” (ganz unten) wählen?

Weiterhin viel Erfolg!
Lieben Gruß
Poldi :sunglasses:

Habe auch gesehen, das ich die Falsche ini geposted habe.

LogView ist auf dem Entsprechenden Port und Baudrate eingestellt, wie in der ini angegeben. LogView macht eigentlich garnichts.

Die Anzeige CON ist hellgrün, RX blinkt dunkelgrün/rot gelb, TX ist gunkelgrün.

Arduino Code

#define xaxis 0
#define yaxis 1
#define zaxis 2

int loop_cnt=0;

byte accx,accy,accz;

void setup() {

    Serial.begin(57600);
    
}

void loop() {

    if( loop_cnt > 100 ) { // every 100 msecs get new data
        loop_cnt = 0;

        
        accx  = analogRead(xaxis); // ranges from approx 70 - 182
        accy  = analogRead(yaxis); // ranges from approx 65 - 173
        accz  = analogRead(zaxis);
        
        //Datenausgabe LogView kompatibel
        Serial.print("$1;1;0;");
        Serial.print((byte)accx,DEC);
        Serial.print(";");
        Serial.print((byte)accy,DEC);
        Serial.print(";");
        Serial.print((byte)accz,DEC);
        Serial.print(";0");
        Serial.println(13,DEC);

    }
    loop_cnt++;
    delay(1);
}

ini Datei

[Gerät]
Name                            = Arduino
Hersteller                      = Arduino.cc
Gruppe                          = 09
Device_ID                       = ID_OPENFORMAT
Used                            = 1
Abbildung                       = OpenFormat.jpg
ChangeSettings                  = 1
HerstellerLink1                 = www.arduino.cc
HerstellerLink2                 = 
LogViewLink                     = www.logview.info
TimeStep_ms                     = 500
TimeGiven                       = 0
KanalAnzahl                     = 1
WerteFormat                     = ASCII
Prüfsummenberechnung            = keine
PrüfsummenFormat                = ASCII

[Stati]
StatiAnzahl                     = 1
001                             = ARDUINO

[serielle Schnittstelle]
Port                            = COM7
Baudrate                        = 57600
Datenbits                       = 8
Stopbits                        = 0
Parität                         = 0
Flusskontrolle                  = 0
ClusterSize                     = -100
SetDTR                          = 0
SetRTS                          = 0

[Schnittstelle TimeOuts]
RTOCharDelayTime                = 1100
RTOExtraDelayTime               = 190
WTOCharDelayTime                = 1100
WTOExtraDelayTime               = 190

[Anzeige Einstellungen Kanal 01]
Zeitbasis                       = Zeit
Einheit                         = s
Symbol                          = t
WerteAnzahl                     = 3 (habe ich mit 3 und wie im original mit 6 probiert)

Messgröße1                      = accx
Einheit1                        = 
Symbol1                         = 
Faktor1                         = 
OffsetWert1                     = 
OffsetSumme1                    = 

Messgröße2                      = accy
Einheit2                        = 
Symbol2                         = 
Faktor2                         = 
OffsetWert2                     = 
OffsetSumme2                    = 

Messgröße3                      = accz
Einheit3                        = 
Symbol3                         = 
Faktor3                         = 
OffsetWert3                     = 
OffsetSumme3                    =

Serial Monitor zeigt folgendes an:

$1;1;0;83;77;145;013
$1;1;0;78;73;141;013
$1;1;0;83;76;147;013
$1;1;0;81;78;145;013
$1;1;0;81;75;146;013
$1;1;0;82;77;144;013
$1;1;0;82;78;146;013
$1;1;0;83;76;147;013
$1;1;0;84;77;147;013

Ich habe auch schon einen anderen COM Port probiert aber leider erfolglos.

Mein Problem besteht leider immer noch und LogView sagt mir folgendes:

 [          SerialData]   ..Anzahl empfangener Bytes: 45
[          SerialData]   ..Rohdaten : jÕR?µVµÕZB±?±[?jÕR?µVµÕZB½?±[?jÕR?µ<SYN>µÕZB½?±[?
[          SerialData]   ..HEX      : 6AD5528BB556B5D55A42B18BB15B856AD5528BB556B5D55A42BD8BB15B856AD5528BB516B5D55A42BD8BB15B85
[                Main] > ..DatenempfangAuswertung
[                Main]   ....Daten als ASCII = 'jÕR?µVµÕZB±?±[?jÕR?µVµÕZB½?±[?jÕR?µ<SYN>µÕZB½?±[?'
[                Main]   ....Daten als HEX = '6AD5528BB556B5D55A42B18BB15B856AD5528BB556B5D55A42BD8BB15B856AD5528BB516B5D55A42BD8BB15B85'
[                Main]   ....Länge der Daten = 45

Hallo und Mahlzeit G-Evil!

ICH HABE DEN FEHLER GEFUNDEN!! :D 8-) :D

Es hat mich "mal eben" (wie es immer so ist mit solchen Dinge) die komplette Mittagspause (1h) gekostet...

Also:

  • Der Arduino-Code ist so wie Du ihn gepostet hast in Ordnung und läuft auch auf meinem Arduino Duemilanove!

  • Deine LogView-Installation denke ich hat auch keine Fehler. Ich habe eben gerade in einem virtuellen XP die neueste Version (2.6.4.345) installiert um Deinem Problem auf die Schliche zu kommen.

Und nun die LÖSUNG: trommelwirbel

Die INI-Datei ist nicht so, wie LogView es gern hätte. Aufgefallen ist es mir direkt nach dem Laden der Datei. Es werden nur zwei Achsen bereit gestellt. Nach Änderung (und das ist das einzige was ich an Deinen Daten geändert habe) der Zeile "WerteAnzahl = 4" werden drei Achsen angezeigt. Ab da werden nach dem Klick auf "Aufzeichnung starten" die Livedaten angezeigt (Bei mir springen alle drei Werte wild auf und ab, da keine Sensoren angeschlossen sind).

[u]Zusammenfassung:[/u] - Arduino-Code aus das Board laden - per Serial-monitor schauen ob das Arduino sendet. - Serial-Monitor schließen - LogView starten - Ini-Datei laden und Com-Port wählen - "Aufzeichnung starten" klicken

[u]Wichtig:[/u] Die geänderte Ini-Datei muss ins richtige Verzeichnis: *C:\Dokumente und Einstellungen\USER\Anwendungsdaten\LogView\Geraete\OpenFormat*

Hoffe es klappt nun auch bei Dir.

Viel Erfolg und lieben Gruß Euer Poldi

Also wirklich, das ist wirklich hilfreich mit Logview.... vielen Dank dafür!!!!!

Hätte da noch eine Frage...

ich habe 2 Messwerte die sich in einem leicht unterschiedlichem Bereich bewegen....

Nun wird die Messkurve anscheinend durch die Peaks bedingt unterschiedlich dargestellt.

Das soll heißen, die Kurven werden in Abhängigkeit der linken und rechten Skala gezeichnet, wobei bei mir die linke Skala von 0-520 reicht, und die rechte Skala, von 0-560.

Das Resultat ist das die Kurven die annähernd die gleichen Messwerte enthalten nicht übereinander sondern in y Richtung versetzt gezeichnet werden.

Gibt es eine Möglichkeit diese dynamische Skalen-anpassung (min max wert Ermittlung der Skala und automatische Anpassung des Graphenbereichs) auszuschalten, den Bereich fest einzustellen und so die linke an die rechte skala zu binden?

Schwer zu formulieren... also ich möchte z.B. das die linke Skala von 0-600 reicht und die rechte ebenfalls. So würden die Messwerte in "der gleichen Zoomstufe" gezeichnet, und z.B. Wert 240 (Wertstream1) und Wert 240 (Wertstream2) würden wirklich aufeinander liegen.

Bedingt durch die unterschiedlichen Messbereiche liegen die Werte aktuell bei mir nicht übereinander.

Hoffe man versteht was ich meine. :)

Lieber Gruß ChrisS

EDIT: Für alle mit der gleichen Fragestellung: >Grafik>Endwerteassistent

@Poldi

Danke für deine mühen!!! Ich kann das aber erst morgen testen, wenn ich alles mitgenommen habe...

Werde ich mir aber auf jeden Fall anschauen und du kommst in meine Dankesliste auf Platz 1, wenn ich es schaffen sollte mein Projekt zu verwirklichen.

Nein bei mir funktioniert das komischerweise immer noch nicht.

Ich habe hier allerdings auch ein sehr langes USB Kabel und werde das nochmal probieren, sobald ich zuhause bin.

Ich melde mich dann nochmal.

Hallo G-Evil,

gibt es schon etwas Neues???

Mir ist noch aufgefallen, dass Deine Rohdaten schon komisch aussehen (Beitrag vom 21.6.). Da solltest Du vielleicht auch gleich noch mal schauen!

Weiterhin viel Erfolg. Gruß Poldi

Nein es gibt leider noch keine neuigkeiten. Mir fehlt leider die Zeit.

Hallo,

da mein Problem, an dem ich gerade verzweifle, hierzu passt, schreibe ich es einfach mal dazu. und zwar stimmt meine Zeitachse einfach nicht. Die Zeit verläuft einfach zu schnell. Woher wird denn die Zeit bezogen?

ich habe mal meinen einfachen Code und meine ini-Datei mit bei gefügt, vlt liegt es daran, obwohl ich aber alles kontrolliert habe und passen müsste. Somit weiß ich auch nicht mehr weiter, wo das Problem liegen könnte.

[Gerät]
Name                            = Arduino
Hersteller                      = Arduino.cc
Gruppe                          = 09
Device_ID                       = ID_OPENFORMAT
Used                            = 1
Abbildung                       = OpenFormat.jpg
ChangeSettings                  = 1
HerstellerLink1                 = www.arduino.cc
HerstellerLink2                 = 
LogViewLink                     = www.logview.info
TimeStep_ms                     = 500
TimeGiven                       = 0
KanalAnzahl                     = 1
WerteFormat                     = ASCII
Prüfsummenberechnung            = keine
PrüfsummenFormat                = ASCII
DateTimeFormat                  = R_%hh"h" %nn"m" %ss"s"

[Stati]
StatiAnzahl                     = 1
001                             = ARDUINO

[serielle Schnittstelle]
Port                            = COM1
Baudrate                        = 57600
Datenbits                       = 8
Stopbits                        = 0
Parität                         = 0
Flusskontrolle                  = 0
ClusterSize                     = -100
SetDTR                          = 0
SetRTS                          = 0

[Schnittstelle TimeOuts]
RTOCharDelayTime                = 1100
RTOExtraDelayTime               = 190
WTOCharDelayTime                = 1100
WTOExtraDelayTime               = 190

[Anzeige Einstellungen Kanal 01]
Zeitbasis                       = Zeit
Einheit                         = s
Symbol                          = t
WerteAnzahl                     = 2

Messgröße1                      = Weg
Einheit1                        = 
Symbol1                         = 
Faktor1                         = 
OffsetWert1                     = 
OffsetSumme1                    =
int sensorValue = 0;        // value read from the pot

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(57600); 
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(8);         

  // print the results to the serial monitor:
  Serial.print("$1;1;0;");
  Serial.print(sensorValue, DEC);
  Serial.print(";0");                       
  Serial.println(13, DEC); 

  delay(5);                     
}

Wenn ich TimeStep_ms ändere, kann ich den Faktor der Zeit ändern. Aber ich habe keine Ahnung, was der richtige Faktor ist...

Ich hoffe ihr könnt mir helfen, da ich dummerweise auf eine Visualisierung der Messdaten angewiesen bin.

Danke schonmal für eure Bemühungen.

Edit: Also so wie es aussieht, können die Daten bei einer Abtastfrequenz von mehr als 10 Hz nicht richtig dargestellt werden. Hab jetzt ein Delay von 100 ms drin.

tolle Sache!