Control remoto por mensaje de texto con el sim900 y Arduino Uno
Materiales Utilizados:
- Modulo sim900
- Tarjeta Arduino Uno.
- Sim card de Claro "para Colombia". Si esta en un país distinto, puedes probar con distintas sim card y ver con cual funciona bien.
- Resistencia de 330 ohmio.
- Led del color rojo, verde y amarillo.
- Motor DC de 12V.
- Modulo relé de un canal a 5V.
- Adaptador de 12V 1A.
Circuito
La alimentacion del módulo sim900 se realiza de manera externa, una batería de 9V, pero se puede realizar con un adaptador de 12V 1A.
Descripción del código
En esta práctica se muestra como controlar el encendido y apagado de tres led de diferentes colores (rojo, verde y azul), al igual que un motor DC da 12V-24V, el control se realiza mediante mensaje de texto, utilizando el módulo sim900. Para encender y apagar cada led y motor, se envía un mensaje especifico para cada elemento, este mensaje de decodifica utilizando la funciona indexOf() de Arduino.
A continuación de describe los mensajes para controlar cada elemento:
Mensaje enviado |
Acción |
MotorON |
Encender
Motor |
MotorOF |
Apagar
Motor |
VerdeON |
Encender led
Verde |
VerdeOF |
Apagar led Verde |
RojoON |
Encender led Rojo |
RojoOF |
Apagar led Rojo |
AmarilloON |
Encender led Amarillo |
AmarilloOF |
Apagar led Amarillo |
Para la recepción del mensaje, se debe tener en cuenta la configuración del modulo sim900, debe estar configurado para que el mensaje se pueda leer en modo texto "AT+CMGF=1", y además de eso, es muy importante que el mensaje no se guarde en la memoria del dispositivo, sino que pase directo al puerto serial, para poder ser leído y decodificado, esto se puede configurar con el siguiente comando: AT+CNMI=2,2,0,0,0.
En cuanto al código utilizado para todo el control de encendido/apagado de los elementos, se tiene inicialmente una condición que evalúa si por el puerto serial entra algún dato, como se ha configurado el módulo para que los mensajes pasen directo al puerto serial, se va a capturar dicho mensaje y se va almacenar en la variable de tipo String mensaje:
if (Serial.available() != 0) {
caracter = Serial.read();
mensaje = mensaje + caracter; // Añadimos el carácter leído al mensaje
//Serial.print(caracter);
}
Posteriormente se tiene la función identifica_SMS(), que permite identificar el mensaje, y en función de dicho mensaje, encender/apagar cada elemento, por ejemplo:
Para el encendido del motor DC:
int motorON = mensaje.indexOf("MotorON");
if ( motorON >= 0 ) {
delay(1000);
digitalWrite(motor,HIGH);
mensaje = ""; //Bórralo para la próxima vez
Serial.println("Motor encendido");
delay(1000);
Serial.write("AT+CMGF=1\r\n");
delay(1000);
//Enviar comando para un nuevos SMS al numero establecido
Serial.write("AT+CMGS=\"+57313XXXXXXX\"\r\n");
delay(1000);
//Enviar contenido del SMS
Serial.write("Motor encendido");
delay(1000);
//Enviar Ctrl+Z
Serial.write((char)26);
delay(1000);
}
Cuando se realiza en encendido/apagado del motor, se envía un mensaje de notificación de que se ha realizado esa acción.
Para el encendido/apagado de unos de los led, por ejemplo led rojo:
int motorON = mensaje.indexOf("RojoOn");
int rojoOF = mensaje.indexOf("RojoOF");
if ( rojoON >= 0 ) {
delay(1000);
digitalWrite(rojo,HIGH);
mensaje = "" ; //Bórralo para la próxima vez
Serial.println("Luz Roja encendida");
}
if ( rojoOF >= 0 ) {
delay(1000);
digitalWrite(rojo,LOW);
mensaje = "" ; //Bórralo para la próxima vez
Serial.println("Luz Roja apagada");
}
Para comprender mejor el funcionamiento de esta práctica, remítase al video y acceder al código completo, ubicado en el repositorio (link al final) .
Conceptos:
Serial.read: Función propia de Arduino, que permite leer todo lo ingresado por el puerto serial o buffer, y devolver en un dato de tipo int.
indexOf(): Función que permite buscar dentro de un String, un carácter u otro String, si lo encuentra, esta función devuelve 0, en caso contrario devuelve -1. La búsqueda se realiza desde el inicio de la cadena .
Tips para realizar las pruebas
- Fijar la frecuencia del módulo en 19200 bps "Serial.begin(19200)" y "MOD_SIM900.begin(19200)", con esta frecuencia el modulo trabaja mucho mas estable, si no le funciona con dicha frecuencia, ir modificando hasta encontrar la correcta.
- Cuando se disponga a subir el código a la tarjeta de Arduino Uno, tener presente que la conexión con los pines de trasmisión por hardware TX y RX (D1, D0), deben estar desconectado para que no se tenga error por conexión ó por ende no tener alimentado el modulo sim900 en el momento.
Códigos Fuentes Utilizados
En el siguiente enlace, puedes encontrar el repositorio con los códigos fuentes que se utilizaron en las pruebas.
0 Comentarios