OpenLog (SparkFun) als Datenspeicher verwenden

Moin Moin,

Ich habe eine fertige Konstruktion von Sensoren die alle soweit funktionieren und messe mit diesen den Luftdruck und die Temperatur. Das ganze möchte ich jetzt auf einer MicroSD-Karte speichern und habe dafür den OpenLog von SparkFun.

Ich habe mir auf den Seiten schon einmal die Probe-Sketches angeschaut aber verstehe sie nicht ganz.

Ich möchte meine Daten mit einer dazugehörigen Zeit abspeichern, aber weiß nun nicht ganz wie ich das ganze
machen soll...

Gibt es hier jemanden der davon Ahnung hat?
Vielen Dank im Vorraus!

thilo007007:
Ich habe mir auf den Seiten schon einmal die Probe-Sketches angeschaut aber verstehe sie nicht ganz.

Was genau ist an der Beschreibung:
Power up this device and it will start logging any received serial data at 9600bps.
denn so schwer zu verstehen?

Von den Feinheiten wie "Command Mode" mit einem Befehlssatz mal abgesehen: Mehr muss man doch gar nicht wissen, um mit dem Loggen von Daten loszulegen?!

Könntest Du etwas präziser die Punkte beschreiben die Du nicht verstehst?

Willst du eine Laufzeit zwischen 2 Punkten oder eine Uhrzeit mitspeichern? Für letzteres brauchst du noch ein Uhrenmodul.

Gruß

Eine Laufzeit zwischen 2 Punkten, also Sec1,Sec2,Sec3 etc..

Ja ich verstehe nicht wie ich die Daten auf dem SD Logger speichere...

thilo007007:
Ja ich verstehe nicht wie ich die Daten auf dem SD Logger speichere...

Es handelt sich bei dem Datenlogger um ein serielles Gerät, das über eine serielle Schnittstelle mit dem Arduino verbunden wird.

Und zwar mit einer "freien" seriellen Schnittstelle und nicht mit "Serial", die ja bereits den Arduino mit dem PC verbindet.

Also z.B. "Serial1", "Serial2" oder "Serial3" von einem MEGA Board.
Oder eine SoftwareSerial-Schnittstelle.

Und wenn Du den Logger nicht in den Kommandomodus versetzt, loggt er automatisch alles, was Du über diese serielle Schnittstelle sendest, auf SD-Karte.

Mit Ausnahme des Steuerzeichen-Umschaltbefehls, der den Logger in einen Kommandomus versetzt. Sobald der Logger im Kommandomous ist, kannst Du z.B. den Dateinamen frei selbst vorgeben, unter dem geloggt werden soll. Standardmäßig loggt der Logger ja in eine automatisch hochzählende Datei, deren Name jedesmal beim Reset des Loggers nach dem Schema LOG#####.TXT hochzählt, also LOG00001.TXT, LOG00002.TXT, LOG00003.TXT u.s.w..

Ich habe folgenden Sketch verwendet um einmal zu schauen ob der DataLogger üverhaupt funktioniert:

int ledPin = 13; //Status LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);

  //Serial.begin(9600); //9600bps is default for OpenLog
  Serial.begin(57600); //Much faster serial, used for testing buffer overruns on OpenLog
  //Serial.begin(115200); //Much faster serial, used for testing buffer overruns on OpenLog

  delay(1000); //Wait a second for OpenLog to init

  Serial.println();
  Serial.println("Run OpenLog Test");

  int testAmt = 10;
  //At 9600, testAmt of 4 takes about 1 minute, 10 takes about 3 minutes
  //At 57600, testAmt of 10 takes about 1 minute, 40 takes about 5 minutes
  //At 115200, testAmt of 30 takes about 1 minute
  //testAmt of 10 will push 111,000 characters/bytes. With header and footer strings, total is 111,052

  //Each test is 100 lines. 10 tests is 1000 lines (11,000 characters)
  for(int numofTests = 0 ; numofTests < testAmt ; numofTests++)
  {
    //This loop will print 100 lines of 110 characters each
    for(int k = 33; k < 43 ; k++)
    {
      //Print one line of 110 characters with marker in the front (markers go from '!' to '*')
      Serial.write(k); //Print the ASCII value directly: ! then " then #, etc
      Serial.println(":abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-!#");
      //delay(50);

      //Then print 9 lines of 110 characters with new line at the end of the line
      for(int i = 1 ; i < 10 ; i++)
      {
        Serial.print(i, DEC);
        Serial.println(":abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-!#");
        //delay(50);
      }

      if(digitalRead(ledPin) == 0) //Turn the status LED on/off as we go
        digitalWrite(ledPin, HIGH);
      else
        digitalWrite(ledPin, LOW);
    }
  } //End numofTests loop

  unsigned long totalCharacters = (long)testAmt * 100 * 110;
  Serial.print("Characters pushed: ");
  Serial.println(totalCharacters);
  Serial.print("Time taken (s): ");
  Serial.println(millis()/1000);
  Serial.println("Done!");
}

void loop()
{
  //Blink the Status LED because we're done!
  digitalWrite(ledPin, HIGH);
  delay(100);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

Es klappt bis hierin wunderbar.
Nun ist auf der SD Karte aber nichts gespeichert...
Es befinden sich auf der Sd Karte zwei .txt's. Das eine heißt Config und beinhaltet folgendes:

9600,26,3,0,1,1,0
baud,escape,esc#,mode,verb,echo,ignoreRX

Das andere heißt LOG00261 und beinhalten nichts.
Wie speichere ich die Daten auf dem SD leser ab ?

Das Ding läuft mit 9600 Baud und du schreibst mit 57600 Baud

Du kannst auch die Baudrate des Loggers höher einstellen:

9600,26,3,0,1,1,0

thilo007007:
Ich habe folgenden Sketch verwendet um einmal zu schauen ob der DataLogger üverhaupt funktioniert:

Sieht für mich so aus, als wenn Du den Logger an Serial anschließt.

An Serial ist schon ein USB-TTL Adapter dran, der die Verbindung zum PC herstellt.
Du verbindest über Serial immer den PC mit dem Arduino.
Und nun verbindest Du Serial auch noch mit dem Logger, also PC, Arduino und Logger alle drei an Serial?
Serial ist keine Bus-Schnittstelle!
Das mit drei zusammengeschalteten seriellen Geräten ist eine Kurzschlussschaltung!

Serielle Geräte sind nur für eine Point-to-Point Verbindung vorgesehen, bei der genau ZWEI serielle Geräte miteinander verbunden werden, und NICHT DREI GLEICHZEITIG.

Ich würde als erstes mal die Schaltung korrigieren.
Und dann natürlich auch die richtige Baudrate verwenden, wenn mit dem Logger kommuniziert werden soll, wie schon Serenifly schrieb.

Der Sketch ist so in den Beispielen dabei. Wenn man das USB Kabel absteckt, sollte es gehen.

Aber wie gesagt, USB zum PC + Logger geht nicht! Wenn man dann eine andere Schnittstelle nimmt ist die Wahrscheinlichkeit natürlich geringer da was falsch zu machen.

Serenifly:
Der Sketch ist so in den Beispielen dabei. Wenn man das USB Kabel absteckt, sollte es gehen.

Ja OK, wenn man sich strikt an die Verkabelungsvorgabe aus dem Beispielsketch "OpenLog_Test_Sketch" hält, dürfte es funktionieren:

Arduino TX to OpenLog RXI
Arduino 5V to OpenLog VCC
Arduino GND to OpenLog GND

Mit dieser Verkabelungsvorgabe sollte der Test-Sketch tatsächlich in jedem Fall funktionieren.

Die kurzschlussträchtige Verbindung würde man erst bei vollständiger Verkabelung herstellen, also wenn man dann zusätzlich auch noch Arduino RX mit OpenLog TX verbindet. Aber das sollte man natürlich tunlichst vermeiden!

In Anbetracht der Tatsache, dass sich so ein trivialer Test-Sketch an blutige Anfänger wendet, ist es aus meiner Sicht völlig verantwortlungslos, gleichzeitig sowohl die Verbindung zwischen zwei kurzschlussträchtigen Schnittstellen vorzuschlagen und dann nicht gleichzeitig einen DRINGENDEN WARNHINWEIS unterzubringen, dass der TX-Pin des OpenLog Loggers AUF KEINEN FALL auch an den Arduino angeschlossen werden darf, sondern NUR die drei genannten Verbindungen zwischen Arduino und Logger geschaltet werden dürfen, wenn man nicht - wenigstens potentiell - Ärger mit der Funktion, Kurzschluss oder wenigstens erhöhten Stromverbrauch der Schaltung bekommen möchte.

Also ich habe es mal ausprobiert, dass ich USB entferne.

Da blinkt dann am Logger auf jeden fall was aber es kommt nichts brauchbares raus :frowning:

Es exisitert nun eine Datei aber in dieser steht nur ein "@"

thilo007007:
Da blinkt dann am Logger auf jeden fall was aber es kommt nichts brauchbares raus :frowning:

Prüfe die Formatierung der SD-Karte, diese muss FAT-FORMATIERT sein!

Möglicherweise hast Du die Karte anders formatiert, etwas NTFS unter Windows oder EXT3 unter Linux oder sowas. Die SD-Library kann aber nur mit FAT-Formatierung arbeiten.

Ggf. nochmal frisch FAT formatieren und die config.txt Datei nochmal aufspielen.