.

Arduino Echtzeit Daten mit LibreOffice Calc Tabellenkalkulation

Man kann auch mit dem kleinen Terminalprogramm und dem Plotter direkt in Arduino die Daten der seriellen COM Schnittstelle auslesen und visualisieren. Möchte man die Daten jedoch dauerhaft speichern, braucht es eine Tabellenkalkulation wie Excel.

In diesem Experiment lese ich die Echtzeitdaten des Sensors DHT11 aus, der zugleich Temperatur und Luftfeuchtigkeit anzeigt.

Ich verwende hier LibreOffice Calc. Zusätzlich brauche ich jedoch auch noch das Terminalprogramm "CoolTerm", das in der Lage ist, die empfangenen Daten in eine Textdatei zu schreiben. Diese Textdatei wird dann für LibreOffice Calc zur Datenquelle.

Ein Problem bei der grafischen Darstellung als Diagramm war der von Arduino ausgegebene Dezimalpunkt. Diesen musste ich in Arduino in ein Komma umwandeln. Dann erst wurden die Daten in eine grafische Darstellung übernommen.

Das habe ich verwendet

 

Video "Arduino Sensor Daten mit Tabellenkalkulation darstellen"

Arduino Sketch

#include <dhtnew.h>
DHTNEW mySensor(7);
float ausgHum;      //Variablen deklarieren für Umwandlung Punkt zu Komma
float ausgTemp;
String ausgHum2;
String ausgTemp2;
void setup()
{
  Serial.begin(9600);  
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print("\t");
  Serial.println("Temperatur: ");
}
void loop()
{
mySensor.read();
  for (int i = 0; i < 20; i++)
  {
    if (millis() - mySensor.lastRead() > 1000)
    {
      mySensor.read();
      
    }
    //Ausgabe an COM inkl. Umwandlung von Punkt zu Komma   
    ausgHum = (mySensor.getHumidity());    
    ausgHum2 = String (ausgHum); 
    ausgHum2.replace(".",",");         // Punkt durch Komma ersetzen
    Serial.print (ausgHum2);
    Serial.print("\t");
    
    ausgTemp = (mySensor.getTemperature());    
    ausgTemp2 = String (ausgTemp); 
    ausgTemp2.replace(".",",");         // Punkt durch Komma ersetzen
    Serial.print (ausgTemp2);
    Serial.print("\n");
    delay(5000);                        //Intervall in Millisekunden
  }
  
}
void test()
{
  // READ DATA
  uint32_t start = micros();
  int chk = mySensor.read();
  uint32_t stop = micros();
  switch (chk)
  {
    case DHTLIB_OK:
      Serial.print("OK,\t");
      break;
    case DHTLIB_ERROR_CHECKSUM:
      Serial.print("Checksum error,\t");
      break;
    case DHTLIB_ERROR_TIMEOUT:
      Serial.print("Time out error,\t");
      break;
    default:
      Serial.print("Unknown error,\t");
      break;
  }
  
  // DISPLAY DATA
  Serial.print(mySensor.getHumidity(), 1);
  Serial.print(",\t");
  Serial.print(mySensor.getTemperature(), 1);
  Serial.print(",\t");
  uint32_t duration = stop - start;
  Serial.print(duration);
  Serial.print(",\t");
  Serial.println(mySensor.getType());
  delay(500);
}
// END OF FILE