标题基于_STM32_的厨房燃气-烟雾复合监测与应急系统文档介绍1 绪论1.1 研究背景与意义伴随着我国城镇化进程的不断加快以及居民生活水平的持续提高厨房作为家庭生活中不可缺少的重要空间其安全问题也越来越引起人们的重视。厨房是家庭里燃气使用最频繁的场所也是发生火灾事故的高发地。近几年来由于燃气泄漏造成的爆炸事故、由于烟雾引起的火灾事故屡见不鲜给人民群众的生命财产安全造成了重大损失。传统的厨房安全监测方式大多为单一传感器只能检测燃气或者烟雾中的一种险情存在监测盲区大、反应慢、误报率高等问题不能满足现代家庭对于安全防护智能化的需求。因此开发出一种可以同时检测燃气和烟雾浓度具有智能判断、自动报警功能的复合型监测系统有着十分重要的现实意义。本课题以STM32嵌入式微控制器为基础研制出一套具有燃气和烟雾两种气体检测功能的、带声光报警器、自动应急控制、远程通信的厨房安全监测系统。该系统可以对厨房内燃气浓度、烟雾浓度和环境温度进行实时的检测当检测到有异常的时候会自动启动排风扇降低浓度、关闭燃气阀门、开启水泵灭火然后用无线网络将报警信息发送给用户的手机。该系统的探究意义有如下三个主要方面第一可以改善家庭安全防范水平减小厨房事故发生次数第二促使智能家居技术发展给家庭安防系统赋予可行的技术方案第三经由系统的设计和创建把嵌入式系统规划传感器技术软件编程这些专业知识融合起来培育学生的工程实践活动以及创新思维。本系统适合用在家庭厨房、餐饮后厨、学生宿舍等处有较好的社会效益及商业前景。1.2 国内外研究现状1.2.1 国外研究现状国外对于智能家居安防领域相关研究开始较早技术比较成熟美国、日本、德国等国家在气体传感器技术和嵌入式系统的使用上具有领先地位并且在无线通信技术方面也占有一定的比重。国外的学者就厨房安全监测做了很多工作主要从燃气泄漏检测、火灾预警和通风控制三个方面进行研究。有学者对燃气灶厨房通风控制问题给出了操作指导方案认为多传感器融合对厨房安全监测来说十分重要认为单个传感器很难对复杂的环境进行安全检测只有多个传感器配合使用才能提高检测的准确性、可靠性。另外有学者对开放式厨房和分隔式厨房的燃气泄漏爆炸危险系数做了量化评价给出了以风险分析为基础的预警办法利用对各种厨房结构燃气扩散特点的研究结果给燃气报警阈值的确定给予了理论支撑。还有些学者就开放式厨房燃气泄漏爆炸事故的定量风险评价和安全对策做了研究从事故发生概率、事故后果两个方面对厨房燃气的安全进行分析。国外已经有部分商用产品比如智能烟雾报警器进入市场具有多个传感器融合以及远程报警的功能可以在一定程度上保证家庭的安全。但是它们价格都比较贵不能被普通家庭所普及推广。现有的产品对于燃气和烟雾的复合检测还存在改进之处在区分两种险情类型、防止误报上还需做进一步的改善。1.2.2 国内研究现状在国内近些年来的厨房安全监测方面的研究也有了较大的发展伴随着嵌入式技术以及物联网技术的迅速发展越来越多的学者、企业开始对智能厨房安全系统进行研究。有学者研制了基于ST STM32和WiFi技术的厨房环境监测系统可以对温湿度、烟雾、燃气等众多参数进行实时检测并发送远程警报可以将所收集到的数据以无线形式传送到云端用户可以通过手机APP随时查看厨房环境状况。另外有学者设计出基于STM32的厨房燃气安防监测报警系统具有本地声光报警和自动切断燃气阀门的功能在检测到燃气泄漏的时候迅速作出反应有效地防止事故的蔓延。另有学者对STM32做了一款远程厨房安全系统的开发工作并且实现了GSM通信模块功能在报警的时候可以给用户发出短信提醒很好地解决因无线网络信号不好而造成的信息传递问题。有学者设计了有害气体检测报警系统利用多传感器融合的方式提高检测的准确性用多个传感器的数据相互核验的方式来降低误报率。另外有学者以云平台为依托、以STM32为基础设计出了智能家居环境监测系统并具备了数据远程上传以及手机APP监控的功能用户可以随时随地了解到家中所发生的情况。这些研究结果给本课题的设计给予重要的技术参照和理论支持。综合国内外的研究成果可以发现在厨房安全监测系统上我国已形成比较完整的系统技术体系但系统可靠、抗干扰、应急控制智能化等还存在提高的空间。1.3 主要研究内容本课题主要的研究内容有系统方案设计、硬件电路设计、软件程序编写和系统测试四个部分。就系统方案设计而言首先要分析厨房安全监测的实际需求确定系统应该具有的燃气检测、烟雾检测、温度检测、火焰检测、声光报警、自动排风、阀门控制、水泵灭火和远程通信等全部功能。在此基础上确定以STM32F103C8T6单片机为核心控制器的系统总体结构完成各个功能模块的方案选择和任务分配保证系统可以高效地协调地完成各种监测和控制任务。从硬件电路设计上来说主要完成了STM32最小系统的时钟电路、复位电路、电源电路。同时对燃气传感器和烟雾传感器的信号调理电路进行设计使传感器输出的模拟信号可以稳定、可靠地送入单片机进行模数转换。另外还要设计继电器驱动电路来控制排风扇、水泵的开启和关闭设计舵机控制电路来控制燃气阀门的开闭设计蜂鸣器驱动电路来发出声音和光效的报警设计OLED显示电路用来显示相关信息设计按键电路用来进行参数的设置设计ESP8266无线通信电路来进行远程报警。软件程序开发时需要写传感器数据采集与滤波算法、阈值判断与应急控制逻辑、OLED显示驱动、按键扫描程序和Wi-Fi模块通信程序。最后搭建实验环境做单元测试和整机联调保证数据采集的准确性、报警响应的及时性、应急动作的可靠性、远程通信的有效性使系统可以稳定可靠地工作。2 系统总体方案设计2.1 系统功能需求分析根据厨房安全监测的实际情况本系统要具备如下功能。首先就是多参数实时监测系统可以不断采集厨房内燃气浓度、烟雾浓度、环境温度、明火等情况这些参数都是判定厨房安全状况的依据。燃气泄漏是厨房最常见的一种安全隐患一旦出现泄漏并且没有被及时发现很容易引起爆炸事故烟雾浓度的上升可能是火灾来临的前兆环境温度的明显上升也是火灾发生的前兆明火直接探测可以发出火灾初期报警。因此系统要同时监测这四种参数来实现厨房安全状况的全方位感知。其次就是分级报警、应急处理功能系统要依据检测出来的参数值来判定险情的严重程度再做出相应处理。当检测出燃气浓度或者烟雾浓度达到一级警戒阈值的时候系统应该发出间歇性的蜂鸣报警提示用户注意当浓度大于二级报警阈值的时候系统应该发出连续的声光报警并自动启动排风扇进行通风换气降低有害气体浓度。当同时检测到明火的时候系统应该立即开启水泵进行灭火控制舵机关闭燃气阀门切断气源防止火势扩大。另外系统应该具有远程报警的功能当出现险情的时候可以通过Wi-Fi模块向用户手机发送报警信息使用户无论是否在家中都能及时得到报警信息并采取相应的措施。最后的人机交互功能就是使用OLED屏幕实时显示各种监测指标以及系统的运行情况并且用户可以手动设定报警阈值以及控制排风扇等功能从而达到灵活的配置。2.2 系统总体架构设计本系统总体结构采用模块化的设计思想把整个系统分成传感器采集模块、主控模块、输出控制模块、人机交互模块、无线通信模块五个部分。传感器采集模块可以获取厨房环境信息即MQ-4气体传感器来检测天然气、甲烷的浓度、MQ-2烟雾传感器来检测烟雾的浓度、DS18B20数字温度传感器来检测环境温度、火焰传感器来检测是否有明火。传感器把物理量转换成电信号然后以模拟量或者数字量的形式传递给主控模块进行处理。传感器采集模块选择的目的是为了让厨房环境更加适应。因此选择了具有较强的抗干扰能力、响应速度快、稳定性好等特点的传感器产品。主控模块采用的是STM32F103C8T6单片机作为主要处理器该单片机使用的是ARM Cortex-M3内核工作频率可以达到72MHz存储容量为64KB片内的RAM有20KB片内包含有12位的ADC模数转换电路以及多通信接口完全可以满足本系统数据处理以及控制的要求。主控模块负责把传感器采集模块传来的信号做模数转换以及数据处理然后依据事先设定的算法来判定当下安全情况并据此下达应急指令到输出模块。输出控制模块由蜂鸣器发出声音光报警、继电器控制排风扇水泵启停、舵机控制燃气阀门开关。人机交互模块由OLED显示屏实时显示各项监测参数、系统状态3个独立按键做参数设置、手动控制。无线通信模块使用ESP8266 Wi-Fi模块负责把报警信息经由无线网络传送到用户的手机上从而达到远程监控的效果。各个模块之间依靠合理的接口来实现协调工作的从而构成一个完整的厨房安全监测和应急处理系统。图2.1 系统总体架构图2.3 主要器件选型本系统主要根据性能、成本、功耗、开发资源等条件最后确定选用STM32F103C8T6单片机。该单片机使用的是ARM Cortex-M3内核工作频率可达72MHz有64KB的Flash存储空间和20KB的SRAM在片内还集成有2个12位ADC模数转换器、多个16位定时器等模块。STM32的运算速度比传统的51系列单片机要高很多并且它拥有更多的外设资源可以满足本系统对于多个传感器信号采集以及实时控制的要求。同时stm32系列单片机资料齐全开发环境好编程成本低适合系统开发调试。该芯片使用的是LQFP48封装共有48个引脚其中可利用的I/O口有39个可以满足本系统各个功能模块之间的连接。在传感器的选择上根据检测对象的不同选用不同的传感器。燃气检测用MQ-4气体传感器该传感器对甲烷、天然气等可燃气体有较高的灵敏度检测范围广响应快工作电压为5V输出为模拟电压信号便于单片机进行模数转换。烟雾检测采用MQ-2烟雾传感器MQ-2烟雾传感器能检测液化气、丙烷、氢气、烟雾等多种气体稳定性好使用寿命长。温度检测使用DS18B20数字温度传感器该传感器是单总线通信方式只需要一个I/O口就能完成数据的读取体积小、精度高、抗干扰性强等特点得到体现测温范围为-55℃到125℃完全能满足厨房环境温度监测的要求。火焰检测使用的是红外接收式火焰传感器模块它能检测760nm到1100nm范围内的红外光对于火焰的光谱很敏感响应时间小于2微秒直接和单片机I/O口相连。在无线通信模块的选择上本文所用到的无线通信模块为ESP8266 Wi-Fi模块此模块自带串口通信功能并内建TCP/IP协议栈可以支持AP、STA、APSTA三种模式通过AT命令进行配置体积小巧、能耗低、价格便宜适合做远程报警系统使用。3系统硬件电路设计3.1 硬件总体设计本系统硬件电路设计以模块化、可靠性、抗干扰性三大原则为指导将整个系统分成单片机最小系统、传感器检测电路、输出控制电路、人机交互电路、无线通信电路五个部分。系统以STM32F103C8T6单片机作为主要的控制单元各个功能模块经由各自的接口同STM32F103C8T6单片机相连从而构建起一个整体的硬件平台。单片机最小系统是单片机正常工作必须具备的条件包括电源电路、时钟电路和复位电路其内部结构主要包括微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器计数器、中断系统和特殊功能寄存器等它们用片内单一总线连接在一起。在硬件电路的设计过程中考虑到厨房环境的特点在传感器信号输入端加装了滤波电路来抑制干扰在输出控制端加上了隔离保护装置来防止反向电动势损坏单片机保证整个系统的长期稳定可靠。整个硬件系统结构紧凑、功能齐全给软件开发提供了一个可靠的硬件平台。以上就是单片机最小系统的简单结构。图3.1 单片机最小系统框STM32F103C8T6单片机是本系统的核心控制器件该单片机是一款低电压、高性能的微处理器基于ARM Cortex-M3内核设计工作频率可达72MHz具有64KB的Flash存储器和20KB的SRAM。该芯片用LQFP48封装共有48个引脚可用的I/O口有39个工作电压范围是2到3.6V。该芯片集成有2个12位ADC模数转换器、多个16位定时器、USART、I2C、SPI等多种通信接口等方便传感器信号的采集以及外设的控制。stm32f103c8t6比传统的51系列单片机速度要快得多外设资源也更充足功耗小得多可以满足本系统的多路传感器信号采集和实时控制的要求。该芯片支持ST-LINK以及JTAG调试下载有利于程序的开发和调试。图3.2 STM32F103C8T6实物图3.2 传感器检测电路设计温度检测属于厨房安全监测的一部分本系统使用DS18B20数字温度传感器对环境温度进行采集。DS18B20是美国达拉斯半导体公司研制出的单总线技术数字温度传感器它把半导体温敏器件、A/D转换器、存储器等集成在一个很小的集成电路芯片上。该传感器使用单总线通信方式只需要一根数据线就可以和单片机完成双向通信占用I/O资源少体积小、精度高、抗干扰能力强等特点测温范围是-55℃到125℃可以满足厨房环境温度监测的要求。传感器输出信号直接连接到单片机的引脚上用10K上拉电阻实现电气隔离和防干扰的效果。相比K型铠装热电偶、铂铑热电偶等昂贵、使用复杂的温度传感器来说DS18B20性价比高、使用方便。图3.3 温度传感器电路火焰检测电路可以检测厨房有无明火该系统使用的是基于红外接收的火焰传感器模块。火焰传感器可以检测760纳米到1100纳米的热源在火焰光谱上具有较高的灵敏度火焰探测角为45度左右。电路中用LM393双电压比较器对火焰传感器输出的信号进行处理LM393是低电压双压比较器工作电压2~36V通过比较电压来获得较宽的电压范围区间精度高也可以用来产生波形和电路变换。当检测到火焰的时候火焰传感器导通比较器输出低电平指示灯亮起来没有火焰的时候传感器不导通上拉电阻使其输出高电平指示灯熄灭。本模块具有信号输出指示灯、灵敏度可调、响应速度快等特性输出信号可以直接连接到单片机的IO口进行处理。图3.4 火焰检测电路3.3 输出控制电路设计继电器控制电路起到自动应急的作用即火灾或者险情发生的时候控制继电器闭合驱动水泵灭火或者启动排风扇通风。继电器属于一种电控制器件它同控制系统及被控系统之间存在互动关系广泛应用于自动化控制电路当中依靠小电流来操控大电流运行发挥着自动调节、安全防护、转换电路等作用。电磁继电器是由铁芯、线圈、衔铁、触点簧片等组成当线圈两端加上电压时线圈中流过电流产生电磁效应衔铁吸合带动触点动作实现电路的导通和切断。本系统中的继电器用来控制水泵、排风扇的启动与停止在检测到险情的时候单片机发出控制信号使继电器吸合给相应的设备提供电源。为了防止继电器断开后线圈产生反向电动势损坏驱动三极管在继电器线圈两端并联一个续流二极管给反向电流提供泄放通道保护电路的安全运行。图3.5 继电器控制电路蜂鸣器报警电路是用以在检测到险情的时候发出声音警报的以引起用户的注意。当燃气浓度超标的或者发生火情的时候单片机控制蜂鸣器发出报警提示音。声音频谱一般在几十至几千赫兹之间通过程序控制单片机I/O口的高低电平变化可产生一定频率的矩形波使喇叭发声。本系统用有源蜂鸣器它内部已经有振荡源只需要通上直流电压就能发出固定的频率声音灵敏度不小于75dB。由于单片机I/O口的驱动能力有限用NPN三极管S8050来驱动基极用1K电阻限流到单片机I/O口三极管本身有放大电流的作用。单片机输出高电平时三极管导通蜂鸣器通电发声输出低电平时三极管截止蜂鸣器停止发声电路设计简单可靠。图3.6 蜂鸣器报警电路3.4 人机交互电路设计液晶显示电路用来实时显示系统监测到的各项参数以及运行情况有利于用户及时掌握厨房安全状况。本系统使用OLED液晶显示屏常与单片机配合使用可以显示大量数据和文字信息显示位数较多外观好、清晰度高、程序编写简单。OLED是有机发光显示器是一种新型发光和显示器件在阳极和阴极之间夹一层或多层有机薄膜形成的稳定的发光器件当有电流通过时有机材料就会发光。本系统所用到的OLED模块为128列×64行点阵的单色图形显示模块采用了SOLOMEN SSD1306 OLED驱动器接口电路简单使用方便模块功耗大约为90mW。图中P5是4个孔的排针为OLED液晶显示屏用显示屏的SCL引脚接单片机的B6引脚传送串行时钟数据SDA引脚接单片机的B7引脚传送串行数据通过I2C总线完成信息的传输实现显示。图3.7 液晶显示电路按键设置电路用作用户设定报警参数以及手动控制设备的接口。本系统设有三个独立按键分别是参数增加键、参数减小键和手动排风控制键。独立式按键是直接用I/O口线构成的单个按键电路每个按键都使用一根I/O口线各根I/O口线之间不会互相影响。按键输入为低电平有效上拉电阻使按键断开时I/O口线有确定的高电平由于STM32单片机P1口内部接有上拉电阻所以不用再外接上拉电阻。按键被按下时I/O口和地接通电平被拉低单片机通过检测电平的变化来识别按键的操作。由于机械按键在按下和释放的时候会有抖动因此采用软件延时的方式消除抖动在检测到电平发生变化之后再进行一次确认。三个按键分别起着不同的作用用户可以按任意一个按键来改变系统报警的阈值或者启动应急设备。图3.8 按键设置电路3.5 无线通信与电源电路设计ESP8266无线通信电路用于系统远程报警当检测到天然气超量或者有火灾发生的时候STM32单片机就会使用Wi-Fi模块把报警信息发送到用户的手机上。ESP8266模块是超低功耗的UART-WiFi透传模块体积小、价格低、通信距离长、发送数据快被广泛地应用在无线通信设备中。该模块支持AP、STA、APSTA三种工作模式用AT指令简洁高效地完成配置内部使用LWIP协议栈功能强大。模块的工作电压为3.3V和STM32单片机电平相兼容可以直接连接而不需要电平转换。图中的2号、4号和8号引脚接地1号引脚接单片机的A10引脚5号引脚接单片机的A9引脚用串口同单片机交换数据。系统上电以后单片机通过串口向ESP8266发出AT命令来配置模块与网络的连接当检测到险情时把报警信息发送到用户的手机上。图3.9 ESP8266无线通信MQ4气体检测电路是用来检测厨房天然气、甲烷等可燃气体浓度的。MQ-4天然气传感器为二氧化锡半导体气敏材料为表面离子式N型半导体适合于家用气体泄漏报警器、工业用可燃气体报警器和便携式气体检测仪器。传感器在200到300摄氏度时二氧化锡会吸附空气中的氧形成氧的负离子吸附使得半导体中的电子密度变小电阻值增大。当和可燃气体接触的时候晶粒间的势垒会受到不同浓度气体的影响而发生变化造成表面导电率改变气体浓度越高导电率越低输出电阻越小输出的模拟信号就越大。该传感器有信号输出指示、双路信号输出、对甲烷气体和天然气有较好的灵敏度、长期使用寿命、可靠的稳定性、快速的响应恢复等特点。模拟量输出为0到5V的电压浓度越大电压越高输出信号经过单片机内部AD模数转换之后处理。图3.10 MQ-4气体检测电源电路给整个系统提供稳定的输出电压。单片机电源为直流5V供电电源模块由3脚电源座、6脚电源开关组成。电源座子用来连接外部电源插头电源开关用来控制整个单片机电路的通断。电源座子的2口引脚接地3口引脚只起固定作用1口引脚接到电源开关的3口引脚上。电源开关的1、3口引脚和4、6口引脚的作用一样都是用来输出电源正极电源开关的2、5口引脚为单片机的接地引脚通过选择合适的引脚可以使用。图3.11 电源电路本次设计中各个传感器和无线传输芯片的电压都在5V之内因此5V电源可以满足系统的供电要求。若需要12V电压的传感器那么就可以采用升压模块将5V电压升高到更高的一级电压进行供电。PCB板图是整个系统硬件电路的整体布局图也是走线图。图3.12 PCB板图4系统软件设计4.1 软件开发环境本系统软件使用的是Keil MDK集成开发环境该工具是目前唯一得到ARM公司官方支持的对Cortex-M系列处理器进行嵌入式软件开发的工具。Keil MDK是集成了编译器、调试器、仿真器、代码编辑器为一体的开发工具。此软件可以实现C语言和汇编语言混合编程功能强大自带丰富的库函数以及直观易懂的用户界面大大提高了程序开发的速度。本系统使用Keil MDK 5.0及以上版本配合ST-Link下载调试器可以进行在线程序下载、单步调试、断点设置、变量监视等操作大大方便了程序调试以及错误定位。本系统在软件开发时大量地使用到了ST公司的STM32标准外设库。该外设库封装了STM32各个功能模块的寄存器操作以函数接口的形式提供给开发者使用从而降低底层编程的复杂性。开发者不需要查阅繁琐的寄存器手册只需要调用相应的库函数就可以完成对GPIO、ADC、定时器、USART等外设的配置和操作。标准外设库使用可以提高开发速度也可以使程序更易阅读和移植。本系统软件设计使用模块化编程思想把不同的功能封装成独立的模块各个模块之间用清楚的接口相互交流利于程序的调试、测试以及维护。主程序主要是对各个功能模块的工作流程进行协调按照传感器采集到的数据来完成控制。4.2 系统主程序流程系统主程序属于整个软件的主要控制部分它对各个功能模块的工作进程以及时间顺序实行协调掌控。主程序采用顺序执行和中断响应结合的方式在保证数据采集实时性的同时也考虑到了系统的能耗问题。系统上电后主程序先做初始化工作即单片机时钟初始化、GPIO引脚配置、ADC模数转换器初始化、定时器初始化、串口初始化、I2C总线初始化、OLED显示屏初始化。完成以上初始化工作之后系统就进入了主循环不断地重复执行传感器数据采集、数据处理、阈值判断、显示刷新、通信检查等任务。为提高系统的响应速度按键扫描、串口数据接收等功能采用中断方式实现按键按下或者无线数据接收完毕之后系统就停止主循环去处理相应的事件。主程序完成初始化之后会显示系统启动成功的提示信息然后就进入到一个不断地读取各个传感器数据的循环当中。每次循环中程序先读燃气浓度、烟雾浓度的模拟电压值用单总线读取DS18B20的温度值用I/O口检测火焰传感器的电平状态。程序得到原始数据之后对其进行数字滤波来消除偶然的噪声干扰接着利用事先标定过的转换公式求出各个参数的准确值。接着是阈值判断把计算得到的浓度值同用户设定的报警阈值做比较大于等于阈值就按超标类型、严重程度做出相应报警、控制操作。最后刷新OLED显示屏的数据用Wi-Fi模块检查有无远程控制指令到达全部主循环使用非阻塞方式不等某个操作完成后就进行下一个任务的处理。图4.1 主程序流程图4.3 传感器数据采集程序传感器数据采集程序主要是对厨房环境各项参数进行获取把物理量转化成可以被后端处理的数字量。对气体传感器输出的模拟电压信号用STM32片内12位ADC模块进行模数转换。ADC采集使用连续转换模式为了保证采集到的数据更加稳定程序对于每一个采样通道连续采样多次数据然后使用中位值平均滤波算法处理即将最大值、最小值去掉剩下的求平均值从而达到抑制偶然性干扰和周期性噪声的效果。ADC的参考电压是3.3V通过计算可得输入模拟电压值然后根据传感器输出电压与气体浓度的标定关系曲线得到燃气浓度和烟雾浓度的数值。为了保证浓度计算的准确性程序在正式使用前做了标定工作在洁净空气中输入传感器输出值作为基准零点。对DS18B20温度传感器数据的读取程序严格按照单总线协议要求按时序控制信号。读取温度时需要经过四个步骤先发出复位脉冲把总线拉低后释放等传感器发出现存在脉冲响应再跳过ROM命令直接对传感器操作然后发出温度转换命令开始温度测量最后发出读取暂存器命令连续读取16位温度数据。由于温度转换要经过一段时间所以程序在发出温度转换命令之后会有一段延时才读取数据。读回来的16位温度数据是以二进制补码的形式存在的其中高5位为符号位低11位是温度值将温度值乘以0.0625就可以得到实际温度值。火焰传感器数据读取比较简单只需要读取连接该传感器I/O口的电平状态低电平为检测到火焰高电平为未检测到火焰。图4.2 传感器采集流程图4.4 显示与按键程序显示和按键程序完成系统的人机交互功能即对OLED显示屏的参数显示以及按键输入的识别处理。OLED显示屏用SSD1306驱动芯片做I2C总线和单片机通信。显示程序主要是初始化、清屏、显示字符、显示数字等基本功能。初始化函数按照SSD1306芯片要求依次发送显示关闭、设置显示时钟、设置复用率、设置显示偏移、设置起始行、设置对比度、设置电荷泵、设置寻址方式、设置段重定向、设置行扫描方向、开启显示等命令来完成显示屏的初始化配置。显示字符函数要配合字库使用程序把需要显示的文字以点阵的形式存放在数组里调用显示函数时会把点阵数据一行行地写入到显示存储器中从而在屏幕上显示出现需要显示的文字、数字等。利用OLED显示屏可以方便、直观地了解到目前厨房安全状态。图4.3 显示程序流程图按键程序用中断方式检测按键的状态当按键被按下产生电平变化的时候就会触发外部中断在中断服务程序中对按键进行处理。由于机械按键存在抖动现象因此使用软件延时的方法对机械按键进行消抖在检测到按键电平变化之后再延迟20毫秒再次读取电平状态若两次的检测结果一致则认为是按键有效。三个按键分别是参数增大键、参数减小键和手动排风键。在正常显示状态下用户可以按下按键进入参数设置模式在该模式下显示屏上会提示当前所要设置的阈值类型和当前的阈值数值用户根据需要按增加键或减少键改变数值再按确认键保存。手动排风键按下之后不论当前气体浓度是否超过阈值系统都会开启排风扇工作一段时间后停止。利用显示和按键程序的配合用户可以很容易地知道系统的工作状况也可以在需要的时候自由地改变系统的参数。图4.4 按键程序流程图4.5 报警与应急控制程序报警和应急控制程序是保证系统安全的重要手段可以按照传感器所检测到的险情类型、严重程度来执行相应的报警和应急处理。程序使用了分级报警的方式设置了预警和报警两种报警的阈值。当燃气浓度或者烟雾浓度大于预警阈值但是小于报警阈值的时候系统判断为一级预警状态这时蜂鸣器发出间隔的提示音提醒用户注意厨房环境有异常情况但是不会进行自动控制操作给用户自行处理提供机会。浓度继续上升超过报警阈值的时候系统就判定成二级报警状态这时蜂鸣器变成持续的长鸣声红色LED灯亮起程序把继电器吸合上启动排风扇进行强制通风换气尽快降低有害气体的浓度。分级处理方式一方面可以及时提醒用户另一方面可以防止一级报警启动设备造成不必要的能源浪费。图4.5 报警程序流程图当火焰传感器检测到有明火的时候系统就认为处于最高级的火警状态这时会立刻启动所有的应急措施。蜂鸣器发出急促的报警声红色LED快速闪动控制舵机转到设定的角度关闭燃气管道阀门断掉供气源防止火势扩大控制水泵继电器吸合启动水泵喷水灭火利用Wi-Fi模块把报警信息发给用户的手机上提示用户家中着火。为了防止误判在确认明火之前要进行多次检测以确认只有连续多次检测到火焰信号之后才认定为真正的火灾。另外程序还设置有互锁逻辑在灭火的过程中不会因为排风扇的运转而助燃火势即检测到有火焰时先开启水泵、关闭阀门排风扇此时停止工作。报警状态解除之后程序会自动将系统从报警状态中恢复但是阀门的关闭等操作必须由用户手动恢复以保证安全。图4.6 气体检测程序流程图4.6 无线通信程序无线通信程序主要对ESP8266 Wi-Fi模块和云平台之间的数据交换进行管理从而达到系统远程报警、远程控制的目的。本程序的主要作用是对ESP8266模块发送AT指令进行配置和数据传输。系统上电之后单片机就通过串口给ESP8266发送复位命令使模块回到初始状态。接着分别发送设置工作模式指令、连接Wi-Fi网络指令、设置单连接指令、建立TCP连接指令完成这些配置之后模块就可以进行数据传输。为保证系统可靠运行在程序设计上设置了断线重连的功能定时检测模块的运行状况网络中断的时候自动重连。该机制很好地解决了无线通信中由于网络波动造成的连接断开问题提高了远程报警的可靠性。图4.7 无线通信程序流程图5系统调试与功能验证5.1 调试环境搭建系统调试是硬件设计和软件设计完成后的一项重要工作其目的就是检验各个功能模块是否正常工作系统整体性能是否符合设计要求。调试环境的创建包含硬件平台搭建以及软件调试工具配置。硬件平台搭建时首先要进行所有的元器件焊接与安装在电路板上完成所有元器件的焊接与安装并检查焊接质量无虚焊、短路等现象。再用杜邦线或者排针把各个传感器模块、执行模块和主控电路板连接起来。最后进行系统供电观察电源指示灯是否正常亮起用万用表测量各个关键点的电压值保证所有的芯片工作电压正常。为了便于调试在专门的测试平台上固定各种传感器可以进行各种气体浓度的测试。软件调试工具配置PC机上安装Keil MDK开发环境和ST-Link驱动用USB接口把ST-Link下载调试器和计算机连接起来再把下载器的调试接口和电路板上的SWD接口连起来。在Keil MDK中创建工程文件将编写好的程序源代码添加到工程中配置芯片型号和调试器类型设置编译选项。配置完成后对程序进行编译查看是否有语法错误或者警告按照错误提示一一改正代码。编译通过后用ST-Link将程序下载到STM32单片机中下载成功后单片机会自动执行程序。Keil MDK还有在线调试功能在程序中可以设置断点、单步执行代码、实时查看变量的值和寄存器的状态对查找程序逻辑错误有很好的作用。5.2 模块功能测试模块功能测试是对系统各个模块进行独立验证保证每一个模块都能够按照设计的要求正常工作。传感器模块测试有气体传感器、温度传感器、火焰传感器等。气体传感器测试时把传感器放在洁净的空气中测出它的初始输出电压值再用打火机放气而不点火的方法产生少量的燃气靠近传感器看其输出电压是否明显上升。温度传感器测试时将传感器置于室温环境中读取温度值用手捏住传感器观察温度读数变化用冷敷法观察温度读数变化。火焰传感器测试时用打火机点火后靠近传感器观察传感器输出电平从高变低指示灯是否亮起。通过上述测试确认所有传感器都能正常响应。输出控制模块的测试有蜂鸣器、继电器、舵机三种功能。蜂鸣器测试时通过单片机I/O口输出高电平信号看有无声音产生改变输出电平的频率听蜂鸣器鸣叫的节奏是否变化。继电器测试时用I/O口输出高电平听到继电器吸合时的咔嗒声用万用表测量继电器常开触点的通断情况保证控制正常。舵机测试时用不同的占空比输出PWM信号来观察舵机转轴能否转到相应的角度上测试范围是否在0到180度之间。人机交互模块的测试有OLED显示屏、按键功能测试。在进行OLED显示屏测试的时候检查上电之后能否正常显示设定的字符、数字显示内容是否清楚完整。按键测试的时候按下每一个按键系统是否能做出正确的反应按键消抖处理是否有效。在对无线通信模块进行测试的时候查看ESP8266能否成功接入到WiFi网络之中并且能否正常地发出数据以及接受控制信号。图5-1 硬件实物测试图5.3 系统整体联调与验证在各个模块功能测试之后就要对系统做整体联调检验各个模块协同工作时的总体性能。在整体联调过程中模拟厨房各种可能产生的异常情况对系统综合反应进行测试。首先测试燃气泄漏报警功能在测试环境里把MQ-4气体传感器放在其中用打火机放气的方式来模拟燃气泄漏查看系统能否在规定的时间内察觉燃气浓度的上升当燃气浓度超过预警阈值的时候发出间歇性的报警当燃气浓度超出报警阈值时启动排风扇并且发出持续的报警。在测试时记下从浓度上升到系统反应所需要的时间检验系统响应时间是否符合要求。还对系统自复位做了测试即检测气体浓度降到安全值以后报警自动结束、排风扇自动延时关闭。接下来测试烟雾报警、排风功能用模拟的方式测试系统的烟雾检测及响应情况。最后测试火焰检测和应急灭火功能用打火机的火焰接近火焰传感器看系统是否可以快速检测到明火并立即启动水泵、关闭燃气阀门并发出最高的报警。对复合险情如燃气泄漏和明火时的应急处理能力也进行了测试即当系统检测到两者同时发生的时候是否可以优先处理火警而不是按照原来的优先次序去执行排风。最后用测试的方法来验证远程报警的功能在系统产生报警的时候检查手机收到的报警信息是否正确、准确。经由以上功能验证试验可知系统整体运行正常各项功能均能满足设计要求可以对厨房燃气泄漏、烟雾超标、火灾等险情做到有效的监测并及时作出反应。
