STM32智能语音风扇毕业论文

摘要

随着智能家居技术的快速发展,传统风扇已难以满足人们对便捷化、智能化生活的需求。本文设计并实现了一款基于STM32F103C8T6单片机的智能语音风扇,集成温湿度采集、人体检测、语音控制、蓝牙APP控制、自动/手动模式切换、定时功能、报警提醒等多项功能,旨在提升风扇使用的便捷性、智能化水平和用户体验,实现风扇的个性化、自动化控制。本文详细阐述了系统的整体架构、硬件选型与设计、软件程序开发、系统调试与测试等内容,通过实际测试验证,系统运行稳定、功能完善,能够根据环境变化和用户指令灵活调整工作状态,具有较强的实用性、创新性和推广价值。

关键词:STM32F103C8T6;智能风扇;语音控制;蓝牙通信;自动控制;温湿度检测

第一章 绪论

1.1 研究背景与意义

在现代家庭和办公环境中,风扇作为一种常用的降温设备,广泛应用于日常生活和工作中。传统风扇多采用手动按键控制,功能单一,操作繁琐,无法实现根据环境变化自动调整工作状态,且缺乏远程控制、语音控制等便捷操作方式,难以适配智能家居的发展趋势。

随着物联网、嵌入式技术和语音识别技术的不断进步,智能风扇逐渐成为智能家居领域的重要组成部分。基于此,本文设计的STM32智能语音风扇,整合多种传感器与控制模块,实现温湿度监测、人体感应、语音控制、蓝牙APP远程控制等功能,不仅能够解放用户的双手,还能根据环境温湿度和人体存在状态自动调节风扇工作模式,提升使用便捷性和舒适性,对推动智能家居设备的普及和发展具有重要的理论意义和实际应用价值。

1.2 国内外研究现状

国外智能风扇技术发展较早,产品多具备智能调速、远程控制、语音交互等功能,依托先进的传感器技术和物联网技术,实现与智能家居系统的无缝对接,但产品价格较高,且部分功能适配性较差,难以满足国内普通用户的需求。国内智能风扇近年来发展迅速,各类产品不断涌现,但多数产品存在功能单一、语音识别准确率低、自动控制逻辑不完善、蓝牙连接不稳定等问题,部分产品缺乏定时功能、报警提醒等实用功能,无法全面覆盖用户的使用需求。

本文在现有研究的基础上,优化系统架构,整合语音控制、蓝牙APP控制、人体检测、温湿度采集等多种功能,提升语音识别准确率和系统稳定性,设计合理的自动控制逻辑,同时控制硬件成本,打造性价比高、操作便捷、功能完善的智能语音风扇,弥补现有产品的不足。

1.3 研究内容与目标

1.3.1 研究内容

本文主要研究基于STM32F103C8T6单片机的智能语音风扇的设计与实现,具体内容包括:

  • 系统整体架构设计,明确各模块的功能划分、交互逻辑和工作流程;
  • 硬件电路设计,包括单片机最小系统、传感器模块、执行器模块、通信模块、语音模块、显示模块等的选型与连接;
  • 软件程序开发,包括主程序、传感器数据采集程序、语音识别程序、蓝牙通信程序、执行器控制程序、人机交互程序等;
  • 系统调试与测试,验证系统各功能的稳定性、准确性和可靠性,优化系统性能,解决测试过程中出现的问题。

1.3.2 研究目标

设计一款功能完善、运行稳定、操作便捷、智能化程度高的STM32智能语音风扇,具体目标如下:

  • 实现环境温湿度的实时采集与OLED屏幕显示,采集数据准确、稳定;
  • 实现人体检测功能,能够准确判断周围是否有人,为自动模式提供触发条件;
  • 实现手动、自动、语音三种工作模式,支持模式灵活切换,满足不同使用场景需求;
  • 实现语音控制功能,能够准确识别用户语音指令,控制风扇风速、模式切换和摇头功能;
  • 实现蓝牙APP控制功能,可通过手机APP接收环境温湿度、人体状态等数据,下发控制指令;
  • 实现定时功能,支持倒计时设置,定时结束后自动关闭风扇(自动模式下);
  • 实现报警提醒功能,自动模式下环境温度超过设定最大值时,蜂鸣器发出报警信号;
  • 确保系统运行稳定,语音识别准确率≥90%,蓝牙连接稳定,控制响应及时。

1.4 论文结构安排

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

第1章为绪论,阐述研究背景与意义、国内外研究现状、研究内容与目标及论文结构安排;

第2章为系统总体设计,介绍系统的整体架构、功能需求分析、性能需求分析及设计原则;

第3章为系统硬件设计,详细介绍各元器件的选型依据、硬件电路的设计与绘制;

第4章为系统软件设计,阐述软件总体流程、各模块程序的开发思路与实现代码;

第5章为系统调试与测试,介绍调试环境、调试过程及测试结果,验证系统功能与性能;

第6章为总结与展望,总结本文的研究成果,分析系统存在的不足,并对未来的优化方向进行展望。

第二章 系统总体设计

2.1 系统整体架构

本系统以STM32F103C8T6单片机为核心控制单元,采用“核心控制模块+传感器采集模块+执行器控制模块+显示模块+语音模块+通信模块+人机交互模块”的架构设计,各模块相互协作、紧密配合,实现系统的各项功能。系统整体架构如图2-1所示(此处可插入架构图),具体模块划分如下:

  • 核心控制模块:以STM32F103C8T6单片机为核心,负责接收各传感器的采集数据,解析语音指令和蓝牙指令,处理用户按键操作,控制执行器动作,实现系统的整体调度和协调工作;
  • 传感器采集模块:包括DHT11温湿度传感器和光电红外传感器,负责采集环境温湿度数据和人体存在状态,为系统自动控制提供数据支撑;
  • 执行器控制模块:包括风扇模块、步进电机、TB6612电机驱动模块、ULN2003步进电机驱动芯片、有源蜂鸣器、LED灯,负责执行风扇启停、风速调节、摇头、报警提醒、照明等动作;
  • 显示模块:采用OLED屏幕,实时显示环境温湿度、人体存在状态、风扇工作模式、风速、倒计时等信息,方便用户直观查看;
  • 语音模块:采用SNR8016语音模块,负责接收用户语音指令,进行语音识别并将识别结果传输至单片机,实现语音控制功能;
  • 通信模块:采用BT04A蓝牙模块,实现单片机与手机APP的无线通信,支持环境数据上传和控制指令下发;
  • 人机交互模块:通过按键实现手动模式下风扇风速调节、摇头控制、照明灯开关、定时设置、模式切换等操作,提升用户操作便捷性。

2.2 系统功能需求分析

结合用户使用需求和智能风扇的应用场景,本系统具备以下11项核心功能,具体如下:

  1. 主控单元:以STM32F103C8T6单片机作为主控单元,负责系统的整体控制和数据处理,协调各模块有序工作;
  1. 温湿度采集:通过DHT11温湿度传感器实时采集环境温度和湿度,采集数据传输至单片机,用于显示和自动控制逻辑判断;
  1. 人体检测:通过光电红外传感器检测周围是否有人,检测信号反馈至单片机,为自动模式下风扇的启停和风速调节提供触发条件;
  1. 屏幕显示:通过OLED屏幕实时显示环境温度、湿度、人体存在状态(有/无人)、风扇工作模式、风速等级、定时倒计时等信息,显示清晰、直观;
  1. 风扇摇头:通过步进电机(配合ULN2003步进电机驱动芯片)模拟风扇摇头动作,可通过手动按键、语音指令、蓝牙APP控制摇头的启停;
  1. 手动模式:用户通过按键调节风扇风速(高、中、低三档)、控制摇头功能的启停、控制LED照明灯的开关,实现手动精准控制;
  1. 自动模式:系统进入自动模式后,根据光电红外传感器检测的人体状态和DHT11采集的环境温度,自动控制风扇的启停和风速调节;无人时风扇自动关闭,有人时根据温度高低调整风速(温度越高,风速越大);
  1. 语音模式:通过SNR8016语音模块接收用户语音指令,可实现风速调节(高、中、低)、模式切换(手动/自动/语音)、摇头启停等功能,语音识别准确、响应及时;
  1. 定时功能:用户可通过按键或蓝牙APP设置倒计时时间(0~60分钟可调),开启定时功能后,自动模式下风扇将在倒计时结束后自动关闭,满足用户定时使用需求;
  1. 报警提醒:自动模式下,当环境温度超过设定的最大温度阈值(可调节)时,有源蜂鸣器发出持续报警信号,提醒用户环境温度过高;
  1. APP控制:通过BT04A蓝牙模块实现单片机与手机APP的连接,手机APP可实时接收系统上传的环境温湿度、人体状态等数据,同时可下发控制指令,实现风扇启停、风速调节、摇头控制、模式切换、定时设置等功能。

2.3 系统性能需求分析

为确保系统能够稳定、可靠地运行,满足用户实际使用需求,本系统需满足以下性能要求:

  • 数据采集精度:温湿度采集误差≤±2℃(温度)、±5%RH(湿度);人体检测距离2~10cm,检测准确率≥95%;
  • 响应速度:传感器采集周期≤1s,语音指令响应时间≤1s,蓝牙指令响应时间≤500ms,按键操作响应时间≤300ms;
  • 语音识别:语音识别准确率≥90%,支持中文语音指令,可识别常见的控制指令(如“打开风扇”“风速调高”“开启摇头”等);
  • 稳定性:系统连续运行72小时无故障,风扇工作稳定,风速调节平稳,摇头动作顺畅,无卡顿、异响;蓝牙连接稳定,连接距离≥10m(室内),连接成功率≥95%;
  • 人机交互:按键操作灵敏,无卡顿、误触发;OLED屏显示清晰,刷新及时,无残影;语音播报清晰,音量适中;
  • 功耗:系统待机功耗≤50mA,工作功耗≤250mA,支持外接电源供电,确保长时间稳定运行;
  • 定时精度:定时误差≤1分钟,倒计时显示准确,定时结束后风扇能及时关闭。

2.4 系统设计原则

本系统设计遵循“实用性、可靠性、经济性、智能化、可扩展性”的原则,具体如下:

  • 实用性:聚焦用户核心需求,功能设计贴合实际使用场景,操作便捷,无需专业知识即可上手,满足不同人群的使用需求;
  • 可靠性:选用成熟、稳定的元器件,优化硬件电路和软件程序,降低系统故障概率,确保风扇长期稳定运行,减少故障发生;
  • 经济性:在满足功能和性能需求的前提下,选用性价比高的元器件,控制硬件成本,打造性价比高的智能语音风扇,提升产品市场竞争力;
  • 智能化:整合语音控制、自动控制、蓝牙APP控制等功能,实现风扇的自动化、智能化运行,解放用户双手,提升使用体验;
  • 可扩展性:系统架构设计预留扩展接口,后续可根据需求增加语音播报、远程OTA升级、多设备联动等功能,提升系统的灵活性和扩展性。

第三章 系统硬件设计

3.1 硬件总体设计

系统硬件设计以STM32F103C8T6单片机为核心,围绕传感器采集、执行器控制、显示、语音、通信、人机交互等功能,选取合适的元器件,设计各模块的硬件电路,最终完成整个系统的硬件搭建。硬件总体设计思路为:先确定核心控制单元,再依次设计各功能模块电路,最后将各模块与核心单元连接,形成完整的硬件系统。本章详细介绍各元器件的选型依据和各模块电路的设计过程。

3.2 核心控制模块设计

3.2.1 元器件选型

核心控制单元选用STM32F103C8T6单片机,该单片机属于ST公司的STM32F1系列,采用ARM Cortex-M3内核,主频为72MHz,具备高性能、低功耗、低成本、接口丰富的特点,具体参数如下:

  • Flash容量:64KB,RAM容量:20KB,满足系统程序存储和数据处理需求;
  • 具备多个I/O口、UART串口、SPI接口、ADC接口等,可满足各传感器、执行器、语音模块、蓝牙模块的连接需求;
  • 工作电压:3.3V,功耗低,适合嵌入式智能设备使用;
  • 封装为LQFP48,体积小,便于硬件电路板的小型化设计,适配风扇的安装空间。

STM32F103C8T6单片机的性能完全满足本系统的控制需求,且性价比高,是嵌入式智能设备的常用核心芯片,能够高效协调各模块工作,因此选用该单片机作为系统的核心控制单元。

3.2.2 单片机最小系统设计

单片机最小系统是保证单片机正常工作的基础,主要包括电源电路、复位电路、晶振电路三部分,具体设计如下:

  • 电源电路:采用5V外接电源供电,通过AMS1117-3.3V稳压芯片将5V电压稳压至3.3V,为单片机和其他需要3.3V供电的模块(如OLED屏、蓝牙模块、语音模块)提供稳定电源;电源电路中加入电容滤波(100nF和10uF电容),减少电压波动,抑制干扰,确保系统稳定运行;
  • 复位电路:采用手动复位与上电复位相结合的方式,复位引脚(NRST)通过10K电阻连接至3.3V电源,通过10uF电容接地,上电时电容充电实现上电复位,按下复位按键时实现手动复位,确保单片机出现异常时可快速复位恢复正常工作;
  • 晶振电路:选用8MHz外部晶振,配合两个22pF电容连接至单片机的晶振引脚(OSC_IN、OSC_OUT),为单片机提供稳定的时钟信号,通过倍频电路将主频提升至72MHz,满足系统的运行速度和实时性需求。

单片机最小系统电路如图3-1所示(此处可插入电路图),该电路结构简单、稳定可靠,能够保证STM32F103C8T6单片机正常工作,为整个系统提供基础的硬件支撑。

3.3 传感器采集模块设计

传感器采集模块是系统获取环境信息和人体状态的核心,包括温湿度采集和人体检测两个子模块,分别选用DHT11温湿度传感器和光电红外传感器,各子模块电路设计如下:

3.3.1 温湿度采集模块(DHT11)

DHT11是一款低成本、高精度的数字温湿度传感器,采用单总线通信方式,只需一根数据线即可实现与单片机的通信,操作简便,无需复杂的硬件电路,具体参数如下:

  • 温度测量范围:0℃~50℃,测量误差≤±2℃,满足室内环境温度测量需求;
  • 湿度测量范围:20%RH~90%RH,测量误差≤±5%RH,能够准确反映环境湿度状态;
  • 工作电压:3.3V~5V,可直接与单片机电源兼容,无需额外供电;
  • 响应时间:≤2s,采集周期可灵活设置,满足系统实时采集需求;
  • 封装小巧,安装方便,适合集成到风扇内部。

电路设计:DHT11的VCC引脚连接3.3V电源,GND引脚接地,DATA引脚(数据线)通过10K上拉电阻连接至单片机的I/O口(如PA0),实现单片机与DHT11的通信,采集温湿度数据。电路中加入上拉电阻,确保数据线电平稳定,减少外界干扰,提高数据采集的准确性。

3.3.2 人体检测模块(光电红外传感器)

选用反射式光电红外传感器,该传感器通过发射红外线,当有人体靠近时,红外线被人体反射,传感器接收反射信号并输出电平变化,从而检测人体是否存在,具体参数如下:

  • 检测距离:2~10cm,可根据实际需求调节,适配风扇的使用场景;
  • 输出方式:数字量输出(高电平/低电平),有人体靠近时输出低电平,无人体时输出高电平,便于单片机识别;
  • 工作电压:3.3V~5V,与系统电源兼容,无需额外供电;
  • 响应速度快(≤10ms),抗干扰能力强,不受环境光线影响,检测准确可靠;
  • 体积小,安装方便,可嵌入风扇外壳,不影响风扇外观。

电路设计:光电红外传感器的VCC引脚连接3.3V电源,GND引脚接地,OUT引脚(输出端)连接至单片机的I/O口(如PA1),单片机通过检测OUT引脚的电平变化,判断周围是否有人,将检测结果用于自动模式的控制逻辑。

3.4 执行器控制模块设计

执行器控制模块负责接收单片机的控制指令,执行风扇启停、风速调节、摇头、报警提醒、照明等动作,包括风扇控制、步进电机控制、蜂鸣器控制、LED灯控制四个子模块,各子模块电路设计如下:

3.4.1 风扇控制模块(风扇模块+TB6612电机驱动芯片)

选用小型直流风扇模块(工作电压5V),用于实现降温功能;由于风扇工作电流较大,无法直接由单片机I/O口驱动,因此选用TB6612电机驱动芯片作为中间驱动元件,TB6612是一款双路直流电机驱动芯片,具备高耐压、大电流、低功耗的特点,可实现风扇的启停和风速调节,具体参数如下:

  • 风扇模块:工作电压5V,工作电流≤200mA,风速可通过 PWM 信号调节,噪音小,风力适中;
  • TB6612:工作电压2.5V~13.5V,输出电流可达1.2A(单路),支持PWM调速,可直接与单片机I/O口连接,控制简单。

电路设计:TB6612的VCC引脚连接5V电源,GND引脚接地,VCC_IO引脚连接3.3V电源(与单片机电源一致);IN1、IN2引脚(控制端)分别连接至单片机的I/O口(如PB0、PB1),用于控制风扇的启停和转向(本系统中风扇仅需单向转动,因此固定IN1、IN2电平组合);PWM引脚连接至单片机的PWM输出口(如PB2),通过调节PWM占空比实现风扇风速调节(高、中、低三档);风扇模块的正极连接TB6612的OUT1引脚,负极连接TB6612的OUT2引脚,GND引脚接地。单片机通过控制IN1、IN2引脚的电平实现风扇启停,通过调节PWM占空比实现风速调节。

3.4.2 步进电机控制模块(步进电机+ULN2003驱动芯片)

选用28BYJ-48步进电机,该电机为四相八拍步进电机,体积小、扭矩适中、噪音小,适合模拟风扇摇头动作;配合ULN2003步进电机驱动芯片,实现对步进电机的驱动控制,ULN2003是一款高耐压、大电流的达林顿管阵列芯片,可直接驱动步进电机,无需额外驱动电路,具体参数如下:

  • 步进电机:步距角5.625°/64,减速比1:64,工作电压5V,转动平稳,适合风扇摇头模拟;
  • ULN2003:工作电压5V~12V,输出电流可达500mA,可直接与单片机I/O口连接,控制简单,成本低。

电路设计:ULN2003的VCC引脚连接5V电源,GND引脚接地,IN1~IN4引脚(输入端)分别连接至单片机的I/O口(如PB3~PB6),OUT1~OUT4引脚(输出端)分别连接至步进电机的四个引脚;步进电机的VCC引脚连接5V电源,GND引脚接地。单片机通过向IN1~IN4引脚输出不同的电平组合(四相八拍驱动时序),控制步进电机的转动方向和转动角度,实现风扇摇头动作的模拟;通过控制电平组合的输出频率,调节摇头速度。

3.4.3 蜂鸣器提醒模块(有源蜂鸣器)

选用有源蜂鸣器,无需外部驱动电路,通电即可发出提醒声音,用于自动模式下环境温度过高时的报警提醒,具体参数如下:

  • 工作电压:3.3V~5V,与系统电源兼容,可直接接入系统;
  • 发声频率:2kHz~4kHz,声音清晰、响亮,提醒效果好;
  • 工作电流:≤20mA,功耗低,不影响系统整体功耗;
  • 体积小,安装方便,可嵌入风扇内部。

电路设计:有源蜂鸣器的VCC引脚通过1K电阻连接至3.3V电源,GND引脚接地,控制端连接至单片机的I/O口(如PB7)。当自动模式下环境温度超过设定阈值时,单片机向控制端输出低电平,蜂鸣器通电发声,发出报警提醒;温度降至阈值以下时,输出高电平,蜂鸣器停止发声。

3.4.4 LED灯控制模块(LED灯)

选用普通白色LED灯,用于实现照明功能,方便用户在夜间使用风扇,具体参数如下:

  • 工作电压:2V~2.2V,工作电流:5~10mA,亮度适中,能耗低;
  • 颜色:白色,照明效果好,适合近距离照明;
  • 体积小,安装方便,可安装在风扇外壳上,不影响风扇外观。

电路设计:LED灯的阳极通过220Ω电阻连接至3.3V电源,阴极连接至单片机的I/O口(如PC0)。当用户通过按键、语音或蓝牙APP控制照明灯开启时,单片机向I/O口输出低电平,LED灯点亮;控制关闭时,输出高电平,LED灯熄灭。

3.5 显示模块设计(OLED屏)

选用0.96英寸OLED屏,该屏幕采用I2C通信方式,体积小、功耗低、显示清晰、对比度高,可实时显示系统各项参数,具体参数如下:

  • 分辨率:128×64像素,显示内容丰富,可同时显示多项参数;
  • 通信方式:I2C通信,只需SDA、SCL两根数据线即可与单片机连接,硬件电路简单;
  • 工作电压:3.3V,与系统电源兼容,无需额外供电;
  • 对比度高,视角广,在不同角度均可清晰查看显示内容;
  • 功耗低(≤10mA),不影响系统整体功耗,适合长期使用。

电路设计:OLED屏的VCC引脚连接3.3V电源,GND引脚接地,SDA引脚(数据线)连接至单片机的I/O口(如PC1),SCL引脚(时钟线)连接至单片机的I/O口(如PC2)。单片机通过I2C通信协议,向OLED屏发送显示指令和数据,实现环境温湿度、人体状态(有/无人)、风扇工作模式、风速等级、定时倒计时等信息的实时显示。显示界面采用分区设计,确保信息清晰、直观,方便用户查看。

3.6 语音模块设计(SNR8016语音模块)

SNR8016是一款低成本、高音质、高识别率的语音识别模块,支持中文语音识别,可通过I/O口与单片机通信,实现语音控制功能,具体参数如下:

  • 工作电压:3.3V~5V,与系统电源兼容,可直接接入系统;
  • 语音识别方式:非特定人语音识别,支持100条以内语音指令,可根据需求录制控制指令;
  • 识别准确率:≥90%,识别距离0.5~3m,满足日常使用场景;
  • 通信方式:UART串口通信或I/O口电平控制,本系统采用UART串口通信,与单片机连接简单;
  • 支持语音播报功能,可录制提示语音(如“风扇已开启”“风速已调高”等),提升用户体验。

电路设计:SNR8016语音模块的VCC引脚连接3.3V电源,GND引脚接地,TXD引脚(发送端)连接至单片机的UART接收引脚(如PA10),RXD引脚(接收端)连接至单片机的UART发送引脚(如PA9);语音模块的MIC引脚连接麦克风(用于接收用户语音指令),SPK+、SPK-引脚连接扬声器(用于语音播报)。单片机通过UART串口向语音模块发送指令,配置语音识别模式和语音指令;语音模块接收用户语音指令,识别后通过串口将识别结果传输至单片机,单片机根据识别结果执行相应的控制操作。

3.7 通信模块设计(BT04A蓝牙模块)

BT04A是一款低成本、高性能的蓝牙模块,支持蓝牙4.0协议,可实现单片机与手机APP的无线通信,支持数据上传和指令下发,具体参数如下:

  • 工作电压:3.3V,工作电流:睡眠电流≤10mA,工作电流≤80mA,功耗低;
  • 通信方式:UART串口通信,波特率可配置(默认9600bps),与单片机连接简单;
  • 传输距离:室内≥10m,传输稳定,数据传输无丢失、无延迟;
  • 支持主从模式切换,本系统中采用从模式,作为从设备与手机APP(主设备)连接;
  • 体积小,引脚少,便于硬件集成,可嵌入风扇内部。

电路设计:BT04A蓝牙模块的VCC引脚连接3.3V电源,GND引脚接地,TXD引脚(发送端)连接至单片机的UART接收引脚(如PA3),RXD引脚(接收端)连接至单片机的UART发送引脚(如PA2);为确保通信稳定,在VCC与GND之间加入100nF电容滤波,减少电压波动。单片机通过UART串口与BT04A蓝牙模块通信,发送环境温湿度、人体状态等数据至手机APP,同时接收手机APP发送的控制指令(如风扇启停、风速调节等),执行相应的控制操作。

3.8 人机交互模块设计(按键)

选用独立按键,用于实现手动模式下的各项操作,共设置6个按键,分别为:模式切换键、风速调节键、摇头控制键、照明开关键、定时设置键、确认键,具体设计如下:

  • 模式切换键:用于切换手动模式、自动模式、语音模式;
  • 风速调节键:用于手动调节风扇风速(高、中、低三档循环切换);
  • 摇头控制键:用于控制风扇摇头的启停;
  • 照明开关键:用于控制LED照明灯的启停;
  • 定时设置键:用于设置定时倒计时时间(0~60分钟可调);
  • 确认键:用于确认定时设置的时间,以及模式切换后的确认操作。

电路设计:每个按键的一端接地,另一端通过10K上拉电阻连接至单片机的I/O口(如PC3~PC8)。当按键未按下时,I/O口为高电平;当按键按下时,I/O口接地,变为低电平。单片机通过检测I/O口的电平变化,识别按键操作,执行相应的功能。为防止按键抖动,在软件程序中加入消抖处理(延时消抖或中断消抖),确保按键操作的准确性,避免误触发。

3.9 硬件整体接线图

将上述各模块电路与STM32F103C8T6单片机最小系统连接,形成完整的系统硬件电路,硬件整体接线图如图3-2所示(此处可插入接线图)。接线时需注意各模块的电源电压匹配,避免接反电源导致元器件损坏;同时,注意信号线的布置,减少干扰(如将电源线与信号线分开布置),确保系统稳定运行;此外,需合理布置各元器件的位置,适配风扇的安装空间,不影响风扇的正常工作和外观。

第四章 系统软件设计

4.1 软件总体设计

系统软件设计以STM32F103C8T6单片机为核心,采用C语言编程,基于Keil MDK开发环境进行开发。软件总体设计思路为:采用模块化编程,将系统功能划分为多个独立的软件模块,每个模块负责实现特定的功能,各模块之间通过函数调用实现数据交互和协同工作,确保软件结构清晰、易于调试、维护和升级。

系统软件主要包括:主程序模块、系统初始化模块、传感器数据采集模块、显示模块程序、执行器控制模块程序、语音识别模块程序、蓝牙通信模块程序、人机交互模块程序、定时模块程序等。软件总体流程图如图4-1所示(此处可插入流程图),系统上电后,首先进行初始化操作(单片机初始化、传感器初始化、显示初始化、语音模块初始化、蓝牙模块初始化、定时模块初始化等),初始化完成后,进入主循环;在主循环中,依次执行传感器数据采集、数据处理、显示更新、按键检测、模式判断、语音指令识别、蓝牙数据交互、定时判断等操作,根据用户指令和环境状态,控制各执行器有序工作,实现系统的各项功能。

4.2 系统初始化模块

系统初始化是软件运行的基础,上电后首先执行初始化操作,确保各模块能够正常工作,初始化模块主要包括以下内容:

  • 单片机初始化:配置系统时钟(72MHz)、I/O口模式(输入/输出)、UART串口(用于与语音模块、蓝牙模块通信)、PWM输出(用于风扇风速调节)、ADC接口(备用)等,为各模块提供基础的硬件支持;
  • 传感器初始化:初始化DHT11温湿度传感器(配置单总线通信时序)、光电红外传感器(配置I/O口为输入模式),确保传感器能够正常采集数据;
  • 显示初始化:初始化OLED屏,配置I2C通信参数,清除屏幕显示,设置显示字体、显示位置和显示模式,为后续显示做好准备;
  • 语音模块初始化:通过UART串口向SNR8016语音模块发送配置指令,设置语音识别模式、识别灵敏度、语音指令库,启动语音识别功能;
  • 蓝牙模块初始化:通过UART串口向BT04A蓝牙模块发送AT指令,配置蓝牙模块的名称、波特率、工作模式(从模式),启动蓝牙通信功能,等待与手机APP连接;
  • 定时模块初始化:配置STM32的定时器(如TIM2),设置定时中断,用于实现定时倒计时、传感器采集周期控制、语音识别周期控制等功能;
  • 参数初始化:初始化系统默认参数,包括风扇工作模式(默认自动模式)、风速等级(默认中档)、定时时间(默认0分钟,即无定时)、温度阈值(默认30℃)、人体检测标志位、蓝牙连接标志位等。

4.3 传感器数据采集模块

传感器数据采集模块负责实时采集环境温湿度和人体存在状态,经过数据处理后,传递给主程序,用于显示、自动控制逻辑判断和数据上传,各传感器的数据采集程序设计如下:

4.3.1 DHT11温湿度采集程序

DHT11采用单总线通信,采集程序的核心是通过单片机的I/O口模拟单总线通信时序,向DHT11发送启动信号,等待DHT11的响应信号,然后接收DHT11传输的温湿度数据,具体步骤如下:

  1. 单片机向DHT11的DATA引脚发送低电平(至少18ms),启动DHT11进行温湿度采集;
  1. 单片机释放DATA引脚,等待DHT11的响应信号(低电平80us,高电平80us);若未收到响应信号,则重新发送启动信号;
  1. 响应信号结束后,DHT11开始传输数据,共传输40位数据(8位湿度整数位、8位湿度小数位、8位温度整数位、8位温度小数位、8位校验位);
  1. 单片机通过检测DATA引脚的电平变化(高电平表示1,低电平表示0),逐位读取40位数据;
  1. 读取完成后,对校验位进行验证(湿度整数位+湿度小数位+温度整数位+温度小数位=校验位),验证通过则保存温湿度数据,验证失败则重新采集;
  1. 采集周期设置为1s,确保数据的实时性,采集到的温湿度数据用于显示、自动风速调节和报警判断。

4.3.2 光电红外传感器采集程序

光电红外传感器为数字量输出,采集程序较为简单,单片机通过检测传感器OUT引脚的电平变化,判断周围是否有人,具体步骤如下:

  1. 配置单片机的I/O口(连接传感器OUT引脚)为输入模式,开启下拉电阻(可选),确保电平稳定;
  1. 定时读取I/O口的电平状态(采集周期设置为500ms);
  1. 若电平为低电平,则判断有人体靠近,设置人体检测标志位为1;若电平为高电平,则判断无人体,设置人体检测标志位为0;
  1. 将人体检测结果传递给主程序,用于自动模式下风扇的启停和风速调节。

4.4 显示模块程序

显示模块程序负责将采集到的温湿度、人体状态、风扇工作模式、风速等级、定时倒计时等信息,实时显示在OLED屏上,显示界面采用分区设计,确保信息清晰、直观,具体设计如下:

  • 显示分区:将OLED屏分为5个区域,分别显示环境温湿度、人体状态、工作模式、风速等级、定时倒计时;
  • 温湿度显示:显示格式为“温度:XX.XX℃ 湿度:XX.XX%RH”,实时显示采集到的温湿度数据,保留两位小数;
  • 人体状态显示:显示“有人”或“无人”,根据光电红外传感器的检测结果实时更新;
  • 工作模式显示:显示“手动”“自动”或“语音”,根据当前系统工作模式实时更新;
  • 风速等级显示:显示“高”“中”“低”,根据当前风扇风速实时更新;
  • 定时倒计时显示:显示格式为“定时:XX:XX”(分:秒),当开启定时功能时,实时显示剩余时间;未开启定时时,显示“定时:00:00”。

显示程序通过I2C通信协议,向OLED屏发送显示指令和数据,显示更新周期与传感器采集周期一致(1s),确保显示信息与实际数据同步。当用户进行按键操作(如模式切换、风速调节、定时设置)时,实时更新显示内容,方便用户查看操作结果;当系统出现报警时,在屏幕上显示“温度过高”提示,配合蜂鸣器报警。

4.5 执行器控制模块程序

执行器控制模块程序负责接收主程序的控制指令,驱动风扇、步进电机、蜂鸣器、LED灯等执行器动作,实现风扇启停、风速调节、摇头、报警提醒、照明等功能,各执行器的控制程序设计如下:

4.5.1 风扇控制程序

风扇控制程序通过TB6612电机驱动芯片,实现风扇的启停和风速调节,支持手动控制、自动控制、语音控制和蓝牙控制,具体设计如下:

  • 风扇启停控制:通过控制TB6612的IN1、IN2引脚电平组合,实现风扇的启停;IN1=1、IN2=0时,风扇正转(开启);IN1=0、IN2=0时,风扇停止;
  • 风速调节控制:通过调节单片机PWM输出的占空比,实现风速的高、中、低三档调节;占空比80%为高档,50%为中档,20%为低档;
  • 手动控制:用户通过风速调节键,循环切换风速等级,按下按键一次,切换一档,循环往复;
  • 自动控制:根据人体检测标志位和环境温度,自动控制风扇启停和风速;无人时,风扇关闭;有人时,温度≥30℃(可调节)为高档,25℃≤温度<30℃为中档,温度<25℃为低档;
  • 语音控制和蓝牙控制:接收语音指令或蓝牙指令,执行相应的启停和风速调节操作(如“打开风扇”“风速调低”等)。

4.5.2 步进电机控制程序

步进电机控制程序通过ULN2003驱动芯片,实现风扇摇头动作的模拟,支持手动控制、语音控制和蓝牙控制,具体设计如下:

  • 驱动时序:采用四相八拍驱动方式,定义八组电平组合(0001、0011、0010、0110、0100、1100、1000、1001),按顺序循环输出,实现步进电机正转(模拟风扇摇头);
  • 摇头控制:通过控制电平组合的输出与否,实现摇头的启停;输出电平组合时,步进电机转动,风扇摇头;停止输出时,步进电机停止,风扇停止摇头;
  • 摇头速度:通过控制电平组合的输出频率,调节摇头速度(如50ms切换一次电平组合,摇头速度适中);
  • 控制方式:用户通过摇头控制键、语音指令(如“开启摇头”“关闭摇头”)或蓝牙指令,控制摇头的启停。

4.5.3 蜂鸣器控制程序

蜂鸣器控制程序用于自动模式下环境温度过高时的报警提醒,具体设计如下:

  • 报警条件:自动模式下,当环境温度超过设定的最大温度阈值(默认30℃,可通过按键或蓝牙APP调节),且人体检测标志位为1时,启动蜂鸣器报警;
  • 报警控制:单片机向蜂鸣器控制端输出低电平,蜂鸣器通电发声;当温度降至阈值以下,或人体检测标志位为0时,输出高电平,蜂鸣器停止发声;
  • 报警提示:报警时,OLED屏显示“温度过高”提示,同时蜂鸣器发出持续报警声,提醒用户环境温度过高。

4.5.4 LED灯控制程序

LED灯控制程序用于实现照明功能,支持手动控制、语音控制和蓝牙控制,具体设计如下:

  • 照明控制:单片机向LED灯控制端输出低电平,LED灯点亮;输出高电平,LED灯熄灭;
  • 控制方式:用户通过照明开关键、语音指令(如“打开灯光”“关闭灯光”)或蓝牙指令,控制LED灯的启停;
  • 状态反馈:LED灯的启停状态实时显示在OLED屏上,方便用户查看。

4.6 语音识别模块程序

语音识别模块程序负责接收用户语音指令,进行语音识别并将识别结果传输至单片机,实现语音控制功能,具体设计如下:

  • 语音指令录制:提前在SNR8016语音模块中录制控制指令,包括风扇启停(“打开风扇”“关闭风扇”)、风速调节(“风速调高”“风速调低”“中档风速”)、模式切换(“手动模式”“自动模式”“语音模式”)、摇头控制(“开启摇头”“关闭摇头”)、照明控制(“打开灯光”“关闭灯光”)等;
  • 语音指令接收:SNR8016语音模块通过麦克风接收用户语音指令,进行语音识别;
  • 识别结果传输:语音识别完成后,通过UART串口将识别结果(对应的指令代码)传输至单片机;
  • 指令解析与执行:单片机接收识别结果,解析出对应的控制指令,调用相应的执行函数,执行风扇启停、风速调节等操作;
  • 语音播报:执行完控制操作后,语音模块播放预设的提示语音(如“风扇已开启”“风速已调高”),反馈操作结果;
  • 识别周期:语音识别周期设置为100ms,确保能够及时接收用户语音指令,响应时间≤1s。

为提高语音识别准确率,程序中加入降噪处理(通过软件滤波),减少环境噪音对语音识别的影响;同时,设置语音识别灵敏度,确保在0.5~3m范围内能够准确识别指令

Logo

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

更多推荐