bclose

MÓDULO GSM/GPRS: llamar y enviar SMS

Empezando con el módulo GPRS

Objetivos

 

 

    • Presentar la tarjeta GSM/GPRS basado en el módulo SIM900.
    • Aprender a conectarlo y a ponerlo en marcha.
    • Usarlo para realizar llamadas y enviar SMS.
 

Material requerido.

Imagen de Arduino UNOArduino UNO o equivalente
modulo gprsUn Shield GPRS SIM900
conexionesAlgunos cables de protoboard.
Power supply

 Una fuente de alimentación para Arduino.

 

GSM Y GPRS

 

Hemos visto varias formas de conectar nuestro Arduino al exterior, como Ethernet y wifi, pero puede que alguna vez queramos comunicarnos con él y no tengamos acceso a ninguna de estas redes, o no queramos depender de ellas. Puede ser muy útil, por ejemplo, para colocar en una estación meteorológica.

Para este tipo de propósitos podemos utilizar un módulo GSM/GPRS con una tarjeta SIM, de forma que podamos comunicarnos con él como si se tratase de un teléfono móvil. Y es que esta tarjeta basada en el módulo SIM900 nos permite enviar y recibir llamadas y SMS y conectarnos a Internet, transformando nuestro Arduino en un teléfono móvil.

gprs shield

EL GSM (Global System for Global Communications) es el sistema de comunicaciones que más se utiliza en teléfonos móviles y es un estándar en Europa.  La primera funcionalidad de esta tecnología es la transmisión de voz, pero también permite la transmisión de datos (SMS, Internet), eso sí,  a una velocidad muy baja de 9kb/s.

El GPRS (General Packet Radio Service) es una extensión del GSM basada en la transmisión por paquetes que ofrece un servicio más eficiente para las comunicaciones de datos, especialmente en el caso del acceso a Internet. La velocidad máxima (en teoría) del GPRS es de 171kb/s, aunque en la práctica es bastante más pequeña.

 

CONEXIONES Y PUESTA EN MARCHA

 

El módulo que vamos a usar para el tutorial no tiene pines para montarla directamente sobre el Arduino, pero hay modelos que sí lo permiten. De todas formas la conexión es muy sencilla.

Esta tarjeta está basada en el módulo SIM900, y la configuraremos y controlaremos vía UART utilizando los comandos AT.

Lo primero tendremos que colocar la tarjeta SIM que vayamos a usar. El adaptador para las tarjetas es del tamaño de las SIM normales, que en su mayoría han sido sustituidas por MicroSIM  y NanoSim, así que tendremos que hacernos con una o enganchar una de estas últimas en un adaptador (el módulo que utilizamos en la sesión y que podéis conseguir en la tienda de esta página incluye adaptadores para todos los tamaños de tarjeta). Con un poco de paciencia y de pericia también podríamos colocar una nano o una micro directamente, pero en correremos peligro de que se mueva y deje de hacer contacto.

Antes de conectar nada al Arduino, vamos a colocar los jumpers que tiene la tarjeta de forma que utilicemos para comunicarnos los pines 7 y 8.

bridges gprs

Para conectarla a nuestro Arduino tenemos dos opciones, y para las dos necesitaremos una fuente de alimentación externa, ya que con conectar el Arduino por USB será suficiente para encender el módulo, pero no para alimentar también la tarjeta. Si conectamos la alimentación externa al shield GPRS y alimentamos el Arduino con el USB o una fuente aparte, sólo tendremos que unir los pines 7 y 8 para la comunicación serie y el GND entre ambas tarjetas.

 
  • Si utilizáis un Arduino Mega, la conexión sería de los pines 7 y 8 del GPRS a los pines 10 y 11 del Mega.
  • En la programación también habría que cambiar la instrucción en la que definimos la instancia Software Serial que creamos y ponerle los pines 10 y 11 (lo recordaremos más adelante).
 

 

montaje gprs

Si conectamos la alimentación externa al Arduino a parte de las tres conexiones anteriores tendremos que unir los pines 5V del Arduino y del GPRS.

arduino gprs shield

Para encender el shield tenemos que colocar el interruptor en la posición correcta. Las dos posiciones corresponden a cada uno de los tipos de conexión que hemos explicado arriba. Una vez hagamos esto se encenderán dos LEDs

Para activar la alimentación de la tarjeta SIM también nos encontramos con dos opciones. Podemos hacerlo manualmente presionando el pulsador que hay en uno de los laterales durante uno o dos segundos y veremos que se enciende otro LED, y que uno de los que se había encendido antes empieza a parpadear una vez por segundo. Este parpadeo nos indica que está buscando la red. Cuando la encuentre y se conecte cambiará la frecuencia de parpadeo y lo hará cada 3 o 4 segundos. Eso sí, no se conectará hasta que no metamos el PIN de la SIM, que ya veremos ahora cómo hacerlo.

encendido modulo sim900

También podemos activarla por programa, pero antes tendremos que realizar una soldadura en el pad “R13” que está justo al lado de la regleta de pines roja “J16”. Y una vez hecho esto la activaremos mandando un pulso de 1 segundo al pin 9 de la tarjeta. Así que si queréis usar este tipo de activación tendréis que añadir un cable entre un pin digital (en nuestro caso el 9) y el pin 9 de la tarjeta que hemos conectado. Eso sí, recordad que si está activada la tarjeta y volvemos a meter el pulso, lo que haremos será apagarla.

activar tarjeta software

 

REALIZANDO LLAMADAS DESDE ARDUINO

 

Para comunicarnos con el módulo utilizaremos comandos AT, pero lo primero que haremos será incluir la librería SoftwareSerial.h y configurar la comunicación por los pines 7 y 8 (10 y 11 para el Arduino Mega).

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

El módulo utiliza una velocidad de comunicación de 19200KHz, así que en el setup configuraremos el puerto serie para el SIM900 y para Arduino a esa velocidad.

Además introduciremos el PIN de la tarjeta para desbloquearla utilizando comandos AT y le daremos un poco de tiempo para que se conecte a la red. El comando que utilizaremos es AT + CPIN = “XXXX, donde sustituiremos XXXX por el PIN de nuestra tarjeta.

 
  • Recordad que como vamos a meter el comando dentro de un println, tendremos que utilizar las \ antes de cada “ para que no se comporten como un carácter especial.
 

Así que el setup nos quedaría así:

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 = \"XXXX\"");  //Comando AT para introducir el PIN de la tarjeta
      delay(25000);  //Tiempo para que encuentre una RED
   }

Crearemos una función en la que meteremos las instrucciones necesarias para llamar y colgar la llamada, también mediante comandos AT. Para llamar usaremos el comando ATDXXXXXXXXX, (sustituyendo las X por el número al que queramos llamar) y para colgar ATH.

No hay que ser tacaño con el tiempo que mantenemos la llamada, porque a veces puede tardar en empezar a dar tono y sino podríamos colgar antes de recibir nada en nuestro móvil.

void llamar()
   {
      Serial.println("Realizando llamada...");
      SIM900.println("ATDXXXXXXXXX;");  //Comando AT para realizar una llamada
      delay(30000);  // Espera 30 segundos mientras realiza la llamada
      SIM900.println("ATH");  // Cuelga la llamada
      delay(1000);
      Serial.println("Llamada finalizada");
   }

Y ya sólo tenemos que llamar a la función cuando nosotros queramos. En este ejemplo simplemente hacemos que llame una vez y se quede en espera indefinidamente.

void loop()
   {
      llamar();  //Realiza la llamada
      while (1);
   }

Aquí os dejamos el programa completo: llamar.

serie llamar

 

ENVIAR SMS

 

La programación para enviar un SMS va a ser idéntica, pero crearemos otra función que se encargará de mandar los comandos AT para enviar el SMS.

Primero usaremos el comando AT+CMGF=1\r para indicarle al módulo GPRS que vamos a mandar un mensaje, y a continuación introducimos el número al que va dirigido con el comando AT + CMGS = “XXXXXXXXX”.

Una vez hecho esto simplemente le enviamos el contenido del mensaje y lo finalizamos con el caracter ^Z. La función quedaría así:

void mensaje_sms()
   {
      Serial.println("Enviando SMS...");
      SIM900.print("AT+CMGF=1\r");  //Configura el modo texto para enviar o recibir mensajes
      delay(1000);
      SIM900.println("AT+CMGS=\"XXXXXXXXX\"");  //Numero al que vamos a enviar el mensaje
      delay(1000);
      SIM900.println("SMS enviado desde un Arduino. Saludos de Prometec.");  // Texto del SMS
      delay(100);
      SIM900.println((char)26); //Comando de finalización ^Z
      delay(100);
      SIM900.println();
      delay(5000);  // Esperamos un tiempo para que envíe el SMS
      Serial.println("SMS enviado");
   }

Podéis descargar el programa completo aquí: mandar_sms.

serie mandar mensaje

 

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • Podemos hacer que nuestro Arduino se comporte como un teléfono móvil.
    • Cómo conectar y configurar la tarjeta GPRS.
    • A enviar llamadas y SMS a cualquier teléfono.
 
 
 

LikeUsOnFacebook_Icon

 

(76) Comments

    • Vane

    Hola Iván ! Es normal que la conexión se pierda a veces ? Uso tb alimentación de 9V , 1A ! No creo q sea ese el motivo , podría existir otra razón? Es solucionable ? Habría alguna solución a través de Código? Gracias Por tu ayuda

    • Hola Vane, pues en principio no debería desconectarse. Puedes despertar el GPRS a través de código, aquí tienes un tutorial en el que comprobamos que esté conectado siempre antes de enviar nada y si no lo reinicia y lo vuelve a conectar a la red. A ver si te sirve http://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

      Un saludo.

    • Mario

    Hola, buenas.
    mi modulo se conecta a la red parpadeando el led cada 3 o 4 segundos y al poco se desconecta,¿cual puede ser el motivo de que suceda esto?

    • Hola Mario, tiene toda la pinta de que la alimentación del módulo es insuficiente. ¿Cómo estás alimentándolo?

        • Mario

        Hola Ivan, lo alimento directamente desde arduino con 9 V y 0.6 A, he de decir que el dispositivo se desconecta de la red,es decir, el led pasa de parpadear cada 4 segundos a parpadear cada segundo.
        he probado con otros códigos en los que se utilizan mas salidas y el modulo ahí si que falla por alimentación se enciende y se apaga al instante de conectarlo.
        cual seria la alimentación idónea? el modulo es exactamente el mismo que el que se muestra en este tutorial.
        podría alimentar el modulo con 12V y 1 A o 12V y 2A?

          • Mario

          a todo esto Muchas gracias por la ayuda. Estoy realizando un proyecto de control de led con sms.

        • Hola Mario, yo tuilizo una fuente 9V y 1 amperio y para el módulo y me funciona bien. Puede ser que la que usas no sea suficiente porque al transmitir datos el pico de consumo es bastante grande.

          • hola de nuevo,
            he probado con una fuente de alimentacion de 9 v y 1 A y me ocurre lo mismo, incluso peor ahora ni si quiera se me conecta a la red (no parpadea cada 3 o 4 segundos )
            el codigo es el siguiente :
            #include
            // declaramos variables
            char inchar; // contendra los caracteres entrantes al modulo gsm
            SoftwareSerial SIM900(7, 8);
            int led1 = 10;
            int led2 = 11;
            int led3 = 12;
            int led4 = 13;
            void setup()
            {

            pinMode(led1, OUTPUT);
            pinMode(led2, OUTPUT);
            pinMode(led3, OUTPUT);
            pinMode(led4, OUTPUT);
            digitalWrite(led1, LOW);
            digitalWrite(led2, LOW);
            digitalWrite(led3, LOW);
            digitalWrite(led4, LOW);
            //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 = \”5198\””); //Comando AT para introducir el PIN de la tarjeta
            delay(25000); //Tiempo para que encuentre una RED

            SIM900.print(“AT+CMGF=1\r”); // estrablecer el modo texto para SMS
            delay(100);
            SIM900.print(“AT+CNMI=2,2,0,0,0\r”); //nuevas indicaciones de mensaje de texto
            delay(100);
            Serial.println(“Ready…”);
            }
            con esto deberia conectarme y no lo hace, de nuevo muchas gracias y un saludo

          • ya he solucionado el problema,era cuestión de la antena de mi modulo que no estaba bien soldada a la placa. de todos modos muchas gracias por todo y felicitarte por tu trabajo.
            ¿es normal que se desconecte de la red de vez en cuando o una vez que se conecta no debería desconectarse? ya dudo si es problema de mi placa o ocurre en general.
            un saludo

  • Hola. Un saludo. Necesito que por algún mando externo. Puede ser un pulsador, mi sim900 haga un broadcast de un mismo mensaje sms a un conjunto asignado de números. Gracias de antemano.

    • Hola Javier, no conozco ningún comando que permita enviar un SMS a múltiples destinatarios. Pero podrías crear un array con los números de teléfono a los que quieres enviarlo y luego ir recorriéndolo enviando un SMS a cada uno.

      Aquí tenemos un ejemplo en el que hacemos lo contrario pero igual te puede servir, creamos una agenda y filtramos las llamadas y el texto de los SMS: http://www.prometec.net/gprs-controlar-led/

      Un saludo.

  • Hola excelente ! tengo varias dudas, la placa gprs podría funcionar a 12v? tambien tengo pensado ponerlo fijo en una casa prodria aguantar mas de un año encendida?

    • Hola Sebas, no debería haber problema en que aguante encendido el tiempo que haga falta. Yo uso un alimentador de 9V, pero en las especificaciones dice que puedes meterle hasta 12V. Un saludo.

      • muchas gracias por tu respuesta, tengo otra duda por que calienta tanto el pequeño transistor ( creo que es un transistor) smd el que esta al lado del led rojo indicador de señal del gprs..
        obs: el regulador ni el microprocesador no calientan para nada..

        otra pregunta puedo encastrar le el gprs con el arduino directamente? osea encimandolos uno arriba del otro, la alimentacion seria en paralelo al gprs y arduino con 12V

  • Hola buenas, yo utilizo una fuente de alimentacion de un ordenador que me da 5 voltios 22 amperios y en ocasiones el modulo SIM900 me detecta señal y realiza la llamada pero en otras ocasiones al pulsar el boton PWRKEY se enciende el led de status y empieza a parpadear el de NET y despues de 6 o 7 parpadeos se me apagan los dos. ¿A que puede ser debido?

    • Hola Daniel, alimentas por separado el Arduino y el módulo? o Alimentas el Arduino y de ahí sacas la alimentación para el GPRS? Mi experiencia es que siempre que ocurre eso es por una falta de alimentación en el GPRS, yo utilizo una de 9V y 1A para alimentar o el módulo o el Arduino y con eso es suficiente. Un saludo.

Give a Reply

WordPress Anti-Spam by WP-SpamShield