domingo, 30 de abril de 2017

GSM

Introduciendo: MODULO GSM.

Luego de tanto tiempo pude hacerme con un módulo GSM, muy simple, compacto y principalmente barato. Este módulo viene sin borneras (hay que soldarlas uno mismo) y no posee una antena incorporada, por lo que hay que soldarle una, también nos da la posibilidad de utilizar un conector U.fl (conectado en paralelo al agujero donde podemos soldarle la antena) en el cual podemos acoplarle una antena más "profesional".

En mi experiencia utilizando un cable (de los que se usan para los cables de red, un solo hilo) de 4cm da pésimos resultados, quizá porque la frecuencia utilizada no sea de 1900MHz sino que de 850MHz por lo que habría que poner una antena de 9cm aproximativamente. Utilizando una antena comprada con el conector U.fl se obtienen muchísimos mejores resultados (aclaro, para mi que no tengo experiencia fabricando antenas) y no hay problemas con las conexiones por soldaduras frías o malos contactos (cosa que me pasó cuando estaba soldando la antena porque el calor del soldador durante mucho tiempo puede dañar el integrado SIM800L).



En la foto de arriba se puede apreciar el módulo, el tamaño (lo que sobresale arriba azul es una micro sim), como se puede ver arriba a la izquierda está el conector U.fl, inmediata- mente abajo del conector se puede apreciar el sobrante del estaño utilizado para soldar la antena. A la derecha podemos apreciar un led de color verde, cuando tiene señal hace un destello cada tanto y cuando está buscando señal se queda titilando muy rápido.


Acá podemos apreciar la leyenda de cada pin y el porta micro sim, así como el modelo del módulo (por mi parte no encontré mucha bibliografía). 


Esta es la pequeña antena que me dio tan buenos resultados.


En esta última imágen (gracias a las borneras) se puede apreciar el tamaño del módulo y de la antena.


Este módulo (así como como cualquier integrado gsm si no me equivoco) se comunica utilizando el puerto serie (la velocidad se adapta a la que nosotros usemos, osea que la autodetecta), y como "idioma" utiliza los famosos comandos AT, que una vez que se juega un poco con ellos son bastante fáciles de utilizar (al final dejo el pdf que utilizé como referencia).

Para ir finalizando en la introducción de este módulo, la alimentación tiene que estar comprendida entre 3,7v a 4,2v que es la tensión que proporciona una batería de litio-polímero, que justamente son las que se usan en los celulares. Mi solución es sencilla, con una batería lipo conecto el negativo al arduino y al módulo (para tener una masa común) el positivo al vcc del módulo y el arduino conectado vía USB con la computadora, de esta forma el módulo tiene la corriente que necesita (picos de hasta 2A que son proporcionados por la batería de lipo) y el USB conserva su integridad y alimenta únicamente al arduino.

A continuación un breve programa para tener funcionando el módulo rápido:


// Conectar RX al pin digital 11
// Conectar TX al pin digital 10

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()  
{
  Serial.begin(9600);
  mySerial.begin(9600);
  delay(15000);
  Serial.println("inicio del informe");
  comando ("at");
  delay(15000);
  comando ("ATI+CMEE=2");         //pone el modo de los errores en texto
  comando ("at");                 //mandamos el comando básico para recibir un ok 
  comando ("ati");                //obtiene nombre del módulo y versión
  comando ("at+ccid");            //obtiene el número de la tarjeta sim
  comando ("at+cbc");             //obtiene el estado de la batería
  comando ("at+csq");             //obtiene la fuerza de la señal
  comando ("at+cops?");           //obtiene la conección de la red
  mySerial.print("AT+CMGF=1\r");  //modo texto
  Serial.println("fin del informe");
  tiempo = millis();
}

void loop() // run over and over
{
  
  if (mySerial.available())
  {
    Serial.write(mySerial.read());
  }  
  if (Serial.available())
  { 
    while(Serial.available())
    {
      mySerial.write(Serial.read());
    }
    mySerial.println();
  }

}

void comando (char com[40])
{
  mySerial.write(com);
  mySerial.write('\r');
  delay(200);
  while (mySerial.available())
  {
    Serial.write(mySerial.read());
  }
}



Comandos AT aceptados por el integrado:
https://cdn-shop.adafruit.com/datasheets/sim800_series_at_command_manual_v1.01.pdf

No hay comentarios.:

Publicar un comentario