Autor Tema: control de electrodomésticos via mensajes sms  (Leído 8003 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado camachoc

  • PIC10
  • *
  • Mensajes: 8
control de electrodomésticos via mensajes sms
« en: 01 de Septiembre de 2009, 22:53:25 »
como interpretar mensajes de texto para activar o desactivar cargas electricas, o bien monitorear varibles físicas que se estan llevando a cabo en un proceso, como temperatura, voltaje etc...
« Última modificación: 01 de Septiembre de 2009, 22:55:37 por camachoc »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: control de electrodomésticos via mensajes sms
« Respuesta #1 en: 01 de Septiembre de 2009, 23:02:34 »
Hola,

Es relativamente sencillo si se hace con un módem (o un celular) y un microcontrolador. Lo que hay que hacer es verificar si ha llegado un mensaje nuevo (+CNMI) y luego leerlo (+CMGR).  Si es para envío del mensaje se haría con el comando +CMGS, todo esto con comandos AT.

Saludos
El papel lo aguanta todo

Desconectado camachoc

  • PIC10
  • *
  • Mensajes: 8
Re: control de electrodomésticos via mensajes sms
« Respuesta #2 en: 08 de Septiembre de 2009, 12:56:40 »
muchas gracias me salio a la perfeccion usando el celular motorola c261 te agradesco mucho tu consejo

Desconectado camachoc

  • PIC10
  • *
  • Mensajes: 8
Re: control de electrodomésticos via mensajes sms
« Respuesta #3 en: 23 de Septiembre de 2009, 03:16:56 »
a qui les mando unfragmento de codigo a ver si les sirve a los que estamn realizando algo similar a lo que hice, este recibe mensajes los llee y despues los interpreta del modem gsm:
#include <18f2550.h>
#fuses hs,noprotect, mclr,nowdt
#use delay(internal=4M)//delay(clock=4000000)k
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7,STREAM=MODEM)
#use rs232(baud=9600, xmit=PIN_B5,rcv=PIN_B6,STREAM=DEVICES)
#use rs232(baud=9600, xmit=PIN_c0,rcv=PIN_c1,STREAM=MASTER)
#include <string.h>
#include <math.h>
//#include <input.c>
#define mensaje pin_a0
#define relay   pin_a1
#define RESET  pin_a2
#define ALARM pin_b3
#define on output_high
#define off output_low
//#priority EXT1,RDA
/////////////////////////////////////////////////////////////////////////////////////////
INT STRING[300]="                            ",modo=0,dispositivos[]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",num[]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
INT OK[]="OK",ERROR[]="ERROR",RING[]="RING",CMTI[]="+CMTI:",ON[]="ON",OFF[]="OFF",ESTADO[]="DISPOSITIVOS?",VARIABLES[]="VARIABLES?",varis[]="voltaje=0,temperatura=0,pocicion=0";
int1 listo=0,captura_cadena=1;
char a=0,b=0,s0[]="off",s1[]="off",s2[]="off",s3[]="off";
int x,estado_dispositivo,FOCOS=0;
//////////////////////////////////////////////////////////////////////////////////////
const int mensaje_leido=1,RESETEAR=2;
//////////////////////////////////////////////////////////////////////////////////////
int1 verificar_estado(int estados,int disp);
void asignar_estados(char modo);
int1 verificar_falla(int cont);
//////////////////////////////////////////////////////////////////////////////////////
VOID MAIN()
{
enable_interrupts(int_rda);
enable_interrupts(int_ext1);
enable_interrupts(int_ext2);
enable_interrupts(global);
ON(RESET);
for(x=0;x<16;x++)
num
  • =read_eeprom(x);

CICLO:

GOTO CICLO;
}
//////////////////////////////////////////////////////////////////////////////////////////
#int_rda
void capturar()
{
if(kbhit()!=0)
fgets(string,modem);
 if(strcmp(string,RING)==0)
  {
 fputs("ATA",modem);
  on(relay);
  }
else if((strncmp(string,ON,2)==0)||(strncmp(string,OFF,3)==0))
  {
  if(strncmp(string,ON,2)==0)
    dispositivos[0]='A';
  else if(strncmp(string,OFF,3)==0)
    dispositivos[0]='B';
    for(x=1;x<12;x++)
    dispositivos
  • =0;

    for(x=1;x<12;x++)
       {
       dispositivos
  • =string
  • ;

       }
       MODO=MENSAJE_LEIDO;
  }
else if(strcmp(string,OK)==0)
  {
  output_high(pin_b7);
  switch(modo)
    {
    case mensaje_leido:
         for(x=0;x<12;x++)
         fputc(dispositivos
  • ,devices);

         delay_ms(610);
       /*  if(!verificar_falla(11))
         goto MEN;*/
         fputs("AT+CMGD=1,4",modem);///////////////////////////borra los mensajes leidos
         modo=resetear;
         off(mensaje);       
         break;
    case RESETEAR:
      if(listo==1)
         {
          modo=0;
          captura_cadena=0;
          if(focos==1)         
          asignar_estados(';');   
          else if(focos==2)
          asignar_estados('*'); 
          MEN:
          fprintf(modem,"AT+CMGS=\"%s\"%c",num,13); 
          delay_ms(1000);         
          if(focos==1)
          fprintf(modem,"foco0=%s;\nfoco1=%s;\nfoco2=%s;\nfoco3=%s%c",s0,s1,s2,s3,26);
          else if(focos==2)
          fprintf(modem,"%s%c",varis,26);         
          focos=0;         
         }
         delay_ms(300);
         listo=0;
         off(reset);                         
         break;
    }
  }
else if(strcmp(string,ERROR)==0)
 {
  output_low(pin_b7);
  off(mensaje);
 }
else if(strncmp(string,CMTI,6)==0)
  {
  a=b=0;
  a=string[12];
  b=string[13];
  fprintf(modem,"AT+CMGR=%c%c%c",a,b,13);
  modo=mensaje_leido;
  on(mensaje);
  }
else if(strcmp(string,ESTADO)==0)
  {
  listo=1;
  FOCOS=1;
  }
 else if(strcmp(string,VARIABLES)==0)
  {
  listo=1;
  FOCOS=2;
  }
}

///////////////////////////////////////////////////////////////////////////////////////////
#INT_EXT1
void alarma()
{
if(input(alarm))
{
fputs("AT",modem);
delay_ms(200);
fprintf(modem,"ATD%s;%c",num,13);
delay_ms(9000);
fputs("ATH",MODEM);
delay_ms(300);
OFF(RESET);
}
}
//////////////////////////////////////////////////////////////////////////////////////////
#INT_EXT2
void actualizar()
{
char comand=0;
comand=fgetc(master);
if(comand==10)
 {
  fgets(num,master);
  for(x=0;x<16;x++)
  write_eeprom(x,num
  • );

 }
if(comand==11)
 {
  fgets(dispositivos,master);
  for(x=0;x<2;x++)
   fputc(dispositivos
  • ,devices);

 }

delay_ms(100);
OFF(RESET);
}
//////////////////////////////////////////////////////////////////////////////////////////
int1 verificar_estado(int estados,int disp)
{
 int resultado=0;
 int1 bool=0;
 int and=0;
 resultado=pow(2,disp);
 and=estados&resultado;
 if(and==resultado)
 bool=1;
 else
 bool=0;
 return bool;
}
/////////////////////////////////////////////////////////////////////////////////////////
void asignar_estados(char modo)
{
estado_dispositivo=0;
    fputc(modo,devices);
    if(modo=='*')
    fgets(varis,devices);
    else if(modo==';')
        {
         estado_dispositivo=fgetc(devices);         
         for(x=0;x<4;x++)
         {
          switch(x)
          {
          case 0:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s0,ON);               
                 else strcpy (s0,OFF);
               break;
          case 1:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s1,ON);               
                 else strcpy (s1,OFF);
               break;
          case 2:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s2,ON);               
                 else strcpy (s2,OFF);
               break;
          case 3:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s3,ON);               
                 else strcpy (s3,OFF);
               break;         
          }
         }         
      }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int1 verificar_falla(int cont)
{
int1 res=false;
int y;
fputc(';',devices);
estado_dispositivo=fgetc(devices);
for(y=1;y<cont;y++)
  {
  if((dispositivos[y]>='0')&&(dispositivos[y]<='9'))
    {
     if(verificar_estado(estado_dispositivo, dispositivos[y]-48)&&dispositivos[0]=='A')
      res=true;
     else if(!verificar_estado(estado_dispositivo, dispositivos[y]-48)&&dispositivos[0]=='B')
      res=true;
     else
     {
     res=false;
     goto salir;
     }
    }
  }
  SALIR:
return res;
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: control de electrodomésticos via mensajes sms
« Respuesta #4 en: 23 de Septiembre de 2009, 11:34:51 »
Gracias por tu aporte.

Saludos
El papel lo aguanta todo

Desconectado canival35

  • PIC10
  • *
  • Mensajes: 36
Re: control de electrodomésticos via mensajes sms
« Respuesta #5 en: 20 de Febrero de 2010, 02:43:57 »
hola camachoc, pues este codigo me ha venido como anillo al dedo, estoy usando un modem ENFORa y apenas estoy comensando en el area de GPRS/GSM, tienes alguna guia de referencia o libro que me recominendes para saber un poco mas, me interesa sobre todo la interpretacion de los comandos AT y algo sobre las redes GPRS/GSM

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: control de electrodomésticos via mensajes sms
« Respuesta #6 en: 20 de Febrero de 2010, 14:06:22 »
Los módem tienen su propio manual de comandos AT, sin embargo hay algunos que son generalizados, y se supone que todos los tienen.

Googlea un poco y encontraras mucho al respecto:

Comandos AT

Saludos
El papel lo aguanta todo

Desconectado canival35

  • PIC10
  • *
  • Mensajes: 36
Re: control de electrodomésticos via mensajes sms
« Respuesta #7 en: 23 de Febrero de 2010, 22:30:28 »
Gracias por la info MLO ahora mismo la reviso e investigare sobre los comandos que tiene el fabricante de mi modem

Desconectado camachoc

  • PIC10
  • *
  • Mensajes: 8
Re: control de electrodomésticos via mensajes sms
« Respuesta #8 en: 04 de Marzo de 2010, 00:50:56 »
 Para este tipo de aplicacion los comandos AT empleados son estandar     

Desconectado diego_z

  • PIC16
  • ***
  • Mensajes: 225
Re: control de electrodomésticos via mensajes sms
« Respuesta #9 en: 28 de Octubre de 2011, 19:26:27 »
hola alguien me indica si el 236i soporta comandos at ? 0 la forma de identificar esta propiedad en el movil , ?un saludo
,,,,option,,,,,,,,,,,explicit,,,,,,,

DR800 big a la venta ,solo argentina por privado

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 159
Re:control de electrodomésticos via mensajes sms
« Respuesta #10 en: 04 de Septiembre de 2016, 13:27:43 »
Alguien logro compilar el code que posteo camacho?. Por que a mi me marca errores, me interesa mucho la función int1 verificar_falla(int cont) que se esta implementando aqui. Bueno en realidad todo el code esta interesante

Anexo la imagen de errores que me salen.
« Última modificación: 05 de Septiembre de 2016, 10:47:36 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.

Desconectado armandoyamir

  • PIC10
  • *
  • Mensajes: 34
    • www.microcontrolador.net
Re:control de electrodomésticos via mensajes sms
« Respuesta #11 en: 18 de Octubre de 2016, 10:38:16 »
Estimado.

Podríamos usar una tarjeta de control basado en un PIC. por ejemplo yo estoy usando esta

http://www.ebay.com/itm/PIC-SmartPhone-Home-Control-Board-Development-Kit-with-Sim900-GSM-GPRS-RS232-/282219280461?hash=item41b594784d:g:T~gAAOSw8gVX32Ra

Tienes unas conecciones para poder incluir en Sim900 o Sim800C o cualquier módulo con TX,RX serial. salido con Relay y entrada con opto-acopladores, completamente aislado.  Tengo un software integrado en el pic (18f2550) que permite escribir los comandos AT por el telado de tu PC y lo lleva directamente al Sim900,Sim800C interactuando en tiempo real. Funciona de maravilla.

Te sugiero echar un vistaso a esta tarjeta PCB ABMasterSW de ABServoSystem, en la dirección dada.

SALUDOS.
Armando Blanco C.
Ing Armando Blanco C.


 

anything