东莞城市学院 · 人工智能学院 · 计算机科学与技术 2022 级
作者:张彤 · 学号:202235010246
指导教师:章逸潇、甘晓楠
毕业设计时间:2025.11 — 2026.05
本项目设计并实现了一款基于 FreeRTOS 实时操作系统的智能加湿器系统,涵盖嵌入式固件、Android 蓝牙控制 App 与 3D 打印机械外壳三个维度的完整工程实践。
针对市售加湿器功能单一、缺乏实时监测、无远程交互能力等不足,本系统引入 FreeRTOS 多任务调度框架,实现了温湿度自动采集与闭环加湿控制,同时支持蓝牙、语音、物理按键三种控制方式,并集成紫外线定时消毒功能。
| 功能 | 说明 |
|---|---|
| 🌡️ 温湿度实时监测 | DHT11 采集数据,OLED 实时显示温度与湿度 |
| 💧 自动加湿控制 | 湿度低于 40%RH 时自动启动,内置防缺水保护 |
| ☣️ 紫外线消毒 | 手动触发 / 每 8 小时自动消毒,单次持续 5 秒后自动关闭 |
| 📱 蓝牙远程控制 | Android App 通过 SPP 协议发送指令 |
| 🔊 语音控制 | 语音识别模块接收自然语言指令 |
| 🔘 物理按键控制 | 本地按键操作,无需手机 |
| 💡 氛围灯 | 支持开关控制的氛围照明 |
| ⚙️ 多任务并发 | FreeRTOS 抢占式调度,各功能互不干扰 |
| 层级 | 组成 |
|---|---|
| 应用层 | 控制任务、通信任务、自动加湿控制、紫外消毒控制、蓝牙/语音控制 |
| 驱动层 | DHT11.c、OLED.c、usart.c、gpio.c、ControlTask.c |
| FreeRTOS 层 | 抢占式任务调度、消息队列、3 个软件定时器、CMSIS-RTOS V2 接口 |
| 硬件层 | STM32F103C8T6、DHT11、OLED、JDY-31 蓝牙、语音模块、雾化片、紫外灯、氛围灯、物理按键 |
蓝牙串口中断 ──┐
语音串口中断 ──┼──► 消息队列 (controlCommandQueue) ──► 控制任务(执行硬件操作)
物理按键扫描 ──┘ ▲
软件定时器 ────────────┘
- 通信任务(较高优先级):采集蓝牙、语音、按键输入,统一翻译为命令编号放入队列
- 控制任务(普通优先级):从队列取出命令执行对应操作;队列空闲时自动读取温湿度并判断是否加湿
- 软件定时器:加湿器超时自动关闭 / 紫外灯超时自动关闭 / 每 8 小时周期消毒
| 模块 | 型号 / 规格 | 通信接口 | 功能说明 |
|---|---|---|---|
| 主控芯片 | STM32F103C8T6 | — | 72MHz Cortex-M3,系统核心 |
| 温湿度传感器 | DHT11 | GPIO 单总线 | 精度 ±5%RH,采集环境数据 |
| 显示模块 | 0.96 寸 OLED | I²C | 实时显示温度、湿度、运行状态 |
| 蓝牙模块 | JDY-31 | USART1 | 经典蓝牙 SPP,与 Android App 通信 |
| 语音模块 | — | USART3 | 识别语音指令并转发给主控 |
| 雾化执行 | 超声波雾化片 × 2 | GPIO (PA1) | 压电陶瓷高频振动产生微米级水雾 |
| 消毒模块 | 紫外线 LED | GPIO | 定时自动消毒,防止水箱细菌滋生 |
| 机械外壳 | FDM 3D 打印 | — | SolidWorks 建模,储水罐 + 盖体 |
smart-humidifier-freertos/
│
├── HumidifierV3/ # STM32 嵌入式固件(STM32CubeIDE 工程)
│ └── Core/
│ ├── Inc/
│ │ ├── main.h # 引脚宏定义
│ │ ├── ControlTask.h # 命令枚举 & 外部声明
│ │ ├── CommunicationtTask.h
│ │ ├── DHT11.h
│ │ ├── OLED.h
│ │ └── FreeRTOSConfig.h # FreeRTOS 配置
│ └── Src/
│ ├── freertos.c # ⭐ 任务、队列、定时器初始化入口
│ ├── ControlTask.c # ⭐ 控制任务:加湿 / 消毒 / OLED 显示
│ ├── CommunicationtTask.c # ⭐ 通信任务:蓝牙 / 语音 / 按键
│ ├── DHT11.c # 温湿度传感器驱动
│ ├── OLED.c # OLED 显示驱动
│ ├── usart.c # 串口配置
│ ├── gpio.c # GPIO 配置
│ └── main.c # 系统入口
│
└── HumidifierControl/ # Android 蓝牙控制 App(Android Studio 工程)
└── app/src/main/
├── AndroidManifest.xml
└── java/com/example/humidifiercontrol/
├── MainActivity.java # ⭐ 主界面:蓝牙连接 & 指令发送
├── BluetoothViewModel.java # 状态管理(LiveData + ViewModel)
└── BluetoothDeviceAdapter.java
环境要求: STM32CubeIDE 1.13+、ST-Link V2 调试器
# 1. 克隆仓库
# git clone https://github.com/Genius0603/smart-humidifier-freertos.git
# 2. 用 STM32CubeIDE 打开 HumidifierV3/ 工程
# File → Open Projects from File System → 选择 HumidifierV3 目录
# 3. 编译并烧录
# Run → Run As → STM32 Cortex-M C/C++ Application环境要求: Android Studio Hedgehog+、Android SDK API 23+、手机需提前配对 JDY-31 蓝牙模块
# 1. 用 Android Studio 打开 HumidifierControl/ 工程
# 2. 等待 Gradle 同步完成
# 3. 连接手机,点击 Run 安装 App开启手机蓝牙,并在系统设置中与 JDY-31 完成配对
→ 打开 App,点击「扫描设备」
→ 选择设备,连接成功后状态点变绿
→ 点击对应按钮发送控制指令:
加湿器按钮 → 发送字符 '1'
消毒灯按钮 → 发送字符 '2'
氛围灯按钮 → 发送字符 '3'
以下参数在 HumidifierV3/Core/Src/ControlTask.c 中可直接修改:
#define HUMIDITY_THRESHOLD 40 // 自动加湿触发湿度阈值(%RH)
#define HUMIDITY_OPENING_TIME 30000 // 加湿器单次开启时长(ms)
#define UVLED_OPENING_TIME 5000 // 紫外灯单次开启时长(ms)
#define UVLED_PERIODIC_TIME (8 * 60 * 60 * 1000) // 自动消毒周期(ms)| 工具 | 版本 | 用途 |
|---|---|---|
| STM32CubeIDE | 1.13+ | 嵌入式固件开发 |
| HAL 库 | STM32F1xx | 硬件抽象层 |
| FreeRTOS | 10.x(CMSIS-RTOS V2) | 实时操作系统 |
| Android Studio | Hedgehog+ | Android App 开发 |
| SolidWorks | 2021 | 机械外壳建模 |
本项目基于 MIT License 开源,允许自由使用、修改与分发,保留原始署名即可。
感谢指导教师章逸潇老师和甘晓楠老师在整个毕业设计过程中给予的悉心指导与支持。