Arduino i GPS (II)
19 gener 2011 at 08:56 piniflopa 1 comentari
Després d’haber remenat una mica amb l’Arduino, el GPS, el display i la proto-board, he vist que hi ha un munt de possibilitats per poder experimentar amb totes aquestes coses i… més. Així que m’he decidit a continuar per aquest camí durant una temporada.
Peró clar: utilitzar el GPS des de la ‘taula d’operacions’ no te cap sentit. Així que he començat a preparar un sistema compacte per poder experimentar amb tota la plataforma de manera fàcil i, a més, que sigui fàcil de transportar i poder experimentar a l’aire lliure.
El primer que he fet ha sigut decidir amb quins trastos vull experimentar i m’he decidit per l’arduino (com no!), la placa GPS i unl mòdul transmissor, descartant el LCD de moment.
He agrupat tots aquests elements i he anat a buscar una placa de de circuit imprés suficientment gran per poder encabir-hi els tres mòduls. He soldat tires de pins allà on hi han d’anar els connectors dels mòduls i tambè he soldat cables entre els terminals corresponents a l’alimentació (+5V, GND) i la transmissió serie de dades (TXD, RXD).
El resultat de tot aixó ha sigut el següent conjunt compacte.
Desprès, tot aquest artilugi queda allotjat dins d’un tupper de 0,60€ dels xinos i es pot portar dins de la motxila per fer proves. I la primera prova que he fet ha sigut comprovar el funcionament del transmissor,de dades, provant la cobertura en entorn urbà al voltant de casa. He pogut diagnosticar que aquest transmissor te una fiabilitat del 83% a 514mts. de distància i he pogut treure un arxiu .PLT, compatible amb el programa OziExplorer per veure el trajecte que he fet amb l’arduino carregat a la motxila.
El codi que he utilitzat en l’arduino per fer aixó és extremadament simple:
#include <TinyGPS.h>
#define EN_TRX 13
#define TEMPORIZADOR_1 15 //en seg.
long latitude, longitude, lat, longi;
unsigned long fix_age, time, date;
float latdeg, longdeg;
int Num_orden=0;
long temporizador_1=0;
TinyGPS gps;
void setup(){
Serial.begin(9600);
pinMode(EN_TRX,OUTPUT);
digitalWrite(EN_TRX,LOW);
}
void loop(){
while (Serial.available()){
int c = Serial.read();
gps.encode(c);
}
gps.get_position(&latitude, &longitude, NULL);
gps.get_datetime(&date, &time, &fix_age);
if (((millis()-temporizador_1)>=TEMPORIZADOR_1*1000) && (latitude<=9000000)){
temporizador_1=millis();
Num_orden++;
digitalWrite(EN_TRX,HIGH);
delay(150);
Serial.print("EMISSOR1,BASE,");
Serial.print(Num_orden);
Serial.print(",");
Serial.print(latitude);
Serial.print(",");
Serial.print(longitude);
Serial.print(",");
Serial.println(time/100);
delay(30);
digitalWrite(EN_TRX,LOW);
}
}
Aquest codi lúnic que fa es capturar la posició donada per el GPS i formar una trama de dades formada de la següent forma:
EMISOR, DESTINATARI,#ORDRE,LATITUD,LONGITUD,HORA
Aquesta trama s’emet cada 15 segons. Hi ha un altre mòdul rebent aquesta informació i guardant tota la col·lecció de trames . Amb un petit programa fet amb python es fa la decodificació; generant-se un informe de cobertura i dos arxius per un full de càlcul i el .PLT per OziExplorer.
Entry filed under: Uncategorized. Tags: .
1 comentari Add your own
Deixa un comentari
Trackback this post | Subscribe to the comments via RSS Feed



1.
Ian Ramos | 11 abril 2011 a les 09:43
Hola que tal,
les escribo para comentarles que actualmente estamos realizando un documental de Scratch y Arduino en el Citilab.
Seria interesante poder contar con la colaboracion de vosotros en este documental, en el basicamente queremos mostrar las utilidades de estas herramientas. Si pueden acercarse al Citilab estaria bien, pero si tenemos que acercarnos a otra parte no hay problema.
Gracias y hasta luego.
Ian.