Arduino i GPS
26 desembre 2010 at 09:14 piniflopa 2 comentaris
Aquesta setmana vaig rebre un mòdul GPS demo board, per poder fer proves amb l’Arduino i les dades GPS. El mòdul esta prou be, ja que tè sortides USB, RS-232, bluetooth i TTL de 5 i 3,3V.
En la fotografia e pot veure el mòdul amb la seva antena externa. aquesta placa pot alimentar-se a través dels terminals de 5V de la propia placa o alimentar-se de forma paràsita des de el USB.
La eina més fàcil per fer anar un dispositiu GPS amb l’Arduino és la llibreria TinyGPS, que permet connectar qualsevol dispositiu GPS que compleixi l’estandard NMEA. Per qui no ho conegui, NMEA és un protocol que utilitzen la majoria de dispositius receptors GPS, el qual envia diferents trames de dades sobre la hora, la posició, la precissió i unes quantes dades més. Tota aquesta informació sempre es representa e la mateixa manera, peró cal conneixer el protocol per saber dins de quina trama podem trobar la informació que nosaltres necessitem (per exemple la de latitud i longitud). Així doncs, la llibreria tiny GPS ens estalvia la feina de buscar dins de les trames rebudes les dades que necessitem.
Una de les peculiaritats de la llibreria es que les dades de posició les retorna com a 100000-esimes de grau, és a dir, que 1º30′ està representat com 1500000 (aixó és 1,500º).
El funcionament de la llibreria és molt simple:
1er- Declarem un element tinyGPS.
2on- Configurem un port serie per un rebrem les dades (pot ser un port sèrie real o utilitzant la llibreria SoftSerial).
3er- Cada caracter que rebem per el port serie, l’enviem a un element decodificador.
4at- Fem la consulta de les dades que ens interessant (posició, dia y hora, velocitat o rumb).
I ja està!! Ara només cal que processem les dades o les presentem per una pantalla o les enviem per el port sèrie o….. el que volguem fer.
El que he fet ha sigut utilitzar una pantalla LCD juntament amb un Arduino Diecimilla i el mòdul GPS.
- De GPS_DataIN del mòdul GPS conectat a el pin 0 (RX) del Arduino.
- El display connectat al Arduino utilitzant una configuració de 4 bit.
- Tota la alimentació connectada a través de 5V del arduino.
Al imprimir en la pantalla les dades de recepció de posició, aquestes tenen un aspecte com el que es mostra.
He preferit canviar el format de les dades per un format tipus: 41º43.18′, Es a dir, graus amb minuts decimals. Per fer-ho he jugat amb la funció mòdul (%).
El codi complert que he utilitzat es el següent
#include <LiquidCrystal.h>
#include <TinyGPS.h>
long latitude, longitude, lat, longi;
float latdeg, longdeg;
LiquidCrystal lcd(7,8,9,10,11,12);
TinyGPS gps;
void setup(){
lcd.begin(40,2);
lcd.clear();
Serial.begin(9600);
}
void loop(){
while (Serial.available()){
int c = Serial.read();
gps.encode(c);
}
gps.get_position(&latitude, &longitude, NULL);
if ((latitude!=lat)||(longitude!=longi)){
lat=latitude;
longi=longitude;
int long_deg=longi/100000;
float long_min= (longi%100000)*0.6/1000.0;
int lat_deg=lat/100000;
float lat_min= (lat%100000)*0.6/1000.0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("lat: ");
lcd.print(lat_deg);
lcd.print("o ");
lcd.print(lat_min);
lcd.print("'");
lcd.setCursor(0,1);
lcd.print("long: ");
lcd.print(long_deg);
lcd.print("o ");
lcd.print(long_min);
lcd.print("'");
}
}
Entry filed under: Uncategorized. Tags: .
2 comentaris Add your own
Deixa un comentari
Trackback this post | Subscribe to the comments via RSS Feed




1.
danae | 2 gener 2011 a les 16:48
hola!, la web del citilab ha cambiado… hay otro link que me lleve a http://seaside.citilab.eu/scratch/arduino ??
gracias!!!
2.
piniflopa | 2 gener 2011 a les 20:14
Hola!
No puedo serte de ayuda. Desconozco si han movido el contenido de ese servidor o simplemente se ha quedado colgado. Mejor ponte en contacto con Citilab. Un saludo!