GPS/GSM tracker

¡Buenas tardes!

Posiblemente ya estéis hartos de este tipo de proyectos, pero me propuse hacer un tracker GPS con un módulo GSM/GPS/GPRS y estoy teniendo bastantes problemas...

El módulo en cuestión es este:

Módulo

Y dispongo de una Arduino Mega para el proyecto.

He aquí un detalle de la fila de pines del centro:

Según se especifica en el datasheet de la placa, si conecto GSM EN y GPS EN a D2 y D3 respectivamente, puedo controlar la salida serial. Si pongo una a tierra y la otra a 5V, permito que esos pines se conecten al puerto serie 0 (p.ej, con GSM EN a GND y GPS EN a 5V lo que hago es que GSM RX esté conectado a Duino TX(TX0) y GSM TX a DuinoRX (RX0)).

Mi idea de proyecto es esta:

1.- Se llama/envía un mensaje con el texto 'GO', que provoca una interrupción externa.
2.- Ésta hace que se habilite el modo GSM (por lo que he dicho antes de GSM EN) y se envíe la orden de iniciar el GPS, algo así...

digitalWrite(2,LOW);//Enable GSM mode
  digitalWrite(3,HIGH);//Disable GPS mode
  delay(2000);
  Serial.begin(9600); 
  delay(5000);//GPS ready
 
  Serial.println("AT");   
  delay(2000);
  //turn on GPS power supply
  Serial.println("AT+CGPSPWR=1");
  delay(1000);
  //reset GPS in autonomy mode
  Serial.println("AT+CGPSRST=1");
  delay(1000);
  Serial.println("AT+CGPSIPR=115200");
  mySerial.begin(115200);
  delay(1000);

3.- Una vez iniciado, se pasaría al Modo GPS, y con unas funciones que tengo ya declaraads, se decodificaría la hora, la latitud, longitud, etc y se meterían en variables.

4.- En principio, el proyecto consistiría en que ahora otra interrupción (esta interna, un timer cada 1-2 segundos) subiese la información de estas variables a internet, para leerlas en una página con código PHP por medio de un $GET. Pero antes, para hacer las pruebas, lo primero que quiero hacer es obtener datos fiables, cosa que NO estoy consiguiendo...

Me dan hasta vergüenza hacer dudas así quedándome 1mes - 1 mes y medio para hacer el proyecto, pero bueno, ahí van:

-En 1) digo que quiero que la recepción de la llamada/SMS provoque una interrupción externa. ¿Cómo? Había planteado hacer algo así:

 if(Serial.available() >0)
 {  
   delay(10);
   orden=Serial.read(); //Leemos el primer caracter del sms
   if (orden=='G')
   {
     orden=Serial.read();//Leer el siguiente caracter
     if (orden=='O'){
       protocol=true;}      //COMENZAMOS EL PROTOCOLO
   }

Pero esto no sería con interrupciones, sino simplemente poner a 1 una variable booleana que habilitase el comienzo del GPS. ¿Cómo puedo hacer que al recibir un SMS eso provoque una interrupción que ponga en marcha el GPS? Por si acaso, el módulo que tengo es una SIM908, por si sirve de algo...

Además me viene bien lo de las interrupciones porque también quiero que, al recibir otro SMS (por ejemplo uno con la palabra 'END') se provoque el fin del programa, llevándolo a su estado inicial de esperar el comienzo del protocolo, y este mensaje se recibiría en cualquier momento (por ejemplo, mientra esté el GPS funcionando) y con eso solo se me ocurre que pueda funcionar las interrupciones externas... ¿alguna ayuda?

  • He estado probando pero no consigo una señal GPS fiable. Tengo conectada esta antena GPS al pin del que dispone para ello el módulo SIM908:

Para probarla, lo que he hecho es conectar la arduino al PC y la placa GSM/GPS por su puerto UART al PC también, de modo que primero habilitaba el modo GSM con el Puerto Serie 0 de la Arduino, encendía el GPS y ponía el baud-rate en 115200, para luego habilitar el modo GPS, y pasar a ver en el Monitor Serie lo que me llegaba por el puerto de la placa. Es decir, conectaba GSM RX con DuinoTX, GSM TX con Duino RX, y luego GPS RX con USB TX y GPS TX con USB RX. Le costaba mucho hacer el Fix, y cuando lo hacía, obtenía datos erráticos (a 50 metros de mi posición y saltando 4 o 5 metros alrededor a cada Fix). Sin embargo, quitando la placa GSM y probando con un módulo Adafruit Ultimate GPS Breakout 3.0 + la antena que os he mostrado antes, obtengo unos resultados magníficos. ¿Alguna idea?

-Una dudilla de concepto.... si lo que quiero es:

--> Esperar a que llegue un SMS que inicie el protocolo. [MODO GSM]
--> Activar el GPS mediante comandos AT [MODO GSM]
--> Obtener Fix por el GPS y refrescar cada segundo. [MODO GPS]
--> Mandar los datos de las variables por PHP. [MODO GSM]
--> Seguir con estos últimos dos pasos de forma ininterrumpida hasta que el usuario lo decida.
--> Terminar el protocolo volviendo al primer paso enviando un mensaje/llamando. [MODO GSM]

¿Cuántas interrupciones internas/externas necesitaría, y cuántos puertos? Había deducido que una interrupción interna para la alternancia entre modo gps y gsm en la obtención/subida de datos a internet, y otra externa para el inicio/final del protocolo, y 2 puertos serie Hardware para GSM y GPS. ¿Es así?

Perdón por la extensión del mensaje, y también por la ignorancia. ¡Gracias de antemano!

Un saludo!

Hola, yo no he trabajado con esos shields pues me parecen bastante costosos + el arduino que vayas a usar.

Yo te recomiendo otra tarjeta embebida como la LinkitONE que se programa bajo el IDE de arduino, pero ya tiene incoporado el GPS Y GPRS, ademas de Wifi y BT y te sale mas barato que comprar el arduino y el shield y la verdad es bastante facil de poner a andar el GPS Y GPRS pues las APIs y las librerias funcionan muy bien.

Sin embargo tratare de mirar tu codigo con mas detenimiento al rato a ver que te puedo aportar.

No conocía el LinkItOne y debo decir que es una maravilla de placa. No la he comprado pero ya la estoy buscando.

Hola Ricardo

Si la verdad se maneja de Maravilla la tarjeta, ademas con todo lo que trae incorporado de conectividad es espectacular.

Yo tengo un post actual donde heche a Andar El WiFi(super facil), el GPS (muy facil tmb) y un sensor analogo y un par de sensores tipo interruptor y muy bien, estoy es tratando de subir esa info a un web service externo pero no he podido, pues no se mucho de intercambios HTTP.

Ya ensaye el GPRS de la tarjetita y funciona tmb demasiado bien y muyyy facil.

Yo particularmente la recomiendo a y se me olvidaba el cuento de la bateria de LiIon es otra ventaja mas.

Y donde la consigues? la busqué y el sitio no dice donde está.

El linkIt One, lo vende Seeedstudio

http://www.seeedstudio.com/depot/LinkIt-ONE-p-2017.html

Ese sitio lo encontré pero no pude determinar donde está, Europa o USA?

Pues según la misma página de Seeed Studio, ni un sitio ni en otro, están en china.

https://www.seeedstudio.com/depot/index.php?main_page=about_us&p=findus

Hola a todos estoy cacharreando con esta shield y a mi la verdad es que me va bastante bien,tanto en tema de llamadas y de mandar sms,respecto a lo que dices josemi93 a mi la señal del gps me da un error de 2-3 metros lo mas salen casi clavadas las coordenadas,tienes que cambiar el puente de GSM_EN GND a GPS_EN GND,otra cosa será cuando me meta con arduino que ai ando un poco perdido en definitiva me da el resultado que busco.