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.

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

 

(229) Comments

    • Simón

    Hola a Ivan.

    Estoy tratando de enviar SMS desde mi shield GSM Quadband sim900 conectada a Arduino Uno sin gran éxito de momento. Conectando la placa directamente a la fuente de arduino UNO (5V), busca la red pero no establece la comunicación (al parecer le falta energía). debido a esto decidí conectar la placa sim900 a una fuente de 12V 2A, los SMS no se envían. A continuación les dejo el código que utilizo y en enlace de la web de donde lo he sacado.

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

    void setup()
    {
    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(10000); //Tiempo para que encuentre una RED
    }

    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=\”974485684\””); //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”);
    }

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

    • Hola Simo, haz una prueba. Simplemente llama al número que tengas en la SIm del GSM para ver si te aparece RING en pantalla. Así nos aseguramos de que esté correctamente conectado todo y que tu SIM esté conectada a la red móvil. Prueba y me comentas. Un saludo.

    • Mike

    Hola. Necesito saber hasta cuántos caracteres es posible enviar? No me preocupa tanto el tiempo de envío sino la cantidad de datos. Gracias.

    • Hola Mike, pues la verdad es que no tengo ni idea, pero suongo que los mismos que un sms eniado desde un teléfono móvil. Un saludo.

    • Diego

    Hola Iván.
    Sigo trasteando este módulo (gracias por estos tutoriales que me permiten hacerlo) y tengo una duda. Estoy probando el comando AT+CCLK? para que me de la fecha y hora que (en teoría, supongo) la placa debe de obtener de la red a la que se conecta, pero en lugar de eso creo que me da la hora contando desde que se le conectó la alimentación. Se que existe el comnado AT+CCLK=\”14/03/18,13:32:50+08\” para poner la hora en “hora”, pero al desconectar la alimentación se borra. ¿No hay forma de que al conectarse a una red, nos de la fecha y hora obtenida de dicha red, como hacen los telefonos móbiles?. Esto evitaría el problema de la alimentación. Gracias anticipadas.

    • Hola Diego, no lo he probado, pero sí debería poderse hacer lo que buscas. De todas formas tienes la posibilidad de ponerle una pila para que no pierda la fecha. Un saludo.

  • Buenas, estoy realizando un trabajo escolar en el que uso este modulo, podria usar las imágenes?

    • Hola Xavi, con tal que cites que las has sacado de prometec, son todo tuyas. Un saludo.

    • Simón

    Ivan, Realizo todas las conexiones como salen en el tutorial, el código también, pero tengo problemas. La función llamar en el monitor serial muestra códigos en vez del texto citado (me asegure que la velocidad de ambos puertos series, arduino y shield fueran 19200), efectivamente realiza la llamada, pero no puedo testear vía monitor que esta pasando.
    Por otra parte la función de sms no envía nada, tengo mis dudas con el comando SIM900.println(“AT+CMGS=\”56974485684\””); //Numero al que vamos a enviar el mensaje, esta es la forma correcta de ingresarlo?. Te dejo los códigos que muestra el monitor (⸮kν؄⸮⸮ k⸮⸮) Saludos y gracias por la colaboración.

    • Hola Simón, si te salen esos símbolos es que hay problemas con la velocidad de comunicación. Prueba a llamar a la SIM de módulo a ver si te aparece “RING” en la pantalla. Un saludo.

  • Hola amigo, te comento por descuido he perdido la antena del modulo, y quisiera saber si al utilizar una antena de router funcionara igual? Gracias por la respuesta.

    • Hola Esteban, supongo que sí, que te debería servir cualquier tipo de antena que te encaje con el conector. Un saludo.

  • hola… muy buena la explicacion, pero une pregunta… una vez q ye tengo cargado el programa en el arduino y todas las conexiones bien hechas, que o como hago para hacer la llamada ????? gracias

    • Hola Stalin, la llamada la debería hacer por si mismo al cargar el programa. Si quieres enviarlas cuando quieras echa un ojo a este otro programa: https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

        • Stalin

        hola Ivan… solo una pregunta …. cuando introduzco el numero de telefono al q deseo llamar como debo ponerlo??? pongo el codigo del pais primero o no???

        • En España, al menos, no es necesario meter el código del país delante. Un saludo.

    • Sergio

    Hola, ¿los pines A4 y A5 los utiliza esta tarjeta? Intento conectar mediante SLA y SCL un lcd, y no me fucniona correctamente. En cambio si pruebo con un programa con solamente la parte del lcd no hay problema.

    Gracias.

    Saludos.

    • Hola Sergio, no utiliza esos pines para nada… debería de funcionar. A ver si tengo un rato para probarlo. Un saludo.

        • Sergio

        Hola, la verdad es que no sé porque no funciona cuando pincho la tarjeta en el arduino. Sin pincharla, el programa me funciona correctamente, pero en cuanto la pincho ya no me funciona. Es algo raro la verdad.

        Gracias!!

        • Puede ser que la alimentación no sea suficiente. Cómo las estás alimentando?

    • Nahuel

    Muchas gracias por tu respuesta ivan, la cito aqui:
    “3) En teoría para recibir llamadas y escucharlas vale con que estés conectado a la red. No te haría falta más código que el necesario para eso. Yo he probado y he podido escuchar bien. Igual es una tontería, pero ¿puede ser que hayas enchufado el micrófono donde los cascos al revés?”

    Te cuento, tengo el microfono conectado a la salida que dice mic, y el auricular al otro, los inverti de lugar para ver que tal y nada, el unico momento en el que se escucha algo(en el movil desde el cual llamo) es el ruido que crea la placa al mover el micro o el auricular, será que la configuracion de red de argentina es la que no permite que se escuche nada? porque por lo que estuve investigando varios de aqui les pasa lo mismo, tenes idea como seguir mi investigacion para solucionarlo?

    • hola Nahuel, no sé cómo ayudarte porque yo no he tenido ningún problema. A ver si alguien puede echarte una mano…

    • Kelson

    Diego gracias, muy bueno su tutorial por a ca todo va bien…
    una duda apenas:
    en la Shield cual de los pines es el RX (7 o 8) y cual es el TX (7 o 8)
    Gracias amigo

    • Hola Kelson en el shield el 7 es Tx y el 8 Rx. Un saludo.

    • Ximena Hernandez

    Hola, tengo una duda.
    ¿Este módulo se puede programar para enviar el mensaje a varios números? ¿O solo a uno?
    Gracias.

    • Hola Ximena, puedes crear un bucle for que vaya recorriendo un array donde tengas guardados los números y que vaya enviando los mensajes uno detrás de otro.Un saludo.

        • Hansel

        Buenas tardes

        Ivan yo tengo el mismo requerimiento que Ximena, necesito agregar varios telefonos para que llegue los mensajes de texto. Tiene un ejemplo por favor de como se podira configurar?

        • Hola Hansel, no tengo un ejemplo, pero si te sirve de ayuda puedes hacer un array con los números e ir recorriéndolo cambindo el número hasta enviárselos a todos.

  • ¿cuanto voltaje de alimentasion auxiliar soporta el gprs sim 900 por el jack? tengo fuente switching de 12v 4a puedo conectarla directamente al shield sim 900 por el jack, tengo el mismo que en las imagenes comentadas pero no dicen nada del voltaje de operacion en algunos foros me dicen 5v y en otro que soporta hasta 20v no quiero dañar el gsm sim 900. Por favor me dorian decir con que voltaje alimentarlo. Gracias.

    • Hola Cristian, la verdad es que no encuentro información concreta y fiable del voltaje máximo que puede aceptar. Yo puedo decirte que uso un alimentador de 9V y 1a, y con eso me funciona estupendamente. Un saludo.

  • Hola, he seguido las instrucciones, las conexiones están iguales y mi módulo si se conecta a la red pero el numero al que quiero enviar el mensaje no recibe nada. No llama, no envía el mensaje. Cómo puedo comprobar si el módulo está funcionando correctamente, sin necesidad del FTDI?

    • Hola JUan, lo más fácil es que llames tu al módulo, si aparece RING en el monitor serie es que está conectado a la red, sino es que hay algún fallo. Un saludo.

    • Nahuel

    Hola! tengo exactamente el mismo shield arduino que muestran en el tutorial y tengo varias dudas/problemas que espero puedan ayudarme,

    1)Tienen el datasheet de este shield especifico?

    2)Que version de firmware tiene el suyo y como podria averiguar la version del mio?

    3)Yo estoy haciendo que el sim este recibiendo llamadas, el sim contesta mis llamadas, con eso bien, el unico problema es que durante la llamada no se escucha nada, (tengo conectados unos auriculares y un microfono de pc conectados al sim900 que funcionan correctamente y probe con varios mas para cerciorarme), no se escucha nada desde el telefono que llama, ni desde el sim900, cual podria ser mi problema?

    Les agradezco de antemano y disculpen por tantas preguntas, pero son unos de los pocos de habla hispana que saben sobre estas cosas y ademas responden, por eso los sigo jaja

    • Hola Nahuel, a ver si te puedo ayudar en algo:

      1) El datasheet del chip lo encontrarás fácilmente, pero el del shield yo al menos no lo encuentro.
      2) No lo he probado así que no sé decirte. Veo por ahí que ATI sirve para obtener información del shield. Pruébalo a ver…
      3) En teoría para recibir llamadas y escucharlas vale con que estés conectado a la red. No te haría falta más código que el necesario para eso. Yo he probado y he podido escuchar bien. Igual es una tontería, pero ¿puede ser que hayas enchufado el micrófono donde los cascos al revés?

    • Cristian

    Que alimentasion sopota fuente switching 12v 4a o 9v .

    • En teoría hasta 12 pero yo ya he frito algún Arduino, así que te recomiendo a 9V.

  • Hola Ivan,si tiene tono al hacer la llamada pero no aparece nada en el monitor,revise las conexiones y todo esta bien, que podria ser??
    Me puedes ayudar esque me urge para mi proyecto final de Electronica,si mejor me puedes ayudar por el correo o ponernos en contacto te lo agradeceria!!

      • Nahuel

      Puede ser que te este fallando la comunicacion serial, revisa que el monitor serial este funcionando a la misma velocidad que con la que configuraste el sim

    • Fernando

    Una pregunta: para montar el chip necesitamos una placa del tipo “Gsm Gprs Sim800l Sim800 Arduino”? y conectarla con el Arduino UNO mediante el TX SERIAL y el RX SERIAL?

    • Sí, aunque este tutorial está hecho concretamente con la SIM900. Un saludo.

  • Gracias Ivan,ya lo probe, llame pero no sale nada en el monitor!! Que es lo que puede tener mal?? en que version del arduino lo pruebo ya que lo probe ne varias versiones y solo me funciono en la version 1.5.6-r2, este es el codigo:

    #include

    SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM900

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

    void mensaje_sms()
    {
    Serial.println(“Enviando SMS…”);
    SIM900.print(“AT+CMGF=1\r”); //Comando AT para mandar un SMS
    delay(1000);
    SIM900.println(“AT+CMGS=\”54267957\””); //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 finalizacion ^Z
    delay(100);
    SIM900.println();
    delay(5000); // Esperamos un tiempo para que envíe el SMS
    Serial.println(“SMS enviado”);
    }

    void loop()
    {
    mensaje_sms(); //Envia SMS
    while (1); // Espera por tiempo indefinido
    }

    • Hola Diego, cuando llamas te da tono o no? Si no te da tono es que o el pin de la tarjeta está mal, la alimentación es insuficiente o no encuentra la red móvil. Si te da tono pero no aparece nada en el monitor lo más probable es que sea algún problema en la conexión o en la velocidad del monitor serie. En ese caso revisa bien el cableado, y no te olvides de unir las tierras de Arduino y GPRS, y asegúrate de que la velocidad del monitor serie esté puesta en 19200 baudios. Un saludo.

  • Buenas,yo lo hice todo al pie de la letra,y la cosa es es que no me envia el mensaje,y muestra de que se esta enviando el mensaje y de que se envio pero no resivo nada,pense que era el saldo pero si tiene,que puede ser???

    • Hola Diego, prueba a llaamr a la SIM del GPRS, para ver si está todo correcto. Debería de darte tono y salir RING en el monitor serie.

Give a Reply

WordPress Anti-Spam by WP-SpamShield

¡Ofertón!

Robot Rover 4×4

Ahora por sólo

50€ + IVA

¡Lo quiero!