Siguenos en ...

Google+facebooktwitter

youtubepinterest RSS aquihayapuntes

Últimos Tutoriales

Licencia

Creative Commons

 

Todo el contenido de este sitio está bajo una licencia de Creative Commons

 

Control de Mensajes SMS a través de un PIC

Control de mensajes SMS a través de un PICEste tutorial trata sobre la comunicación RS-232 entre un Microcontrolador (PIC) y un teléfono o módulo GSM para el control de mensajes SMS por medio del estándar de comandos AT. Por un lado describiré mis experiencias a la hora de conectar el PIC a un teléfono móvil comercial (SAGEM MY 3036) y por otro lado se describirán las experiencias con el módulo GSM TC35i que el amigo Inyelber nos ha comentado en el foro (gracias por el aporte).

 

 

 

 

 

Primeras pruebas con el SAGEM MY3036

Lo primero que le puede venir a la cabeza a alguien que quiera conectar su viejo celular a un Microcontrolador es si su teléfono permite esa conexión y en caso de que así sea el cómo hay que hacer la conexión. El requisito imprescindible para ello es que el teléfono móvil disponga de un modem GSM con interfaz serie, lo que el número de candidatos se suele reducir a teléfonos ya antiguos como el Siemens C55, Nokia N70, etc. El que se haga la pregunta si el PIC se puede comunicar con un teléfono más moderno con interfaz USB o bluetooth, pues supongo que sí pero no es el tema de este artículo, tal vez para la próxima...

 

Una vez que sabemos que nuestro celular dispone de modem GSM y de una interfaz serie para comunicarnos con él vía RS-232 debemos de comprobar que podemos establecer una comunicación con él por medio de comandos AT, para ello la forma más fácil es conectar el teléfono a un PC equipado con puerto serie a través de un cable de datos, según se muestra en la figura de abajo:

 

 

Conexión teléfono

 

No hay que poner ningún convertidor entre ellos, tanto el puerto COM del ordenador como el Modem interno del teléfono trabajan con niveles RS-232.

 

Para empezar a comprobar si tenemos comunicación entre el ordenador y el móvil utilizaremos cualquier programa de comunicación serie como el hyperterminal.

 

Establecemos una nueva conexión con el teléfono SAGEM:

 

Nueva conexión

 

A través de un puerto COM de nuestro ordenador (en mi caso el COM1):

 

Conexión COM1

 

Establecemos los parámetros de configuración del puerto (9600,8,N, 1,N):

 

Parámetros de configuración puerto COM

 

Por la parte del Modem del teléfono Móvil los parámetros se configuraron automáticamente al establecer la conexión, por lo que no tuve que configurar nada.

 

Una vez que la conexión se ha establecido se mandan comandos AT a través del Hyperterminal para comprobar que el teléfono responde:

 

 

Comprobación con el Hyperterminal

 

No todos los teléfonos soportan todos los comandos Hayes o AT.

 

La lista completa de comandos para el teléfono SAGEM lo tenéis aquí.

 

Una tabla con los comandos más utilizados y que suelen aceptar todos los teléfonos sería la siguiente:

 

ComandoDescripciónRespuesta del Modem
AT Para comprobar que la comunicación es correcta OK ó ERROR
AT+CMGF=1 Configura el terminal para manejar el SMS en modo texto OK ó ERROR
AT+CSCA? Solicita al módem el número de teléfono del Centro de Mensajes +CSCA: "+34609090999",145seguido de un OK.

AT+CSCA=

"+34609090999",145

Para cambiar el número de teléfono del centro de mensajes si no es correcto OK ó ERROR

AT+CMGS=

”666779808”

Envía un mensaje al número que hay entre las comillas dobles. Una vez recibido el comando el modem responde con el carácter ‘>’ para que introduzcamos el cuerpo del mensaje, para finalizar pulsamos Ctrl-Z (ascii 26) El módem responderá con la posición donde se ha almacenado el mensaje enviado: +CMGS: 0 seguido de un OK.
AT+CMGR=? Comando para la lectura del SMS guardado en la posición nº (?) de la memoria de la tarjeta SIM del teléfono.

El +CMGR:"REC UNREAD","+34666779808"

29/06/12,19:03:20 +08" Texto del mensaje OK

AT+CMGD=? Comando para el borrado del SMS guardado en la posición nº (?) de la memoria de la tarjeta SIM del teléfono. OK ó ERROR
AT+IPR=9600 Configura la velocidad del modem a 9600 baudios OK ó ERROR

 

Ejemplo de alarma con envío de SMS

Este es un ejemplo sencillo de envío de mensajes SMS a través de un PIC conectado a un teléfono móvil por medio de una interfaz serie RS-232. El funcionamiento es sencillo, cuando el sensor volumétrico se activa cierra su contacto, este alimenta al convertidor CA/CC que a su vez alimenta al relé RL1, este cierra su contacto y produce una interrupción en el PIC a través de la patilla RB0 que hace que se envíen los comandos AT necesarios para que el teléfono móvil envíe un número determinado de mensajes de alarma al número que hayamos introducido en el programa.

 

Esquema eléctrico

 

Esquema Alarma GSM

 

El circuito utiliza un convertidor de niveles MAX232 para adaptar los niveles TTL requeridos por el PIC a los niveles del estándar RS232 utilizado por el teléfono.

 

Importante: anteriormente he comentado que para conectar el teléfono móvil al PC no se necesita ningún conversor de niveles ya que ambos utilizan los niveles de tensión del estándar RS232, además la conexión entre el teléfono móvil y el puerto serie del PC se hace a través de un cable de datos directo (sin cruzar) ya que el Teléfono Móvil hacía de equipo de comunicación de datos (DCE) y el PC de equipo terminal de datos (DTE). Ahora estamos conectando el PIC al teléfono Móvil a través del convertidor de niveles, ambos (el PIC y el Teléfono) son DCE, por lo que si dejamos las mismas conexiones en el circuito el cable para conectarnos al teléfono tiene que ser un cable cruzado (Null módem) que es simplemente un cable que tiene cruzadas las líneas Tx y Rx. Comercialmente estos cables se suelen diferenciar visualmente de los normales en que las piezas de plástico que sirven de ayuda para atornillar y sujetar el conector son de color violeta y en los cables normales (sin cruzar) son de color gris de todas formas por si acaso es buena idea comprobar las conexiones de los pines con el polímetro antes de conectar.

 

¡Ojo! Si nos equivocamos y ponemos un cable directo entre el convertidor de niveles y el teléfono no solo no funcionará sino que nuestro querido MAX232 se empezará a calentar como si de una estufa se tratará, lo que vendría después ya os lo podéis imaginar.

 

Circuito montado

 

Alarma volumétrica con envío de SMS

 

Código fuente del PIC

/////////////////////////////////////////////////////////////////////////
//                                                                     //
//Alarma con sensor volumétrico y envío de mensajes SMS                //
//                                                                     //
// www.aquihayapuntes.com                                              //
//                                                                     //
/////////////////////////////////////////////////////////////////////////

#include <16F877.h>
#device ICD=TRUE//si no utilizas el debugger debe de ir comentada
#FUSES NOWDT, HS, NOPUT, NOLVP
#use delay(clock=20000000)

//Configuración puerto serie
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

//Variables de configuración SMS
#define NUMERO_MENSAJES 2 //Número de mensajes a enviar
char NUMERO[] = "+34681345641"; //Numero de teléfono a marcar
char MENSAJE[] = "Prueba Alarma\r AquiHayapuntes.com";//Mensaje a enviar

int flag=0;//variable auxiliar

#int_EXT  
void  EXT_isr(void){//función de tratamiento a la interrupción externa
 
flag=1;

}

//Función para configurar paramétros del modem
void configurar_Modem(){

 printf("at+cmgf=1\r"); //configura el tipo de formato de mensaje de texto SMS (formato TEXTO)
 delay_ms(200);

}

//Función para enviar mensajes SMS
void Envio_SMS(){

 char ctrlz = 26; //combinacion de teclas "ctrl+z"
 
 printf("at+cmgs=\"%s\"\r",NUMERO);
 delay_ms(200);
 printf("%s",MENSAJE);  
 delay_ms(200);
 printf("%c",ctrlz); //se envia el mensaje
 delay_ms(200);
 
}
void main()
{
 int i;
 
 //Configuración registros PIC
 enable_interrupts(GLOBAL);//habilito interrupción global
 enable_interrupts(INT_EXT);//habilito interrupción externa
 ext_int_edge(L_TO_H);// flanco de activación ascencente
 
 delay_ms(1000);//retarto para estabilizar
 
 configurar_Modem();//llamada a la función de configuración del modem
 
 while(true) {  //Bucle infinito hasta interrupción
 
 if (flag==1){ // si se produce alarma envio mensajes
 
 for(i=0;i<NUMERO_MENSAJES;i++){
 Envio_SMS();
 }
 flag=0;
 }
 
 }
}

Aquí tenéis un vídeo de la aplicación funcionando:


 

© 2007-2017 AquiHayapuntes.com