INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
GPS Datenlogger
30.06.2015, 11:35
Beitrag #1
GPS Datenlogger
Hallo zusammen,

ich habe vom Arbeitgeber die Aufgabe bekommen, einen GPS Datenlogger zu bauen. Habe mir die Komponenten bestellt und wollte jetzt versuchen, Daten auf die SD Karte zu schreiben.

Habe den Arduino MEGA 2560. Das GPS-Shield und das microSD-Shield habe ich von sparkfun. Habe den Sketch hochgeladen, der GPS-Receiver hat auch Signal (er blinkt zumindest mal), jedoch auf die SD-Karte wird nichts geschrieben.

Auch wenn ich nur die SD-Karte testen will, wird im seriellen Monitor angezeigt: "Card failed or not present"

Habe die SD-Karte auf FAT16 formatiert, so wie gewünscht, allerdings komme ich nicht weiter.

Kann mir jemand helfen, weiß jemand vielleicht sogar wie das SD-Shield richtig angeklemmt wird? Bzw im besten Fall: hat jemand einen Schaltplan für einen GPS-Datenlogger?

Über Rückmeldung würde ich mich sehr freuen.

Liebe Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.06.2015, 12:57
Beitrag #2
RE: GPS Datenlogger
(30.06.2015 11:35)fschneider schrieb:  Hallo zusammen,

ich habe vom Arbeitgeber die Aufgabe bekommen, einen GPS Datenlogger zu bauen. Habe mir die Komponenten bestellt und wollte jetzt versuchen, Daten auf die SD Karte zu schreiben.

Habe den Arduino MEGA 2560. Das GPS-Shield und das microSD-Shield habe ich von sparkfun. Habe den Sketch hochgeladen, der GPS-Receiver hat auch Signal (er blinkt zumindest mal), jedoch auf die SD-Karte wird nichts geschrieben.

Auch wenn ich nur die SD-Karte testen will, wird im seriellen Monitor angezeigt: "Card failed or not present"

Habe die SD-Karte auf FAT16 formatiert, so wie gewünscht, allerdings komme ich nicht weiter.

Kann mir jemand helfen, weiß jemand vielleicht sogar wie das SD-Shield richtig angeklemmt wird? Bzw im besten Fall: hat jemand einen Schaltplan für einen GPS-Datenlogger?

Über Rückmeldung würde ich mich sehr freuen.

Liebe Grüße

Hi,
ohne den Sketch zu sehen => Kristallglaskugel Tongue
Noch ne Gretchenfrage, was für eine Größe hat deine SD(Mikro) Karte denn ? Soweit ich weis verträgt die Geschichte hier nur Speicherkarten bis 4GB...zumindest bei mir laufen die noch.
Das nächste ist ob sich die Chip Select Signale der Shields nicht in die Quere kommen. Und ja...Indoor gibt es keinen GPS Empfang....da mußte unter freien Himmel gehen zum testen.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.06.2015, 13:18
Beitrag #3
RE: GPS Datenlogger
Also ich benutze eine 2GB MicroSD Karte, das sollte dann funktionieren.
Das Problem liegt im Moment nicht am GPS Empfang, sondern an der SD Karte.
GPS Daten werden empfangen und auch ausgegeben (auf LCD Bildschirm).
Habe nun einfach nen Poti drangehangen und versuche die Daten die er vom Poti empfängt auf die SD Karte zu schreiben.
Mit folgendem Sketch:

#include <SD.h>


#include <SPI.h>



int potiWert = 0;


void setup() {

Serial.begin(9600);
Serial.print("Initialisiere SD Karte...");
pinMode(8, OUTPUT);

if(!SD.begin(8)){

Serial.println("Card failed, or not present");
return;

}

Serial.println("microSD card is ready");

}

void loop() {

potiWert = analogRead(A0);
Serial.println(potiWert);

File dataFile = SD.open("DATA.TXT", FILE_WRITE);

if (dataFile){
dataFile.print(potiWert);
dataFile.close();
}
else {
Serial.println("Fehler");
}
}


Bekomme im seriellen Monitor zunächst "Card failed or not present" geschrieben.
Anschließend immer wechselnd den Wert vom Poti (im Bereich 0-1023) und "Fehler"
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.06.2015, 21:48
Beitrag #4
RE: GPS Datenlogger
(30.06.2015 13:58)t.a.f.k.a.Z. schrieb:  @Bk: weitere Infos gibt es im "Parallel-Universum" - arduino...... --- brauchst Deine Glaskugel nicht bemühen
da heißt der Kollege allerdings "mschmitt"

Danke für den Hinweis....wollte mir heute schon bei ama ne neue Kugel ordern...muß ich nun wohl dringendst nachholen...RolleyesRolleyesRolleyes
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.07.2015, 07:01
Beitrag #5
RE: GPS Datenlogger
Das ist ein Arbeitskollege von mir, sind beide an dem Projekt dran Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.07.2015, 20:12 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2015 20:13 von HaWe.)
Beitrag #6
RE: GPS Datenlogger
also, ich mache es so mit SD-Daten schreiben und lesen:
Code:
/*
SD card: fprintf_() und fgets_()
ver 1.01
*/
#include <SPI.h>
#include <SD.h>


// SD Card
#define SD_CSpin 4 // <<<<<<< anpassen !
File myFile;
char fname[64];

char sdata[128];
char sbuf[128];



//********************************************************************************​***********
char * fgets_ ( char * str, int32_t num, File * stream ) {
  int32_t i = 0;
  int16_t   chr;

  strcpy(str, "");
  while (i < (num - 1)) { // got room for newline and terminating null?
    chr = stream->read();
    if (chr < 0) // end of file
      break;
    str[i++] = chr;
    if ('\n' == chr) // end of line
      break;
  }

  if (i) { // room in buffer for terminating null
    str[i] = 0;
    return str;
  }
  else
  return NULL; // buffer too small or immediate end of file
  // { strcpy(str, ""); return str; } // alternative
}
//********************************************************************************​***********



//********************************************************************************​***********
int32_t  fprintf_ ( File * stream, const char fmtstr[], ... ) {
   char      str[1024];
   va_list   arguments;
   int16_t   num;
  
   va_start( arguments, fmtstr);
   num = vsnprintf(str, sizeof str, fmtstr, arguments);
   stream->print(str);
   va_end( arguments );

   return num;
}
//********************************************************************************​***********


void setup()
{
  int16_t  p, i, cnt;
  float    x;
  char     sval[20];
  int16_t  ival;
  double   fval;

  pinMode(SD_CSpin, OUTPUT);
  Serial.begin(9600);
  
  sprintf(sbuf,"#: SD Initializing... ");
  Serial.println(sbuf);

  while(!SD.begin(SD_CSpin) ) {
    sprintf(sbuf,"#: ...SD init failed ");
    Serial.println(sbuf);
    delay(1000);
  }

  sprintf(sbuf,"#: ...SD OK !      ");
  Serial.println(sbuf);
  strcpy(fname,"test.txt");

  if (SD.exists(fname) ) {
    sprintf(sbuf,"#: %s exists     ",fname);
    Serial.println(sbuf);
  
    sprintf(sbuf,"#: Removing %s      ",fname);  
    Serial.println(sbuf);
  
    SD.remove("test.txt");
    // removed: success ?
    if (SD.exists(fname) ) {
       sprintf(sbuf,"#: %s  exists     ",fname);
       Serial.println(sbuf);
    }
    else {
       sprintf(sbuf,"#: %s  N/A     ",fname);
       Serial.println(sbuf);
     }
  }
  

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open(fname, FILE_WRITE);

  if (myFile) {
    // if the file opened okay, write to it, then close file:
    sprintf(sbuf,"#: Writing strings to %s ",fname);
    Serial.println(sbuf);
  
    //---------------------------------------------------------------------------------
    // write data to file
    fprintf_(&myFile, "%s\n%d\n%d\n%f\n%f\n", "Teststring", 1, 2, PI, 4.567890);  
    //---------------------------------------------------------------------------------
  
    // close the file:
    myFile.close();
    sprintf(sbuf,"#: %s closed.   ",fname);
    Serial.println(sbuf);
  }
  else {
    // if the file didn't open, print an error:
    sprintf(sbuf,"#: error opening %s   ",fname);
    Serial.println(sbuf);    
  }

  Serial.println();
  // re-open the file for reading:
  myFile = SD.open(fname);
  if (myFile) {
    sprintf(sbuf,"#: reading %s ",fname);
    Serial.println(sbuf);
  
    // read from the file until there's nothing else in it:
    i=0;
    cnt=1;  
  
    while (myFile.available()) {
      strcpy(sdata, "");
      fgets_ ( sdata, 20, &myFile );
      Serial.print(cnt); Serial.print(": string raw="); Serial.println(sdata);
      Serial.println("rueckformatiert:");
      if (cnt==1) {Serial.print("str  ="); Serial.println(sdata); }
      if (cnt==2) {Serial.print("int  ="); Serial.println(atoi(sdata) ); }
      if (cnt==3) {Serial.print("int  ="); Serial.println(atoi(sdata) ); }
      if (cnt==4) {Serial.print("float="); Serial.println(atof(sdata) ); }
      if (cnt==5) {Serial.print("float="); Serial.println(atof(sdata) ); }
      ++cnt;
    }
  
    // close the file:
    myFile.close();      
    sprintf(sbuf,"#: %s closed. ",fname);
    Serial.println(sbuf);    
  } else {
    // if the file didn't open, print an error:
    sprintf(sbuf,"#: error opening %s   ",fname);    
    Serial.println(sbuf);

  }
}

void loop()
{
  // nothing happens after setup
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2015, 08:34
Beitrag #7
RE: GPS Datenlogger
Vielen Dank
Aber so ganz komme ich damit nicht klar...
Wie muss ich den sketch verändern, dass ich die GPS-Daten auf die SD Karte geschrieben bekomme?
Die SD Karte auslesen muss unser Gerät später nicht können
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2015, 09:13 (Dieser Beitrag wurde zuletzt bearbeitet: 02.07.2015 09:16 von HaWe.)
Beitrag #8
RE: GPS Datenlogger
der Sketch zeigt, wie es grundsätzlich funktioniert, und du kannst damit das Schreiben erstmal grundsätzlich testen (ob der Hardware-Zugriff funktioniert).
Auch kannst du es am PC kontrollieren, idem du die SD-Files dort betrachtest.

Deine GPS-Daten kannst du schreiben mit meiner Funktion
fprintf_()

sie funktioniert exakt so wie die ANSI-C-Funktion
fprintf()
- nur dass der dortige FILE * stream etwas anders benutzt wird (aus "internen Arduino-Gründen").
Hiermit kannst du aber alle möglichen Daten formatiert schreiben, auch das zeigt mein obiges Code-Beispiel.

Wie das mit den formatierten Daten per fprintf genau geht, findest du in C-Tutorials, z.B. hier:

http://www.cplusplus.com/reference/cstdio/fprintf/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Datenlogger für Imker und Bienenhalter itsy 13 3.580 06.09.2016 19:57
Letzter Beitrag: itsy
  Rennsport-Datenlogger Eustar 5 1.537 11.04.2016 07:33
Letzter Beitrag: Eustar
  OBD Datenlogger Projekt 16 13 4.104 30.11.2015 18:23
Letzter Beitrag: Scherheinz
  Datenlogger zur Auswertung Eines Ladeluftkühlers Vinreeb 18 3.895 20.04.2015 18:48
Letzter Beitrag: MaHa1976
Music Datenlogger mit Xively (Pachube) peterunterhofer 0 2.197 20.06.2013 06:04
Letzter Beitrag: peterunterhofer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste