Objetivos
Material requerido.
Arduino Uno o similar. | |
Shield GSM/GPRS | |
Cables macho-hembra | |
fuente de alimentación para Arduino |
EL MÓDULO SIM808: GSM/GPRS + GPS
Este módulo está basado en el chip SIMCOM SIM808 y nos ofrece, además de las funcionalidades de envío y recepción de datos GSM/GPRS (la de los teléfonos móviles 2g), la tecnología GPS de navegación por satélite. O sea que, gracias a este módulo y utilizando una tarjeta SIM, seremos capaces de enviar y recibir llamadas y SMS, conectarnos a Internet y conocer nuestras coordenadas y el horario UTC (Tiempo Universal Coordinado).
Y por supuesto tiene conexión para cascos y micrófono para que podamos hablar con quien nos llame o cuando llamemos nosotros.
Para comunicarnos con este tipo de módulos utilizamos los comandos AT, unos viejos conocidos de esta página.
CONEXIONES Y PUESTA EN MARCHA
Vamos a empezar por colocar en el módulo SIM808 la tarjeta SIM que vayamos a usar, que se pone en la parte de abajo de la placa. Es para tarjetas SIM de las grandes, así o usáis una de esas o necesitaréis de un adaptador.
También deberíamos poner en el módulo las dos antenas que vienen con él, la del GPRS y la del GPS. En las conexiones de la placa vienen marcado donde se conecta cada una de ellas.
Y ahora nos toca conectarlo al Arduino, para lo que usaremos los pines Tx y Rx de la tarjeta (transmisión y recepción de datos), que conectaremos a los pines 7 y 8 del Arduino respectivamente. Pueden ser otros pines cualesquiera, siempre que los soporte la librería Software Serial que vamos a utilizar. Además uniremos las tierras y utilizaremos una fuente de alimentación externa para el módulo SIM808, ya que a la hora de comunicar este tipo de módulos consume mucho y no será suficiente con la alimentación del Arduino.
Para encender el módulo utilizaremos el LED de encendido, y veremos como se ilumina un LED. Y para activar la alimentación a la tarjeta SIM tendremos que pulsar el pulsador un par de segundos. Al hacerlo veremos como se encienden dos LEDs, uno fijo y otro que parpadear una vez por segundo. Mientras esté así significa que no ha encontrado la red móvil, cosa que solucionaremos metiendo el PIN como veremos más adelante.
COMANDOS AT PARA EL GSM/GPRS
Para poder comunicarnos vía comandos AT tendremos que cargar un programa para la comunicación serie como hemos hecho tantas veces anteriormente. Crearemos una instancia llamada SIM808 y seleccionaremos los pines del Arduino que queramos usar para comunicarnos (Rx y Tx). Nosotros hemos elegido el 7 y el 8, pero podéis usar cualquiera que sea compatible con la librería. También podéis cambiar la velocidad de comunicación, pero debe ser la misma para el puerto serie y para la instancia que hemos creado. Nosotros hemos elegido 19200 porque es la que usa el SIM900, de forma que podamos usar los programas que ya tenemos de esas sesiones.
#include <SoftwareSerial.h> SoftwareSerial SIM808(7, 8); //Seleccionamos los pines 7 como Rx y 8 como Tx void setup() { SIM808.begin(19200); Serial.begin(19200); delay(100); } void loop() { //Envíamos y recibimos datos if (Serial.available() > 0) SIM808.write(Serial.read()); if (SIM808.available() > 0) Serial.write(SIM808.read()); }
Una vez hayamos cargado el programa abrimos el monitor serie y seleccionamos la velocidad correcta. El primer comando AT nos servirá simplemente para saber si el módulo responde y que por lo tanto la comunicación funciona. Y este comando es simplemente AT, lo escribimos y pulsamos INTRO. Debería respondernos con un OK; si no deberíamos repasar que esté todo en orden: conexiones, encendido y velocidad correcta.
Comprobado esto, ya podemos meter el PIN de la tarjeta SIM, que se hace mediante el comando AT+CPIN=»XXXX»; donde tendréis que sustituir XXXX por el pin que corresponda, en mi caso 1867, o sea, AT+CPIN=»1867″. Obtendremos un mensaje de respuesta indicando si el PIN es correcto, y en caso de que lo sea, el LED que parpadeaba una vez por segundo pasará a hacerlo cada 3 segundos (más o menos), indicando que ha encontrado la red móvil.
Y ahora ya estamos en disposición de enviar y recibir llamadas y conectarnos a Internet. Para comprobar que efectivamente podéis llamaros al numero de teléfono de la SIM que hayáis puesto en el módulo, o usar el comando ATDXXXXXXXXX; (sustituyendo las X por el número de teléfono y respetando el «;») para llamar a quien queráis. Y si le conectáis unos cascos y un micrófono al módulo podréis hablar como si fuera un teléfono normal.
Os dejamos una tabla con los comandos AT más utilizados con este tipo de módulos y enlaces a las sesiones de SIM900 donde ya tratamos eso, porque los comandos AT son los mismos y la programación también.
COMANDOS AT PARA EL GPS
La parte del GPS se controla igual, mediante comandos AT, y vamos a verlos usando el mismo programa que en el apartado anterior. Primero activaremos el GPS mediante el comando AT+CGPSPWR=1. Y después preguntaremos por el estado del GPS hasta que veamos que ya nos ha posicionado utilizando AT+CGPSSTATUS?. Cuando nos devuelva «Location 3D Fix» ya podremos seguir, lo que suele llevar unos 30 segundos la primera vez.
Ahora ya estamos en posición de obtener los datos del GPSusando el comando AT+CGPSINF=0 que nos devolverá algo como esto: «+CGPSINF: 0,4316.645000,257.667700,14.800000,20170117141311.000,0,9,1.796440,198.850006″; que siguiendo ese orden corresponden a:
- Modo: 0.
- Latitud: 43º 16′ 64.5″.
- Longitud: 2º 7′ 66 77″.
- Altitud 14.8
- Fecha en UTC: 20170117141311, o sea, 17 de enero de 2017 a las 14:13:11.
- Tiempo de respuesta: 0.
- Número de satélites: 9.
- Velocidad: 1.796440 en nudos.
- Curso: 198.850006.
También podemos usar AT+CGPSOUT=32 para obtener los datos del GPS pero usando la especificación de la NMEA (National Marine Electronics Association), que define la interfaz entre varios equipos electrónicos marítimos. Con este comando recibiremos estos datos hasta que cerremos el GPS usando AT+CGPSPWR=0.
Estos datos corresponden a:
- Horario UTC: 14:25:34.
- Estado: A=Activo, V=Vacío.
- Latitud: 43º 16′ 68.54″ N.
- Longitud: 2º 57′ 64.83″ W.
- Velocidad en nudos: 0.40.
- Ángulo de derrota en grados: 1236.98.
- Fecha: 17/01/17
- Variación magnética.
- Datos del Cheksum.
Y si queréis comprobarlo buscad en Google «posición por coordenadas» o algo parecido e introducir los datos de latitud y longitud que hemos obtenido. No es que tenga una precisión del 100% pero no está mal. Al menos a mí me ha localizado con un margen de error aceptable.
Resumen de la sesión
En esta sesión hemos aprendido varias cosas importantes: