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 :
Sơ đồ mạch nguồn 12V - 3.3V cấp cho mạch :
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();
}
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:
có thể cho e xin file source code được ko, vì thiếu mất thư viện lcd ạ,
cho e xin file source duoc ko a
Đăng nhận xét