Fastrax GPS-moduuli & Arduino

Alkuun varoituksen sana; Minun omaa alaani on HW, joten koodi ei ole kaunista katsottavaa.

Nyt on kasassa Fastrax GPS/Arduino/lcd kombinaatio, joka päivittelee itseään 5 sekunnin intervallilla
pari sanaa sisällöstä:
-Suuri osa on lainattu arduiniana-sivuilta.
-käytetyt kirjastot:
Liquidcrystal (lcd:lle)
TinyGPS (valmis ratkaisu NMEA-datan purkamiseen)
NewSoftSerial (mahdollistaa GPS:n ja LCD:n yhtäaikaisen kytkemisen)
(Nämä kaikki löytyvät täältä:http://arduiniana.org/libraries/)
-Koordinaattien lisäksi Arduinolla oleva ledi kertoo onko satelliitit löydetty (ledi palaa) vai haetaanko niitä (ledi vilkkuu)

alustana Atmega168 ja Arduino 0018
HUOM: jos ei satu olemaan lcd:tä niin alempi koodi pukkaa NMEA-datan suoraan PC:lle


//GPS-Arduino-LCD
#include <NewSoftSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
//lcd on kiinni pinneissä 2,3,4,5,6,7
//GPS-moduuli pinneissä 8 (led)ja 9,10 (data)
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
TinyGPS gps;
NewSoftSerial nss(9,10); // GPS-datalle

int gps_fix=8; //fix-ledin alustus
int fix_led=13; //käytetään pinniin 13 kytkettyä lediä
int pulse_check;

void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);

void setup()
{
Serial.begin(9600);
nss.begin(9600);
lcd.begin(16, 2); // käytössä 16x2 LCD

lcd.print(“Hello GPS! “);
lcd.setCursor(0,1);
lcd.print(”(Ver. 0.2)”);

}

void loop()
{

bool newdata = false;
unsigned long start = millis();

while (millis() - start < 5000) //uutta GPS-dataa haetaan 5 sekunnin välein
{
pulse_check=digitalRead(gps_fix); // päivitetään fix-led
digitalWrite(fix_led,pulse_check);
if (feedgps())
newdata = true;

}

if (newdata)
{
lcd.clear();
lcd.print(“GPS Dataa Tulossa”); //tämä oli debuggaus vaiheen juttu
delay(500);
lcd.clear();

gpsdump(gps);

}
}

void printFloat(double number, int digits)
{
// Handle negative numbers
if (number < 0.0)
{
Serial.print(’-’);
number = -number;
}

// Round correctly so that print(1.999, 2) prints as “2.00”
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;

number += rounding;

// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
Serial.print(int_part);

// Print the decimal point, but only if there are digits beyond
if (digits > 0)
Serial.print(".");

// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
Serial.print(toPrint);
remainder -= toPrint;
}
}

void gpsdump(TinyGPS &gps)
{
long lat, lon;
float flat, flon;
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
unsigned short sentences, failed;

gps.get_position(&lat, &lon, &age);
lcd.setCursor(0,0);
lcd.print("LAT "); lcd.print(lat);
lcd.setCursor(0,1);
lcd.print("LONG "); lcd.print(lon);

feedgps(); // If we don’t feed the gps during this long routine, we may drop characters and get checksum errors

}

bool feedgps()
{

while (nss.available())
{

if (gps.encode(nss.read()))
  return true;

}
return false;
}

…ja tällä pätkällä saadaan tavara PC:lle:

//GPS-Arduino-PC
//muista avata serial monitor
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3); //gps moduuli kiinni pinneissä 2,3
void setup()
{
Serial.begin(9600);
Serial.println(“Hello GPS”);
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available()) {
Serial.print((char)mySerial.read());
}
}

parannelkaa ja pistäkää omat versionne jakoon
-m

Mulla on arduinon ohjelmasta uusin versio mikä on 0021. Kokeilin kopijoida koodin siihen ja tarkistaa koodin toimivuutta. Tuo koodi mikä pitäisi tulostaa lcd näytölle tökkäsi heti alkuun tuohon “Tiny GPS gps;” komentoon. Ja tuo mikä tulostaa tietokoneelle koordinaatit tökkösi “NewSoftSerial mySerial(2, 3); //gps moduuli kiinni pinneissä 2,3” kohtaan.

asensitko kaikki nuo tarvittavat kirjastot pc:lle?

Kiitos nyt ohjelma hyväksyy koodin. En huomannut asentaa noita kirjastoja pc:lle. Tänään tilaukseen lcd näyttö ja gps moduuli. Saisiko vielä esille kytkentä kaavion?

kaaviota ei ole, kasattu suoraan protolevylle. Jospa tämä auttaisi hieman:

Kaikki pinnit joita on GPS:ssä käytetty:
1 +5V
2 GPSTX
3 GPSRX
4 GND
6 Vbat (+5V)
8 Fix

Arduinon käytetyt pinnit:
2 - LCD
3 - LCD
4 - LCD
5 - LCD
6 - LCD
7 - LCD
8 - GPS_pin8 (Fix)
9 - GPS_pin 2 (TX)
10 - GPS_pin 3 (RX)
5V GPS_pin 1 & 6 (+5V & Vbat)
GND GPS_pin 4 (GND)

Kiitoksia ohjeista!

Viritin oman GPS-palikkani tulille, tuolla se ikkunalla nyt kököttää.

Vielä ei ole minkäänlaista raakadataa tullut ulos (lukuunottamatta tietenkään “Hello GPS”), mättääkö joku, vai kaipaako GPS-palikka vain satelliitteja?

PS.

//gps moduuli kiinni pinneissä 2,3
2 - GPS TX, 3 - GPS RX, right?

Ainakin aikaisemman viestin mukaan pinnien kuuluu olla 9 TX ja 10 RX.

E: siis arduinossa kuten yllä ja gps palikassa 2 on tx ja 3 rx

Jos tuo GPS-moduulin pin 8 on kytketty, niin Arduinolla olevasta ledistä näkee suoraan GPS:n statuksen:

GPIO9 output is dedicated for valid fix indication.
-During signal acquisition phase the GPIO9 toggles with a 0.5Hz duty cycle (i.e. 1 second high, 1 second low)
-During signal tracking phase (Navigation message decoded from at
least one satellite) the GPIO9 toggles with a 1Hz duty cycle (i.e. 0.5
second high, 0.5 second low).
-A valid fix is indicated with a high level signal

Lisäksi kannattaa ottaa huomioon, että GPS:n antenni on viritetty siten, että sen herkkyys on parhaillaan kun moduuli on koteloitu (muovikuori antennin päällä siirtää resonanssin kohdilleen)

Tännä saapui gps moduli postissa. Säikähdin miten pieni on ja miten tiheään juotostäplät on. Kuitenkin sain jotonkin juotettua kaapelit kiinni. Liitin moduulin arduinoon ja arduinon tietokoneeseen ja koodi sisään mikä tulostaa tietokoneen näyttälle dataa. Helposti löytyi sateenliitti ja dataa rupes tulemaan.
Tämän näköista on suurin piirtein koko ajan:

Hello GPS
$GPGGA,191545,N,E,0,00,05.2,M,M,79
$GPGSA,A,1,10.4,05.2,09.0
0B
$GPGSV,1,1,00,79
$GPVTG,T,M,N,K,N
2C
$GPZDA,191545,10,11,2010,47
$PSGSA,1,00000,0
4B

Hyvä että sait kytkennän toimimaan.
Sen verran täytyy korjata että tuon saamasi datan perusteella yhtään satelliittia ei ollut vielä löytynyt:

$GPGGA,191545,N,E,0,00,05.2,M,M,*79

GPGGA:n sisältämä tieto voidaan jakaa osiin näin:

GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
hhmmss.ss = UTC of position
llll.ll = latitude of position
a = N or S
yyyyy.yy = Longitude of position
a = E or W
x = GPS Quality indicator (0=no fix, 1=GPS fix, 2=Dif. GPS fix)
xx = number of satellites in use
x.x = horizontal dilution of precision
x.x = Antenna altitude above mean-sea-level
M = units of antenna altitude, meters
x.x = Geoidal separation
M = units of geoidal separation, meters
x.x = Age of Differential GPS data (seconds)
xxxx = Differential reference station ID

Jos mahdollista niin kokeile testata gps:ää ulkona. Satelliittien löytyminen voi kestää kauan ja aina kun sammmuttaa virrat niin GPS joutuu aloittamaan etsimisen alusta.

Joo huomasin saman itekkin kun vähän ajan päästä alkoi tulla hieman erin näköistä dataa. Nyt toimii myös tuo lcd kytkentä, siihen tulee ihan koordinaatteina. Laitan youtubeen videon tuosta virityksestä kun löydän vielä uudestaan sateenliitin. Suuret kiitokset tästä kytkennästä ja koodista mipille. Pitää alkaa joskus muokata/kehittellä tuota koodia monipuoleisimpiin sovelluksiin, kun aikaa riittää.