En este blog ya hemos comunicado Arduino con otros dispositivos de varias maneras: ethernet, Wi-Fi, Bluetooth… Hoy te traigo una más, hoy implementaremos en nuestro Arduino transmisión de datos a través de GSM/GPRS, esto es, la misma tecnología que utiliza la telefonía móvil. Esto es especialmente útil para establecer conectividad en emplazamientos en los que no hay conexión a internet, o como un respaldo a esta.
Conseguiremos gracias al uso del módulo SIM900.

El módulo SIM900, basado en las tecnologías GSM/GPRS, se erige como una pieza esencial para la conectividad móvil en proyectos electrónicos. Diseñado para facilitar la transmisión de datos a través de redes GSM, este componente versátil permite a los dispositivos electrónicos enviar y recibir mensajes de texto (SMS), realizar llamadas telefónicas y transmitir datos de manera eficiente. Su capacidad para operar en redes GSM lo convierte en una opción ideal para aplicaciones que requieren una conectividad móvil robusta y confiable.
Conexión de SIM900 con Arduino
El módulo SIM900 se alimenta con una tensión de 5V. Podríamos obtener este voltaje desde Arduino, pero, como hemos observado en otros proyectos, la corriente proporcionada desde la placa Arduino puede ser insuficiente ya que una misma fuente debe alimentar a todos los componentes de la placa Arduino y la del módulo adicional que conectemos, en este caso SIM900.
Por este motivo vamos a utilizar una fuente de alimentación específica para el módulo SIM900. He optado por usar un pequeño transformador de 220 Vac / 12 Vdc y un módulo regulador de voltaje para protoboard. Estos elemento garantizan un suministro de potencia suficiente y estable.
Lo que sí debemos tener en cuenta a la hora de utilizar fuentes de alimentación independientes es que tendremos que unir los negativos de todos los elementos: Arduino, SIM900 y regulador de voltaje.
La otra conexión fundamental es la de datos. SIM900 se comunica con Arduino por comunicación serie y nos ofrece dos posibilidades para ello modificando la posición de los jumpers situados junto a la antena.
En mi caso he optado por usar los pines 7 y 8 de SIM900 como Tx y Rx, respectivamente.
Os dejo una foto y un esquema donde se ven claramente estas cuestiones:


Y el listado con los elementos necesarios:
- 1 x Arduino UNO
- 1 x módulo GMS/GPRS SIM900
- 1 x adaptador de fuente de alimentación a 5V y 3.3V
- Cables jumper
Configuración de SIM900
El módulo SIM900 no sólo ofrece la funcionalidad básica de comunicación móvil, sino que también presenta una interfaz UART (Universal Asynchronous Receiver-Transmitter), que facilita su integración con microcontroladores y otros sistemas embebidos. Esto significa que los desarrolladores pueden controlar y configurar el módulo utilizando comandos AT (comandos específicos del módulo) a través de la interfaz UART, permitiendo una mayor flexibilidad en el diseño y la implementación de proyectos electrónicos.
Así, podemos enviar comandos AT directamente desde Arduino usando el monitor serie de su IDE, o integrarlos dentro de un programa de Arduino, como argumento de entrada del comando serial.print().
Algunos de los comandos más relevantes son:
- Configuración del módulo:
AT– Comando de prueba, el módulo responderá con «OK» si está listo para recibir comandos.AT+CGMI– Devuelve el nombre del fabricante.AT+CGMM– Devuelve el modelo del módulo.
- Configuración de la red y la conexión:
AT+COPS=?– Escanea las redes disponibles.AT+COPS=<modo>– Selecciona manual o automático para el registro de red.
- Gestión de llamadas:
ATD<teléfono>;– Marca el número especificado para realizar una llamada.ATH– Cuelga una llamada activa.ATA– Responde a una llamada entrante.AT+CLIR=– Configura la restricción de identificación de llamadas.
- Mensajes de texto (SMS):
AT+CMGF=– Configura el formato de los mensajes SMS (0 para PDU, 1 para texto).AT+CMGS=<teléfono>– Envía un mensaje de texto al número especificado.AT+CMGL=<modo>– Lee mensajes SMS almacenados.
- Configuración de la interfaz UART:
AT+IPR=<velocidad>– Configura la velocidad de la interfaz UART.AT+IFC=– Configura el control de flujo de la interfaz UART.
- Información de la señal y la red:
AT+CSQ– Devuelve la calidad de la señal.AT+CREG?– Verifica el estado de registro en la red.
- Configuración de conexión GPRS:
AT+SAPBR=– Configura el perfil GPRS.AT+HTTPINIT– Inicializa el servicio HTTP.
- Configuración de energía:
AT+CBC– Devuelve información sobre la batería.AT+CSCLK=– Configura el modo de ahorro de energía.
Proyecto demostración
Para probar el módulo SIM900 he diseñado un programa con algo de mala baba 😈.
El siguiente código activa la tarjeta SIM insertada en el módulo SIM900, llama a un número y cuelga unos segundos después. Tras ello, repite la llamada indefinidamente. Es un proyecto perfecto para hacer la puñeta a alguien que os caiga mal, como si fueseis Bart Simpson troleando a la taberna de Moe.
NOTA: Para que el montaje funcione correctamente, debéis encender la placa del SIM900. Esto lo podéis hacer manualmente, presionando el botón ubicado en el lateral, o a través del programa de Arduino. Para hacer esto último debéis soldar entre sí los puntos rotulados como R13 en la placa del SIM900 y entonces podréis encender la placa enviando un pulso de un segundo al pin 9 de la placa.
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); //Seleccionamos los pines 7 como Rx y 8 como Tx
void setup()
{
//digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
//delay(1000);
//digitalWrite(9, LOW);
delay (5000); //Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
Serial.println("OK");
delay (1000);
SIM900.println("AT+CPIN=\"????\""); //Comando AT para introducir el PIN de la tarjeta. Sustituir ???? por el PIN de vuestra tarjeta.
delay(10000); //Tiempo para que encuentre una RED
}
void llamar()
{
Serial.println("Realizando llamada...");
SIM900.println("ATD?????????;"); //Comando AT para realizar una llamada. Sustituir ????????? por el número al que queréis llamar.
delay(10000); // Espera 10 segundos mientras realiza la llamada
SIM900.println("ATH"); // Cuelga la llamada
delay(1000);
Serial.println("Llamada finalizada");
}
void loop()
{
//llamar(); //Realiza la llamada
//while (1);
}

0 comentarios