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 auslesen
11.12.2013, 21:47 (Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2013 23:02 von derdemo.)
Beitrag #1
GPS auslesen
Hallo,

ich bin neu hier im Forum und auch neu im Bereich Arduino.
Ich habe ein Arduino Mega2560 und ein Uno.
Ich habe an ersteren ein Display angeschlossen, welches funktioniert.
Ich habe auf Rat folgendes GPS-Modul gekauft (PS u-blox NEO-6M Module & Ceramic Antenna USART TTL):
http://rover.ebay.com/rover/1/707-53477-...=824&kw=lg

Ich habe das GPS wie folgt angeschlossen:

ArduinoMega2560 <---> GPS-Modul
Pin0(Rx0) <---> TX
Pin1(Tx0) <---> RX
GND <---> GND
5V <---> VCC

Über den Seriellen Monitor bekomme ich keine Signale - wenn ich diesen schließe blinkt ab und zu RX und TX.

Wenn ich folgenden Code verwende (Abgewandelt von http://quaxio.com/arduino_gps/), meldet dieser keine Signale zu bekommen:

Code:
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
LiquidCrystal lcd(8,9,10,11,12,13); //Pins die am Display angeschlossen sind
TinyGPS gps;
SoftwareSerial ss(0, 1);

void setup()
{
  lcd.begin(20,4);
  lcd.clear();
  Serial.begin(115200);
  ss.begin(4800);
  
  lcd.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  lcd.println("by Mikal Hart");
  lcd.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    lcd.print("LAT=");
    lcd.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    lcd.print(" LON=");
    lcd.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    lcd.print(" SAT=");
    lcd.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    lcd.print(" PREC=");
    lcd.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
  
  gps.stats(&chars, &sentences, &failed);
  lcd.print(" CHARS=");
  lcd.print(chars);
  lcd.print(" SENTENCES=");
  lcd.print(sentences);
  lcd.print(" CSUM ERR=");
  lcd.println(failed);
  if (chars == 0)
    lcd.println("** No characters received from GPS: check wiring **");
}

Wie gehe ich weiter vor?
Ist das GPS-Modul überhaupt am Arduino verwendbar?

Vielen Dank im Voraus für Eure Hilfe!

Gruß Jochen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2013, 19:33 (Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2013 19:37 von rkuehle.)
Beitrag #2
RE: GPS auslesen
Hallo Jochen,
stecke mal das Modul auf die Pins 3 und 4 und nimm folgenden Code als Test ob überhaupt irgendwas reinkommt:
Code:
#include <SoftwareSerial.h>
SoftwareSerial gps(3, 4);
void setup()
{
Serial.begin(9600);
gps.begin(4800);
}
void loop()
{
if(gps.available()>0)
  {
  char ch=gps.read();
  Serial.print(ch);  
  }
}
Wenn ja, war die Verkabelung nicht io.Wenn nein, dann noch die Pins 3 und 4 tauschen.

Bin gespannt ob was im Monitor zu sehen ist.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2013, 14:18
Beitrag #3
RE: GPS auslesen
Hallo Ricardo,

vielen Dank für die rasche Antwort. Ich habe gestern Abend dein Code bei der von dir vorgeschlagenen Verkabelung vorgenommen, im Monitor war leider nichts zu sehen.
Ich habe dazu beide identische Module an den Arduino Uno und Arduino 2560 angeschlossen. Leider hat sich am Monitor nichts gezeigt.
Ich prüfe dies morgen nochmal in Ruhe und wenn es nichts anzeigt, dokumentiere ich alles im Detail.

Wäre toll, wenn wir das gelöst bekommen würden.

Gruß Jochen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2013, 15:25
Beitrag #4
RE: GPS auslesen
Hallo Jochen,

was mich wundert ist, dass ich an etlichen Stellen im Inet und auch hier:
http://www.u-blox.com/images/downloads/P...003%29.pdf
lese, dass das Teil mit max 3,6 Volt betrieben wird.

Mach mal bitte deine bisherigen Tests mit Anschluss am 3.3 V Pin des Arduino.
Welche Library nutzt du genau? Am besten ein Link dahin.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.12.2013, 22:31
Beitrag #5
RE: GPS auslesen
Hallo Ricardo,

der Tipp mit den 3Volt war super, vielen dank. In meiner Beschreibung stand 3-5 Volt. Jetzt kann ich Werte aus dem GPS-Modul lesen. Ich habe einfach den 3,3V Anschluss am Arduino verwendet. Folgende bekomme ich im Serial Monitor angezeigt:

ZzKI*))*JY*Z)))h;(ÍÝ,,*))))))ZY*ZY*ZY
J ¹¾îYYI*z)Y [ ¹¾­))IZk*Jé©h:ø¹ÎIZk*Jé)))Y[Z*)› ¹î¿))))©XSadͽ,Zz[I*))*JY*Z)))h;(ÍÝ,,*))))))ZY*ZY*ZY
J ¹¾îYYI*z)Y [ ¹¾­))IZk*Jé©h:ø¹ÎIZk+Jé)))Y[Z*)« ¹î¿))))©XSadͽ,ZzkI*))*JY*Z)))hSadÍÝ,,*))))))ZY*ZY*ZY
J ¹¾îYYI*z)Y [ ¹¾­))IZk+Jé©h=ø¹ÎIZk+Jé)))Y[Z*)› ¹î¿))))©XSadͽ,Zz{I*))*JY*Z)))hSadÍÝ,,*))))))ZY*ZY*ZY

Wie ich die Werte interpretieren muss, habe ich noch nicht herausgefunden.

Gruß Jochen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.12.2013, 17:23
Beitrag #6
RE: GPS auslesen
Hallo Jochen,

nimm mal den Sketch von hier: http://forum.arduino.cc/index.php?topic=133942.0
Du musst, wenn du die Arduino IDE > 1.0 hast, anstatt
Code:
#include <NewSoftSerial.h>
dann
Code:
#include <SoftSerial.h>
includen.

Das sollte die Werte dann in lesbarer Form anzeigen.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2013, 20:13
Beitrag #7
RE: GPS auslesen
Hi Ricardo,

langsam nähern wir uns dem Ziel, ein verfrühtes Weihnachtsgeschenkt bahnt sich für mich dank dir an.
Der Code funktiniert bis auf zwei Zeilen, welche ich dann auskommentiert habe:
PHP-Code:
// A simple sketch to read GPS data and parse the $GPRMC string 
// see http://www.ladyada.net/make/gpsshield for more info

#include <SoftwareSerial.h>

SoftwareSerial mySerial =  SoftwareSerial(34);
#define powerpin 4

#define GPSRATE 9600
//#define GPSRATE 38400


// GPS parser for 406a
#define BUFFSIZ 90 // plenty big
char buffer[BUFFSIZ];
char *parseptr;
char buffidx;
uint8_t hourminutesecondyearmonthdate;
uint32_t latitudelongitude;
uint8_t groundspeedtrackangle;
char latdirlongdir;
char status;

void setup() 

  if (
powerpin) {
    
pinMode(powerpinOUTPUT);
  }
  
pinMode(13OUTPUT);
  
Serial.begin(GPSRATE);
  
mySerial.begin(GPSRATE);
   
  
// prints title with ending line break 
  
Serial.println("GPS parser"); 
 
   
digitalWrite(powerpinLOW);         // pull low to turn on!

 
 
void loop() 

  
uint32_t tmp;
  
  
Serial.print("\n\rread: ");
  
readline();
  
  
// check if $GPRMC (global positioning fixed data)
  
if (strncmp(buffer"$GPRMC",6) == 0) {
    
    
// hhmmss time data
    
parseptr buffer+7;
    
tmp parsedecimal(parseptr); 
    
hour tmp 10000;
    
minute = (tmp 100) % 100;
    
second tmp 100;
    
    
parseptr strchr(parseptr',') + 1;
    
status parseptr[0];
    
parseptr += 2;
    
    
// grab latitude & long data
    // latitude
    
latitude parsedecimal(parseptr);
    if (
latitude != 0) {
      
latitude *= 10000;
      
parseptr strchr(parseptr'.')+1;
      
latitude += parsedecimal(parseptr);
    }
    
parseptr strchr(parseptr',') + 1;
    
// read latitude N/S data
    
if (parseptr[0] != ',') {
      
latdir parseptr[0];
    }
    
    
//Serial.println(latdir);
    
    // longitude
    
parseptr strchr(parseptr',')+1;
    
longitude parsedecimal(parseptr);
    if (
longitude != 0) {
      
longitude *= 10000;
      
parseptr strchr(parseptr'.')+1;
      
longitude += parsedecimal(parseptr);
    }
    
parseptr strchr(parseptr',')+1;
    
// read longitude E/W data
    
if (parseptr[0] != ',') {
      
longdir parseptr[0];
    }
    

    
// groundspeed
    
parseptr strchr(parseptr',')+1;
    
groundspeed parsedecimal(parseptr);

    
// track angle
    
parseptr strchr(parseptr',')+1;
    
trackangle parsedecimal(parseptr);


    
// date
    
parseptr strchr(parseptr',')+1;
    
tmp parsedecimal(parseptr); 
    
date tmp 10000;
    
month = (tmp 100) % 100;
    
year tmp 100;
    
    
Serial.print("\nTime: ");
    
Serial.print(hourDEC); Serial.print(':');
    
Serial.print(minuteDEC); Serial.print(':');
    
Serial.println(secondDEC);
    
Serial.print("Date: ");
    
Serial.print(monthDEC); Serial.print('/');
    
Serial.print(dateDEC); Serial.print('/');
    
Serial.println(yearDEC);
    
    
Serial.print("Lat: "); 
    if (
latdir == 'N')
       
Serial.print('+');
    else if (
latdir == 'S')
       
Serial.print('-');

   
// Serial.print(latitude/1000000, DEC); Serial.print('\°', BYTE); Serial.print(' ');
    
Serial.print((latitude/10000)%100DEC); Serial.print('\''); Serial.print(' ');
    
Serial.print((latitude%10000)*6/1000DEC); Serial.print('.');
    
Serial.print(((latitude%10000)*6/10)%100DEC); Serial.println('"');
   
    
Serial.print("Long: ");
    if (
longdir == 'E')
       
Serial.print('+');
    else if (
longdir == 'W')
       
Serial.print('-');
 
//   Serial.print(longitude/1000000, DEC); Serial.print('\°', BYTE); Serial.print(' ');
    
Serial.print((longitude/10000)%100DEC); Serial.print('\''); Serial.print(' ');
    
Serial.print((longitude%10000)*6/1000DEC); Serial.print('.');
    
Serial.print(((longitude%10000)*6/10)%100DEC); Serial.println('"');
   
  }
  
//Serial.println(buffer);
}

uint32_t parsedecimal(char *str) {
  
uint32_t d 0;
  
  while (
str[0] != 0) {
   if ((
str[0] > '9') || (str[0] < '0'))
     return 
d;
   
*= 10;
   
+= str[0] - '0';
   
str++;
  }
  return 
d;
}

void readline(void) {
  
char c;
  
  
buffidx 0// start at begninning
  
while (1) {
      
c=mySerial.read();
      if (
== -1)
        continue;
      
Serial.print(c);
      if (
== '\n')
        continue;
      if ((
buffidx == BUFFSIZ-1) || (== '\r')) {
        
buffer[buffidx] = 0;
        return;
      }
      
buffer[buffidx++]= c;
  }


Die Ausgabe des Seriellen Monitor:
PHP-Code:
//   Serial.print(longitude/1000000, DEC); Serial.print('\°', BYTE); Serial.print(' '); 
PHP-Code:
read
$GPVTG,,,,,,,,,N*30

read

$GPGGA,185942.00,,,,,0,04,7.85,,,,,,*5B

read

15,02,02,221,,03,09,038,,05,62,239,16,06,05,016,*72

read

$GPGSV,4,2,15,07,44,061,27,08,79,083,,09,83,089,12,10,27,166,31*74

read

$GPGSV,4,3,15,13,08,099,13,15,13,286,10,19,04,060,,21,09,330,*79

read

$GPGSV,4,4,15,26,51,286,,27,07,026,,28,36,145,25*4F

read

$GPGLL,,,,,185942.00,V,N*49

read

$GPRMC,185943.00,A,5158.78418,N,00928.36814,E,0.718,,171213,,,A*7B
Time
18:59:43
Date
12/17/13
Lat
: +65' 50.50"
Long: +31' 
40.88
Anstatt BYTE soll serial.write() verwendet werden.
Wie baue ich dies anstatt BYTE ein?

Vielen Dank!

Gruß Jochen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.12.2013, 01:17
Beitrag #8
RE: GPS auslesen
Hallo Jochen,

anstatt
Code:
Serial.print('\°', BYTE);
kannst du auch
Code:
Serial.print((char)176);
schreiben.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Reifendruck-Sensoren Auslesen? Binatone 18 345 Gestern 12:00
Letzter Beitrag: Binatone
  PIR Sensor auslesen / einsetzen go4sea 6 538 28.04.2016 17:11
Letzter Beitrag: hotsystems
  Bosch MAP Sensor auslesen Roman 4 909 12.02.2016 23:02
Letzter Beitrag: Roman
  Touch auslesen? fraju 2 672 27.07.2015 14:23
Letzter Beitrag: fraju
  Arduino Pin mit anderem Arduino auslesen - geht das? Gelegenheitsbastler 8 3.211 08.05.2015 20:49
Letzter Beitrag: Bitklopfer
  Holux GM-210 GPS Modul mit Arduino Auslesen, schlägt fehl Wampo 9 2.523 31.01.2015 08:46
Letzter Beitrag: dqb312
  Wii Nunchuck auslesen? HaWe 4 1.322 02.10.2014 14:31
Letzter Beitrag: HaWe
  Daten von der seriellen Schnittstelle auslesen student1704 7 19.594 16.02.2014 12:07
Letzter Beitrag: student1704

Gehe zu:


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