基于单片机危险气体远程检测报警系统设计

来源:初二 发布时间:2021-01-05 点击:

  目录 摘

 要 ........................................................ I Abstract ....................................................... II 绪

 言 ........................................................ 3 1 控制系统设计 .................................................. 5 1.1 系统方案设计 ............................................. 5 1.2 系统工作原理 ............................................. 5 2 硬件设计 ...................................................... 6 2.1 主电路 ................................................... 6 2.1.1 单片机最小系统 ...................................... 6 2.1.2 STM32F103 单片机 ..................................... 6 2.1.3 晶振电路 ............................................ 8 2.1.4 复位电路 ............................................ 8 2.2 按键控制电路 ............................................. 9 2.3 报警电路 ................................................ 10 2.4 LCD1602 液晶显示电路 ..................................... 10 2.5 ESP8266 模块电路 ......................................... 11 2.6 传感器模块电路 .......................................... 11 3

 软件设计 .................................................... 13 3.1 系统主程序设计 .......................................... 13 3.2 系统子程序设计 .......................................... 13 3.2.1 LCD1602 显示设计 ..................................... 13 3.2.2 ESP8266 无线通信设计 ................................. 13 3.2.3 按键子程序设计 ...................................... 15 3.2.4 气体浓度检测程序设计................................. 16 3.2.5 报警程序设计 ........................................ 16 结

 论 ....................................................... 17 参考文献 ....................................................... 18 附录 源程序清单 ................................................ 20

 致

 谢 ....................................................... 26

 本科论文

  摘

 要

 为了尽早发现和预防各类危险气体减少对人的危害,保护自己和个人或公共财产的安全,需要使用自动报警器对人进行预警。

 本文中作为危险气体检测系统的主要技术采用了传感器和单片机,该系统基于 STM32F103 单片机无线数据传输系统和通过气体传感器 MQ-4 对危险气体的浓度进行监测,并通过 AD 模数转换模块将模拟量转换为数字值,再发送给单片机,LCD1602 液晶显示屏显示当前检测到的气体浓度值,单片机通过 ESP8266 无线模块和手机进行传通讯将当前数据发送至手机上显示,通过按钮设置气体浓度报警上限数值,当气体浓度超过上限值时,启动蜂鸣器进行报警。实现了液晶显示危险气体的浓度和报警的功能,对气体检测报警系统的实现技术展开了较为深入地研究,为有害气体监测技术的实现提供了参考。

  关键词:气体监测;传感器;单片机;无线数据传输

 本科论文

  Abstract

 In order to find and prevent all kinds of dangerous gases as soon as possible to reduce the harm to people, protect themselves and personal or public property safety, it is necessary to use automatic alarm to warn people.

 The system is based on STM32F103 microcontroller wireless data transmission system and gas sensor MQ-4 to monitor the concentration of dangerous gases, and then send the analog quantity to digital value through AD digital-to-analog conversion module, then send to the microcontroller, LCD1602 LCD display to display the current detected gas concentration value, the microcontroller through ESP8266 wireless module and mobile phone transmission, send the current data to the mobile phone display, set the upper limit value of gas concentration alarm through the button, when the gas concentration exceeds the upper limit value, start the buzzer for alarm. The liquid crystal display function of hazardous gas concentration and alarm is realized, and the technology of gas detection and alarm system is studied in depth to provide reference for the realization of hazardous gas monitoring technology.

  Keywords: gas monitoring; the sensor; single chip microcomputer; wireless data transmission.

 本科论文

  绪

 言 为了加快经济的发展,人们几乎无休止的开采资源,破坏环境,使本来就已经污染严重的环境再次受到了重大的影响,人类的生存环境变得十分恶劣,人们面临着环境污染不断的严重问题。因此,为了与自然和谐相处,我们迫切需要保护自然环境。自从重视保护环境以来,人类开始利用高科技产品监测自然环境的状况,寻求环境问题的改善和解决方法。危险气体是必须消除的重要污染类型之一。随着化工厂数量的增加,化工厂排放的危险气体的种类增加,设施和仓库泄漏事故的增加,从安全、环保等方面考虑,开发一种检测危险气体的控制器和自动报警装置非常重要。随着单片机技术的快速发展,利用单片机开发的检测设备越来越小,种类也越来越多,但用于气体检测的设备却越来越少。因此,有必要设计一种基于单片机的危险气体检测系统。

 本系统设计的危险气体监测系统通过检测被测气体的浓度,当气体浓度超过规定的标准值时,即使用蜂鸣器进行报警。当检测的气体浓度小于报警值时改变报警标准即不报警。人们可以通过超过正常气体浓度规定的标准值时报警器发出的声音察觉到危险从而避开有可能发生的灾害和及时解决危险气体浓度过高引发的问题。

 本次设计是基于 STM32F103 单片机的气体浓度检测系统,通过 MQ-4 传感器检测当前环境中甲烷气体的浓度,收集到的模拟值通过 AD 模块转换成数字格式,并传输到单片机,通过 LCD 液晶屏显示出来。当气体浓度超过最高限值时,蜂鸣器就会被单片机控制开始报警。此外单片机采用 ESP8266模块和手机进行通信,将检测到的数据发送给手机端,并展现在 APP 上。

 本设计具备以下功能: (1)使用传感器收集环境数据并将其模拟值转换成数字格式; (2)在单片机中处理收集到的数据,实时监测气体浓度; (3)实现串口通信和液晶屏的程序设计,LCD 液晶屏显示实时检测到的危险气体的浓度值;

 本科论文

 (4)按键设置报警气体浓度值,超过报警值时,蜂鸣器发出警报; (5)单片机和手机之间无线通信,在手机上展示数据。

 本科论文

 1

 控制系统设计 1.1 系统方案设计 本次设计主要是用来检测有害气体,具有报警功能的设备。目前化工厂内的工作环境并不理想,通过实习我发现整个厂区内的危险气体如甲烷等浓度特别高,工人作业时有害气体吸入量特别的大,而且一旦气体泄漏后极易造成火灾、爆炸等事故,危害极大。所以,本设计应当实现以下三项功能:检测室内的危险气体浓度、达到对应浓度报警、手机远程显示室内气体浓度值。本设计的完成,整体控制方案的选择尤为重要,根据上面提到的要求,下面列举出几种可行的控制方案,并进行对比,选出最适合本设计的方案。

 方案一:

 采用单片机作为控制器,将功能部件集成在芯片上,集成度高、体积自然小、内部总线结构的单片机,减少了芯片之间的通信,使其具有可靠性和抗干扰能力。

 由于单片机的体积小,可以很容易采取电磁屏蔽或密封措施,适合在恶劣环境下工作。

 而且,单片机指令丰富,功耗低,电压低,易于生产便携产品,易于扩展,可靠性高,价格低,经济效益高,能达到预期的功能。

 方案二:

 使用集成电路作为控制器,电路很简单。由于集成电路的引入,集成电路简化了设计、调试和安装完整电路。集成电路具有很高的可靠性优势。但是集成电路很难理解。许多集成电路指标在修复和拆卸方面非常困难,修理的成本也会增加。当集成电路内电路中的部分电路出现故障时,通常必须整块一起修理。

 综上所述,集成电路如果出现故障不方便拆卸与修理,而单片机既能满足本设计所要实现的功能,又具有低成本的优点,故选择方案一。

 1.2 系统工作原理 本次设计采用 LED1602 液晶显示器显示采集到气体浓度值,单片机作用为 STM32F103,MQ-4 传感器时刻检测当前环境气体浓度。按键用来设定气体浓度报警上限值,通过模转换将采集到的气体浓度值模拟值转换为数字量,并传输给单片机进行计算。ESP8266 无线模块用于单片机和手机之间

 本科论文

 的通信,将采集到的数据无线发送到手机端进行展示。包含两个按键,用来设置气体浓度报警上限值。危险气体浓度值大于设置的上限时,单片机驱动三极管控制蜂鸣器进行报警。系统的工作原理图如 1.1 所示。

 图 1.1

 系统工作原理图 2 硬件设计 2.1 主电路 2.1.1 单片机最小系统 单片机最小系统由晶振电路、STM32F103 芯片和复位电路组成。只要有这三者存在,单片机就可以正常的工作。

 [1]

 单片机最小系统框图如图 2.1 所示。

 图 2.1 单片机最小系统框图

 2.1.2 STM32F103 单片机 STM32F103 单片机是一款低功耗、高性能的微控制器,是 STC 公司早期生产用于工业控制的单片机。其作用是控制各种传感器和外设,自行计算处理得到的数据和信号,并进行相应的操作 [2] ,在工业生产中起到大脑的作用。

 对于本次设计选择的是 STM32F103C8T6 单片机。此单片机和 51 系列相按键电路 显示模块

  单片机处理单元 电源电路 气体浓度检测模块 蜂鸣器报警无线数据传输模块

 本科论文

 比多了很多功能,不但运行速度比 51 单片机要快很多,自带 2 个 AD 转换,方便我们在设计烟雾的时候免去了需要加外部 ADC 进行转换,非常方便; STM32 有着很强大的通信功能和控制功能。这一点是 51 单片机无法比拟的。因为 51 单片机只有 1 个串口进行通信,而 32 单片机具有 5 个串口进行通信,所以对一些要求用串口进行通信的模块而且就不需要通过CD4052 等双串口模块来转换,所以这一点被市场上广泛的运用,32 单片机因为本身可以进行多种不同的时钟模数来进行工作,所以在功耗要求比较严格的产品中占有一席之地。

 STM32 特点:

 (1)STM32C8T6 系列的起振晶部分采用了 RTC,低负载的方式,而没有像传统的比较廉价的圆柱晶振。

 (2)引脚个数为 48 个。

 (3)工作频率为 72MHZ。

 (4)单片机具有 3 个普通定时器和 1 个高级定时器。

 (5)单片机具有 2 个 2 位/16 通道的 ADC 模数转换。

 (6)使用了 3.3V 稳压芯片,可以保证最大输出 300MA 电流。

 (7)支持 ST-LINK 和 JTAG 调试下载。

 (8)存储资源为 64kb byte FLASH 和 20byte Sram。

 STM32 实物图如图 2.2 所示。

 图 2.2 STM32F103C8T6 实物图 (1)电源指示灯LED(PWR 通常为红色):如果电源指示灯亮亮说明单片机

 本科论文

 正常运行,如果较暗或者闪烁,表示此单片机可能存在故障。

 (2)用户 LED(PC13):这个功能的使用大大的方便了我们进行一些比较简单的功能测试,如单片机的运行状态等,方便初学者进行更好的测试。

 (3)单片机上采用了跳帽的方式,我们可以对 stm32 进行 3 种编程方式。如用户的 SARM、闪存和系统的存储器。

 (4)为单片机的复位电路。

 (5)8M 晶振:主要是用于设置单片机系统的频率为 72MHZ。

 (6)32.768KHz 晶振:可供内置 RTC 使用,避免了需要专门的时钟芯片进行定时器处理等。

 2.1.3 晶振电路 晶振电路也是我们常说的时钟电路,整个系统处理信号和其它各部分运行也是一个频率,晶振电路就是为它们提供一个稳定的振荡频率,使系统各部分保持同步。本设计主要是采用两个 30μF 的电容和一个 12MHz 的晶振组成。采用了外部时钟方式的配合方法,电容帮助晶振起振使电路可以正常工作。单片机的 XTAL2 和 XTAL1 两个接口分别于晶振上的两个引脚相连。

 晶振电路原理图如图 2.3 所示。

  图 2.3 晶振电路原理图 2.1.4 复位电路 复位电路的用途:在上电或复位过程中,控制 CPU 的复位状态:这段时间内让 CPU 保持复位状态,而不是一上电或刚复位完毕就工作,防止 CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能 [3] 。原理图如图2.4 所示。

 本科论文

  图 2.4 复位电路原理图

 2.2 按键控制电路 在本设计中,一共有 2 个按键,起到调节上限值的作用,是系统可操作性的保证。作为输入端,按键的单片机控制引脚默认为高电平,当按键按下后,单片机的相关引脚则变成低电平,进而实现对系统的手动输入。按键的一段连接单片机的双向 I/O 口,另一端接地。当按键开关处于张开状态时,I/O 引脚和地断开,此时该 I/O 引脚处于高电平状态 [4] 。当按下按键时,I/O 引脚接地,此时高电平置低电平,并返回一个低电平信号给单片机。

 按键开关检测的原理是高低电平检测。

 按键切换难免会因其切换时间而导致错误,因此在编写按键函数时要另外去写一个去抖函数,以提高其准确性。

 系统通过按键设置计算出的气体浓度报警上限值。按键 1 代表增,按键 2 代表减。图 2.5 为按键控制电路原理图。

 图 2.5 按键控制电路原理图

 本科论文

  2.3 报警电路 设计报警模块是为了通过蜂鸣器来触发警报,当烟雾传感器检测到的烟雾浓度超过设定烟雾报警上限值时,STM32F103 单片机控制三极管驱动蜂鸣器进行蜂鸣,起到报警的作用。

 蜂鸣器的一端连着三极管的 e 引脚,另一端接地,蜂鸣器电路如图 2.6所示。三极管使用三极管 PNP,起到放大电流和电平特性的功能,因为单个电路中的电路太小,无法提供足够多的触发信号所需的电流,三极管放大电流以后,电流被放大了 200 倍,足够触发信号,蜂鸣器报警。

 [15] 同时三极管的上拉电阻起到限流的作用,防止电流过大从而击穿蜂鸣器。

 图 2.6 蜂鸣器电路原理图 2.4 LCD1602 液晶显示电路

 本次设计采用 LCD1602 液晶显示器作为输出显示器。LCD1602 的作用是显示文本,本设计需要有两行文本显示,并且不需要彩色。第一行显示当前检测的气体浓度,第二行显示设定气体浓度的阈值。使用 LCD1602 可以满足本计的全部需求。与传统的 LED 数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电。它需要 5V 的电压来进行工作,通过改变电压达到控制区域显示,通过单片机输出的数字信号在显示屏上显示出我想要的字符。显示屏具有 2 行输出,每行 16 个字符,能够同时显示 16×2 即 32 个字符。图 2.7 是 LCD1602 液晶屏的引脚图,从图中可以看出,引脚 1 是电源接地引脚,和单片机的 GND联通。引脚 2 是 VCC 电源输入引脚,其工作电压为 5V。引脚 3—VO 引脚可以调节显示屏的显示亮度,引脚 4—RS 引脚用于寄存器的选择,高电平时作为数据寄存器,低电平时作为指令寄存器,引脚 5 是 RW 读写信号,用于

 本科论文

 数据的读写。引脚 6—EN 引脚为使能端,高电平读取信息,低电平执行指令。引脚 7~14 是 8 位双向数据段口,引脚 15 和引脚 16 是背景灯的电源引脚。在和单片机进行通信时,和 P0 口进行连接,中间要有上拉电阻进行连接。

 [23] 本次设计 LCD1602 液晶显示屏上展示检测到的气体浓度值,并展示气体浓度上限值的设置过程。其引脚连接图如图 2.7 所示。

 图 2.7

 LCD1602 液晶显示电路图 2.5 ESP8266 模块电路 这部分无线通信使用 ESP8266 无线串行模块作为数据传输模块。ESP8266 是一个非常强大的 UART WiFi 数据传输模块,耗电量非常低,价格非常低,体积非常小,允许嵌入任何具有强大的 LWIP 控制系统的产品,支持三个 AP、STA、AP+STA 模型,和简洁而有效的 AT 指令。ESP8266 的工作电压为 3.3V,而单片机的工作电压为 5V,足够达到其工作电压的要求,还具有价格便宜、体积小的优点。在本次设计中用于单片机和手机之间的无线通信,通过 WIFI 模块,单片机将气体浓度值发送给手机端,最后显示在APP 上。图 2.8 是 ESP8266 模块电路图,从图 2.8 中可以看出,1 号引脚连接单片机的 A10 引脚,5 号引脚连接单片机的 A9 引脚,而 2 号、4 号和 8号引脚接地。

 图 2.8 ESP8266 模块电路 2.6 传感器模块电路 烟雾探测器用于探测场所内的烟雾浓度,也可用于报警,烟雾报警器采用的是离子式烟雾探测器。它广泛应用于各种信号系统。离子烟雾传感

 本科论文

 器是稳定可靠的,技术先进的传感器,比气敏电阻类传感器性能更佳。

 [8]

 烟雾传感器是用来检测当前位置的烟雾浓度,以达到防灾的目的,烟雾传感器的内部采用的是离子式的烟雾感应,在各种报警系统中都得到了广泛的应用。离子烟雾传感器具有稳定可靠的优点,传感器技术先进,气敏电阻式报警器的性能远不如离子烟雾传感器好。

 石油化工厂中排放出的危险气体是本系统所针对的目标,这些气体中绝大多数含有甲烷,所以选择 MQ-4 传感器,其对甲烷具有很高的灵敏度。以下是该传感器特性:

 (1)输入电压范围:

 5±0.2V DC; (2)检测浓度:300~10000ppm(甲烷); (3)电流消耗:150mA; (4)使用寿命:5 年; (5)工作温度:-10~50℃; (6)存储温度:-20~70℃。

 (7)尺寸大小:32mm×20mm×22mm。

 气敏式烟雾传感器的工作原理:使用空气中电导率较低的二氧化锡,当传感器所在的环境中存在被测的甲烷气体时,传感器的电导率和气体浓度成线性化比,通过数模转换模块,就可以将信号量转换成数字量,从而输出给单片机,最终在 LCD1602 液晶显示屏上显示出来。其电路原理图如图 2.9 所示。

 图 2.9 传感器的电路原理图

 本科论文

  3

 软件设计 3.1 系统主程序设计 系统的主流程图如图 3.1 所示。各个模块开始工作开始,实时检测甲烷气体浓度值,并进行相应的报警操作。启动的步骤为:ESP8266wifi 模块初始化,MQ-4 传感器接收到目前的气体浓度,按下按键设置报警上限。当超出上限值时,单片机驱动三极管来控制蜂鸣器触发警报,单片机将检测到的气体浓度值数据通过 ESP8266wifi 无线模块发送给手机端进行显示。

 图 3.1 系统流程图 3.2 系统子程序设计 3.2.1 LCD1602 显示设计 LCD1602 的作用是显示文本,本设计需要有两行文本显示,并且不需要彩色。第一行显示当前气体浓度,第二行显示设定的气体浓度上限的值。LCD1602 液晶显示器一旦开启,就会与单片机进行双向通信。

 单片机控制显示器的亮度并显示内容,过一段时间后,液晶屏上会显示出检测到的气

 本科论文

 体浓度值。

 在设置报警值上限时,根据按键动作改变报警值。

 单片机控制记录命令的记录引脚显示内容。

 然后在显示器上执行该命令,并显示内容。LCD1602 显示流程图如图 3.2 所示。

 子程序入口LCD初始化单片机向LCD写命令单片机向LCD写数据显示数据LCD清屏返回YN 图 3.2 LCD1602 初始化流程图 3.2.2 ESP8266 无线通信设计 当 ESP8266 模块与单片机模块相连接时,连接到无线模块供电,按下ESP8266 开关,电源指示器就会启动。首先串口初始化开始,然后是整体中断,当有输出信号时进入总中断再开启串口中断。在一定时间段中发送检测到的气体浓度具体数值,建立一个串口的工作方式的设置,最后设置定时器的初值。整个流程进行完毕。串口的作用是单片机和 ESP8266 无线模块之间进行通信,将检测到的气体浓度值发送给手机,并在手机 App 上实时动态变换。ESP8266 无线通信流程图如图 3.3 所示。

 本科论文

 串口初始化开启总中断开启串口中断启动定时器设置串口工作方式定时器设置初值 图 3.3 ESP8266 无线通信流程图 3.2.3 按键子程序设计 本次设计按键电路功能不多,为设置气体浓度报警上限值。按键的工作原理是检测主程序中的低水平信号,一旦低电平信号被主程序检测到了,单片机就会产生信号中断,并进入按键子程序。两个按键分别起到加和减的作用。

 在不同页面表示不同的功能。分别用函数执行不同的操作,注意进行延时操作,防止误差。按键程序流程图如 3.4 所示。

 图 3.4

 按键程序流程图 设置 按键是否按下

  子程序入口 返回 加 减 N Y

 本科论文

 3.2.4 气体浓度检测程序设计 利用 MQ-4 气体传感器对空气中的甲烷气体有较高的灵敏度,当控制器附近的甲烷气体浓度增大时,影响了传感器的电导率的变化,电导率随之增加,将电导率的变化转换为与该气体浓度相对于的模拟输出信号,经过数模转换模块转换成数字量并发送给单片机。图 3.5 是其流程图。

 子程序入口浓度检测数模转换发送给单片机返回 图 3.5 气体浓度检测流程图 3.2.5 报警程序设计 主函数执行后,通过检测来判断是否发生中断,用设定好按键的形式来设定气体浓度的报警上限,检测是否超出了报警上限,通过函数的循环来判断是否超出浓度上限,如果超过,那么蜂鸣器报警。报警流程图如 3.6所示:

 子程序入口返回是否到达设置的上限?报警YN 图 3.6 报警流程图

 本科论文

  结

 论

 通过以上分析本系统控制器方面采用 STM32F103C8T6 单片机完全符合本设计的控制需求。MQ-4 烟雾传感器完成采集室内的甲烷气体浓度,并通过 A/D 转换芯片 ADC0832 将数据传递到 LCD1602 显示屏上,并设定上限值,只要数值超过设置的上限值就会立马报警,从而通知人及时快速到达现场清理甲烷气体,保障室内甲烷气体正常浓度值的操作。具体工作体现在整体电路的设计与制作,系统调试,程序的编写等多个步骤。其中电路设计为重点,本设计通过五个模块达到了检测室内的气体浓度、达到对应浓度报警、显示当前环境下的气体浓度三个功能。并首次通过自己的努力,在Altium Designer10 上绘出 PCB 图。

 本设计成功完成了采集数据、设定数值和显示屏显示的功能,具有精度高,便于携带,成本较低等优点。通过该系统的每个环节从各个方面展现出这个系统的设计思路以及原理。例如从硬件设计和软件设计方面等等。运用了许多技术比如单片机、传感器、信息的采集和处理等方面,对于不同室内空气环境有着很好的监控作用。通过在工厂内的实地测试,可以正常实现所有操作,所以本设计有实际应用价值,可以应用于化工厂附近的住宅区,生产车间等高污染区域。

 本科论文

 参考文献

  [1]高志远,赵小莉,赵亚运.基于单片机仿真教学的应用分析[J].化学工程与装备,2019,1(12):283-284 [2]武文静.电子电路故障诊断与预测技术分析[J].计算机产品与流通,2019,2(12):80 [3]周澄.基于Matlab的电子电路设计与仿真教学研究[J].教育现代化,2019, 6(92):214-215 [4]袁嘉嵘.LabVIEW电子电路模拟仿真设计[J].电子技术与软件工程,2019,5(20):105-106 [5]郭小江.苯气体检测报警器的应用及测量值的不确定度评定[J].工业计量2019,29,4(S1):69-71 [6]黄平.基于单片机的液晶(LCD)图文显示系统设计[J].通信电源技术2019,36(10):69-70 [7]梁丽秀,裴玖玲,孙少杰,周丹.电工电子实习的教学改革实践[J].科技经济导刊,2019,27(26):176 [8]王福鹏. 吸收光谱法气体传感器的背景干扰消除和关键性能提升[D].山东大学,2019 [9]郑三婷.浅谈Proteus仿真软件在单片机教学和电路设计中的应用[J].电子测试,2019,8(10):139-140 [10]杨连阜.电路的分析、设计与检修——“电子产品装配与调试”教学实践与体会[J].天津职业院校联合学报,2019,21(04):24-29 [11]徐靖,吕洁,吕雪英.电子电路仿真技术在电子应用开发中的作用[J].自动化应用,2019,9(01):92-94 [12]唐忠林,甘霖.基于气体传感器的瓦斯浓度监测系统的研究[J].卫星电视与宽带多媒体,2019,5(19):35-36 [13]张其方.可燃气体和有毒气体检测系统应用探讨[J].石油化工自动化,2018,54(05):15-18 [14]张枫,王必晴,王晗,方凌霄.基于单片机的废气监测系统研究与实现[J].福建电脑,2018,34(04):24-26 [15]吴斌,刘榕发.室内空气质量检测分析与报警装置研究[J].电子测

 本科论文

 试,2018(13):18-19+21 [16] 鲁刚强. 基于液晶显示器的单片机系统设计[J]. 科技资讯,2008:152-255 [17] 黄庆华. 单片机开发技术与实训[M]. 北京: 北京电子工业出版社,2006.(7):1-74 [18]杜洋.A/D 转换芯片 ADC0832 的应用[J].电子制作,2006(01):44-46. [19]冯黎.Protel 99 SE 应用入门(一)[J].电子制作,2005(05):40-41+50. [20]武芳,蒋汝根,朱璇.Keil 和 Proteus 联调在单片机教学中的应用实例[J].中国教育技术装备,2015(20):47-48. [21] 黄庆华. 单片机开发技术与实训[M]. 北京: 北京电子工业出版社,2006.(7):1-74 [22] 袁晓溪. 基于单片机的 LED 显示系统[D].吉林大学,2015 [23] 鲁刚强. 基于液晶显示器的单片机系统设计[J]. 科技资讯,2008:152-255 [24] Gan Y, Wang H, Shan Z, et al. USER DATA PROCESSING METHOD AND DEVICE:, WO/2016/000163[P]. 2016.

 [25] Kim H young-Tae. How to use KEIL 8051 C Compiler.Yangseogak pub-lish Company,2001:1-19

 本科论文

  附录 源程序清单 #include "led.h" #include "delay.h" #include "sys.h" #include "adc.h" #include "timer.h" #include "usart1.h" #include "LCD1602.h" #include "string.h" #include "stdio.h"

 void Change_data_handle(void);//按键处理 void

 SHOW_AND_BAOJING_Handle(void);//显示并处理报警 u8 KEY_SCAN(void);

  //按键函数 u8 key,PPM;//按键值,和 mq 值 u16 PPM_MAX = 50;//烟雾上限报警值 unsigned char Alarm_Buf[16]="Warning";//WIFI 报警显示 unsigned char buf[18];//WIFI 数据发送缓存区

 //串口相关 extern unsigned char RxCounter,Usart1RecBuf[64]; extern char bUsart1RecFlag; //ESP8266 相关函数 #define ESP_RECV_PTYPE_NULL 0 #define ESP_RECV_PTYPE_DATA 1 unsigned char cur_conn_id; char *strx=0; void Clear_Buffer(void)//清空缓存 {

 u8 i;

 for(i=0;i<64;i++)

 Usart1RecBuf[i]=0;//缓存

 RxCounter=0; } void esp_ap_mode(void) {

 Clear_Buffer();

 Uart1_SendStr("AT+CWMODE=2\r\n");

  //

 strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 本科论文

  while(strx == NULL)

 {

  Clear_Buffer();

  Uart1_SendStr("AT+CWMODE=2\r\n");

  delay_ms(500);

  strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 }

 /*

 <ssid>:字符串参数,接入点名称

 <pwd>:字符串参数,密码最长 64 字节,ASCII

 <chl>:通道号

 < ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK

 */

  Clear_Buffer();

 Uart1_SendStr("AT+CWSAP=\"TEST\",\"12345678\",1,3\r\n");

 strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 while(strx == NULL)

 {

  Clear_Buffer();

  Uart1_SendStr("AT+CWSAP=\"TEST\",\"12345678\",1,3\r\n");

  delay_ms(500);

  strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 }

 /*

 AT+CIPMUX=1

 OK

 */

 Clear_Buffer();

 Uart1_SendStr("AT+CIPMUX=1\r\n");

 strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 while(strx == NULL)

 {

  Clear_Buffer();

  Uart1_SendStr("AT+CIPMUX=1\r\n");

  delay_ms(500);

  strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 }

 /*

 AT+CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启?

 AT+CIPSERVER=1,8080

 本科论文

  OK

 */

 Clear_Buffer();

 Uart1_SendStr("AT+CIPSERVER=1,8080\r\n");

 strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 while(strx == NULL)

 {

  Clear_Buffer();

  Uart1_SendStr("AT+CIPSERVER=1,8080\r\n");

  delay_ms(500);

  strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 }

 } void esp8266_init() {

 Usart1_Init(115200);

 Uart1_SendStr("ESP8266 Init\r\n");

 Uart1_SendStr("AT\r\n");

 //模块测试

 strx = strstr((const char*)Usart1RecBuf,(const char*)"OK");

 while(strx == NULL)

 {

  Clear_Buffer();

  Uart1_SendStr("AT\r\n");

  delay_ms(500);

  strx=strstr((const char*)Usart1RecBuf,(const char*)"OK");

 }

 esp_ap_mode(); }

 void

 esp_send_buf(unsigned char conn_id, char * buf, unsigned char len) {

  printf("AT+CIPSEND=%d,%d\r\n",cur_conn_id,len);

  strx = strstr((const char*)Usart1RecBuf,(const char*)">");

 delay_ms(200);

  if(strx==NULL)

  {

  return;

  }

 Uart1_SendStr(buf);

  strx = strstr((const char*)Usart1RecBuf,(const char*)"SEND OK");

  delay_ms(100);

 本科论文

 if(strx==NULL)

  {

  return;

  }

  } int main(void) {

 u16 test,test_adc;

 delay_init();

  //延时函数初始化

  NVIC_Configuration();

  //设置 NVIC 中断分组 2:2 位抢占优先级,2 位响应优先级

 KEY_IO_Init();

 RELAY_Init();

  TIM2_Int_Init(999,72-1);

 //定时器初始化,定时 1MS

  //Tout = ((arr+1)*(psc+1))/Tclk ;

 //Tclk:定时器输入频率(单位 MHZ)

 //Tout:定时器溢出时间(单位 us)

 delay_ms(300);

  BEEP_DISENABLE();

  //蜂鸣器初始化

 LCD_Init();

 // 1602 初始化

  Adc_Init();

 //ADC 初始化

 esp8266_init(); //ESP8266 初始化

 //显示报警值

 LCD_Write_String(0,1,"ALARM:

 %

  ");

 LCD1602_write_long(6,1,PPM_MAX,2);

  while(1)

 {

 test_adc = Get_Adc_Average(ADC_Channel_9,20);//获取通道 9 的 AD 值,20 毫秒读取一次

 PPM = test_adc*99/4096;//转换成 0~99 百分比

 PPM = PPM >= 99? 99: PPM;

 SHOW_AND_BAOJING_Handle();//报警处理并显示

  Change_data_handle();//按键处理

 test++;

 if(test>20)

 {

 esp_send_buf(0,buf,11);//发送数据

 test = 0;

 }

 delay_ms(1);

  }

 本科论文

 } extern u8 FLICKER; void

 SHOW_AND_BAOJING_Handle(void) {

  unsigned char show_buf[16];

  if(PPM >= PPM_MAX)//mq 超限

  {

 memcpy(buf,Alarm_Buf,7);

  buf[7] = "!";

  buf[8] = "!";

  if(FLICKER)//显示值闪烁

  {

 LCD_Write_String(0,0,"

  ");

  }

  else

  {

 sprintf(show_buf,"

  MQ:%02d%%",PPM);

 LCD_Write_String(0,0,show_buf);

  }

  }

  else

  {

 sprintf(show_buf,"

  MQ:%02d%%",PPM);

 LCD_Write_String(0,0,show_buf);//显示 mq 值

 memcpy(buf,show_buf,9);

  }

 buf[9] = "\r";

  buf[10] = "\n";

  if(PPM >= PPM_MAX)//超限报警

  {

  BEEP_ENABLE();

 }

 else

 {

 BEEP_DISENABLE();

  }

 } u8 KEY_SCAN(void) {

 u8 res = 0;

 本科论文

 if(!KEY2)

  {

 delay_ms(10);

  if(!KEY2)

 {

 while(!KEY2);//卡死

 res = 2;

  }

 }

  if(!KEY1)

  {

 delay_ms(10);

  if(!KEY1)

 {

 while(!KEY1);//卡死

 res = 1;

  }

 }

  return res; } void Change_data_handle(void) {

  u8 key;

  key = KEY_SCAN();//读取按键值

  if(key == 2 && PPM_MAX < 99)//mq 上限最大到 99

  {

 PPM_MAX += 1;

 LCD1602_write_long(6,1,PPM_MAX,2);//显示

  }

  if(key == 1 && PPM_MAX > 0) //mq 上限最小到 0

  {

  PPM_MAX -= 1;

 LCD1602_write_long(6,1,PPM_MAX,2);//显示

  } }

 本科论文

  致

 谢

  这次毕业设计中,我要特别感谢我的毕设指导老师孟军红老师和张有成老师。在毕业设计这几个月的时间里,无论对于项目的制作方向,硬件电路的设计,还是软件程序的编写,老师们都给予了我极大的帮助,在我遇到自己无法解决的问题时,老师们都能非常细心的给我解答和建议,在很多方面都给予我很好的指导意见,在老师们的帮助下我的毕业设计才能顺利完成。

 在毕业设计过程中,我查阅了大量的有关资料,回顾了大学四年所学的相关课程,通过上网搜索、与同学交流经验、向老师请教等方式,使自己学到了不少知识,尽管前期在硬件的设计调试和程序代码编写的修改过程中经历了不少艰辛,还是在老师和同学的帮助下完成了毕业设计。在撰写整个论文的过程中我学到了许多东西,我独立工作的能力和动手能力得到了很大的提高,并且对自己的工作能力有了信心,对我今后的学习工作都有着非常重要的影响。最后再次感谢在大学期间教导我的各位老师,向你们致以深深的敬意和衷心的感谢!

推荐访问:单片机 报警系统 气体
上一篇:十四五数字经济发展规划
下一篇:“借壳重组”方案剖析(附新三板新案例)

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有