基于STM32的智能语音窗帘系统设计

摘要:随着智能家居技术的快速发展,传统窗帘的手动控制模式已难以满足人们对便捷化、智能化生活的需求。智能窗帘作为智能家居的重要组成部分,能够根据环境变化、用户指令实现自动调节,极大提升居住舒适度与生活便捷性。本文设计了一套基于STM32F103C8T6的智能语音窗帘系统,集成多类传感器、显示模块、执行机构、语音模块及蓝牙通讯模块,实现环境参数采集、实时显示、多模式窗帘控制、语音播报及蓝牙远程遥控等核心功能。系统以STM32F103C8T6为核心控制器,通过光敏电阻、DHT11、MQ-7传感器分别采集环境光强度、温湿度、一氧化碳浓度;利用DS1302时钟模块获取当前时间,通过OLED液晶显示屏同步展示时间、环境数据及系统工作模式;搭载JR6001语音模块实现提示音播报;支持自动、手动、定时、遥控四种控制模式,可通过蓝牙APP远程遥控窗帘开关,自动模式下可根据环境光强度自适应调节窗帘状态,定时模式下可预设开关时间,手动模式下可通过按键精准控制。经测试,系统运行稳定、数据采集精准、控制响应迅速,各项功能均达到设计目标,能够有效提升家居生活的智能化、便捷化水平,改善居住体验,具有较高的实用价值、推广前景与应用意义。

关键词:STM32F103C8T6;智能窗帘;多传感器采集;多模式控制;蓝牙远程遥控;语音播报

1 绪论

1.1 研究背景与意义

在科技飞速发展的今天,智能家居已逐渐走进千家万户,成为现代生活的重要组成部分。窗帘作为家居环境中不可或缺的元素,其主要功能是调节室内光照、保护隐私、调节室内温度,直接影响居住的舒适度与便捷性。传统窗帘采用手动拉扯的控制方式,操作繁琐,且无法根据环境变化自动调节,难以适应人们对智能化生活的追求——例如,白天光照过强时需手动拉合窗帘,夜间或光照不足时需手动拉开,忘记操作则会影响居住体验;同时,传统窗帘无法与其他家居设备联动,也不具备环境监测与安全预警功能,难以满足现代家居的多元化需求。

随着嵌入式技术、传感器技术、无线通讯技术及语音技术的不断发展,智能窗帘系统逐渐成为研究热点。智能窗帘能够通过传感器感知环境变化,自动调节窗帘的开合状态,同时支持手动控制、定时控制、远程控制等多种模式,搭配语音播报功能,实现“人无我有,人有我优”的智能化体验。此外,通过集成危险气体检测模块,还能在环境出现安全隐患时及时发出提示,提升家居生活的安全性。

基于此,研发一套基于STM32F103C8T6的智能语音窗帘系统,整合环境监测、多模式控制、语音播报、蓝牙远程遥控等功能,不仅能够解决传统窗帘操作繁琐、智能化程度低的痛点,还能实现窗帘的自适应调节与安全预警,提升家居生活的便捷性、舒适度与安全性,推动智能家居的普及与发展,具有重要的现实意义、实用价值与应用前景。

1.2 国内外研究现状

国外对智能窗帘系统的研究起步较早,技术相对成熟,形成了较为完善的产品体系与解决方案。欧美、日本等发达国家的智能窗帘产品,普遍集成了环境感知、多模式控制、远程联动等功能,部分产品还支持与智能家居系统(如亚马逊Alexa、谷歌Home)联动,实现语音控制、场景化控制等高级功能。此类产品智能化程度高、稳定性强,但结构复杂、研发与生产成本高昂,价格昂贵,难以在普通家庭中广泛普及;同时,其设计理念与功能适配性更贴合国外家居环境,与我国普通家庭的居住需求、消费能力存在一定差异。

国内近年来也逐步重视智能家居领域的研发,智能窗帘市场发展迅速,相关研究不断增多。现有智能窗帘产品主要分为两类:一类是高端产品,集成多种功能,支持远程控制、语音控制与场景联动,但价格较高,主要面向中高端消费群体;另一类是中低端产品,多仅实现单一的远程控制或自动控制功能,缺乏环境监测、语音播报、多模式切换等功能,智能化程度不足,且稳定性有待提升。此外,现有部分产品存在传感器采集精度低、控制响应滞后、语音播报不清晰等问题,难以满足用户的多元化需求。因此,研发一套功能完善、成本低廉、操作便捷、运行稳定的基于STM32的智能语音窗帘系统,填补现有中低端产品的不足,适配普通家庭的居住需求与消费能力,具有重要的研究价值与实用意义。

1.3 研究内容与目标

1.3.1 研究内容

本文围绕智能窗帘的智能化控制与环境监测需求,结合项目给定的功能要求,设计并实现一套基于STM32F103C8T6的智能语音窗帘系统,具体研究内容如下:

  • 硬件系统设计:选取STM32F103C8T6作为核心控制器,搭配光敏电阻、DHT11温湿度传感器、MQ-7一氧化碳传感器、DS1302时钟模块、OLED液晶显示屏、JR6001语音模块、蓝牙模块、窗帘驱动机构(步进电机及驱动模块)、按键模块等,设计各功能模块的硬件电路,完成电路的设计、焊接与调试,确保各模块连接可靠、运行稳定。
  • 软件系统设计:基于Keil µVision5开发环境,采用C语言进行模块化编程,实现环境参数采集、时钟同步、OLED实时显示、多模式窗帘控制、语音播报、蓝牙通讯、手机APP远程控制等核心功能,优化程序逻辑,提升系统响应速度与数据采集精度。
  • 多模式控制设计:实现自动、手动、定时、遥控四种控制模式的灵活切换,自动模式下根据光敏电阻采集的光照强度自适应调节窗帘开合;手动模式下通过按键控制窗帘开关;定时模式下可预设窗帘开关时间,到点自动执行;遥控模式下通过蓝牙APP远程下发控制指令,实现窗帘开关控制。
  • 语音与显示功能设计:基于JR6001语音模块,预设窗帘开关、模式切换、危险预警等提示音,在系统执行对应操作或检测到危险气体超标时进行语音播报;通过OLED液晶显示屏,实时展示当前年月日时间、温湿度数据、环境光强度、一氧化碳浓度及系统工作模式,界面简洁、数据直观。
  • 系统调试与测试:对硬件电路进行导通测试、故障排查,对软件程序进行编译、调试,对系统的各项功能、数据采集精度、控制响应速度、稳定性进行全面测试,验证系统是否达到设计目标,针对测试中发现的问题进行优化改进。

1.3.2 研究目标

本研究的核心目标是设计一套满足家居智能化需求的智能语音窗帘系统,结合项目功能要求,具体目标如下:

  • 实现多参数环境采集:精准采集环境光强度、室内温湿度、一氧化碳浓度,数据采集误差控制在合理范围内,确保数据准确可靠,为窗帘自动调节与安全预警提供依据。
  • 实现时钟与显示功能:通过DS1302时钟模块获取当前年月日时间,实时同步;通过OLED液晶显示屏清晰展示时间、温湿度、环境光强度、一氧化碳浓度及系统工作模式,便于用户查看。
  • 实现多模式灵活控制:支持自动、手动、定时、遥控四种模式,模式切换流畅,互不干扰;自动模式可根据光照强度自适应调节窗帘开合,手动模式通过按键精准控制,定时模式可预设开关时间,遥控模式通过蓝牙APP远程控制。
  • 实现语音播报功能:通过JR6001语音模块驱动扬声器,在窗帘开关、模式切换、定时触发、一氧化碳浓度超标时播报对应提示音,播报清晰、及时,提升用户体验。
  • 实现蓝牙远程遥控:通过蓝牙模块与手机APP对接,实现远程查看环境数据、下发窗帘开关指令、切换工作模式、设置定时时间等功能,操作便捷、响应迅速。
  • 实现安全预警功能:通过MQ-7一氧化碳传感器实时监测室内危险气体浓度,当浓度超标时,触发语音播报预警,提醒用户及时处理,提升家居安全性。
  • 确保系统稳定运行:优化硬件电路与软件程序,确保系统连续运行无故障,数据采集实时准确,窗帘控制可靠,语音播报清晰,蓝牙通讯稳定,操作便捷。

1.4 论文结构安排

本文共分为6章,具体结构安排如下:

  • 第1章 绪论:阐述研究背景与意义、国内外研究现状、研究内容与目标及论文结构安排,明确本研究的核心方向与价值。
  • 第2章 系统总体设计:确定系统的设计原则、总体架构,划分系统功能模块,结合项目功能要求选择核心元器件并进行方案选型,为系统硬件与软件设计奠定基础。
  • 第3章 系统硬件设计:详细设计各功能模块的硬件电路,包括核心控制模块、传感器采集模块、时钟模块、显示模块、语音模块、蓝牙通讯模块、窗帘驱动模块、按键模块、电源模块,绘制电路原理图与系统总电路图。
  • 第4章 系统软件设计:基于Keil开发环境,进行软件总体设计,编写各功能模块的程序代码,绘制程序流程图,实现环境采集、时钟同步、显示、多模式控制、语音播报、蓝牙通讯等功能。
  • 第5章 系统调试与测试:对硬件电路与软件程序进行调试,对系统各项功能、数据采集精度、控制响应速度、稳定性进行测试,分析测试结果,验证系统是否达到设计目标。
  • 第6章 总结与展望:总结本文的研究成果,分析系统存在的不足,提出未来的改进方向与发展展望。

2 系统总体设计

2.1 设计原则

结合家居使用场景(便捷、舒适、安全)与用户需求,结合项目给定的功能要求,本系统设计遵循以下原则:

  • 实用性原则:聚焦智能窗帘的核心需求,实现环境采集、多模式控制、语音播报、蓝牙遥控等功能,贴合项目要求,避免冗余功能,确保系统简洁实用,解决传统窗帘操作繁琐的痛点。
  • 可靠性原则:选用成熟、稳定的元器件与技术,确保系统长期稳定运行,数据采集精准、窗帘控制可靠、语音播报清晰、蓝牙通讯稳定,避免因系统故障影响用户使用,保障家居安全。
  • 便捷性原则:操作流程简洁直观,用户通过按键即可完成模式切换、手动控制、定时设置等操作;OLED显示界面清晰、数据直观;蓝牙APP操作简便,便于远程控制,无需专业操作知识。
  • 低成本原则:在满足核心功能需求的前提下,选用性价比高的元器件,简化硬件电路设计,降低系统整体成本,便于普通家庭大规模推广应用。
  • 可扩展性原则:系统采用模块化设计,预留功能扩展接口,便于后续新增功能(如语音控制、与其他智能家居设备联动等),提升系统的适用性与可持续性。

2.2 系统总体架构

本系统以STM32F103C8T6单片机为核心,采用模块化设计思路,结合项目功能要求,将系统划分为9个功能模块,分别为核心控制模块、传感器采集模块、DS1302时钟模块、OLED显示模块、JR6001语音模块、蓝牙通讯模块、窗帘驱动模块、按键模块、电源模块。系统总体架构如图2-1所示。

核心控制模块是系统的核心,负责接收各模块的输入信号(传感器数据、键盘指令、蓝牙指令、时钟信号),进行数据处理、逻辑判断,控制各模块的工作;传感器采集模块负责采集环境光强度、温湿度、一氧化碳浓度,将采集到的模拟信号或数字信号传输至核心控制器;DS1302时钟模块负责提供精准的当前时间,传输至核心控制器与OLED显示模块;OLED显示模块负责实时显示时间、环境数据及系统工作模式;JR6001语音模块负责接收核心控制器的指令,驱动扬声器播报提示音与预警信息;蓝牙通讯模块负责实现系统与手机APP的无线通讯,完成数据传输与控制指令下发;窗帘驱动模块负责接收核心控制器的指令,驱动步进电机运转,实现窗帘的开合控制;按键模块负责接收用户的手动操作指令,实现模式切换、手动控制、定时设置等功能;电源模块为整个系统提供稳定的供电。

图2-1 系统总体架构图

2.3 核心元器件选型与方案论证

系统元器件的选型严格遵循项目功能要求,结合设计需求与原则,对核心元器件进行选型与方案论证如下,确保元器件适配性强、性能稳定、性价比高:

2.3.1 核心控制器选型

选用STM32F103C8T6最小系统板作为核心控制器。STM32F103C8T6是基于ARM Cortex-M3内核的32位微控制器,最高主频可达72MHz,运算性能强劲,能够快速处理多传感器采集的数据与各类控制指令;内置64KB Flash、20KB RAM,可满足系统程序存储与数据缓存需求;外设资源丰富,包含GPIO、I2C、UART、ADC等,可直接适配各类传感器、显示模块、蓝牙模块与执行机构,开发生态完善,支持标准库与HAL库,大幅降低开发难度;同时具备低功耗模式,适配系统长期运行需求,且成本适中,性价比高,完全满足本系统多模块协同工作、实时数据处理与精准控制的核心需求。

2.3.2 传感器采集模块选型

按照项目功能要求,选用三类传感器,确保采集功能达标:

  • 光照传感器:选用光敏电阻。该传感器结构简单、价格低廉、响应迅速,可将环境光强度转换为模拟信号,通过STM32的ADC接口采集并处理,能够精准检测室内光照变化,为自动模式下窗帘的自适应调节提供依据,且易集成、适配性强。
  • 温湿度传感器:选用DHT11温湿度传感器。该传感器价格低廉、接口简单,采用单总线通信协议,可同时采集温度与湿度数据,测量范围为温度0-50℃、湿度20%-90%RH,精度满足家居环境监测需求,无需复杂的驱动电路,与STM32对接便捷,适合本系统使用。
  • 危险气体传感器:选用MQ-7一氧化碳传感器。该传感器对一氧化碳气体具有较高的灵敏度,测量范围广,输出模拟信号,可通过STM32的ADC接口采集信号并转换为一氧化碳浓度数据,当浓度超标时可触发语音预警,适配家居安全监测需求,且成本低廉、性能稳定。

2.3.3 时钟模块选型

选用DS1302时钟模块。该模块是一种高性能的实时时钟芯片,能够精准提供年、月、日、时、分、秒等时间信息,支持闰年补偿功能,计时精度高;采用I2C通信协议与STM32对接,接口简单,程序控制便捷;内置备用电池接口,在系统断电时可通过备用电池继续计时,确保时间数据不丢失,完全满足本系统的时钟显示与定时控制需求。

2.3.4 显示模块选型

选用OLED液晶显示屏(4针IIC协议)。OLED显示屏采用自发光技术,无需背光,功耗低;可视角度宽、显示清晰,字体可调节,支持图形与字符显示,可实现时间、温湿度、光照强度、一氧化碳浓度、系统模式的分区显示,便于用户快速查看;4针IIC接口简化了电路设计,与STM32的I2C接口对接便捷,体积小巧、易集成,且成本适中,完全满足本系统的显示需求。

2.3.5 语音模块选型

选用项目要求中的JR6001语音模块。该模块支持语音播报功能,可预先录制窗帘开关、模式切换、定时触发、一氧化碳超标预警等提示音,触发方式简单,可通过STM32的GPIO引脚直接控制;支持扬声器驱动,播报清晰、音量可调,适配家居使用场景,且成本低廉、操作便捷,完全满足本系统的语音播报需求。

2.3.6 蓝牙通讯模块选型

选用BT04A蓝牙模块。该模块支持蓝牙4.0协议,功耗低、兼容性强,采用UART通信协议与STM32对接,接口简单,程序控制便捷;可实现系统与手机APP的双向数据传输,支持远程查看环境数据、下发窗帘控制指令、切换工作模式、设置定时时间等功能,传输距离可达10米,完全适配家居使用场景,满足远程控制需求。

2.3.7 窗帘驱动模块选型

窗帘驱动模块由步进电机与L298N驱动模块组成。步进电机选用28BYJ48步进电机,工作电压为5V,与系统电源适配,转速可调、控制精准,能够实现窗帘的平稳开合,且体积小巧、噪音低,适合家居使用;L298N驱动模块集成驱动电路,无需额外设计驱动电路,可直接由STM32的GPIO引脚控制,用于驱动步进电机运转,开关可靠,保护核心控制器,同时支持正反转控制,满足窗帘开合的控制需求。

2.3.8 按键模块选型

选用独立按键,共设置6个按键,分别用于模式切换、窗帘开、窗帘关、定时设置、定时启动/停止、系统复位。按键结构简单、价格低廉,一端接地,另一端通过上拉电阻与STM32的GPIO引脚相连,程序控制简单,能够精准接收用户的手动操作指令,且易集成,满足系统的手动控制与参数设置需求。

2.3.9 电源模块选型

系统采用5V直流电源(适配器)供电,选用AMS1117-3.3V稳压芯片,将5V电压转换为稳定的3.3V,为STM32、OLED显示屏、传感器、蓝牙模块、时钟模块等提供供电;步进电机、L298N驱动模块、JR6001语音模块直接采用5V电源供电,确保设备可靠工作。电源电路中加入电容滤波,减少电压波动,确保电源稳定;同时加入电源指示LED,便于判断系统供电状态;加入保险丝,防止电路短路损坏元器件,保障系统安全运行。

3 系统硬件设计

系统硬件设计以STM32F103C8T6为核心,严格按照项目功能要求选用元器件,按照各功能模块的划分,分别设计硬件电路,确保各模块之间连接可靠、数据传输稳定,满足系统各项功能需求。本章详细介绍各功能模块的硬件电路设计原理与连接方式。

3.1 核心控制模块电路设计

核心控制模块以STM32F103C8T6最小系统板为核心,主要包括电源电路、复位电路、晶振电路,为整个系统提供稳定的工作环境,是系统正常运行的基础。

3.1.1 电源电路

STM32F103C8T6的工作电压为3.3V,系统采用5V直流电源(适配器)供电。电源电路中,通过AMS1117-3.3V稳压芯片将5V输入电压转换为稳定的3.3V,为STM32及OLED、传感器、蓝牙模块、时钟模块等提供供电;步进电机、L298N驱动模块、JR6001语音模块直接接入5V电源,确保其正常工作。电源电路中加入0.1μF陶瓷电容与10μF电解电容进行滤波,减少电压波动;加入电源指示LED(串联220Ω限流电阻),便于判断系统是否正常供电;加入保险丝,防止电路短路损坏元器件。电源电路如图3-1所示。

3.1.2 复位电路

系统采用手动复位与上电复位相结合的方式,复位电路由复位按键、10KΩ上拉电阻、1μF电容组成。上电时,电容充电,产生复位信号,实现系统上电自动复位;手动按下复位按键时,电容放电,触发复位,实现系统重启。复位电路确保系统在出现异常时,可快速恢复正常工作,电路设计简单、可靠。复位电路如图3-2所示。

3.1.3 晶振电路

STM32F103C8T6采用外部晶振电路,选用8MHz晶振,通过两个18pF电容与单片机的晶振引脚(OSC_IN、OSC_OUT)连接,为单片机提供稳定的时钟信号。晶振电路经过单片机内部倍频后,可输出72MHz的系统时钟,满足系统数据采集、处理与控制的实时性需求。晶振电路如图3-3所示。

3.2 传感器采集模块电路设计

传感器采集模块由光敏电阻、DHT11温湿度传感器、MQ-7一氧化碳传感器组成,负责采集各类环境参数,传输至核心控制器进行处理。

3.2.1 光敏电阻电路

光敏电阻采用串联分压电路设计,VCC引脚接入3.3V电源,GND引脚接地,信号输出引脚与STM32的PA0引脚(ADC接口)相连,串联1KΩ限流电阻。光照强度变化时,光敏电阻的阻值随之变化,输出电压也随之变化,STM32通过PA0引脚采集模拟信号,经ADC转换为数字信号,得到环境光强度数据。电路中加入0.1μF滤波电容,减少信号干扰,确保采集数据稳定。光敏电阻电路如图3-4所示。

3.2.2 DHT11温湿度传感器电路

DHT11温湿度传感器采用单总线通信协议,VCC引脚接入3.3V电源,GND引脚接地,DATA引脚(数据引脚)与STM32的PB0引脚相连,串联1KΩ限流电阻,防止电流过大损坏传感器与单片机。STM32通过DATA引脚向传感器发送指令,接收传感器反馈的温湿度数据,实现温湿度的实时采集。DHT11电路如图3-5所示。

3.2.3 MQ-7一氧化碳传感器电路

MQ-7一氧化碳传感器输出模拟信号,VCC引脚接入5V电源,GND引脚接地,AO引脚(模拟输出引脚)与STM32的PA1引脚(ADC接口)相连,DO引脚(数字输出引脚)悬空(本系统采用模拟信号采集,提高测量精度)。传感器采集的一氧化碳浓度模拟信号通过PA1引脚传输至STM32,经ADC转换为数字信号,实现一氧化碳浓度的精准采集。电路中加入0.1μF滤波电容,减少信号干扰,确保采集数据稳定。MQ-7电路如图3-6所示。

3.3 DS1302时钟模块电路设计

DS1302时钟模块采用I2C通信协议与STM32对接,VCC引脚接入3.3V电源,GND引脚接地,SDA引脚(数据线)与STM32的PB7引脚相连,SCL引脚(时钟线)与STM32的PB6引脚相连。模块内置备用电池接口,接入CR2032纽扣电池,确保系统断电时仍能正常计时。STM32通过I2C通信协议读取DS1302的时间数据,同时可设置时间参数,实现时间的同步与校准。电路中加入1KΩ限流电阻与0.1μF滤波电容,确保通讯稳定,数据传输准确。DS1302时钟模块电路如图3-7所示。

3.4 OLED显示模块电路设计

本系统选用OLED液晶显示屏(4针IIC协议),其工作电压为3.3V,与STM32的供电电压一致,无需额外的电平转换电路。OLED屏幕的VCC引脚接入3.3V电源,GND引脚接地,SDA引脚(数据线)与STM32的PB7引脚(与DS1302共用I2C接口)相连,SCL引脚(时钟线)与STM32的PB6引脚相连。STM32通过I2C通信协议向OLED发送显示指令与数据,控制OLED屏幕分区显示时间、温湿度、光照强度、一氧化碳浓度及系统工作模式。电路中加入1KΩ限流电阻,确保数据传输稳定,减少干扰。OLED显示电路如图3-8所示。

3.5 JR6001语音模块电路设计

JR6001语音模块VCC引脚接入5V电源,GND引脚接地,TRIG引脚(触发引脚)与STM32的PB8引脚相连,SPK+、SPK-引脚连接扬声器。预先在语音模块中录制各类提示音(如“窗帘已打开”“窗帘已关闭”“模式切换为自动”“一氧化碳浓度超标,请及时通风”等),当系统执行对应操作或检测到一氧化碳浓度超标时,STM32控制PB8引脚输出高电平,触发语音模块播放对应语音;操作完成或危险解除后,停止播放。电路中加入0.1μF滤波电容,确保模块工作稳定,语音播报清晰。JR6001语音模块电路如图3-9所示。

3.6 蓝牙通讯模块电路设计

本系统选用BT04A蓝牙模块,采用UART通信协议与STM32对接,其VCC引脚接入5V电源,GND引脚接地,TXD引脚(发送端)与STM32的PA5引脚(RXD)相连,RXD引脚(接收端)与STM32的PA6引脚(TXD)相连。STM32通过UART通信协议向蓝牙模块发送环境数据、时间数据、系统模式等信息,同时接收手机APP发送的控制指令(窗帘开关、模式切换、定时设置等);蓝牙模块与手机APP配对后,实现数据的双向传输。电路中加入0.1μF滤波电容,减少信号干扰,确保通讯稳定。蓝牙通讯模块电路如图3-10所示。

3.7 窗帘驱动模块电路设计

窗帘驱动模块由28BYJ48步进电机与L298N驱动模块组成,负责接收核心控制器的指令,实现窗帘的开合控制。

L298N驱动模块VCC引脚接入5V电源,GND引脚接地,ENA、ENB引脚(使能引脚)均接高电平(始终使能),IN1、IN2、IN3、IN4引脚(控制引脚)分别与STM32的PB1、PB2、PB3、PB4引脚相连;步进电机的四个接线端分别与L298N驱动模块的OUT1、OUT2、OUT3、OUT4引脚相连。STM32通过控制IN1-IN4引脚的电平变化,输出不同的控制信号,驱动步进电机正反转、调速,实现窗帘的打开与关闭。电路中加入续流二极管,保护驱动模块与步进电机,避免启停时产生的反向电动势损坏元器件;加入LED指示灯,显示驱动模块的工作状态,便于观察。窗帘驱动模块电路如图3-11所示。

3.8 按键模块电路设计

系统设置6个独立按键,分别为模式切换键、窗帘开键、窗帘关键、定时设置键、定时启动/停止键、复位键。按键一端接地,另一端通过10KΩ上拉电阻分别与STM32的PA7、PA8、PA9、PA10、PA11、PA12引脚相连。当按下按键时,对应引脚电平变为低电平,STM32检测到电平变化后,识别按键功能并执行对应操作;松开按键时,引脚电平恢复高电平。电路中每个按键两端并联0.1μF消抖电容,消除机械按键的抖动干扰,确保按键识别精准、无误触发。按键模块电路如图3-12所示。

3.9 系统总电路图

将各功能模块电路整合,得到系统总电路图,各模块通过STM32的GPIO、I2C、UART、ADC等外设接口连接,实现环境采集、时钟同步、显示、多模式控制、语音播报、蓝牙遥控等功能。系统总电路图如图3-13所示,各模块连接可靠,电路布局合理,便于焊接与调试,同时考虑了系统的安全性与稳定性,严格贴合项目功能要求与元器件选型。

4 系统软件设计

系统软件设计基于Keil µVision5开发环境,采用C语言进行模块化编程,遵循“初始化-数据采集-数据处理-功能执行-显示反馈-通讯交互”的逻辑,实现系统各项核心功能。本章详细介绍软件总体设计、各功能模块程序设计及程序流程图。

4.1 软件开发环境与编程语言

4.1.1 开发环境

本系统软件开发选用Keil µVision5集成开发环境,该环境是面向ARM架构微控制器的专业开发工具,集成了代码编辑、项目管理、编译构建、在线调试等全流程功能,支持STM32F1系列芯片的开发。Keil µVision5内置STM32F103C8T6的器件库,可快速配置芯片时钟、外设引脚等参数,大幅提升开发效率;同时支持ST-Link仿真器在线调试,便于排查程序逻辑错误,优化程序性能。

4.1.2 编程语言

系统硬件程序选用C语言作为编程语言,C语言具备底层硬件访问能力,可直接操控STM32的寄存器,适配传感器采集、显示控制、电机驱动、蓝牙通讯等底层操作;同时C语言生态成熟,开源资源丰富,可复用各类模块的驱动程序、通信协议代码(如I2C、UART、ADC),大幅降低开发难度;模块化编程特性便于程序的维护与功能扩展,符合系统的设计需求。

4.2 软件总体设计

系统软件采用模块化设计,将各功能模块拆分为独立的子程序(如初始化子程序、传感器采集子程序、时钟同步子程序、OLED显示子程序、多模式控制子程序、语音播报子程序、蓝牙通讯子程序、定时控制子程序等),由主程序统一调度,确保程序逻辑清晰、结构合理、易维护。软件总体流程如下:

  • 系统上电后,首先进行系统初始化,包括STM32外设初始化(GPIO、I2C、UART、ADC)、OLED显示初始化、各传感器初始化、DS1302时钟模块初始化、JR6001语音模块初始化、蓝牙模块初始化、步进电机初始化、按键初始化及系统参数初始化(如模式默认设为自动、定时时间默认清零、预警阈值设置、窗帘初始状态设为关闭)。
  • 初始化完成后,系统进入主循环,首先通过DS1302时钟模块读取当前时间,通过传感器采集模块采集环境光强度、温湿度、一氧化碳浓度,将采集到的模拟信号转换为数字信号并进行滤波处理,确保数据准确。
  • 数据处理完成后,通过OLED显示屏实时显示当前时间、温湿度、环境光强度、一氧化碳浓度及系统工作模式;同时将环境数据、时间数据、系统模式通过蓝牙模块传输至手机APP,供用户远程查看。
  • 检测按键输入,若检测到模式切换键,切换系统工作模式(自动→手动→定时→遥控→自动循环),触发语音播报模式切换提示音,并更新OLED显示;若检测到窗帘开/关键,控制窗帘开合,触发对应语音播报;若检测到定时设置键,进入定时设置界面,通过按键设置窗帘开关时间;若检测到定时启动/停止键,启动或停止定时功能;若检测到复位键,系统重启并恢复初始设置。
  • 根据当前系统模式执行对应功能:
            
  • 自动模式:对比环境光强度与预设阈值,光照强度高于阈值(强光)时,控制窗帘关闭,触发“窗帘已关闭”语音播报;光照强度低于阈值(弱光/夜间)时,控制窗帘打开,触发“窗帘已打开”语音播报;实时监测一氧化碳浓度,若浓度超标,触发“一氧化碳浓度超标,请及时通风”语音播报,直至浓度降至阈值以下。
  • 手动模式:仅响应按键控制指令,按下窗帘开键,窗帘打开并播报提示音;按下窗帘关键,窗帘关闭并播报提示音;忽略自动调节与定时控制逻辑。
  • 定时模式:若定时功能已启动,对比当前时间与预设开关时间,到达预设打开时间,控制窗帘打开并播报提示音;到达预设关闭时间,控制窗帘关闭并播报提示音;定时期间可通过按键暂停或取消定时。
  • 遥控模式:忽略按键控制(除复位键外),仅响应手机APP下发的控制指令,执行窗帘开关、模式切换、定时设置等操作,完成后触发对应语音播报,并向APP反馈操作结果。
  • 检测蓝牙连接状态,若与手机APP配对连接,接收APP下发的控制指令,解析指令内容并执行对应操作,同时将操作结果、环境数据、时间数据反馈至APP;若蓝牙连接中断,系统自动切换为自动模式,继续执行本地操作,待重新配对后恢复遥控模式功能。

系统软件总体流程图如图4-1所示。

4.3 各功能模块程序设计

4.3.1 系统初始化程序设计

系统初始化程序是系统正常工作的基础,主要包括STM32外设初始化与各模块初始化,具体如下:

  • GPIO初始化:配置各模块的GPIO引脚,设置引脚为输入或输出模式,如按键引脚设为输入模式,OLED、语音模块、步进电机、驱动模块的引脚设为输出模式;配置I2C(OLED、DS1302)、UART(蓝牙)、ADC(光敏电阻、MQ-7)通信引脚的工作模式。
  • ADC初始化:配置STM32的ADC接口,设置采样率与转换模式,用于采集光敏电阻、MQ-7传感器的模拟信号,将其转换为数字信号。
  • 传感器初始化:初始化DHT11温湿度传感器、MQ-7一氧化碳传感器、光敏电阻,确保各传感器正常工作,能够准确采集数据。
  • DS1302时钟初始化:配置DS1302时钟模块的工作模式,读取当前时间数据,若系统断电后重新上电,校准时间;若为首次上电,设置初始时间(如2026-01-01 00:00:00)。
  • OLED初始化:配置OLED屏幕的显示参数(如分辨率、显示模式),清除屏幕残留数据,初始化显示界面,显示系统名称、当前时间、环境参数初始值、系统默认模式(自动)及窗帘初始状态(关闭)。
  • 蓝牙模块初始化:配置BT04A蓝牙模块的工作模式(配对模式),设置蓝牙名称、波特率(9600bps),初始化UART通信,确保蓝牙模块能正常与手机APP配对、通讯。
  • 步进电机与驱动模块初始化:初始化步进电机的转动方向、转速,设置电机初始状态为停止,驱动模块使能,确保电机能够正常响应控制指令。
  • 语音模块初始化:初始化JR6001语音模块,检测模块是否正常工作,预设语音播报的触发条件,确保模块能准确响应STM32的触发指令。
  • 系统参数初始化:设置各项参数的默认值,包括光照强度阈值(如500lux)、一氧化碳浓度预警阈值(如100ppm)、系统默认工作模式(自动)、窗帘初始状态(关闭)、定时时间(默认00:00)、定时功能状态(关闭)。

4.3.2 传感器采集程序设计

传感器采集程序负责采集各类环境参数,进行数据滤波处理,确保数据准确可靠,具体逻辑如下:

  • 光照强度采集:通过STM32的PA0引脚(ADC接口)采集光敏电阻的模拟信号,经ADC转换为数字信号,根据串联分压原理将数字信号转换为光照强度值(lux),进行多次采样取平均值,滤波处理,去除干扰信号,确保数据稳定。
  • 温湿度采集:通过STM32的PB0引脚向DHT11传感器发送启动指令,等待传感器反馈数据,解析反馈数据得到温度与湿度值,对数据进行滤波处理,剔除异常值,确保采集精度。
  • 一氧化碳浓度采集:通过STM32的PA1引脚(ADC接口)采集MQ-7传感器的模拟信号,经ADC转换为数字信号,根据传感器的校准曲线将数字信号转换为一氧化碳浓度值(ppm),进行多次采样取平均值,滤波处理,减少信号干扰,确保采集数据准确。

传感器采集程序流程图如图4-2所示。

4.3.3 时钟同步与定时控制程序设计

时钟同步与定时控制程序负责实现时间同步、定时设置与定时执行,具体逻辑如下:

  • 时钟同步:每隔1秒通过I2C通信读取DS1302时钟模块的时间数据(年、月、日、时、分、秒),更新系统时间变量,同步更新OLED显示的时间信息,确保时间精准。
  • 定时设置:检测到定时设置键按下时,进入定时设置界面,OLED屏幕显示“定时设置”提示,通过窗帘开/关键切换设置“打开时间”或“关闭时间”,通过模式切换键调节时、分参数,按下定时启动/停止键保存设置并退出设置界面。
  • 定时执行:若定时功能已启动,实时对比当前时间与预设的打开、关闭时间,当当前时间与预设打开时间一致时,控制窗帘打开,触发“窗帘已打开,定时执行”语音播报;当当前时间与预设关闭时间一致时,控制窗帘关闭,触发“窗帘已关闭,定时执行”语音播报;定时执行完成后,可自动重复执行(每日同一时间),也可手动停止定时功能。

时钟同步与定时控制程序流程图如图4-3所示。

4.3.4 OLED显示程序设计

OLED显示程序负责将系统状态、时间、环境数据等信息实时显示在屏幕上,采用分区显示方式,界面简洁、数据直观,便于用户查看,具体设计如下:

  • 屏幕分区:将OLED12864屏幕分为5个区域,第一区域显示系统名称(“STM32智能语音窗帘系统”);第二区域显示当前时间(“时间:2026-01-01 00:00:00”);第三区域显示温湿度数据(“温度:XX℃ 湿度:XX%RH”);第四区域显示环境光强度与一氧化碳浓度(“光照:XXXlux 一氧化碳:XXXppm”);第五区域显示系统工作模式与窗帘状态(“模式:自动 窗帘:关闭”)。
  • 显示更新:时间每隔1秒更新一次,环境数据每隔0.5秒更新一次;模式切换、窗帘状态变化、定时设置、蓝牙连接状态变化时,同步更新对应区域的显示内容;一氧化碳浓度超标时,在对应数据旁显示“预警”提示,提醒用户。
  • 显示控制:字体选用大号字体,颜色清晰,数据保留一位小数(温湿度、光照、一氧化碳浓度),确保用户能快速读取信息;工作模式、窗帘状态、预警提示采用高亮显示,便于区分。

4.3.5 多模式控制程序设计

多模式控制程序负责实现自动、手动、定时、遥控四种模式的切换与功能执行,具体逻辑如下:

  • 模式切换:检测到模式切换按键按下时,按照“自动→手动→定时→遥控”的顺序切换系统工作模式,触发对应语音播报(如“模式切换为手动”),更新OLED显示的模式信息;切换时,停止当前正在执行的操作(如窗帘运动、定时执行),初始化模式相关标志位,确保切换流畅。
  • 自动模式执行:实时对比采集到的光照强度与预设阈值(500lux),若光照强度>阈值,控制步进电机正转,窗帘关闭,播报“窗帘已关闭”;若光照强度≤阈值,控制步进电机反转,窗帘打开,播报“窗帘已打开”;实时监测一氧化碳浓度,若浓度>预警阈值(100ppm),持续播报“一氧化碳浓度超标,请及时通风”,直至浓度降至阈值以下。
  • 手动模式执行:忽略自动调节与定时控制逻辑,仅响应按键控制指令:
            
  • 按下窗帘开键:控制步进电机反转,窗帘打开,播报“窗帘已打开”,更新OLED显示的窗帘状态。
  • 按下窗帘关键:控制步进电机正转,窗帘关闭,播报“窗帘已关闭”,更新OLED显示的窗帘状态。
  • 定时模式执行:若定时功能已启动,按照定时设置程序的逻辑执行窗帘开关操作,执行完成后播报对应提示音;定时期间,可通过定时启动/停止键暂停或取消定时,暂停时播报“定时已暂停”,取消时播报“定时已取消”。
  • 遥控模式执行:忽略按键控制(除复位键外),仅响应手机APP下发的控制指令:
            
  • 窗帘开关指令:执行窗帘打开或关闭操作,播报对应提示音,更新OLED显示,并向APP反馈操作结果。
  • 模式切换指令:切换系统工作模式,播报对应提示音,更新OLED显示,并向APP反馈切换结果。
  • 定时设置指令:接收APP下发的定时时间,更新系统定时参数,保存并向APP反馈设置结果。
  • 定时启动/停止指令:启动或停止定时功能,播报对应提示音,并向APP反馈功能状态。

多模式控制程序流程图如图4-4所示。

4.3.6 语音播报程序设计

语音播报程序负责接收核心控制器的指令,驱动JR6001语音模块播放对应提示音,具体逻辑如下:

  • 语音触发条件:预设多种语音触发场景,包括窗帘打开、窗帘关闭、模式切换、定时执行、定时暂停/取消、一氧化碳浓度超标、蓝牙连接/断开、系统初始化完成。
  • 语音播报控制:STM32通过PB8引脚输出高电平触发语音模块,不同的触发场景对应不同的语音片段,通过控制触发时长或触发次数,选择播放对应的语音;语音播放时,暂停其他非紧急操作(如环境数据采集除外),确保播报清晰;播放完成后,恢复正常操作。
  • 异常处理:若语音模块未正常触发,系统重新发送触发指令,最多重试3次;若仍未触发,在OLED屏幕显示“语音模块异常”提示,提醒用户检查模块连接。

4.3.7 蓝牙通讯程序设计

蓝牙通讯程序负责实现系统与手机APP的双向通讯,完成数据远程查看与控制指令下发,具体逻辑如下:

  • 蓝牙配对:系统初始化后,BT04A蓝牙模块进入配对模式,手机APP搜索蓝牙设备,输入配对密码(默认1234),完成配对后,蓝牙连接标志位设为1,OLED屏幕显示“蓝牙:已连接”,同时向APP发送系统初始状态信息(模式、窗帘状态、时间、环境数据、定时参数)。
  • 数据发送:环境数据、时间数据每隔0.5秒通过UART通信向蓝牙模块发送一次,系统模式、窗帘状态、定时状态变化时,立即向APP发送更新信息;确保APP能实时查看系统状态。
  • 指令接收:STM32实时接收蓝牙模块传输的手机APP指令,解析指令内容,执行对应操作,并向APP反馈操作结果(如“窗帘已打开”“模式切换成功”);若指令解析失败,向APP发送“指令错误,请重新发送”提示。
  • 通讯异常处理:若蓝牙连接中断,蓝牙连接标志位设为0,OLED屏幕显示“蓝牙:未连接”,系统自动切换为自动模式,继续执行本地操作;待蓝牙重新配对后,恢复遥控模式功能,并向APP发送“蓝牙已重新连接”提示。

蓝牙通讯程序流程图如图4-5所示。

4.3.8 窗帘驱动程序设计

窗帘驱动程序负责控制步进电机的运转,实现窗帘的平稳开合,具体逻辑如下:

  • 电机控制逻辑:通过控制L298N驱动模块的IN1-IN4引脚电平变化,输出不同的控制信号,驱动步进电机正转(窗帘关闭)、反转(窗帘打开)、停止;设置电机转速(如10转/分钟),确保窗帘开合平稳、噪音低。
  • 行程控制:预设窗帘开合的最大行程,通过电机转动的步数控制窗帘开合程度,避免电机过载或窗帘损坏;当窗帘达到最大打开或关闭位置时,自动控制电机停止,播报对应提示音。
  • 异常处理:若电机未正常运转(如卡阻),系统检测到电机电流异常,立即停止电机运转,播报“窗帘卡阻,请检查”提示音,并在OLED屏幕显示异常信息,保护电机与驱动模块。

5 系统调试与测试

为验证系统的可行性与稳定性,确保各项功能达到设计目标,严格按照项目功能要求搭建硬件电路,对系统进行硬件调试与软件调试,随后开展系统功能测试、数据采集精度测试、控制

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐