• 基于单片机GSM的防火防盗系统的设计


    目录

    【功能介绍】

    【原理图】

    【PCB】

    【实物图】

    【元器件清单】

    【源程序】

    【原理介绍】

    【参考文献】


    【功能介绍】

    本系统建立了一个基于GSM网络及短信息平台上的安防系统,设计中采用了STC89C52单片机系统、无线GSM短信模块及传感器技术。通过对主控模块、通信网络、传感器模块、短信模块及接口电路的控制。实现了系统的远程报警及控制功能,可以实现如下功能。

    (1)该设计包括硬件和软件设计两个部分。模块划分为数据采集、单片机控制、GSM短信报警等模块子函数。

    (2)系统可实现功能。当人员外出时,可把报警系统设置在外出状态,探测器开始工作,当有人闯入时,热释电红外传感器将探测到动作,并短信报警,向用户发送短信息实现远程防盗报警功能。

    【原理图】

    【PCB】

    【实物图】

     

    【元器件清单】

    21-GSM防火防盗系统
    名称型号数量
    单片机STC89C521
    IC座DIP401
    万能板9*15cm1
    晶振11.0592M1
    电解电容10uF1
    电解电容1000uf1
    瓷片电容22pF2
    电阻10K3
    电阻1K4
    电阻2K1
    LED红5MM1
    LED绿5MM1
    蜂鸣器有源1
    三极管S90121
    按键5
    显示屏LCD16021
    排针16P1
    排母16P1
    人体红外模块HC-SR5011
    排母3P1
    温度传感器DS18B201
    烟雾传感器MQ-21
    模数转换器ADC08321
    IC座8P1
    GSM模块SIM800c1
    电源座5MM1
    电源线5V2A1
    自锁开关1
    继电器1
    小水泵1
    导线若干
    焊锡丝若干

    【源程序】

    1. #include
    2. #include
    3. #include "sim800.h"
    4. #define uchar unsigned char
    5. #define uint unsigned int
    6. #define K_MG_MV 120/66
    7. typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
    8. typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
    9. unsigned char aa,bb,cc;
    10. /********测试GSM是否启动**********/
    11. int test_boot;
    12. /********测试GSM是否注册网络**********/
    13. int test_net_register;
    14. /********GSM串口接收数据缓存**********/
    15. unsigned char idata GSM_receive[60];
    16. /********GSM串口接收计数器**********/
    17. unsigned char GSMDATA_count;
    18. unsigned char *content_fire = "Please note that! There are fire,no thief!\r\n"; //请注意!无盗贼,有火灾!
    19. unsigned char *content_thief = "Please note that! There are thieves, no fire!\r\n"; //请注意!有盗贼,无火灾!
    20. unsigned char *content_fire_thief = "Please note that! There are thieves, there are fires!\r\n"; //请注意!有盗贼,有火灾!
    21. unsigned char str_yw[12];//烟雾值
    22. unsigned char T_baojing = 30; //温度报警值
    23. unsigned int C_baojing = 200; //烟雾浓度报警值
    24. unsigned char T_buff[3]; //温度报警值显示缓存
    25. unsigned char C_buff[4]; //烟雾报警值显示缓存
    26. bit sdbj_flag=0; //手动报警标志
    27. bit sf_flag=0; //设防标志
    28. bit sf_flag_buff=0; //布放开始计时标志
    29. unsigned char moshi=0;//设置模式
    30. unsigned char data1; //AD转换中间值
    31. long Value;// AD转换结果值
    32. /*******引脚定义********************/
    33. sbit Infra = P3^2; // 人体红外模块
    34. sbit bADcs=P3^4; // 模数转换器引脚定义
    35. sbit bADda=P3^5; // 模数转换器引脚定义
    36. sbit bADcl=P3^6; // 模数转换器引脚定义
    37. sbit baojing=P3^7; //手动报警
    38. sbit BUZZER = P2^0; // LED蜂鸣器
    39. sbit shuibeng = P2^1; //水泵
    40. sbit fengshan = P2^2; //风扇
    41. sbit sf_led = P1^3;// 设防指示灯
    42. sbit shefang= P1^4;// 设防按键
    43. sbit shezhi = P1^5; // 设置
    44. sbit jia = P1^6; // 加
    45. sbit jian = P1^7; // 减
    46. unsigned char IntToString(unsigned char *str, int dat);
    47. extern bit Start18B20();
    48. extern bit Get18B20Temp(int *temp); // ;;;;;、‘
    49. extern void InitLcd1602();
    50. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
    51. float intT, decT; //温度值的整数和小数部分
    52. /*------------------------------------------------
    53. 定时器初始化子程序
    54. ------------------------------------------------*/
    55. void Init_Timer0(void)
    56. {
    57. TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    58. TH0=(65536-1000)/256; //重新赋值 1ms
    59. TL0=(65536-1000)%256;
    60. EA=1; //总中断打开
    61. ET0=1; //定时器中断打开
    62. TR0=1; //定时器开关打开
    63. PT0=1; //优先级打开
    64. }
    65. long kssj() //开始收集
    66. {
    67. unsigned char i;
    68. bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.
    69. bADcl=0;
    70. bADda=1;
    71. bADcl=1;
    72. bADcl=0;//i down
    73. bADda=1;
    74. bADcl=1;
    75. bADcl=0; // 2 down
    76. bADda=0;
    77. bADcl=1;
    78. bADcl=0; // 3 down
    79. bADda=1;
    80. bADcl=1;
    81. bADcl=0; // 4 down
    82. for(i=8;i>0;i--)
    83. {
    84. data1<<=1;
    85. bADcl=0;
    86. bADcl=1;
    87. if(bADda==1) data1|=0x01;
    88. bADda=1;
    89. }
    90. bADcs=1;
    91. Value=data1*1.0/256*500;
    92. Value=Value*K_MG_MV;
    93. Value=Value-5;
    94. if(Value<0)Value=0;
    95. return Value;
    96. }
    97. void Key_set_scan()
    98. {
    99. if(baojing==0)
    100. {
    101. Delay_Ms(10);
    102. if(baojing==0)
    103. {
    104. while(!baojing);
    105. sdbj_flag =~sdbj_flag;
    106. }
    107. }
    108. if(shezhi==0)
    109. {
    110. Delay_Ms(10);
    111. if(shezhi==0)
    112. {
    113. while(!shezhi);
    114. InitLcd1602(); //初始化液晶
    115. moshi++;
    116. if(moshi >= 3)moshi = 0;
    117. if(moshi == 0)
    118. {
    119. /*1234567890123456*/
    120. LcdShowStr(0,0,"T: C S: PPM");
    121. LcdShowStr(0,1," ");
    122. }
    123. else if(moshi == 1)
    124. {
    125. LcdShowStr(0,0," ");
    126. LcdShowStr(0, 1,"Set_T: C");
    127. }
    128. else if(moshi == 2)
    129. {
    130. LcdShowStr(0,0," ");
    131. LcdShowStr(0, 1,"Set_C: PPM");
    132. }
    133. }
    134. }
    135. if(jia==0)
    136. {
    137. Delay_Ms(10);
    138. if(jia==0)
    139. {
    140. while(!jia);
    141. if(moshi==1)
    142. {
    143. T_baojing++ ;
    144. if( T_baojing>=99 )T_baojing =99;
    145. }
    146. if(moshi==2)
    147. {
    148. C_baojing++ ;
    149. if( C_baojing>=999 )C_baojing =999;
    150. }
    151. }
    152. }
    153. if(jian == 0)
    154. {
    155. Delay_Ms(10);
    156. if(jian == 0)
    157. {
    158. while(!jian);
    159. if(moshi==1)
    160. {
    161. T_baojing-- ;
    162. if( T_baojing<=0 )T_baojing =0;
    163. }
    164. if(moshi==2)
    165. {
    166. C_baojing-- ;
    167. if( C_baojing<=0 )C_baojing =0;
    168. }
    169. }
    170. }
    171. if(shefang == 0)
    172. {
    173. Delay_Ms(10);
    174. if(shefang == 0)
    175. {
    176. while(!shefang);
    177. if(sf_flag == 0)
    178. {
    179. sf_flag_buff = 1;
    180. sf_led = 0;
    181. }
    182. else if(sf_flag == 1)
    183. {
    184. sf_flag = 0;
    185. sf_led = 1;
    186. BUZZER = 1;
    187. }
    188. }
    189. }
    190. }

    本文介绍了在设计的过程的关键点,供大家参考学习,如果有错误或者不明白的可以直接私信作者,或者添加微信biyezhan007。

    其他资料

    【原理介绍】

            MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。封装好的气敏元件有6只针状管脚,其中4个用于信号取出,2个用于提供加热电流。基本电路如图。

    【参考文献】

    [1]唐文彦. 传感器. 哈尔滨工业大学出版社, 2007. 15~16

    [2]伊念东. 单片机基础实用教程. 中国地质大学出版社, 2005

    [3]赵茂泰. 智能仪器原理及应用. 电子工业出版社,1999. 43~46

    [4]吴政江. 单片机控制红外线防盗报警器. 锦州师范学院学报, 2001, 27(12): 55~59

    [5]宋文绪. 传感器与检测技术. 高等教育出版社, 2004

    [6]李全利. 单片机原理及接口技术. 北京航空航天大学出版社, 2004. 75~78

    [7]薛均义. 张彦斌. MCS-51系列单片微型计算机及其应用. 西安交通大学出版社, 2005

    [8]康华光. 电子技术基础(模拟部分). 高等教育出版社, 2004

    [10]徐爱钧, 彭秀华. 单片机高级语言C51应用程序设计. 北京: 北京航空航天大学出版社, 2006. 97~99

    [11]邓凯. 智能化住宅安防系统的应用. 冶金矿山设计与建设, 2000. 98~99

    [12]赵晶. Prote199高级应用.北京: 人民邮电出版社, 2000. 101~103

    [13]王振红,李洋.基于DTMF信号收发芯片MT8880的直接接口设计[M],电子与自动化,1999,5(2):23-56.

    [14]刘波,韩宪中.MT8880在机房监控系统中的应用[J],河北省科学院学报,1999, 16(4):53-56.

    [15]辛德强.X25045与8051的接口技术[J],电子技术应用,2002,4(12):20-22.

    [16]石波,陈子春.用单片机实现语音提示、报警系统[J],煤矿自动化,2001,6 (5):43-44.

    [17]潘桂忠,丁逸,纪兰花.微电脑自动拨号防盗报警器的设计[J],现代电于技术,2003,8 ( 1 ):67-69.

    [18]李桂桦.家庭保安报警系统的设计[J],计算机应用,2000,6 (9):31-33.

     未经作者允许,不得抄袭转载,转载或有问题请私信或微信作者。

  • 相关阅读:
    Activiti进阶
    突破卡脖子技术 AVS3标准在世界杯实现移动端规模化商用
    c++中的智能指针详解
    大语言模型之八-提示工程(Prompt engineer)
    JVM垃圾回收总结
    【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
    移动端增加搜索框打开参照、扫码调用摄像头功能
    [附源码]计算机毕业设计springboot疫苗及注射管理系统
    139 单词拆分 140 单词拆分II
    数学基础从高一开始1、集合的概念
  • 原文地址:https://blog.csdn.net/u013253075/article/details/126088183