原创 51单片机做的家庭智能消防扑救系统(GSM通讯)

2023-4-27 19:58 663 7 7 分类: MCU/ 嵌入式
我是一个在校本科生,在实验室学习,前几周根据老师的意思设计一个家庭智能消防系统,需要完成的基本功能分为检测,GSM通讯电话短信报警,语音播报,水泵灭火等方面。虽然简单,但是其中确实也遇到了一些困难,所以把我这个方案的整个思路分享给大家,希望对大家有所帮助。同时也欢迎大神提出我的错误之处,给与我新的指导,感激不尽。PS:电路,程全部在压缩包里。芯片是STC89C52
智能报警扑救系统主要可以分为火灾隐患检测,火灾发生自动报警,火灾发生语音引导逃生,火灾发生自动施雨扑救灭火,这四个基本功能。其中第一项火灾隐患检测用到了三个传感器,温度传感器用于感应屋内不正常的热源起到警示作用,烟雾气体传感器用于感应液化气,天然气等易燃气体,当感应到屋内气体浓度到达设定的阈值时,蜂鸣器会起到警示作用。火焰传感器检测到周围有火焰出现时,即火灾已经初步发生,系统马上启动报警功能,向设定好的人发短信及拨打电话,并且警报声响,语音播报开始引导人们开始逃生,同时,由系统控制的水泵开始降雨扑火。由于火灾发生时,家庭电源一般自动断电,所以本套系统采用自给供电,可以避免火灾发生造成电路损坏无法工作的情况发生。

接下来说一下每个模块的简单情况,  
(1)温度传感器,用的是大众化的DS18B20芯片,我用的模块上只有三个接口,GND,VCC,DQ,DQ是数据传送接口,只需要连接到单片机上的一个普通的引脚上就可以。因为之前在测试温度的时候,只有模块没有看不到实际温度,所以我接了一个四位数码管来显示温度,我提供的程序只显示两位数,不精确到小数点后两位,实际上我并不需要那么精确的温度,而且这个模块说实话,你想要的很精确的话,最好别用这么廉价的。这个模块不难,说的就这么多。   
(2)烟雾气体传感器,我当时为了找那个可以检测烟雾的传感器在淘宝上找了好久,一搜索总是弹出来一大堆,MQ-2,MQ-5之类的传感器,之后我发现这类传感器根本不能检测到烟雾,只是检测可燃气体,后来找到离子烟雾传感元件,但是很可惜只是有个元件,我懒得焊电路,就没有用这个,现在用的是MQ-5,MQ-5传感器有四个口,GND,VCC,DO,AO。DO是数字输出,什么是数字输出呢,就是只输出0和1,连接到单片机上就可以判断成高低电平很方便,缺点是不够精确的控制,你可以调节它的精度来简单的判断,比如说你调节到中间,那么只有一它检测到气体浓度到达那个阈值后,DO就可以输出1报警什么的(之后自己加一个响应),AO是模拟输出,就是输出模拟值,这个值可以通过PCF8591芯片进行DA模数转换成具体的值,然后在程序里if这个值,来精确的控制,可以这样说,假如把精度区间分成100,那么手动调节精度旋钮只是粗略的判断,你们用数模转化值判断的话就很精确了,比如87?等等根据需要。   
(3)火焰传感器,是一个可以检测火焰的传感器,一般是用作机器人眼睛寻找判断热源的,它的用法和MQ-5极其极其的相似,在这里我就不赘述了,其他的描述大家可以百度百科。
(4)  语音播报模块,简单通俗的说,就是一个录音放音的模块,因为只是简单的项目,所以买了一个几块钱的可以录音10S的,可以手动操作,上面有可供选择的按键,录音键,播放键,同时也有两排引脚和两个跳线帽可以控制不同的播放模式,循环播放还是怎么的,同时由直通模式,可以做喊话器,说实话还挺好玩的,编程控制就是接到单片机上通过引脚控制。
(5)   水泵模块,这个小水泵也是淘宝上逛了好久才发现了,供电12V,想到火灾发生时,电都断了,怎么给他供电,所以就买了一个12V的可充电电池,同时用降压模块,可以把12V降到5V供单片机使用,这就已经解决了电源的问题。其次,因为水泵模块没法直接用单片机控制,所以用到了一个继电器模块,继电器模块的原理,相信高中都学过,而且网上一大推原理图,一头接单片机VCC,GND,io口,另一头接12V电池正,水泵负极。
(6)   GSM通信模块是有难度的,以前也没接触过,刚开始淘宝店家发的资料也啥都不是,只有一堆指令还有一个软件可以用,看的晕晕乎乎的,后来同样在论坛发现了一个我可以用的程序,检查之后发现还是不适合自己,所以只能自己辛苦的探索了,我用的是安可信A6的GSM通信模块,想参考的同学首先你得有个这样的板子不是,首先,你的确需要了解一堆指令,我这次项目用到的是打电话和发短信,发短信相关的指令有AT,AT+CMGF=1,AT+CSCS,AT+CMGS,电话相关的指令有AT+SNFS=0,ATD+86132222222222,因为这个是需要单片机的串口进行发送指令,GSM模块才会响应的,所以单纯的每次修改程序,下载测试,,肯定非常的麻烦,所以必须要用到串口助手软件,在电脑直接连接到模块,通过串口助手发送指令信息,测试功能,在经历N多次失败后,终于测试出了正确的指令正确的指令发送顺序
  1. while(i--)
  2. {
  3. if (sendCommand("AT\r\n", "", 500, 2) == Success);               
  4. delay_ms(500);               
  5. if (sendCommand("AT+CMGF=1\r\n", "", 500, 1) == Success);               
  6. delay_ms(500);               
  7. if (sendCommand("AT+CSCS=\"GSM\"\r\n", "", 500, 1) == Success);               
  8. delay_ms(500);               
  9. if (sendCommand("AT+CMGS=\"13592606142\"\r\n", "", 500, 1) == Success);               
  10. delay_ms(500);               
  11. if (sendCommand("Fire is coming!!!", "", 500, 1) == Success);               
  12. delay_ms(500);               
  13. if (sendCommand(send_buf, "", 500, 1) == Success);
  14. delay_ms(5000);
  15. }
  16.           /******************打电话****************************/
  17.         while(j--)
  18.         {
  19.                 if (sendCommand("AT\r\n", "", 500, 1) == Success);               
  20.                 delay_ms(500);
  21.                 if (sendCommand("AT+SNFS=0\r\n", "", 500, 1) == Success);               
  22.                 delay_ms(500);
  23.                 if (sendCommand("ATD+8613592606142\r\n", "", 500, 1) == Success);
  24.                 delay_ms(20000);
  25.                   

  26.                 while(1);
  27.      }
复制代码

作者: 小羡, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-4026945.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条