www.thachdt.com www.thachdt.com www.thachdt.com www.thachdt.com Điện thoại: 0901965800

Thứ Tư, 18 tháng 10, 2017

Filled Under:

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



Chào các bạn !
Hôm nay 220von tiếp tục chia sẽ với các bạn 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

Video test mạch :


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";
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();
}


Nếu các bạn muốn hợp tác với mình để mở rộng chức năng cho ứng dụng này hoặc chia sẻ ý tưởng ứng dụng vào cuộc sống thì gửi mail cho mình theo địa chỉ : 220von.com@gmail.com
Hoặc theo dõi trang fan page facebook : https://www.facebook.com/220von/

3 nhận xét:

Hackermobifone nói...
Nhận xét này đã bị tác giả xóa.
Unknown nói...

có thể cho e xin file source code được ko, vì thiếu mất thư viện lcd ạ,

Unknown nói...

cho e xin file source duoc ko a