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
    • Ivan Uriarte

    Pues ni idea de por qué te ocurre eso… envíanos un mail a info@prometec.net a ver si podemos ayudarte. Un saludo.

  • Avatar for Ivan Uriarte
    • Luis

    Hola, amigo.
    Hago el programa para números autorizados, tanto para sms y llamadas y todo ok. El problema surge cuando dentro del programa incluyo que envíe un mensaje de confirmación si enciende o apaga la salida, cuando hago esto, cualquier número, incluso los no autorizados, pueden activar o desactivar la salida…
    por qué podría ser?
    te puedo pasar el programa, a ver si me ayudas a encontrar el error o la solución.
    te lo agradecería muchísimo.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    La verdad no tengo ni idea, pero puedes probar a crear dos arrays, agenda1 y agenda2, y comprobar primero una y luego otra. A ver si funciona…

  • Avatar for Ivan Uriarte
    • SAMMMY1

    Buenas tardes el código funciona bien pero cuando coloco más números es decir unos 50 o 60 números autorizados me activa desde cualquier número aunque no esté autorizado el filtro deja de funcionar cuál será el problema? . Agradezco de antemano su ayuda

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Nicolás, tienes que conseguir leer el número y después puedes agregarlo al array agenda donde tenemos los números, o borrarlo si coincide con alguno.

  • Avatar for Ivan Uriarte
    • Nicolás

    Buenas tardes,
    Cómo haría si quisiera agregar o eliminar un número de la agenda a través de un mensaje de texto?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Murillo, en teoría debería llegarte el NO CARRIER siempre, al menos ese es el recuerdo que tengo de cuando la utilicé… A ver si saco un rato para probarlo de nuevo.

  • Avatar for Ivan Uriarte
    • Murillo

    ¡Hola!
    A veces, esto códigos funciona perfectament para mí, pero otras veces el «No Carrier» nunca llega después de una llamada, por lo tanto, el LED no cambia su estado. ¿Sabes qué podría causar esto?
    Gracias.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Andrés, el 13, para aprovechar el led que tiene arduino ya integrado.

  • Avatar for Ivan Uriarte

    Cual es el pin que enciende?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Ignacio, en cuanto al AT+CLIP=1\r lo encontré en una lista de comandos AT ara el módulo. Lo demás es como dices, cojo todo lo que me llega por el puerto serie y busco lso teléonos guardados en el array agenda. Me da igual qen que posición esté, si está nos devuelve la posición y sabemos que está autorizado. No sé si eso responde a tu rpegunta. Un saludo.

  • Avatar for Ivan Uriarte

    Hola, gracias por tremendo aporte, lo entiendo bastante bien, pero te me encantaría saber mas acerca del comando “AT+CLIP=1\r”, como llegaste a el?, ademas de saber en que momento recuperas exactamente el numero del celular, ya que con el NO CARRIER obtienes todo el cuerpo del mensaje, posterior guardaste los datos en la variable » mensaje », y en la variale » mensaje » aun sigue todo el cuerpo del mensaje y la buscaste en el String »Agenda» la posición que llevaba » i » . Me encantaría si me pudieras responder por favor.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Christian, yo he trabajado con el 808 y creo que utiliza los mismos comandos AT que el 900. Prueba este a ver si te sirve https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

  • Avatar for Ivan Uriarte

    oye una pregunta, no tendras un codigo oh algo que funcione para la sim 808 evb-v3.1, tengo este codigo pero cuando abro el puerto serial solo se queda en donde dice esperando mensaje

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Víctor, prieba la tarjeta en un teléfono, no vaya a ser que no funcione.

  • Avatar for Ivan Uriarte

    Buenas, no entiendo mucho de Arduino. Pero siguiendo el tutorial he conseguido encender el led usando ese código. Funciono un tiempo. Pero ahora resulta que cuando cargo el código de nuevo no funciona y creo que es porque no encuentra red y no sé por qué. En el serial sale «OK», «PIN OK» y no avanza (y esto lo hace incluso sin tarjeta o poniendo un pin incorrecto). Quizás se ha estropeado la SIM900, cuando activo la alimentación de la tarjeta nunca llega a cambiar la frecuencia de parpadeo a 3 o 4 segundos, se mantiene siempre en 1 s. Cualquier ayuda será bienvenida. Gracias.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Puedes hacerlo de la misma forma que en las llamadas, buscando el número en el cuerpo del mensaje. Un saludo.

  • Avatar for Ivan Uriarte

    Hola a todos como puedo hacer para que solo encienda el led con un solo numero de celular mediante el envió de mensajes y no con cualquier numero.
    Saludos.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Qué caracterers recibes? Sólo tendrías que cambiar lo que buscas en el idexof para que coincidan y arreglarlo. Un saludo.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola, se supone que está probado y funciona… ¿No será posible que tengas ese led fundido no?

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