27 de maig 2015

Sensor GPS



El sensor GPS ens permet conèixer la nostra posició geogràfica actual però també ens facilita tota una sèrie de dades addicionals com l'hora actual, l'orientació (angle respecte al nord), l'altitud i la velocitat de desplaçament.
Sensor GPS

El Sensor GPS es comunica amb el microcontrolador amb una connexiò sèrie (la mateixa que fa servir el monitor sèrie). Cal connectar, a més de l'alimentació, la pota TX del sensor amb la RX del microcontrolador i la pota RX del sensor amb la TX del microcontrolador. La figura següent mostra com connectar-lo:
Connexió del sensor GPS


Cal tenir present que el sensor GPS requereix rebre informació des dels satèl·lits del sistema GPS. Per tant cal que estigui a l'exterior o al costat d'una finestra des de la que pugui veure un nombre suficient de satèl·lits. Els punts de connexió de la placa del sensor GPS són els següents:

Pota Utilització Comentaris
3.3 V Positiu de l'alimentació
GND Negatiu de l'alimentació
TX Transmissió de dades Comunicaciò sèrie
RX Recepció de dades
FIX Connectat als satèl·lits La sortida està desactivada (GND) quan hi ha connexió
i està intermitent si no n'hi ha.
La placa porta un led connectat a aquesta pota.
BAT Positiu de la bateria Possibilitat de connectar-hi una bateria d'entre 3 i 3,3 V



La funció de la bateria és alimentar el sensor quan no està alimentat el microcontrolador. Amb la bateria el sensor pot mantenir informació de l'hora exacta. Mentre el sensor s'alimenta per la pota BAT només funciona el seu rellotge intern i no es comunica ni amb els satèl·lits ni amb el microcontrolador. La pota fix la podríem connectar a una entrada del microcontrolador i així ens podríem estalviar de comunicar-nos amb el sensor mentre no està connectat amb els satèl·lits.

En el programa que presentem a continuació podem provar la comunicació del microcontrolador amb el sensor i analitzar les dades que rebem. El probrama obre dos canals sèrie i mira per quin dels dos es reben dades. Quan detecta que un dels canals rep dades les llegeix i les envia cap a l'altre (que suposa que és el monitor sèrie).

Programa




Per exemple, posant el sensor al costat de la finestra del meu despatx vaig rebre, entre altres, les següents dades:

$GPRMC,141159.000,A,4123.0481,N,00206.9632,E,0.16,295.02,181214,,,D*65
$GPGGA,141159.000,4123.0481,N,00206.9632,E,2,09,1.14,88.8,M,51.3,M,0000,0000*57

La primera línia ($GPRMC) correspon a les dades mínimes recomanades i la segona ens aporta informació addicional. Anem a analitzar la informació rebuda a la primera línia:

Dades del sensor GPS


Observem com convertir les dades rebudes en informació útil. L'hora actual té les hores, els minuts i els segons abans del punt i les mil·lèsimes de segon després del punt. L'hora indicada és la del eridià de Greenwich o hora GMT que correspon a la nostra hora solar. La nostra hora oficial la podem obtenir sumant 1 a l'hora GMT a l'hivern i sumant-hi 2 a l'estiu.

Hora GPS


Si ens surt una A després de l'hora és que les dades són vàlides. En cas contrari surt una V.

La latitud és l'angle del punt considerat respecte a l'equador. Una latitud zero correspon a l'equador, les latituds positives a punts situats al nord de l'equador i les negatives a punt situats al sud. Els angles de 90 graus (positius o negatius) corresponen als pols. La latitud no pot ser més gran de +90° ni més petita de -90°. A la latitud les dues primeres xifres són els graus i les següents són els minuts. Si la latitud és positiva (nord) surt una N i si és negativa (sud) una S.

Latitud


La longitud correspon a l'angle, dibuixat a l'equador, del punt considerat respecte al meridià de Greenwich. A la longitud les tres primeres xifres són els graus i les següents són els minuts. Si la longitud és positiva (est) surt una E i si és negativa (oest) una W.

Longitud


Les coordenades que rebem directament del sensor no ens serveixen per a la majoria d'aplicacions (per exemple Google Maps) i cal convertir-les. Per exemple, Google Maps no entendrà les coordenades així:

      4123.0481 N, 00206.9632 E

Però sí que les entén d'aquesta altra manera:

      41° 23.0481, 002° 06.9632

La velocitat de desplaçament es mesura en knots (milles nàutiques per hora). Cal multiplicar el valor per 1,852 per obtenir la velocitat en km/h.

Velocitat


L'orientació ens diu l'angle (en graus) respecte al nord.

Orientació


Finalment tenim la data amb l'any indicat amb només dues xifres.

Data


Una part de la informació de la segona línia és redundant.

Dades del sensor GPS


A més hi podem trobar la qualitat del senyal rebut, el nombre de satèl·lits detectats i l'altitud en metres.

Altitud


Per fer servir el sensor ens convindrà la Adafruit-GPS-Library que ens facilita molt la feina ja que ens dóna les dades per separat. Un cop ja tinguem la llibreria, podem fer els nostres programes. Les diferents dades que podem demanar (suposant que hem definit el sensor amb el nom sensorGPS) són:

Tipus Comanda Utilitat
Configuració sensorGPS.begin(velocitat) Inicialitza el sensor GPS i defineix la velocitat de comunicació
sensorGPS.sendCommand(comanda) Envia una comanda de configuració
sensorGPS.lastNMEA() Dades del sensor en brut
Cobertura sensorGPS.parse(sensorGPS.lastNMEA()) Torna true si les dades són útils
sensorGPS.fix Dóna 0 si no ha trobat prou satèl·lits
sensorGPS.fixquality Qualitat del senyal
sensorGPS.satellites Nombre de satèl·lits
Hora GMT sensorGPS.hour Hora
sensorGPS.minute Minuts
sensorGPS.seconds Segons
sensorGPS.milliseconds Mil·lisegons
Data sensorGPS.day Dia
sensorGPS.month Mes
sensorGPS.year Any (dues xifres)
Coordenades sensorGPS.latitude Latitud en el format del sensor
sensorGPS.lat Sentit de la latitud (N o S)
sensorGPS.longitude Longitud en el format del sensor
sensorGPS.lon Sentit de la longitud (E o W)
Altres dades sensorGPS.speed Velocitat (en knots)
sensorGPS.angle Orientació (en graus)
sensorGPS.altitude Altitud (en metres)



A continuació tenim un programa bàsic que llegeix les dades del sensor i les envia al monitor sèrie. Inicialment inclou les llibreries del sensor GPS i de la comunicació sèrie. Després defineix un objecte corresponent al sensor (en el que hem d'indicar la comunicació sèrie que farà servir), una variable per controlar el temps i una per indicar si farem servir interrupcions que definirem com a false perquè no les farem servir.

En el setup obrim una comunicació sèrie amb l'ordinador, inicialitzem i configurem el sensor GPS i esperem un segon a que el sensor es reconfiguri.

En el bucle loop llegim el sensor i mirem si han arribat dades correctes. Si no han arribat dades tornem a començar el loop fins que arribin. Per no saturar la comunicació, només tractem les dades cada dos segons. Això ho fem guardant el valor inicial de la funció millis en una variable i comparant-los. Quan la diferència sigui més gran que 2000 vol dir que ja han passat dos segons. També vigilem que millis no s'hagi reinicialitzat i si és el cas actualitzem la variable.

Cada dos segons mostrem les dades llegides. Primer mostrem les dades tal com han arribat i seguidament hi ha aquelles que es poden obtenir amb pocs satèl·lits detectats i després aquelles que requereixen més satèl·lits i que només mostrarem si SensorGPS.fix està a 1 que vol dir que hem pogut connectar amb el mínim nombre de satèl·lits necessàris.

Programa

A continuació hi ha un exemple del que s'ha mostrat pel monitor sèrie a l'executar aquest programa: 
            Connectat: 1
            Qualitat del senyal: 2
            Hora actual: 14.11.59,0 GMT
            Data actual: 18-12-2014
            Sats: 9
            Coordenades: 4123.0483N, 206.9632E
            Velocitat: 0.16 knots
            Velocitat: 0.30 km/h
            Angle respecte al nord: 295.02 graus
            Altitud: 88.80 m


Cap comentari:

Publica un comentari a l'entrada

Deixa el teu comentari