
一、項目介绍
摘 要
本设计以 STM32 单片机为核心控制器,并结合温湿度传感器,人体红外传感器,烟雾传感器,可燃气体传感器,蓝牙模块,OLED 显示屏以及蜂鸣器,形成起一套依靠蓝牙通信的智能家居环境监测系统,该系统采取主从架构设计,从机承担环境参数收集工作,由温湿度传感器来测定温湿度数值,人体红外传感器判断是否有人员活动情况,烟雾传感器和可燃气体传感器依次测量烟雾浓度及可燃气体浓度,收集到的数据借助蓝牙模块无线传递给主机;而主机则负责数据显示与报警控制,经由 OLED 显示屏即时显现从机所得到的环境参数,使用者可经由独立按键来回切换显示页面,并对温湿度,烟雾,可燃气体的报警临界值实施设定,一旦检测到的数值超越了预先设定的界限,蜂鸣器就会发出警报声音。 系统软件依托 Keil5 开发环境创建,其设计理念为模块化设计,其中包含按键处理,数据显示,阈值比较,报警控制等功能模块,经测试可知,系统运行稳定,数据采集精准,蓝牙通信可靠,报警反应迅速,可以随时监测家庭环境中的诸多参数,而且在异常情形下会发出警报,具备较好的实用性与扩展性,给智能家居系统的规划设计给予了可供参考的技术途径。
关键词:STM32;蓝牙通信;智能家居;传感器;OLED显示
本文主要研究内容
前面提到的既有技术存在一些问题,本课题就针对这些问题去设计并创建起一套依靠 STM32 和蓝牙通信的智能家居系统,着重从系统架构设计,硬件模块创建以及软件程序开发这三个方面来做研究,目的在于形成起一个功能完备,性能稳定而且易于操作的智能家居环境监测系统。
本课题的系统架构设计采取了主从结构,从机承担着环境参数的采集工作,温湿度传感器用来检测温湿度值,人体红外感应器判断有无人存在,烟雾传感器监测烟雾浓度值,可燃性气体传感器测定可燃性气体值,这些传感器经由蓝牙模块向主机发送数据,主机主要负责数据显示及报警控制,它可以依靠独立按键切换界面并设定温湿度,烟雾,可燃气体的阈值,OLED显示屏会展示从机所采集到的数据以及预设好的阈值,当检测到的值超过该阈值的时候,蜂鸣器就会发出警报声,这样一种主从分离的设计使得系统具备较好的灵活度与扩展性,从机可安装在必要监测的房间内,而主机则置于便于使用者观看操作之处。
本课题在硬件模块实现方面,要完成各功能模块的选型,电路设计以及硬件调试工作,其中控部分把STM32单片机当作核心控制器,并用它众多的外设接口去对接各个传感器和执行器。温湿度传感器选用DHT11,依靠单总线协议与单片机展开通信,烟雾和可燃气体传感器输出的是模拟电压信号,经由ADC执行采样转换成浓度值,人体红外传感器输出数字信号,可以直接接入到GPIO口当中,蓝牙模块采用HC - 05这种型号,凭借USART接口来达成数据的发送与接收功能,显示模块采用的是0. 96寸的OLED屏幕,利用I2C或者SPI接口予以驱动,而报警模块则使用了有源蜂鸣器,由三极管来执行驱动作用,按键模块采用了独立按键,将其接入到GPIO口并且设置成上拉输入的形式,电源模块会给各个模块供应稳定的额定电压。
在软件程序开发上,本课题依靠Keil5开发环境来编写嵌入式C程序,其中主机程序包含系统初始化,按键扫描,数据处理,显示更新以及报警控制这些模块,从机程序则包含系统初始化,传感器数据采集,蓝牙数据发送这些模块,主机和从机经由蓝牙执行数据交换,必要设计恰当的通信协议以保障数据传送的准确性与及时性,软件设计会用到模块化理念,各个功能模块独自开展编写和调试工作,之后再做系统合成,这样方便后续的守护和功能拓展。
前面的研究内容如果得以执行,本课题就会达成一个功能完备且运行稳定的智能家居环境检测系统,该系统可随时采集环境参数,显现数据,设置阈值,并在出现异常的时候发出警报,这会给智能家居技术的应用推广带来有用的探究和技术支持。
设计目标与性能指标
本课题意在设计与制作依托 STM32 单片机的智能家居系统,把温湿度传感器,人体红外传感器,烟雾传感器,可燃气体传感器,蓝牙模块,OLED 显示屏以及蜂鸣器这些硬件资源融合起来,形成起一个可以随时监测家庭环境参数,并在出现异常时发出警报的完整方案,该系统的关键设计思路就是采取主从分离的架构,做到环境数据的无线输送和集中观察,给用户供应方便又值得信赖的家庭环境监测方法。
在功能目标层面,本系统需实现五大核心功能:一方面,从机能即时采集环境中的温湿度值,烟雾浓度值,可燃气体浓度值以及人体活动信息,从而保证监测数据既全面又及时,另一方面,从机经由蓝牙模块把采集到的数据传递给主机,达成数据的无线传送。主机利用OLED显示屏直接显示各类环境参数,这样用户就能随时掌握家居环境的状态,而且,用户可凭借主机上面的单独按键来切换显示界面,设置温湿度,烟雾,可燃气体的报警阈值,以此完成个性化设置,一旦检测到的环境参数值超出用户预先设定的阈值范围,主机就会操控蜂鸣器发出警报声,以此告知用户及时应对异常情况。
在技术指标上,本课题有着清晰且能被量化出来的性能要求,就温湿度采集而言,DHT11传感器可测量20 - 90%RH范围内的湿度以及0 - 50℃的温度,它的湿度精度为±5%RH,温度精度为±2℃,这足以符合普通家庭环境监测的需求,对于气体浓度检测来说,烟雾传感器和可燃气体传感器可以察觉到空气中有无相关气体浓度的变动,并且给出模拟电压信号,经过ADC采集之后再转成浓度值显现出来,至于无线传达部分,蓝牙模块的最大传送距离仅有10米,不过还是可以满足一般家庭内部通信之用。 显示刷新时,OLED显示屏可即时更新所显示的数据,其刷新间隔小于1秒,从而保证用户得到最新的环境资讯。报警响应方面,从数据采集,传递,处理直至报警输出的整条链路所耗时延不超过2秒,如此便能及时察觉并应对异常状况,系统稳定性上,该系统能连续运行72小时而不会出现死机或者数据遗失现象,其具有不错的长时间稳定运行能力。
系统总体架构
本系统采取主从结构设计,按照功能分离,模块独立的设计原则,把整个智能家居系统分成主机部分和从机部分这两个比较独立的子系统,主机和从机都把STM32单片机当作核心控制器,分别完成指定的功能,依靠蓝牙无线通信来做到数据交换和协同工作。
从机部分部署在需要环境监测的房间或区域,承担环境参数采集和无线发送的核心职能。从机由五部分输入模块和一部分输出模块构成。输入部分包括温湿度传感器,通过该模块检测环境中的温湿度值;人体红外传感器,用于检测监测区域内是否有人活动;烟雾传感器,用于检测空气中的烟雾浓度值;可燃性气体传感器,用于检测空气中的可燃性气体浓度值;供电电路,为从机各模块提供稳定的工作电源。输出部分为蓝牙模块,负责将从机采集到的温湿度、烟雾浓度、可燃气浓度以及人体活动状态等数据通过蓝牙无线发送给主机。从机的工作流程为:系统上电并完成初始化之后,会持续读取各个传感器所采集的数据,并把这些数据整合在一起,依靠蓝牙模块来实施传送,这样不断地重复下去,从而做到对环境参数实施持续监测并且及时汇报。
主机部分放置在用户方便观察和操作的位置,如客厅、卧室或玄关处,承担数据显示、用户交互和报警控制的核心职能。主机由三部分输入模块和两部分输出模块构成。输入部分包括独立按键,用户通过按键进行切换显示界面、设置温湿度阈值、设置烟雾阈值、设置可燃气气体阈值等操作;蓝牙模块,与从机进行无线数据传输,接收从机发送的环境参数;供电电路,为主机各模块提供稳定的工作电源。输出部分包括OLED显示屏,用于显示从机获取的温湿度、烟雾浓度、可燃气浓度以及人体活动状态等数据,同时显示用户设置的各项报警阈值;蜂鸣器,当检测到的环境参数值不在用户设定的阈值范围内时,蜂鸣器发出报警声,提醒用户注意。主机的工作流程为:系统完成上电初始化流程之后,经由蓝牙模块来接收从机所发送的数据,而且会持续扫描按键输入情况,依照按键操作来切换显示界面或者调整阈值,及时更新 OLED 屏幕上的显示内容,还要判断当前的环境参数是否超出限度,如果超出限度就会启动蜂鸣器发出警报。
主机与从机经由蓝牙模块创建无线通信链路,蓝牙模块处于主从配对模式,从机端的蓝牙设定为从模式,主机端的蓝牙则设定为主模式。上电之后,主机自行搜索并连接从机的蓝牙,等到连接形成就可以执行双向数据输送,本系统大多时候是从业机单方向主机传送环境数据,主机也能够给从机发送设置信息或者控制指令,从而为系统功能的拓展保留了接口。
技术路线与实施方案
本课题按照需求分析,系统设计,模块创建,融合检测和改良完善这样完整的技术路线来走,运用模块化设计以及自顶向下的开发方法,逐步推动课题的研究进程,使得各项工作的展开都有条不紊,从而做到预期的设计目的。
在研究方法上,本课题采用了文献调研法,模块化设计法以及实验检测法这三种研究方法,其一,借助文献调研并加以案例分析,系统探究智能家居系统,传感器应用,蓝牙传达,嵌入式控制等领域的相关文献,着重剖析近几年来的技术发展状况,考察现存的智能家居产品案例,从而给系统框架设计给予理论方面的参照。其二,利用自顶向下的工程手段,把系统划分成主机和从机这两个主要模块,每个模块内部又会细致地拆解成许多个子模块,各个子模块分别单独展开设计和验证,然后经由标准化的接口来执行系统整合,以保证系统的各项功能得到可靠的达成,其三,针对关键的性能指标执行专门的评定工作,覆盖传感器数据采集准确度的评定,蓝牙传达稳定性相关的情况,按键反应能力的考量,警报功能的有效程度等方面的评定,按照试验得出的数据持续改良算法的相关设置以及硬件的构造,直到满足事先设定好的全部性能目标为止。
本课题在技术执行路径上有五个逐步推进的阶段,第一阶段主要是需求分析与架构设计,这个阶段要明确依靠蓝牙通信的智能家居系统具备哪些功能,达到什么样的具体性能标准,并规划好整个系统的架构,也要清楚主机和从机各自的功能定位以及它们之间的交互方式。第二阶段是硬件选型与电路设计,按照系统所需的功能来挑选传感器,蓝牙模块,显示器,蜂鸣器这些电子元件,还要把各个模块的电路图画出来,制作出PCB电路板图,从而搭建起硬件平台,第三阶段则是软件模块开发,依托Keil5开发环境,分头编写主机和从机端的固件代码,包含各类传感器的唤醒代码,蓝牙通讯相关代码,OLED显示屏显示代码,按键检测代码,数据处理部分,报警控制逻辑等等模块,每一个模块都要单独运行起来才行。 第四阶段要执行系统整合并开展联合调试,把主机与从机实施物理层面和逻辑上的关联,创建成一个完整的原型系统,检查其核心功能是否达成,各模块协作运转情况怎样。第五阶段需展开性能评定和反复改良完善,参照设计之初的目标做全方位考量,把各类性能指标的数据记录下来,一旦评定的结果不达预期,就应回到前面重新去加以改善,或是改动硬件装置,或者调整算法设置,直到所有的性能指标都能符合要求为止,最终才会产生一个可供展示的原型系统,一份详尽的评定报告以及一篇关于毕业的论文。
二、文档介绍




三、項目设计
编程软件介绍
本系统程序开发使用 Keil uVision5 整合开发环境,它属于 ARM 内核单片机开发的主要工具之一,Keil 软件由德国 Keil 公司研发,后来被 ARM 公司收购,此软件专门为 ARM 架构处理器给予全面的开发方案。该软件包含 C 编译器,宏汇编器,链接器,库管理器以及仿真调试器等部件,凭借统一的整合开发环境界面,给开发者赋予从代码编辑,编译链接直至调试仿真的全方位服务。
Keil uVision5具备很多特征,其一,该软件兼容诸多ARM Cortex - M内核设备,其中涵盖本系统所采用的Cortex - M3内核的STM32F103系列,这可充分发挥处理器的优势性能,其二,软件包含大量库函数与范例程序,开发者能直接利用标准外设库或者HAL库函数,从而大幅简化底层驱动的开发流程,其三,内置的调试器具备在线仿真能力,开发者能够设置断点,实施单步运行,观测变量数值,监测寄存器状况,这些极大地方便了程序的调试以及错误的定位,其四,其界面设计人性化,工程管理井然有序,代码编辑器具有语法高亮显示和智能补全功能,进而提升了编程的效率。
使用Keil uVision5进行STM32开发的典型流程包括:创建工程并选定目标芯片,设置时钟及调试相关选项,增加源文件与库文件,编写代码之后执行编译,修正语法错误之处以生成可执行文件,再经由调试器上传到目标板并实施在线调试,此整个流程顺畅高效,属于STM32开发较为理想的方案。
相对于其他软件编程环境,Keil5更加的轻便快捷,操作更加的简单,深受广大嵌入式软件开发者的喜爱。Keil5支持多种芯片,包括51单片机、STM32、HC32、NXP等,生成的HEX文件,可通过烧录器直接烧录到单片机中,非常方便。另外,Keil5编译有三种方式:存在三种编译形式,其一为单编,即仅编译已被修改的文件;其二是部分编译,即编译当下工程的部分文件;其三是全部编译,也就是重新编译工程里的全部文件,这样做可给予开发者更多选项,从而提升开发效率,编译结果会出现在界面向下的地方,其中涵盖错误和警告信息,便于开发者找寻并改正相关问题。
本设计采用的编程软件是 Keil5,它的主机开发界面见图 4-1,从机开发界面见图 4-2。从这些图片里可看到工程经营窗口,代码编辑区域,编译输出窗口等主要功能区域。


主机主程序流程设计
主机主程序采取前后台架构设计,其中,前台由中断服务程序处理紧急事件,后台则由主循环执行常规任务,此架构可使对即时性要求较高的事件及时得到响应,而且能充分利用系统资源,属于嵌入式系统常用的设计形式。
系统上电后,首先执行初始化操作。初始化过程包括:HAL_Init()负责初始化HAL库,SystemClock_Config()把系统时钟设置成72MHz,MX_GPIO_Init()用以初始化GPIO引脚,并设定各个引脚的工作模式。MX_TIM1_Init()专门用来初始化定时器1,此定时器可生成精确时序,MX_USART1_UART_Init()和MX_USART2_UART_Init()分别用以初始化串口1和串口2,串口1用于蓝牙通讯,串口2负责调试输出,HAL_TIM_Base_Start_IT(&htim1)开启定时器中断,允许定时器溢出中断发生。 HAL_UART_Receive_IT(&huart2, &uart2_value, 1) 启动串口2的接收中断,用来接获蓝牙数据,OLED_Init()执行OLED显示屏的初始化,OLED_Clear()则执行清屏操作,等到初始化完毕以后,系统就会转入主循环。
主循环以轮询方式执行常规任务,其中包含四个核心函数,第一个为按键函数Key_function(),此函数包含两大部分,一是调用按键扫描函数得到相关按键键值,二是依靠这些按键做相应的处理工作,诸如切换界面,设定温湿度,烟雾,可燃气气体的阈值,按键函数经由轮询来检测按键状态,判别按键键值,而且依照当前界面标志位来做对应的操作。
监测函数负责从机数据的传送,主机依靠蓝牙模块来获取从机所发送的环境数据帧,解构之后存储到对应的变量当中,其中涉及温度值,湿度值,烟雾浓度,可燃气浓度以及人体活动状态等内容,数据接收利用的是串口中断的方式,以此保障不会出现数据遗失的情况。
第三个为Display_function() 显示函数,它按照当前界面标志位来显示相应内容,界面0显示出所获取的温湿度,可燃性气体,烟雾及其是否有人状况;界面1 - 2用于显示设置温度的最大值与最小值;界面3 - 4用来显示设置湿度的最大值与最小值;界面5 - 6则显示设置可燃性气体的最大值与最小值。该显示函数会将数据转化为显示内容,并经由 OLED 驱动函数更新屏幕。
第四个为处理函数Manage_function(),该函数会判断参数值是否处于阈值范围内,一旦发现超出范围便发出警报,反之则不会。此处理函数把当前环境参数同用户设定的阈值执行对比,如果温度,湿度,烟雾浓度或者可燃气浓度存在超出限定的情况,就会指挥蜂鸣器发出警报声音;倘若各参数均位于正常区间之内,就切断蜂鸣器的供电源。
主机显示函数流程设计
显示函数用于把系统信息以图形形式显现到OLED屏幕上,这是人机交互的关键输出途径,该系统规划了7个显示界面,用户能够凭借按键1来回切换这些界面,进而查看各类信息或者设定各种参数。
显示函数Display_function()的流程设计如下:按照当前显示模式标志位flag_display所具有的值,经由switch语句来选定不同的显示内容。
当flag_display为0时,显示主监控界面。该界面显示从机获取的各项环境参数:第一行显示“温度:”以及当前温度值,第二行显示“湿度:”和当前湿度值,第三行显示“可燃气体:”以及当前可燃气浓度值,第四行显示“烟雾:”和当前烟雾浓度值,在此行右侧显示“有人”或者“无人”,依照人体红外传感器的检测结果来判定,这个界面属于系统的默认界面,用户大多数时间会停留在这里去观察环境状况,主机显示函数的流程图见图4 - 5,从图里能够清楚地看出各个界面上的显示内容及其切换逻辑。

主控芯片STM32
本系统中的主机和从机均把STM32F103系列单片机当作核心控制器,其具体型号为 STM32F103C8T6,此芯片依靠 ARM Cortex - M3 内核,属于32位微控制器,它具备出色的即时性能,拥有众多外设接口,而且功耗控制表现良好,很适合用作智能家居系统的核心处理单元。
STM32F103C8T6的主要特点包括:工作频率达到72MHz,运算能力强,可以快速处理传感器数据并执行控制算法,其内置了64KB的Flash和20KB的SRAM,这足以应对程序存储及数据缓存的需求,包含诸多外设接口,USART,I2C,SPI,ADC,定时器等都是其中的一部分,如此一来就方便同各种传感器和执行器相连,而且它具有JTAG / SWD调试接口,这样就能较为便捷地开展程序调试和烧录工作,它的工作电压处于2.0 - 3.6V这个区间,其功耗控制很灵活,还包含多种低功耗模式。
在智能家居系统中,STM32F103C8T6的资源分配如下:USART1负责同蓝牙模块展开通信,达成与从机或者主机的数据互换,USART2则用来输出调试信息,利于在开发期间找寻问题所在,众多的ADC通道会采集烟雾传感器以及可燃气传感器所发出的模拟电压信号,定时器可产生精准的时序控制,比如单总线通信的时序,PWM输出之类的情况,GPIO端子需接上诸如按键,人体红外传感器,蜂鸣器之类的数字设备,I2C或者SPI接口则用以激发OLED显示器。
单片机核心电路包含晶振电路,复位电路,BOOT启动电路以及电源滤波电路,这些电路共同保障系统得以稳定可靠地运行,晶振电路依靠外部8MHz晶振,经由内部PLL倍频之后得到72MHz系统时钟。复位电路采取按键复位形式,低电平有效,这样就方便执行系统复位操作,BOOT启动电路凭借跳线来确定启动模式,往往被设置成从Flash启动,电源滤波电路在电源引脚附近设置0.1μF和10μF的电容,用以滤掉电源噪声并提升系统的稳定性。
核心板接口原理图见图3 - 1, 图中显示了 STM32F103C8T6 的引脚分配及外围电路的连接情况,实物图位于图3 - 2处,此图表现出核心板的实际布局与元器件的排列形态。


温湿度传感器DHT11
本系统利用DHT11数字温湿度传感器模块来测量环境里的温湿度值,DHT11传感器属于市面上普遍应用的温湿度传感器,其具备体积小,功耗低,抗干扰性能好,性价比高等优势,很符合家庭环境监测之类的应用场合。
DHT11传感器的主要技术参数包括:湿度的测量范围在20%-90%RH之间,其测量精度为±5%RH,温度的测量范围是0 - 50℃,测量精度为 ±2℃,分辨率分别为1%RH 和 1℃,采样周期为1秒,它采用单总线串行接口,同单片机相连只需一根数据线,所占I/O 口数较少。
DHT11传感器依靠电阻式感湿元件和NTC测温元件来工作,它采用专门的数字模块采集技术以及温湿度传感技术,把温湿度信号转变为数字信号予以输出。传感器内部具备一块高性能的8位单片机,该单片机用于收集湿敏元件和热敏元件产生的模拟信号,经过校准与修正之后,经由单总线接口输出数字信号,每一个DHT11传感器都会在精准的湿度校验室内完成校准,校准系数会以程序的形式保存在OTP内存当中,传感器内部在处理检测信号的时候调用这些校准系数,以此保证输出数据的准确性。
DHT11传感器采用单总线通信协议,单片机与传感器之间的通信过程如下:单片机先发送起始信号,把数据线拉低,维持至少18ms,接着放开数据线,并且延时20 - 40μs,传感器收到起始信号之后,会发送响应信号,将数据线拉低80μs,再拉高80μs,从而做好发送数据的准备,传感器接着连续发送40位数据,其中包含16位湿度数据,16位温度数据以及8位校验和,每个数据都是以50μs的低电平开头,高电平保持的时间来表明数据位是0还是1,单片机依照高电平持续时间解码获取温湿度数据,而且经由校验和来核实数据是否准确。
DHT11传感器的电路连接较为简单,把数据引脚同STM32的一个GPIO口执行连接,并在上面添加一个大约5kΩ的上拉电阻,就能够达成通信,传感器的供电电压处于3.3-5V之间,本系统采取3.3V供电,和STM32的电平相契合。
总 结
本课题设计并实现了一套基于STM32和蓝牙通信的智能家居系统,围绕系统架构设计、硬件模块实现和软件程序开发三个核心方面展开研究,主要完成了以下工作:
本课题在系统架构设计上采取主从结构,把系统划分成主机和从机两大部分,从机承担环境参数的收集工作,涉及温湿度,烟雾浓度,可燃气浓度以及人体活动状态这些方面,主机则负责显示数据,设置阈值并执行报警控制,主机与从机经由蓝牙模块来达成无线数据传递,这样一种主从分离的架构具备较好的灵活性和扩展性。
本课题就硬件模块的达成而言,包含了各功能模块的选型,电路设计以及硬件调试,中控部分选用的是STM32F103C8T6单片机,温湿度传感器则为DHT11,烟雾传感器为MQ - 2,可燃气传感器为MQ - 4,人体红外传感器为热释电传感器,蓝牙模块为HC - 05,显示模块是0. 96寸OLED,报警模块为有源蜂鸣器,按键模块为独立按键,而且,电源模块供应稳定的5V和3. 3V电压,这些模块凭借细致规划的电路相互衔接,从而形成起完备的硬件系统。
在软件程序开发上,本课题依托Keil5开发环境编写了嵌入式C程序,其中主机程序涵盖系统初始化,按键扫描,数据处理,显示更新以及报警控制这些模块。从机程序包含系统初始化,传感器数据采集,蓝牙数据发送这些模块,主机和从机之间制定了一种简单又可信的通信协议,以此保障数据得以精确传递。
本课题在系统调试上包含硬件调试,软件调试以及系统联合调试,用以证实各个模块功能是否完备,系统整体性能是否可靠,经检测结果显示,系统运行稳定,数据采集正确,通信稳定而且报警及时,其各项功能皆符合设计初衷。

1245

被折叠的 条评论
为什么被折叠?



