|
給大家分享一個基于單片機GSM遠程控制報警設計
1.本設計為家庭防火防盜GSM報警器;
2.采用STC89C51/52單片機為控制核心,SIM900A為GSM模塊,MQ-2煙霧傳感器、數模轉換器ADC0832、人體紅外熱釋電模塊、1602液晶組成;
3.當檢測到有煙霧或煤氣時,MQ-2傳感器會發出電壓信號,單片機通過ADC0832檢測到該信號,就會將煙霧濃度值顯示到1602液晶上;
4.設置為布防狀態時,1)煙霧濃度值大于設定值,GSM模塊會發出短信報警,同時蜂鳴器報警。2)當人體紅外模塊檢測到有人時,GSM模塊會發出短信報警,同時蜂鳴器報警。
5. 一共有五個按鍵,一個復位按鍵、四個功能按鍵。分別為:打電話測試、發短信測試、布防、撤防。
0.png (50.93 KB, 下載次數: 186)
下載附件
2017-5-7 00:56 上傳
0.png (45.72 KB, 下載次數: 163)
下載附件
2017-5-7 00:56 上傳
GSM防盜報警器元清單
1. 7*9萬用板 2. stc89c51 3. 40腳IC座 4. 10uf電解電容 5. 30pf瓷片電容*2 6. 11.0592MHz晶振 7. 3p母座 8. 8腳母座 9. 9013三極管 10. 9012三極管 11. 25V470uF電解電容 12. 10k電阻*2 13. 5V有源蜂鳴器 14. 3mm紅色led 15. 3mm綠色led 16. 3mm黃色led 17. 1N4007二極管 18. 排針*4 19. 熱釋電模塊 20. SIM900A GSM模塊 21. 2.2k電阻*4 22. 220歐電阻 23. 按鍵*4 24. DC插座 25. 自鎖開關 26. 焊錫 27. 導線 28. USB電源線(粗)
加煙霧模塊 1.7*9萬用板 煙霧傳感器MQ-2 LM393 8腳IC座 103電位器 104獨石電容 5.1Ω電阻 1k電阻 10k電阻 排針*6
單片機源程序:
- //文件包含
- #include "reg52.h"
- #include "uart.c"
- #include "lcd1602.h"
- #include "DHT11.C"
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //按鍵定義
- sbit KEY1= P1^6;
- sbit KEY2= P3^2;
- sbit KEY3= P3^3;
- sbit KEY4= P3^4;
- sbit BEE = P1^0;
- sbit HW = P1^3;
- //ADC定義
- sbit CS=P3^5;
- sbit CLK=P3^7;
- sbit DIO=P3^6;
- //字符數組
- uchar code Tab0[] = {"0123456789. "};
- uchar code Tab1[] = {" it is readying "};
- uchar code Tab2[] = {" it is ok "};
- uchar code Tab3[] = {"smoke is ppm"};
- //uchar code Tab3[] = {" the GSM system "};
- uchar code Tab4[] = {" 'C % "};
- uchar code Tab5[] = {"in calling "};
- uchar code Tab6[] = {"in sending "};
- uchar code Tab7[] = {" ON OFF"};
- uchar GSM_flag=0;
- uchar temp,Set_temp=40; //溫度
- uchar shidu,Set_shidu=100; //濕度
- uchar smoke=0,Set_smoke=50; //煙霧
- uchar HW_reg=0;
- //設置短信接收人
- //uchar code PhoneNO[]= "00310035003700320039003300390030003100330037"; // 15729390137
- uchar code PhoneNO[]= "00310038003700350031003900310039003600350034 "; // 18751919654
- //設置電話接聽人
- uchar code PhoneNO1[]= "18751919654";
- //uchar code PhoneNO1[]= "15729390137";
- //主人您好!我是您的管家!
- uchar code Text1[]= "4E3B4EBA60A8597DFF016211662F60A876847BA15BB6FF01";
- //主人,溫度過高,可能著火了,快回家看看!
- uchar code Text2[]="4E3B4EBAFF0C6E295EA68FC79AD8FF0C5BB64E2D53EF80FD7740706B4E86FF015FEB56DE5BB6770B770BFF01";
- //主人,家中有人闖入,您的家可能被盜了!
- uchar code Text3[]="4E3B4EBA002C5BB64E2D67094EBA95EF5165FF0C60A876845BB653EF80FD88AB76D74E86FF01";
- //煙霧濃度過大,可能著火了!快回家看看吧!
- uchar code Text4[]="70DF96FE6D535EA68FC75927FF0C53EF80FD7740706B4E86FF015FEB56DE5BB6770B770B5427FF01";
- //ADC0832函數,帶返回值
- unsigned int A_D()
- {
- unsigned char i,dat;
- CS=1; //一個轉換周期開始
- CLK=0; //為第一個脈沖作準備
- CS=0; //CS置0,片選有效
-
- DIO=1; //DIO置1,規定的起始信號
- CLK=1; //第一個脈沖
- CLK=0; //第一個脈沖的下降沿,此前DIO必須是高電平
- DIO=1; //DIO置1, 通道選擇信號
- CLK=1; //第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數據用于選擇通道,這里選通道CH0
- CLK=0; //第二個脈沖下降沿
- DIO=0; //DI置0,選擇通道0
- CLK=1; //第三個脈沖
- CLK=0; //第三個脈沖下降沿
- DIO=1; //第三個脈沖下沉之后,輸入端DIO失去作用,應置1
- CLK=1; //第四個脈沖
- for(i=0;i<8;i++) //高位在前
- {
- CLK=1; //第四個脈沖
- CLK=0;
- dat<<=1; //將下面儲存的低位數據向右移
- dat|=(unsigned char)DIO; //將輸出數據DIO通過或運算儲存在dat最低位
- }
- CS=1; //片選無效
- return dat; //將讀出的數據返回
- }
- //主函數
- void main(void)
- {
- uchar G,S,B;
- LCD1602_Init(); //1602液晶屏初始化
- LCD1602_Display(LINE1,Tab1,0,16); //準備界面
- BEE=0; //開機提示
- Delay_ms(50);
- BEE=1;
- Uart_init();
-
- Delay_ms(500); //等待GSM模塊穩定
- SendString("AT\r\n");
- BEE=0; //提示已穩定
- Delay_ms(50);
- BEE=1;
- while(1)
- {
- LCD1602_Display(LINE1,Tab3,0,16); //準備完畢
- LCD1602_Display(LINE2,Tab4,0,13); //準備完畢
- smoke=A_D();
- RH();
- temp=U8T_data_H; //溫度
- shidu=U8RH_data_H; //濕度
- if(1)
- {
- B=temp/100;
- S=temp%100/10;
- G=temp%10;
- LCD1602_Display(LINE2,Tab0,B,1);
- LCD1602_Display(LINE2+1,Tab0,S,1);
- LCD1602_Display(LINE2+2,Tab0,G,1);
- B=shidu/100;
- S=shidu%100/10;
- G=shidu%10;
- LCD1602_Display(LINE2+7,Tab0,S,1);
- LCD1602_Display(LINE2+8,Tab0,10,1);
- LCD1602_Display(LINE2+9,Tab0,G,1);
- B=smoke/100;
- S=smoke%100/10;
- G=smoke%10;
- LCD1602_Display(LINE1+9,Tab0,B,1);
- LCD1602_Display(LINE1+10,Tab0,S,1);
- LCD1602_Display(LINE1+11,Tab0,G,1);
- }
- Delay_ms(100);
-
- //第一個按鍵,打電話測試
- if(KEY1==0)
- {
- Delay_ms(10);
- if(KEY1==0)
- {
- BEE=0; //提示進入按鍵
- Delay_ms(20);
- BEE=1;
- LCD1602_Display(LINE2,Tab5,0,16);
- SendString("ATD"); //打電話指令
- SendString(PhoneNO1);
- SendASC(';');
- SendASC('\r'); //發送回車指令
- SendASC('\n'); //發送回車指令
- Delay_ms(2000);
- SendString("ATH\r\n"); //主動掛斷
- Delay_ms(100);
- }
- }
- //第二個按鍵
- if(KEY2==0)
- {
- Delay_ms(10);
- if(KEY2==0)
- {
- BEE=0; //提示進入按鍵
- Delay_ms(20);
- BEE=1;
- LCD1602_Display(LINE2,Tab6,0,16);
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發送回車指令//
- SendASC('\n'); //發送回車指令//
- Delay_ms(100);
- SendString(Text1);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- }
- //第三個按鍵,布防
- if(KEY3==0)
- {
- Delay_ms(6);
- if(KEY3==0)
- {
- BEE=0; //提示進入按鍵
- Delay_ms(20);
- BEE=1;
- GSM_flag=1;
- LCD1602_Display(LINE2+13,Tab7,0,3);
- }
- }
- //第四個按鍵,撤防
- if(KEY4==0)
- {
- Delay_ms(6);
- if(KEY4==0)
- {
- BEE=0; //提示進入按鍵
- Delay_ms(20);
- BEE=1;
- GSM_flag=0;
- LCD1602_Display(LINE2+13,Tab7,4,3);
- }
- }
- //紅外
- if(HW==1)
- {
- Delay_ms(10);
- if(HW==1)
- {
- BEE=0; //提示進入按鍵
- Delay_ms(100);
- BEE=1;
- if(GSM_flag==1)
- {
- HW_reg++;
- if(HW_reg>=10)
- HW_reg=10;
- }
- }
- }
- //進入布防模式
- if(GSM_flag==1)
- {
- //有人闖入
- if(HW_reg>=1)
- {
- HW_reg=0;
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發送回車指令//
- SendASC('\n'); //發送回車指令//
- Delay_ms(100);
- SendString(Text3);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- //溫度過高,可能著火了
- if(temp>=Set_temp)
- {
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發送回車指令//
- SendASC('\n'); //發送回車指令//
- Delay_ms(100);
- SendString(Text2);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- //煙霧濃度過高,可能著火了
- if(smoke>=Set_smoke)
- {
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
-
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (52.62 KB, 下載次數: 157)
下載附件
2017-5-7 00:56 上傳
下載:
程序.rar
(77.9 KB, 下載次數: 553)
2017-5-6 22:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2-原理圖.rar
(104.56 KB, 下載次數: 456)
2017-5-6 22:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|