1 系统功能介绍
本设计基于 STM32F103C8T6 单片机,结合语音识别、人机交互和传感器技术,实现了一个多功能的 智能语音控制风扇 系统。该系统在传统电风扇的基础上,加入了 多模式控制、自动调速、人体感应、定时控制、语音交互 等功能,提升了风扇的智能化与便捷性,具有较强的实用价值与推广意义。
系统的主要功能如下:
-
电源指示:当电源打开时,电源指示灯亮,提示系统已进入工作状态。
-
多模式切换:通过按键可选择三种工作模式——手动模式、自动模式、语音模式。
-
手动模式:
- 用户可通过三个档位按键对风扇进行调速。
- 结合人体红外感应模块(HC-SR501),只有当检测到有人时风扇才会运行,当人离开时风扇自动关闭。
-
自动模式:
-
系统先判断是否有人,如果无人,则风扇保持关闭状态。
-
如果有人,则根据温度传感器检测到的环境温度自动调节风扇档位:
- 20℃<温度<25℃:一档运行;
- 25℃<温度<30℃:二档运行;
- 30℃<温度<40℃:三档运行;
- 温度>40℃:蜂鸣器报警,风扇停止运行。
-
-
语音模式:
- 用户可通过 ASRPRO语音识别模块 对风扇进行语音控制,实现与手动模式相同的功能(语音指令代替按键)。
-
定时模式:
- 在任意模式下,用户可通过“定时”按键进入定时功能,演示情况下最大定时 60 秒,到时后风扇自动关闭。
-
LCD1602 显示:
- 实时显示环境温度、风扇档位、当前工作模式(手动/自动/语音)以及定时倒计时信息。
该系统通过 传感器感知、单片机运算处理、外设执行与人机交互 的结合,形成了一个完整的智能家电控制平台。
2 系统电路设计
系统电路由多个功能模块组成,各模块之间通过 STM32 进行统一调度。
2.1 单片机核心电路(STM32F103C8T6)
- 主控单元:STM32F103C8T6 作为系统核心,负责语音数据处理、温度采集处理、人体感应数据采集、按键检测、LCD 显示刷新、风扇调速与蜂鸣器控制。
- 资源优势:STM32F103C8T6 拥有丰富的 I/O 口、UART、ADC、定时器等硬件资源,能很好地满足多模块协同工作的需求。
2.2 语音识别模块(ASRPRO)
- 功能:负责采集用户的语音指令并转化为控制信号。
- 交互方式:通过串口与 STM32 通信,STM32 接收解析后的语音命令,执行相应的风扇控制操作。
- 特点:识别准确率高,支持多组自定义语音指令。
2.3 温度传感器模块
- 常用的温度传感器如 DS18B20 或 DHT11,均可与 STM32 接口通信。
- 主要作用是采集环境温度,供自动模式下的风扇调速逻辑使用。
- 温度数据会实时显示在 LCD1602 上。
2.4 人体感应模块(HC-SR501)
- 原理:基于热释电红外传感技术,能够感应到人体的运动。
- 作用:用于检测当前环境中是否有人存在,只有检测到人时风扇才会运行。
2.5 LCD1602 液晶显示模块
-
功能:显示风扇的工作状态,包括:
- 当前温度
- 风扇档位
- 当前模式(手动/自动/语音)
- 定时时间
-
接口方式:通常采用并口或 I2C 模块与 STM32 连接。
2.6 风扇执行电路
- 驱动方式:STM32 通过 PWM 控制三档风速(低速、中速、高速)。
- 电路结构:采用三极管或 MOSFET 驱动风扇电机,保证稳定供电与调速能力。
2.7 按键电路
- 提供 模式切换键、定时键、档位键 等。
- 通过 STM32 GPIO 扫描按键状态,结合去抖动程序实现稳定输入。
2.8 蜂鸣器电路
- 当环境温度超过 40℃ 时蜂鸣器报警提示。
- 采用有源蜂鸣器,方便直接驱动。
2.9 电源电路
- 系统工作电压 5V,STM32 内部使用 3.3V 电压,因此需加入 LDO 稳压芯片。
- 电源需要提供足够电流,以保证风扇电机、LCD、语音模块同时工作时的稳定性。
3 程序设计
系统软件设计采用模块化思想,分为 主程序、模式管理、温度采集、人体感应、风扇控制、语音控制、LCD 显示、定时控制 等模块。
3.1 主程序框架
#include "stm32f10x.h"
#include "lcd1602.h"
#include "asrpro.h"
#include "dht11.h"
#include "timer.h"
u8 mode = 0; // 0-手动,1-自动,2-语音
u8 fan_level = 0; // 风扇档位
u8 hasPerson = 0; // 人体检测标志
u8 temperature = 0; // 温度值
u8 timer_count = 0; // 定时计数
int main(void)
{
SystemInit();
LCD1602_Init();
ASRPRO_Init();
DHT11_Init();
Timer_Init();
GPIO_Init_All();
while(1)
{
hasPerson = HC_SR501_Read();
temperature = DHT11_Read();
switch(mode)
{
case 0: Manual_Mode(); break;
case 1: Auto_Mode(); break;
case 2: Voice_Mode(); break;
}
LCD1602_Display(temperature, fan_level, mode, timer_count);
}
}
3.2 手动模式程序
void Manual_Mode(void)
{
if(hasPerson)
{
if(Key1_Pressed()) fan_level = 1;
if(Key2_Pressed()) fan_level = 2;
if(Key3_Pressed()) fan_level = 3;
Fan_Control(fan_level);
}
else
{
Fan_Control(0); // 无人则关闭
}
}
3.3 自动模式程序
void Auto_Mode(void)
{
if(hasPerson)
{
if(temperature > 20 && temperature <= 25) fan_level = 1;
else if(temperature > 25 && temperature <= 30) fan_level = 2;
else if(temperature > 30 && temperature <= 40) fan_level = 3;
else if(temperature > 40)
{
Buzzer_Alarm();
Fan_Control(0);
}
Fan_Control(fan_level);
}
else
{
Fan_Control(0); // 无人则关闭
}
}
3.4 语音模式程序
void Voice_Mode(void)
{
char cmd = ASRPRO_GetCommand();
if(hasPerson)
{
if(cmd == '1') fan_level = 1;
else if(cmd == '2') fan_level = 2;
else if(cmd == '3') fan_level = 3;
else if(cmd == '0') fan_level = 0;
Fan_Control(fan_level);
}
else
{
Fan_Control(0);
}
}
3.5 定时功能
void Timer_IRQHandler(void)
{
if(timer_count > 0)
{
timer_count--;
if(timer_count == 0)
{
Fan_Control(0);
}
}
}
3.6 风扇控制(PWM调速)
void Fan_Control(u8 level)
{
switch(level)
{
case 0: PWM_SetDuty(0); break;
case 1: PWM_SetDuty(30); break;
case 2: PWM_SetDuty(60); break;
case 3: PWM_SetDuty(100); break;
}
}
3.7 蜂鸣器报警
void Buzzer_Alarm(void)
{
for(int i=0;i<50;i++)
{
GPIO_SetBits(GPIOB, GPIO_Pin_0);
Delay_ms(200);
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
Delay_ms(200);
}
}
4 总结
本设计基于 STM32F103C8T6 单片机,通过集成 语音识别、温度传感器、人体感应、PWM 调速、LCD 显示、蜂鸣器报警 等模块,构建了一个功能全面的智能语音控制风扇。系统的主要优点如下:
- 多模式运行:用户可根据需求选择手动、自动或语音模式,灵活性强。
- 自动化与智能化:自动模式下能根据环境温度和人体存在情况进行智能调速。
- 语音交互:通过语音识别模块实现人机交互,符合智能家居的发展趋势。
- 安全性:高温时蜂鸣器报警,确保环境安全。
- 实时显示:LCD 显示屏提供直观的运行状态信息,增强用户体验。
- 扩展性:可进一步拓展联网功能,实现远程控制。
该智能风扇不仅提升了生活的舒适性,还展示了物联网与单片机在家电控制中的应用潜力。