Go Down

Topic: Sending Data from Teensy to Excel (Read 898 times) previous topic - next topic

Marvikov

Hallo, ich würde gerne Daten vom Teensy in eine Excel-Tabelle schreiben und dann als Graph plotten.
Ich habe mir bereits für den Arduino die PLX-DAQ software runtergeladen, jedoch funktioniert diese mit dem Teensy nicht. Woran kann das liegen? Oder gibt es eventuell andere Alternativen, um die Werte in Excel auslesen zu können?
Ist es auch möglich die Daten mehrerer gleicher Sensoren in Echtzeit aufzuzeichnen und als Graph zu plotten?

Vielen Dank!

Nick_Pyner

Verwenden Sie PLXv2? Wenn nicht, überprüfen Sie den unten stehenden Link. Wenn ja, liegt das Problem möglicherweise bei der Hardware.
Ich weiß nichts über Teensy. Wenn es mit dem seriellen Monitor kommunizieren kann, kann es mit PLX kommunizieren. Wenn es nicht mit dem Monitor sprechen kann, besorgen Sie sich ein Arduino, das dies kann. .

http://forum.arduino.cc/index.php?topic=437398.0

Nick_Pyner

Ich erinnere mich jetzt, dass Teensy drei serielle Hardware-Ports hat, sodass die Kommunikation kein Problem sein sollte. Ich gehe daher davon aus, dass Sie die Originalversion von PLX verwenden, die nur mit Office 2003 und älteren Versionen kompatibel ist, und Sie sollten die zuvor vorgeschlagene Version2 verwenden.

Marvikov

Vielen Dank! Ich habe mir jetzt die neuste Version heruntergeladen und ich kann auch das Programm problemlos verbinden. Jedoch werden die Werte nicht bei Excel in die Tabelle geschrieben. Woran kann das liegen? Ich lese momentan die Werte drei gleicher Sensoren aus. Muss ich dann im Programmcode noch etwas verändern, damit ich alle Werte mit Zeitstempel in die Tabelle geschrieben bekomme?

Nick_Pyner

#4
Jun 21, 2019, 06:05 pm Last Edit: Jun 21, 2019, 06:06 pm by Nick_Pyner
Der einzige Code, den Sie ändern müssen, ist Ihr eigener. Es ist sicherlich nur eine Frage der Formatierung. Ich habe V2 selbst nicht verwendet, seit ich Office 2000 habe, aber ich denke, Sie sollten ein Ergebnis erzielen, wenn Sie für die Sensoren nur den normalen seriellen Druck verwenden. Es ist nicht erforderlich, einen Zeitstempel zu senden. Dies kann mit Excel über die PC-Uhr erfolgen
Code: [Select]

 Serial.print("DATA,TIME,");  // Excel commands
  Serial.print(sensor1);
  Serial.print(" ,  ");
  Serial.printsensor2);
  Serial.print(" ,  ");
  Serial.println(sensor3);

Marvikov

Okay, dann sollte es eigentlich funktionieren. Ich benutze  für alle drei Sensoren den normalen seriellen Druck.
Ich spreche jeden einzelnen Sensor durch eine einzelne Funktion an, die ich in der loop Schleife aufrufe. Leider funktioniert es dennoch nicht. Ich weiß nicht wo das Problem liegen könnte. Aber trotzdem Danke für die Hilfe!

Marvikov

Leider funktioniert es immer noch nicht richtig und ich weiß auch leider nicht genau, woran es liegen könnte. Gibt es noch eine andere Möglichkeit, die Daten vom Arduino an Excel zu senden oder in einer anderen Form als Tabelle abzuspeichern und dann später auszuwerten?

Nick_Pyner

Sie müssen Ihren Code posten, es kann nur ein dummer Fehler sein, der nur einmal vorkommt, und es liegt wahrscheinlich an der Formatierung. Siehe Antwort #4. Die Daten müssen als durch Kommas getrennte Variablen gedruckt werden. In PLX können Sie lediglich Excel-Befehle hinzufügen. Wie ich bereits sagte, sollten Sie auf dem seriellen Monitor sinnvolle Daten sehen, ohne den Code zu ändern.

Wenn es auf dem seriellen Monitor falsch aussieht, ist es auch für Excel falsch.

Sie können dieselben Daten an ein koscheres Terminal wie RealTerm senden, das sie als CSV-Datei für den direkten Export nach Excel aufzeichnet. RealTerm ist kostenlos und es gibt andere, die es mögen. RealTerm kann mithilfe der PC-Uhr einen eigenen Zeitstempel bereitstellen.

Die Vorteile von PLX gegenüber Realterm sind

1. Bequemlichkeit. Es spart einen Schritt
2. Es ermöglicht Ihnen, Live-Grafiken zu haben.

Wenn Sie Daten an RealTerm senden können, sollten Sie in der Lage sein, Daten an Excel zu senden.


Nick_Pyner

Ich würde sagen, Sie haben absolut recht. Die Formatierung hier ist echt verworrenes Wombat-Zeug. Eines der Probleme ist, dass Sie Dinge schreiben, die Computer nicht lesen können. Sie können das später einfügen, wenn Sie müssen. Ich habe keine Ahnung, was Sie tun, aber ich bin sicher, Sie können das gewünschte Ergebnis erzielen. Ich gehe davon aus, dass Sie wissen, was Sie mit den Sensoren tun, aber beachten Sie, dass Arduinos keine Verdopplung durchführen können. Ich denke nicht, dass dies die Ursache des Problems ist, aber "float" sollten ausreichen.

Ich gehe davon aus, dass Sie eine Zählung erstellen müssen, um für die x-Achse nach Excel zu wechseln. Ansonsten werden nur die Schleife und die Unterprogramme geändert. Dies ergibt alle 150 ms eine Reihe von zehn Zahlen. Dies sollte auf dem seriellen Monitor klar sein, auch wenn es ein bisschen schwer zu lesen ist. Dies sollte auch alles sein, was Sie über PLX an Excel senden müssen, da Sie anscheinend keine speziellen Excel-Befehle haben.
Code: [Select]
int k

}
void loop(){
 k++;
Serial.print(k);
Serial.print",");
  GetAngle1(MPU_addr1);
  GetAngle2(MPU_addr2);
  GetAngle3(MPU_addr3);
delay(150);
}

void GetAngle1(const int MPU) {

Wire.beginTransmission(MPU_addr1);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr1,14,true);
  axis_X1=Wire.read()<<8|Wire.read();
  axis_Y1=Wire.read()<<8|Wire.read();
  axis_Z1=Wire.read()<<8|Wire.read();
    int xAng = map(axis_X1,minVal,maxVal,-90,90);
    int yAng = map(axis_Y1,minVal,maxVal,-90,90);
    int zAng = map(axis_Z1,minVal,maxVal,-90,90);
       x1= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);
       y1= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI);
       z1= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);
     Serial.print(x1);
     Serial.print",");
     Serial.print(y1);
     Serial.print",");
     Serial.print(z1);
     Serial.print",");
}

void GetAngle2(const int MPU) {

  Wire.beginTransmission(MPU_addr2);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr2,14,true);
  axis_X2=Wire.read()<<8|Wire.read();
  axis_Y2=Wire.read()<<8|Wire.read();
  axis_Z2=Wire.read()<<8|Wire.read();
    int xAng = map(axis_X2,minVal,maxVal,-90,90);
    int yAng = map(axis_Y2,minVal,maxVal,-90,90);
    int zAng = map(axis_Z2,minVal,maxVal,-90,90);
       x2= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);
       y2= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI);
       z2= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);
     Serial.print(x2);
     Serial.print",");
     Serial.print(y2);
     Serial.print",");
     Serial.print(z2);
     Serial.print",");
}

void GetAngle3(const int MPU) {

  Wire.beginTransmission(MPU_addr3);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr3,14,true);
  axis_X3=Wire.read()<<8|Wire.read();
  axis_Y3=Wire.read()<<8|Wire.read();
  axis_Z3=Wire.read()<<8|Wire.read();
    int xAng = map(axis_X2,minVal,maxVal,-90,90);
    int yAng = map(axis_Y2,minVal,maxVal,-90,90);
    int zAng = map(axis_Z2,minVal,maxVal,-90,90);
       x3= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);
       y3= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI);
       z3= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);
     Serial.print(x3);
     Serial.print",");
     Serial.print(y3);
     Serial.print",");
     Serial.println(z3);// note ln!!
}

Marvikov

Vielen Dank schonmal für die Antwort. Ich habe den Programmcode nun geändert und im seriellen Monitor läuft auch alles gut. Die Zählung funktioniert und ich bekomme jetzt alle Werte nur mit einem Komma getrennt ausgegeben. Nur leider funktioniert es in Excel immer noch nicht. Wenn ich mit dem Port connecte werden die Daten einfach nicht in die Tabelle geschrieben. Ich weiß echt nicht mehr woran es jetzt noch liegen kann.  

Marvikov

Gibt es auch eine andere einfache Methode, die Werte in einer Tabelle zu speichern und mit Zeitstempel in einem Graph zu plotten? Gegebenenfalls auch mit Matlab oder ähnlichem.... Haben Sie mit sowas bereits Erfahrung?

6v6gt

I make a switch into English so you may have a chance of getting a variety of ideas.

If I was doing this, which is using a MCU to interpret sensor data and sending it so a PC for graphical presentation, I would use the MCU to send data in a clean CSV (or maybe JSON or XML) format to the PC.
If you want to use Excel and display the results graphically in real time, then write an Excel macro (using visual basic script) to read the data from the input stream, and present it in the desired format.

If you want a simple Real Time graphical representation of data, the Arduino IDE has a crude graphical display mechanism. Here is an example from a post today:


Nick_Pyner

OK, Sie hatten also den ersten Erfolg: Übertragen Sie Daten auf den seriellen Monitor. Dies bedeutet, dass am Code nichts falsch ist und alle Ihre Probleme mit PLX zusammenhängen. Leider kann ich dazu keinen Kommentar abgeben, da ich noch die Originalversion verwende.

Wie gesagt, Sie können immer RealTerm verwenden, den Zeitstempel dort abrufen und die CSV-Datei dann in Excel einfügen. Beachten Sie jedoch, dass Ihre Schleife 150 ms lang ist und ich glaube nicht, dass die PC-Uhr damit umgehen kann. Jedes Problem dort kann in Excel behandelt werden und Sie brauchen wahrscheinlich sowieso nicht mehr als die Startzeit,

Ich weiß nichts über MatLab oder Processing usw. Es gab ein Programm namens LiveGraph oder etwas, das von der University of Melbourne entwickelt wurde, aber ich kann es nicht mehr finden.

In diesen Tagen sende ich die Daten über Bluetooth an das Bluetooth-Grafikterminal, um eine Live-Grafik zu erhalten - drei Datenquellen gleichzeitig. Es wird auch auf SD übertragen, aber das Bluetooth-Grafikterminal kann es für eine spätere Übertragung nach Excel aufzeichnen.

Um es noch einmal zu wiederholen, ich bin sicher, Ihr Problem ist eine geringfügige prozedurale Methode mit Excel - mehr durcheinander Kopf Wombat Zeug!

Nick_Pyner

#13
Jun 26, 2019, 06:52 pm Last Edit: Jun 27, 2019, 05:03 pm by Nick_Pyner
If you want to use Excel and display the results graphically in real time, then write an Excel macro (using visual basic script) to read the data from the input stream, and present it in the desired format.

If you want a simple Real Time graphical representation of data, the Arduino IDE has a crude graphical display
This guy is trying to use PLX, so inviting him to try to re-invent the wheel with VB is not likely to help. Also he has nine data outputs. I thought  that facility in the IDE is useless junk by comparison, but they may have improved it since I last looked.

Marvikov

Habe ich das also richtig verstanden, dass die Schleife des Counters alle 150 ms wiederholt wird? Also werden die Messwerte aller 3 Sensoren in einer Rate von 150 ms abgerufen?
Gibt es auch noch eine Möglichkeit, diese Rate zu verringern? Ist es dann auch so, dass die Werte in einer Zeile auch zu der selben Zeit ausgelesen werden oder gibt es dann immer noch eine kleine Verzögerung beim Ansprechen des 2. Busses?

Go Up