- Typ: NEO-6M GYNEO6MV2
- Rozhraní: RS232 TTL
- Výchozí rychlost: 9600bps
- Napájení: 3,3V až 5V
- Rozměry: 36 x 24 mm
- 1x GY-NEO6MV2 GPS modul
- 1x GPS Anténa
OK.
docela jednoduchý modul, snadné připojení
funguje pouze ve správném zapojení a delší dobu trvá než naběhne, používám arduino MEGA2560 a je důležité mít zapojený modul na piny 10-RX a 11-TX jinak to fakt nepojede, taky má dost malou anténu, ocenil bych větší ale to by asi vzrostla cena, hledám něco jako GPS modul s SD kartou pro záznam hodnot a jednoduché zapojení s malým displayem pro zobrazení dat v terénu, něco co málo žere baterku, je malé a bude fungovat do pár sekund.
Modul jsem spojil s DS3231 pro zobrazení času i když je družice mimo signal, tento kód mi funguje :-)
#include
#include
#include
#include
#define DS3231_I2C_ADDRESS 0x68
#define rtcVCC 19
#define rtcGND 18
#define TX 10
#define RX 11
// Definice pinů pro komunikaci s GPS modulem přes SoftwareSerial
static const int RXPin = 11, TXPin = 10;
static const uint32_t GPSBaud = 9600;
// Objekt TinyGPSPlus pro zpracování GPS dat
TinyGPSPlus gps;
// Seriálové spojení s GPS modulem
SoftwareSerial ss(RXPin, TXPin);
RTC_DS3231 rtc;
// Souřadnice Brna
static const double BRNO_LAT = 49.195060, BRNO_LON = 16.606837;
void setup()
{
// Nastavení pinů pro modul RTC
pinMode(rtcVCC, OUTPUT);
pinMode(rtcGND, OUTPUT);
digitalWrite(rtcVCC, HIGH);
digitalWrite(rtcGND, LOW);
// Inicializace sériové komunikace
Serial.begin(9600);
ss.begin(GPSBaud);
rtc.begin();
// Výpis informací o začátku kódu
Serial.println(F("FullExample.ino"));
Serial.println();
Serial.println(F("Čas Datum LAT° LONG° Směr Rychlost Počet Sat. Vzdálenost"));
Serial.println(F("(hh:mm:ss) (dd/mm/rr) "));
Serial.println(F("--------------------------------------------------------------"));
}
void loop()
{
// Výpis GPS dat
printDateTime(gps.date, gps.time);
Serial.print(" ");
printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
Serial.print(" ");
printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
Serial.print(" ");
printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
Serial.print(" ");
printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
Serial.print(" ");
printInt(gps.satellites.value(), gps.satellites.isValid(), 9);
Serial.print(" ");
printFloat(TinyGPSPlus::distanceBetween(gps.location.lat(), gps.location.lng(), BRNO_LAT, BRNO_LON) / 1000, gps.location.isValid(), 10, 2);
Serial.println();
// Čekání na další data z GPS modulu
smartDelay(1000);
}
// Funkce zajišťující, že objekt gps je zpracováván
static void smartDelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}
// Funkce pro výpis desetinných čísel
static void printFloat(float val, bool valid, int len, int prec)
{
if (!valid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i
}
smartDelay(0);
}
// Funkce pro výpis celých čísel
static void printInt(unsigned long val, bool valid, int len)
{
char sz[32] = "*****************";
if (valid)
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
smartDelay(0);
}
// Funkce pro výpis data a času
static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
if (!d.isValid() || !t.isValid())
{
Serial.print(F("********** "));
return;
}
// Přidání jedné hodiny k času z GPS modulu pro zobrazení lokálního času
int hour = t.hour() + 1; // Přidat jednu hodinu
char sz[32];
sprintf(sz, "%02d:%02d:%02d ", hour, t.minute(), t.second());
Serial.print(sz);
sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
Serial.print(sz);
}