Mạch báo động rò khí gas và chống trộm báo qua điện thoại bằng tin nhắn sms - thachdt

HOT

Post Top Ad

Thứ Bảy, 26 tháng 1, 2019

Mạch báo động rò khí gas và chống trộm báo qua điện thoại bằng tin nhắn sms

 Mạch chống trộm và cảnh báo rò khí gas báo qua tín nhắn sms
 + Mạch sẽ tự động bật còi hú khi cảm biến chống trộm hồng ngoại bị trộm kích hoạt và gửi tin nhắn sms cho chủ nhà qua điện thoại
 +  Bật relay quạt gió khi phát hiện rò rỉ khí gas và báo động còi hú , gửi tin nhắn sms cho chủ nhà biết qua điện thoại

Mạch sử dụng module sim 900A, vi điều khiển PIC16F877A

Sơ đồ và layout mạch in mình vẽ trên proteus :
220von

220von



Sơ đồ mạch nguồn 12V - 3.3V cấp cho mạch :
220von

Code C : mình viết trên phần mềm biên dịch CCS

#include <16F877A.h>
#include <def_877a.h>
#include <string.h>
#FUSES NOWDT                
#FUSES HS                      
#FUSES NOPUT                   
#FUSES NOPROTECT              
#FUSES NODEBUG              
#FUSES NOBROWNOUT            
#FUSES NOLVP                  
#FUSES NOCPD                  
#FUSES NOWRT                  
#FUSES RESERVED 

#use delay(clock=10000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <ce_lcd.c>
#define use_portb_lcd TRUE
#define      PWU            RD6
#define      TXD            RC6
#define      RXD            RC7
#define  buffer_size          80      
char     buffer[buffer_size];          
int      xbuff=0x00;                 
char     c=0x00;                      
char     c1=0x00;                    
short    sms_mode=false;

char gas,ir;
int1 x=0,y=1;
char z=0;
char so[13]="01216512808"; // so dien thoai gui tin nhan canh bao
void send_sms(char so[12],char vitri);
void erase_buffer(void);   
void init_sim900(void);   
void read_sms();          
void at(void);            
short wait_ok (void);     
short wait_error (void);  
/////////////////////////////////////////////////////////////////////////////////
#INT_RDA
RDA_isr()
   {
   c=getc();
      if(c=='*'){                
        c1=c;             
        xbuff=0;  
        }
   if (c=='#' && c1=='*')
      {
       sms_mode=true;
       }
   if (xbuff >= buffer_size) 
      {xbuff=0;}
      else{  buffer[xbuff++]=c;}
   return 0;
   }
//////////////////////////////////////////////////////////////////////////////  
void main()
{
char ir_temp;
set_tris_a(0b11111111);
set_tris_d(0x00);
set_tris_c(0b10000000);
RD3=0;RD2=0;
RD1=1;
RD7=1;
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
setup_adc(ADC_CLOCK_INTERNAL); 
setup_adc_ports(AN0_AN1_AN3);
lcd_init();
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Dang khoi dong..");
init_sim900();
RD7=0;
lcd_gotoxy(1,1);
lcd_putc("     xong...    ");
delay_ms(1500);
lcd_putc("\f");
lcd_putc("    Xin Chao    \n");
lcd_putc("   220von.com    ") ;
send_sms(so,1);
lcd_putc("\f");
lcd_putc(" Module SIM 900 \n");
lcd_putc(" ............... ") ;
delay_ms(1000);
set_adc_channel(1);
delay_us(20);
ir_temp=read_adc();
delay_us(20);

lcd_putc("\f");
while(true)
 {
  set_adc_channel(0);
  delay_us(20);
  gas=read_adc();
  delay_us(20);
  set_adc_channel(1);
  delay_us(20);
  ir=read_adc();
  delay_us(20);
  if((gas>120)&&(x==1)){z=1;RD3=1;RD2=1;lcd_putc("\f");lcd_gotoxy(1,1);lcd_putc("Ro ri khi gas");
                        send_sms(so,3);

                        x=0;
                       }
  if((gas<100)&&(x==0)){x=1;lcd_putc("\f");lcd_gotoxy(1,1);lcd_putc("He thong an toan") ;z=0;}
  if(z==1){RD3=1;RD2=1;RD1=1;delay_ms(200);RD1=0;delay_ms(200);}
  if(z==2){RD2=1;RD1=1;delay_ms(200);RD1=0;delay_ms(200);}
  if(z==0){RD3=0;RD2=0;RD1=0;}
  if((ir<(ir_temp-30))&&(y==1)){z=2;RD2=1;lcd_putc("\f");lcd_gotoxy(1,0);lcd_putc("Co trom dot nhap");
                               send_sms(so,4);
                               y=0;
                               }
  if(sms_mode==TRUE){read_sms();erase_buffer();}
 }
}



/////////////////////////////////////////////////////////////////////////////////////////
void erase_buffer(void)
   {
   int i;
   for(i=0;i<buffer_size;i++){ buffer[i]=0x00;  }
   xbuff=0x00;
   c=0x00;
   c1=0x00;
   sms_mode=false;
   return;
   }
//////////////////////////////////////////////////////////////////////////////////////////
void init_sim900(void)
   {
   PWU=1;           
   delay_ms(1000);
   PWU=0;
   delay_ms(9000);
   do           
   {
   printf("AT");
   putc(13);  
   delay_ms(800);
   }
   while (wait_ok()==false);
   return;
   }
///////////////////////////////////////////////////////////////////////////////////////
 void read_sms() 
   {
   char *ptr;
   char text1[]="tat bao dong";
  
      ptr=strstr(buffer,text1);  
      if(strncmp(ptr,text1,12)==0)     
         {
         z=0;
         y=1;
         RD3=0;RD2=0;
         lcd_putc("\f");lcd_gotoxy(1,1);lcd_putc("He thong an toan");
         send_sms(so,2);
        
         }
   }
////////////////////////////////////////////////////////////////////////////////////////
void send_sms(char so[12],char vitri)
{
  printf("AT+CMGS=");
  delay_ms(100);
   putc(34); // "
   delay_ms(100);
   printf(so);
   delay_ms(100);
   putc(34); //
   printf(";");
   delay_ms(100);
   putc(13);  
   delay_ms(1500);
   switch(vitri)
    {
     case 0:break;
     case 1:
          {
          printf("Thiet bi da khoi dong thanh cong ...\n\r");
          break;
          }
     case 2:
          {
          printf("Da tat bao dong ...\n\r");
          break;
          }
     case 3:
          {
          printf("Canh bao ! : Phat hien ro ri khi GAS. Da bat quat thong gio...\n\r");
          break;
          }
     case 4:
          {
          printf("Canh bao ! : Co trom dot nhap vao nha. Da bat coi hu...\n\r");
          break;
          }         
    }
   delay_ms(1000);
   putc(26);
   delay_ms(6000);
}
///////////////////////////////////////////////////////////////////////////////////////////
void at(void)
{
   do                  
   {
   printf("AT");
   putc(13);
   delay_ms(1000);
   }
   while (wait_ok()==false);
   return;
}
///////////////////////////////////////////////////////////////////////////////////////
short wait_ok (void){
char *ptr;
char r1_ok[]="OK";
ptr=strstr(buffer,r1_ok);

if(strncmp(ptr,r1_ok,2)==0){
   return true;
   }
   else{return false;}
erase_buffer();
}

Video test mạch :




1 nhận xét:

Post Top Ad