bclose

CONTROLAR ARDUINO MEDIANTE LLAMADAS Y SMS

Encendiendo y apagando un LED con nuestro móvil

Objetivos

 

 

    • Encender y apagar un LED mediante llamadas y SMS.
    • Crear una agenda con números autorizados para las llamadas.
    • Reconocer y utilizar textos de los SMS para realizar diferentes acciones.
 

Material requerido.

 

  Tienda España Tienda Mexico
Vista principal de un arduino uno Arduino UNO Arduino UNO
Vista principal Shield GPRS Shield GPRS

 

CONTROLAR ARDUINO CON NUESTRO MÓVIL

 

Con lo que hemos aprendido hasta ahora seguro que a muchos de vosotros (yo incluido) se os ha ocurrido que podríamos montar un sistema que, por ejemplo, encienda la calefacción de casa un ratillo antes de que lleguemos haciéndole una llamada con nuestro móvil, y así estemos bien a gustito en casa según lleguemos.

Pues en esta sesión vamos a ir acercándonos a eso. Primero utilizando una llamada para encender y apagar un LED, y después para hacer lo propio en función del SMS que le enviemos.

movil llama arduino

 

UTILIZAR UNA AGENDA PARA FILTRAR LAS LLAMADAS

 

Primero vamos a centrarnos en las llamadas. El concepto del programa será guardar en una variable el texto que recibamos del puerto serie del GPRS y si es una llamada, encender o apagar un LED alternativamente. Pero claro, no queremos que nadie que no seamos nosotros (u otra persona autorizada por nosotros) se equivoque al llamar de número y ande encendiendo cosas en nuestra casa, así que crearemos una agenda con los números que tienen nuestro beneplácito.

Además tendremos que crear una variable mensaje tipo String, donde iremos guardando los caracteres que nos vayan llegando del GPRS, con el fin de poder luego trabajar con ellos.

 #include <SoftwareSerial.h>
   SoftwareSerial SIM900(7, 8); // 10 y 11 para el Arduino Mega. Configura el puerto serial para el SIM900

   char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
   String mensaje = "";
   int LED = 13 ;
   bool estado = false ;  //Variable para guardar el estado del LED
   String agenda[] = {"XXXXXXXXX" , "XXXXXXXXX"};  //Array con los numeros autorizados
   int numtotal = 2;  //Cantidad de numeros de telefono autorizados

Toda la parte de los programas que sirve para recibir las llamadas y los SMS correctamente va a ser el mismo que en la sesión anterior, sólo que esta vez hemos metido toda la parte que se encarga de poner en marcha el módulo GPRS en una función a la que llamaremos inicializaSIM900, y que lanzaremos en el setup.

 void inicializaSIM900()
   {
      //digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
      //delay(1000); 
      //digitalWrite(9, LOW);
      delay (5000);
      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 = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
      delay(25000); //Tiempo para que encuentre una RED
      Serial.println("PIN OK");
      SIM900.print("AT+CLIP=1\r"); // Activa la identificación de llamada
      delay(100);
      SIM900.print("AT+CMGF=1\r"); // Configura el modo texto para enviar o recibir SMS
      delay(1000);
      SIM900.print("AT+CNMI=2,2,0,0,0\r");   // Saca el contenido del SMS por el puerto serie del GPRS
      delay(1000);
    }

Y la recepción de caracteres va a ser también igual en el loop, sólo que esta vez iremos guardando los caracteres en una variable, como hemos indicado un poco más arriba.

Contenido solo disponible para suscriptores. ¡Accede al contenido! 

Cuando hagáis pruebas os recomiendo dejar sonar más de un tono, por si acaso se perdiera algún carácter durante el envío y no recojamos bien el número de teléfono. Con cada tono se manda una vez el número que nos está llamando, y así nos aseguramos de que alguna de las veces llegue bien. No pasa muchas veces, pero todos conocemos las leyes de Murphy…

 

DIFERENCIAR Y RECONOCER TEXTOS EN LOS SMS

 

En el caso del SMS va a ser muy parecido, pero vamos a reconocer el texto del mensaje y en función de lo que le enviemos encenderá o apagará el LED. De esta manera sabremos en todo momento el estado del mismo, ya que con la llamada lo encendíamos o lo apagábamos, pero de momento no teníamos forma de saber si estaba encendido o apagado (aunque también podríamos solucionar esto).

Con el SMS ya no vamos a necesitar buscar el final de la llamada ni autorizar números, porque nadie se va a equivocar y mandar un SMS con el texto concreto a nuestro Arduino por equivocación (ya me parece bastante raro que alguien mande un SMS), aunque si buscáis máxima seguridad no os sería muy difícil incluir también esa comprobación. Así que podemos prescindir de las variables que creábamos para ello.

Por lo demás el programa es exactamente igual, salvo la función final, que quedaría así:

Contenido solo disponible para suscriptores. ¡Accede al contenido! 

Ahora podéis combinar ambos si queréis que reaccione ante las dos cosas. Y si, como a mí, os siguen cobrando los SMS y no estáis por la labor de pagar más, os propongo que contéis los tonos de la llamada y en función de cuántos sean, encendáis o apaguéis el LED. Recordad que con cada tono el GPRS nos envía una cadena de caracteres “RING”.

[/membership]

Contenido solo disponible para suscriptores. ¡Accede al contenido!

 

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • A controlar un LED a distancia usando nuestro móvil.
    • Hemos presentado y explicado la función .indexof().
    • A hacer un filtro en las llamadas para autorizar sólo algunos números basándonos en una agenda.
    • A diferenciar textos en los SMS y actuar en consecuencia.
 
 
 

LikeUsOnFacebook_Icon

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(124) Comments

  • Avatar for Ivan Uriarte
    • Victor tixe

    saludo gracias por el aporte deseo guardar los numeros de telefono en una memoria micro sd ( modulo externo ) comoque daria el codigo gracias de antemano

  • Avatar for Ivan Uriarte
    • Javier Rizzitano

    hola, pero fijate que en todos los casos el numero de telefono y la fecha y hora la trae bien

  • Avatar for Ivan Uriarte

    Hola, cuando envio el SMS «Encender LED» no recibo la palabra completa.
    En la mayoria de los casos recibo basura y a veces parte del mensaje.
    Copio el log del monitor.
    Probé cambiando la velocidad del puerto serie de la SIM con 9600 y 115200, pero es peor, así que la velocidad correcta es 19200
    Alguna pista ? Será que no está andando bien la SIM900 ?
    Gracias.

    OK
    AT+CLIP=1

    OK
    AT+CMGF=1

    OK
    AT+CNMI=2,2,0,0,0

    OK

    +CMT: «+5493513917276″,»»,»18/12/22,15:34:44-12″
    k⸮⸮⸮⸮Ɂ TH⸮ ⸮

    +CMT: «+5493513917276″,»»,»18/12/22,15:35:07-12″

    +CMT: «+5493513917276″,»»,»18/12/22,15:35:18-12″
    k⸮⸮⸮⸮Ɂ QTH⸮

    +CMT: «+5493513917276″,»»,»18/12/22,15:35:47-12″Encende b 5
    ⸮ ⸮ ⸮
    +CMT: «+5493513917276″,»»,»18/12/22,15:49:04-12″
    Hola

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Osvaldo, yo no tengo ese problema. Has comprobado que coja la línea? Te da tono al llamarle?

  • Avatar for Ivan Uriarte
    • Osvaldo

    hola gracias por tus tutoriales, solo tengo una duda, esto funciona perfecto pero solo cuando estoy en el monitor serie y al momento de desconectar el arduino del ordenador dejan de funcionar los comandos que envió, que podrá estar pasando?

  • Avatar for Ivan Uriarte

    necesito encender dos leds con diferentes sms

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Christian, cuéntanos un poco más qué es lo que quieres hacer y qué problema estás teniendo para poder ayudarte mejor.

  • Avatar for Ivan Uriarte
    • Christian

    saludos, necesito encender mas de un led con ese codigo, e intentado de todas las maneras pero no puedo no se cual es el error mio o como me podrias ayudar

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Lo más sencillo que se me ocurre es que busques con indexof() el carácter + en el mensaje y a partir de ahí sacas los siguientes caracteres para sacar el número que ha mandado el SMS. Teniendo eso tienes que meterlo en el array de char del mensaje.

  • Avatar for Ivan Uriarte
    • Samuel

    buenas tardes IVAN gracias por tu ayuda estoy trancado en mi proyecto por favor si pudieras ayudarme estoy activando un led con números autorizados.
    Lo que quisiera es que cuando se active el led envie un SMS a un numero ADMINISTRADOR con el numero que activo el led
    AGRADEZCO TU RESPUESTA DE ANTEMANO…..

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Eliu, sólo ocupas un puerto serie, el resto de pines quedan disponibles para lo que quieras. Puedes conectarte a internet sin problemas, pero no permite conexiones a páginas https

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Debería valer con que uses 4 mensajes diferentes, uno para cada led, ejemplo Encender LED1, Encender LED2… y busques esas cadenas en identifica_SMS() con indexof. En función de uno u otro enciendes el led que corresponda.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Estupenso Sammy, seguro que hay más gente cone se problema.

  • Avatar for Ivan Uriarte
    • SAMMMY1

    HOLA IVAN Gracias POR TUS RESPUESTAS A NUESTRAS DUDAS
    UN FAVOR: hize la prueba de encender un led con un arduino mega y un sim 900 me funciono de maravilla NESECITO ACTIVAR 4 LEDS CON DIFERENTES MENSAJES porfavor si podrias ayudarme GRACIAS

  • Avatar for Ivan Uriarte
    • SAMMMY1

    IVAN MUCHAS GRACIAS por tu respuesta la verdad me sirvió mucho encontré el problema creo que era la memoria del ARDUINO UNO lo cambie por un ARDUINO MEGA y pude registrar hasta 100 números

  • Avatar for Ivan Uriarte
    • Eliu

    Hola quiero montar una alarma y quería saber si ¿al conectar el arduino a la sim900 me quedo sin pines de entradas y salidas?
    y ¿usando estos componentes podre desactivar y activar entradas por internet?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Puedes comprobar la conexión con AT+CREG y si te devuelve 0,1 es que estás conectado a la red. Entonces enciendes un led externo. Si no la otra silución es puentear el net led, pero me gusta bastante menos.

  • Avatar for Ivan Uriarte
    • Alexis Fernando

    Hola que tal, una pregunta , si quisera que el net light del modulo sim me diera en un led externo , se podria? es decir verificar en un led externo el estado de la señal de la sim900

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Luis, no conozco ningún comando at que sirva, pero puedes hacer un bucle for que vaya recorriendo el array donde tengas la agenda y vaya llamando uno por uno.

  • Avatar for Ivan Uriarte
    • Luis

    Amigo, como puedo colocar la instrucción para enviar un mensaje a varios números a la vez.
    Ayudame, por favor.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login