Mostrando entradas con la etiqueta gprs. Mostrar todas las entradas
Mostrando entradas con la etiqueta gprs. Mostrar todas las entradas

10/18/2011

Realizar una conexión a Internet con la placa Arduino y un módulo GPRS GSM



Explicamos cómo realizar una conexión a Internet, a una página web por socket mediante Arduino UNO y un módulo GPRS/GSM. Mostramos todos los requisitos hardware y software para realizar este proyecto de prueba con Arduino. Indicamos cómo conectar dos Arduinos para enviar la salida serie de uno de ellos (el que lleva el módulo GPRS/GSM) a otro.




Requisitos para realizar conexión a Internet desde Arduino con GPRS

En la siguiente sección del siguiente artículo explicamos los requisitos hardware y software necesarios para realizar el envío de SMS con Arduino y un módulo GPRS, dichos requisitos son los mismos que para la conexión a Internet:
Básicamente necesitaremos un Módulo GPRS (en nuestro caso usamos un GPRS Sagem Quadband Module for Arduino), una Placa Arduino UNO y los requisitos software explicados en este otro artículo, donde también indicamos cómo conectar Arduino al PC paso a paso y cómo enviar programas desde el IDE de Arduino a la memoria Flash de la placa:


Cómo conectar el módulo GPRS a la placa Arduino UNO

En la siguiente sección del siguiente artículo explicamos paso a paso cómo conectar la antena externa al módulo GPRS y cómo conectar el módulo GPRS a la placa Arduino UNO:

Consideraciones importantes a tener en cuenta antes de enviar el programa a Arduino para usar el módulo GPRS

Hay que tener en cuenta que el módulo GPRS tiene "dos posiciones" para la conexión con Arduino:
1. Por un lado hay que indicarle al módulo GPRS cuándo está conectado al PC por el puerto USB (serie emulado), esto se hace colocando dos jumpers que incorpora en la parte superior de la siguiente forma:
Considereciones importantes a tener en cuenta antes de enviar el programa a Arduino para usar el módulo GPRS
Es muy importante tener esto en cuenta, cuando queramos enviar el programa a Arduino, los dos jumpers deben estar como se indica en la imagen anterior, si no es así el Upload (envío) del programa dará error.
El error que nos mostrará el IDE de desarrollo de Arduino si no hemos colocado los jumpers correctamente será:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
2. Para probar el programa de conexión a Internet o cualquier otra tarea que hayamos programado con Arduino y el módulo GPRS deberemos desconectarlo del USB del PC y alimentarlo externamente. Además, deberemos cambiar los jumpers mencionados anteriormente a esta nueva posición:
Considereciones importantes a tener en cuenta antes de enviar el programa a Arduino para usar el módulo GPRS
Si no se hace esto, cuando desconectemos Arduino del PC y lo alimentemos externamente, el módulo GPRS no funcionará.

Programar Arduino UNO para realizar una conexión a Internet con el módulo GPRS

Para realizar una conexión a Internet con la placa Arduino UNO, insertaremos una tarjeta SIM en el módulo GPRS con la opción de datos activa, conectaremos el módulo GPRS a la placa Arduino, colocaremos los jumpers del módulo en su posición para conexión con PC y conectaremos Arduino UNO al PC por el puerto USB. Una vez realizados todos estos pasos (explicados anteriormente), abriremos el IDE de desarrollo de Arduino y escribiremos el siguiente programa:
/* 
 *  Conexion a Internet con modulo GPRS y Arduino
*/ 
  
int pinActivarGPRS = 2;  // pin para activar el módulo GPRS

//procedimiento para activar el módulo GPRS
void activarModuloGPRS()
{
  digitalWrite(pinActivarGPRS, HIGH);
  delay(2000);
  digitalWrite(pinActivarGPRS, LOW);
}

void setup()
{
  pinMode(pinActivarGPRS, OUTPUT);
  Serial.begin(19200); //velocidad de conexión con módulo GPRS
  activarModuloGPRS(); //activar el módulo GPRS
 
  delay(20000); //esperamos 20 segundos a que se active el módulo GPRS  

  Serial.println("AT&k3");  //activa el control de flujo RTS/CTS en el modem
  delay(1000);
  Serial.print("AT+KCNXCFG=0,"); //inicia la configuración para el GPRS
  Serial.print(34,BYTE);
  Serial.print("GPRS");  //tipo de conexión
  Serial.print(34,BYTE);
  Serial.print(",");
  Serial.print(34,BYTE);
  Serial.print("gprs-service.com");  //punto de acceso
  Serial.print(34,BYTE);
  Serial.print(",");
  Serial.print(34,BYTE);
  Serial.print("");  //usuario del operador
  Serial.print(34,BYTE);
  Serial.print(",");
  Serial.print(34,BYTE);
  Serial.print("1234");  //contraseña del operador, para Simyo "1234"
  Serial.print(34,BYTE);
  Serial.println();
  delay(1000);
  //establecer configuraciones de tiempos de espera, reintentos de conexion y demas
  Serial.println("AT+KCNXTIMER=0,60,2,70"); 
  delay(1000);
  Serial.println("AT+KCNXPROFILE=0");
  delay(1000);
  Serial.println("AT+CGATT=1");  //para conectarnos a la red movil del operador
  delay(1000);
  Serial.print("AT+KTCPCFG=0,0,");  //para indicar el host o IP al que nos conectaremos
  Serial.print(34,BYTE);
  Serial.print("www.ajpdsoft.com");
  Serial.print(34,BYTE);
  Serial.println(",80");  //puerto por el que se realizará la conexión
  delay(1000);
  Serial.println("AT+KTCPCNX=1"); //para iniciar un intercambio de datos TCP
  delay(7000);
  //para envio de datos a la conexion
  //el 18 indica la cantidad de datos que queremos enviar "GET / HTTP/1.0\r"
  Serial.println("AT+KTCPSND=1,18"); 
  delay(2000);
  Serial.println("GET / HTTP/1.0");
  Serial.print(10,BYTE); //salto de línea
  Serial.print(13,BYTE); //retorno de carro
  Serial.print("--EOF--Pattern--"); //fin de la cadena de envio de datos
  delay(2000);
  Serial.println("AT+KTCPRCV=1,807"); //activar recepcion de datos
  delay(1000);
  Serial.println("AT+KTCPCLOSE=1,1");  //cerrar la conexion
  delay(1000);   
}

void loop()
{ 
}
Como siempre, verificaremos el código pulsando en el botón "Verify" del IDE de desarrollo de Arduino:
Programar Arduino UNO para realizar una conexión a Internet con el módulo GPRS
Y lo enviaremos a la placa Arduino pulsando en "Upload":
Programar Arduino UNO para realizar una conexión a Internet con el módulo GPRS

Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet

En este proyecto, para poder comprobar la placa Arduino con el módulo GPRS GSM realiza la conexión a Internet correctamente, deberemos conectar una segunda placa Arduino al primero como explicamos a continuación.
Por un lado conectaremos un cable del pin TX - 1 del Arduino sin el módulo GPRS GSM al jumper USB del módulo GPRS GSM como se muestra en la imagen y por otro lado conectaremos un segundo cable del pin GND del Arduino sin el módulo GPRS al ping GND del Arduino con el módulo:
1. Vista del Arduino con el módulo GPRS GSM:
Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet
2. Vista del Arduino sin el módulo GPRS:
Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet
3. Vista de los dos Arduinos conectados:
Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet
Una vez conectados los dos Arduinos, conectaremos el segundo (el que no lleva el programa ni el módulo GPRS) al PC por el puerto USB, iniciaremos el IDE de Arduino, seleccionaremos el puerto desde el menú "Tools" - "Serial Port":
Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet
Pulsaremos en el botón "Serial Monitor" y en la ventana que nos mostrará debemos seleccionar la misma velocidad que hayamos indicando en el programa para la conexión serie, en nuestro caso 19200 baud (si no hacemos esto puede que veamos caracteres raros en la pantalla):
Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet
Ahora alimentaremos eléctricamente el Arduino con el módulo GPRS GSM, tras unos segundos, si la conexión de los dos Arduinos mediante los dos cables es correcta, iremos viendo la salida serie del primer Arduino en el PC y así podremos verificar y testear el resultado de la conexión a Internet:
Enviar salida serie de un Arduino a otro para comprobar resultado de la conexión a Internet
 

Artículos relacionados


Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft, con la inestimable colaboración de Antonio RN de RS.

10/16/2011

Enviar SMS y hacer llamadas desde placa Arduino con módulo GPRS



Explicamos cómo conectar un módulo GPRS a una placa Arduino UNO para dotarla de conexión a la red móvil. Este módulo nos permitirá enviar SMS desde Arduino, hacer y recibir llamadas e incluso conectarnos a Internet. Explicamos todos los requisitos hardware necesarios para este proyecto hardware de ejemplo.



Requisitos para enviar SMS y hacer llamadas desde placa Arduino

En este proyecto hardware de ejemplo usaremos un módulo GPRS específico para Arduino, nos permitirá disponer de un módem GSM con tarjeta SIM de móvil, por lo que podremos realizar cualquier operación como si de un módem GSM se tratase (hacer llamadas, recibir llamadas, enviar SMS, recibir SMS, conectarnos a Internet, etc.) todo ello con comandos AT (Hayes). En el siguiente artículo explicamos estos comandos más en profundidad y cómo usar un módem GSM:
Lo explicado en el artículo anterior será válido para este, salvando las distancias obvias entre VB.Net y Arduino.
Indicamos a continuación los requisitos hardware para enviar SMS y hacer llamadas con nuestra placa Arduino de forma autónoma (sin necesidad de cables ni conexión al PC):
  • Módulo GPRS (unos 75 euros) , en nuestro caso hemos adquirido un GPRS Sagem Quadband Module for Arduino:
Requisitos para enviar SMS y hacer llamadas desde placa Arduino
Para la conexión a la red móvil del módulo GPRS necesitaremos una tarjeta SIM normal (como la de los móviles) activa y disponible para enviar SMS y hacer llamadas.
  • Placa Arduino UNO (unos 25 euros) :
Requisitos para enviar SMS y hacer llamadas desde placa Arduino
  • Como siempre, para cualquier proyecto con Arduino necesitaremos disponer de un cable USB de tipo A-B para conectar Arduino con el PC y necesitaremos el IDE de desarrollo y los drivers (si usamos Microsoft Windows 7, en Linux no son necesarios). En el siguiente artículo explicamos los primeros pasos para conectar Arduino con el PC:

Cómo conectar módulo GPRS a placa Arduino UNO

Prepararemos en primer lugar el módulo GPRS que cuando lo adquirimos incorpora una antena externa que hay que conectar. Por un lado el conector que va al microchip del módulo:
Cómo conectar módulo GPRS a placa Arduino UNO
Conectaremos el chip con la antena al módulo GPRS como se muestra en la imagen:
Cómo conectar módulo GPRS a placa Arduino UNO
Insertaremos también una tarjeta SIM activa, a ser posible sin PIN para evitar tener que enviárselo por comando AT (aunque se puede hacer):
Cómo conectar módulo GPRS a placa Arduino UNO
A continuación conectaremos el módulo GPRS a la placa Arduino, dicho módulo es específico para Arduino por lo que encajará en los pines correspondientes sin problema, con un poco de presión:
Cómo conectar módulo GPRS a placa Arduino UNO
El módulo GPRS quedará perfectamente anclado y conectado a la placa Arduino:
Cómo conectar módulo GPRS a placa Arduino UNO
Todo el hardware conectado (antena externa, módulo GPRS y placa Arduino):
Cómo conectar módulo GPRS a placa Arduino UNO

 

Considereciones importantes a tener en cuenta antes de enviar el programa a Arduino para usar el módulo GPRS

Hay que tener en cuenta que el módulo GPRS tiene "dos posiciones" para la conexión con Arduino:
1. Por un lado hay que indicarle al módulo GPRS cuándo está conectado al PC por el puerto USB (serie emulado), esto se hace colocando dos jumpers que incorpora en la parte superior de la siguiente forma:
Considereciones importantes a tener en cuenta antes de enviar el programa a Arduino para usar el módulo GPRS
Es muy importante tener esto en cuenta, cuando queramos enviar el programa a Arduino, los dos jumpers deben estar como se indica en la imagen anterior, si no es así el Upload (envío) del programa dará error.
El error que nos mostrará el IDE de desarrollo de Arduino si no hemos colocado los jumpers correctamente será:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
2. Para probar el programa de envío de SMS, de llamadas o cualquier otra tarea que hayamos programado con Arduino y el módulo GPRS deberemos desconectarlo del USB del PC y alimentarlo externamente. Además, deberemos cambiar los jumpers mencionados anteriormente a esta nueva posición:
Considereciones importantes a tener en cuenta antes de enviar el programa a Arduino para usar el módulo GPRS

 

Programar Arduino para enviar SMS a móvil

A continuación mostramos el programa para enviar un SMS desde Arduino usando un módulo GPRS, básicamente usa comandos AT para realizar el proceso, como si de un módem GSM se tratase:
/*
 *  Programa para enviar un SMS usando un módulo GPRS
    con placa Arduino por AjpdSoft
 */

int pinLED = 13;
int pinActivarGPRS = 2;  // pin para activar el módulo GPRS

int numeroSMSEnviar = 1; // numero de SMS a enviar
int contador = 0; //para solo repetir una vez el loop

//procedimiento para activar el módulo GPRS
void activarModuloGPRS()
{
  digitalWrite(pinActivarGPRS, HIGH);
  delay(2000);
  digitalWrite(pinActivarGPRS, LOW);
}

void setup()
{
  pinMode(pinLED, OUTPUT);
  pinMode(pinActivarGPRS, OUTPUT);

  Serial.begin(19200); //velocidad de conexión con módulo GPRS
    
  activarModuloGPRS(); //activar el módulo GPRS
  
  delay(20000); //esperamos 20 segundos a que se active el módulo GPRS
  
  Serial.println("AT+CMGF=1"); //activamos el modo SMS
}

void loop()
{
  while (contador < numeroSMSEnviar)
  {
    delay(1500);
    Serial.print("AT+CMGS="); // comando AT para enviar SMS
    Serial.print(34, BYTE);   // enviar caracter "
    Serial.print("numero_movil"); // numero de movil receptor del SMS
    Serial.println(34, BYTE);  //  enviar caracter "
    delay(1500); 
    Serial.print("Envio SMS desde Arduino AjpdSoft"); //texto del SMS
    delay(500);
    Serial.print(0x1A,BYTE); // final del SMS, comando 1A (hex)
       
    delay(10000);        

    contador++;    
  }

  if (contador == numeroSMSEnviar){
    Serial.println("AT*PSCPOF");  // desactivar el módulo GPRS
    contador++;
  }
}
Verificaremos la sintaxis del programa, como siempre, pulsando en el botón "Verify" del IDE de Arduino, si todo es correcto nos lo indicará con el mensaje "Done compiling":
Programar Arduino para enviar SMS a móvil
Recordamos que para enviar el programa a Arduino necesitaremos colocar los jumpers del módulo GPRS como indicamos aquí. Una vez colocados los jumpers en su posición correcta pulsaremos en botón "Upload" del IDE de desarrollo de Arduino para enviar el programa, si todo es correcto y el programa ha sido enviado a la memoria Flash de Arduino nos lo indicará con el mensaje "Done uploading":
Programar Arduino para enviar SMS a móvil
Para probar el programa y verificar que envía el SMS correctamente al número de móvil indicado habrá que desconectar Arduino del puerto USB, cambiar los jumpers como indicamos aquí y alimentar Arduino con un adaptador como mostramos en la imagen:
Programar Arduino para enviar SMS a móvil
Una vez alimentado Arduino se iniciará el programa y, tras unos 20 segundos (el tiempo de espera que hemos programado), nos llegará el SMS al número de móvil indicado en el programa:
Programar Arduino para enviar SMS a móvil

Programar Arduino para hacer llamadas a móvil

Al igual que hemos explicado cómo enviar SMS con Arduino y el módulo GPRS, mostramos ahora el código para hacer una llamada perdida desde Arduino a un móvil:
/*
 *  Programa para realizar una llamada perdida a un movil
    usando un modulo GPRS con placa Arduino por AjpdSoft
 */

int pinLED = 13;
int pinActivarGPRS = 2;  // pin para activar el módulo GPRS

int timesToSend = 1;  // numero de llamadas a realizar
int contador = 0;  //para solo repetir una vez el loop

void switchModule()
{
  digitalWrite(pinActivarGPRS, HIGH);
  delay(2000);
  digitalWrite(pinActivarGPRS, LOW);
}

void setup()
{
  pinMode(pinLED, OUTPUT);
  pinMode(pinActivarGPRS, OUTPUT);

  Serial.begin(19200);   //velocidad de conexión con módulo GPRS
    
  switchModule();   //activamos el modo SMS
 
  delay(20000);  //esperamos 20 segundos a que se active el módulo GPRS                      
  
   Serial.println("AT+CMGF=1");      // set the SMS mode to text 
}

void loop()
{
  while (contador < timesToSend)
  {
    delay(1500);
    Serial.println("ATD686073762;"); //numero al que realizaremos la llamada
    delay(12000); 
    Serial.println("ATH"); //colgaremos y finalizaremos la llamada
       
    delay(5000);        

    contador++;    
  }

  if (contador == timesToSend)
  {
    Serial.println("AT*PSCPOF");    // desactivar el módulo GPRS
    contador++;
  }
}
Realizando las mismas operaciones que hemos indicado para enviar el programa y para probarlo en el caso del SMS, si todo es correcto, Arduino realizará una llamada perdida al número de móvil indicado:
Programar Arduino para hacer llamadas a móvil

 

Conclusión sobre el módulo GPRS y Arduino

Con estas opciones probadas de envío de SMS y llamada perdida y todas las posibles gracias al módem GSM (módulo GPRS) y los comandos AT, podremos dotar a nuestro proyecto hardware con Arduino de una potente herramienta para numerosas funcionalidades: por ejemplo, si desarrollamos una estación meteorológica podremos avisar por SMS a uno o varios números de móvil cuando se den unas determinadas condiciones (temperatura más baja de un valor preestablecido, etc.). Podremos conectarnos, desde Arduino, a cualquier página web y enviar parámetros, podremos incluso hacer una llamada perdida a un móvil cuando se produzca un determinado evento (así ahorramos el coste del SMS), podremos navegar a una URL y obtener determinado código HTML.
Como hemos demostrado se trata de un módulo muy sencillo de conectar y de programar. De hecho hemos desarrollado este proyecto hardware de uso de módulo GPRS sin necesidad de conocimientos en electrónica ni sistemas.
Sin duda Arduino se está convirtiendo en una herramienta muy útil, al alcance de cualquiera por su bajo precio y con una infinidad de funcionalidades, con la gran ventaja de acercar el hardware conectado al PC para usuarios sin apenas conocimientos en electrónica y sistemas.

 

Artículos relacionados


Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft, con la inestimable colaboración de Antonio RN de RS.