基于STM32单片机的智能语音控制风扇
本文介绍了一种基于STM32F103C8T6单片机的智能风扇控制系统。系统集成了ASRPRO语音识别、DS18B20温度检测、HC-SR501人体感应等功能模块,支持手动、自动和语音三种控制模式。通过LCD1602实时显示温度、档位和模式信息,结合蜂鸣器报警提示,实现了风扇的智能调速和定时控制。系统采用模块化程序设计,主程序循环检测各传感器状态,根据模式切换执行相应控制逻辑。该设计具有良好的人机交
1. 系统功能概述
本设计基于STM32F103C8T6单片机,构建了一个多功能智能风扇控制系统,结合ASRPRO语音识别模块、温度传感器、HC-SR501人体感应模块、LCD1602液晶显示、蜂鸣器、风扇电路、按键等外设,支持手动控制、自动调节和语音控制三种模式,具备定时控制、温度报警等功能,适合在智能家居等场景下应用。
2. 电路设计
2.1 主控模块:STM32F103C8T6
STM32F103C8T6是本系统的核心控制器,负责对各类传感器数据的采集处理、风扇控制、语音识别指令处理、LCD显示驱动及定时管理。其具有丰富的GPIO、ADC、USART和定时器资源,能够满足本项目各项功能需求。
2.2 温度检测模块:DS18B20数字温度传感器
DS18B20负责实时采集环境温度数据,通过单总线通信方式与STM32连接。其测量精度可达±0.5℃,输出数字信号,便于处理。
2.3 人体感应模块:HC-SR501
该模块用于检测人体活动,当有人进入其感应范围时,会输出高电平信号,提示STM32有人存在。该功能是自动模式和手动模式下风扇启停的重要依据。
2.4 语音识别模块:ASRPRO
ASRPRO是语音识别模块,用于识别如“开风扇”“关闭风扇”“一档”“二档”等关键词,并将识别结果通过串口方式发送至STM32,实现风扇的语音控制。
2.5 显示模块:LCD1602
LCD1602负责实时显示当前温度、风扇档位、工作模式(手动、自动、语音)及定时时间等信息,使用户能够直观了解当前系统状态。
2.6 控制按键模块
按键模块用于实现模式切换、档位控制及定时功能的输入,包含多个功能按键,如模式切换键、定时键、一档/二档/三档调速键等。
2.7 风扇驱动模块
风扇驱动模块根据STM32输出的PWM或控制信号,实现三档调速。采用三组继电器或MOS管分别控制不同电压或占空比,调整风速。
2.8 蜂鸣器模块
当温度超过40℃或定时结束时,通过控制蜂鸣器发出报警提示,增强系统的安全性与交互性。
3. 程序设计
3.1 主程序设计
主程序初始化所有外设模块,包括GPIO、USART、定时器、LCD、DS18B20等,然后进入主循环,根据当前模式进行不同的操作处理。
int main(void) {
SystemInit();
LCD_Init();
DS18B20_Init();
UART_Init();
HC_SR501_Init();
Buttons_Init();
Buzzer_Init();
Fan_Init();
ASRPRO_Init();
while (1) {
Mode_Check(); // 检查模式切换
Temp_Read(); // 读取温度
People_Check(); // 检测是否有人
Timer_Check(); // 检查定时状态
Fan_Control(); // 控制风扇
LCD_Display(); // 显示当前状态
}
}
3.2 模式控制逻辑
通过按键或语音控制选择手动、自动或语音模式,并设置相应标志,供主循环调用。
void Mode_Check() {
if (key_mode_pressed) {
mode++;
if (mode > 2) mode = 0; // 0:手动 1:自动 2:语音
}
if (mode == 2 && asr_flag) {
Process_ASR_Command(asr_cmd);
}
}
3.3 温度采集程序
读取DS18B20的温度值,并将结果保存在全局变量中,供其他模块使用。
void Temp_Read() {
temperature = DS18B20_GetTemp();
}
3.4 人体感应判断
根据HC-SR501模块输入判断当前环境是否有人,为手动与自动模式下的风扇启停提供依据。
void People_Check() {
people_exist = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); // HC-SR501输入
}
3.5 风扇控制逻辑
在不同模式下根据不同条件控制风扇的启停和档位:
void Fan_Control() {
if (!people_exist) {
Fan_Stop();
return;
}
if (mode == 0) { // 手动模式
Fan_SetSpeed(manual_level);
} else if (mode == 1) { // 自动模式
if (temperature > 40) {
Buzzer_On();
Fan_Stop();
} else if (temperature > 30) {
Fan_SetSpeed(3);
} else if (temperature > 25) {
Fan_SetSpeed(2);
} else if (temperature > 20) {
Fan_SetSpeed(1);
} else {
Fan_Stop();
}
}
}
3.6 语音识别处理程序
接收ASRPRO模块的串口数据,根据语音命令控制风扇。
void Process_ASR_Command(uint8_t cmd) {
switch(cmd) {
case CMD_ON:
Fan_SetSpeed(1);
break;
case CMD_OFF:
Fan_Stop();
break;
case CMD_SPEED1:
Fan_SetSpeed(1);
break;
case CMD_SPEED2:
Fan_SetSpeed(2);
break;
case CMD_SPEED3:
Fan_SetSpeed(3);
break;
}
}
3.7 定时功能实现
按下“定时”键后,设置一个定时值(如60秒),启动定时器,到时关闭风扇。
void Timer_Check() {
if (key_timer_pressed) {
timer_cnt = 60;
timer_enable = 1;
}
if (timer_enable) {
if (--timer_cnt == 0) {
Fan_Stop();
Buzzer_On();
timer_enable = 0;
}
}
}
3.8 LCD1602显示程序
LCD屏幕循环显示当前温度、工作模式、档位、定时剩余时间等信息。
void LCD_Display() {
LCD_Clear();
LCD_ShowString(0, 0, "T:");
LCD_ShowNum(2, 0, temperature, 2);
LCD_ShowString(0, 1, "M:");
if (mode == 0) LCD_ShowString(2, 1, "Manual");
else if (mode == 1) LCD_ShowString(2, 1, "Auto");
else LCD_ShowString(2, 1, "Voice");
LCD_ShowString(9, 1, "S:");
LCD_ShowNum(11, 1, fan_speed, 1);
}
4. 总结
本系统通过STM32F103C8T6单片机将多种传感器与控制模块有机集成,实现了多模式智能控制风扇的功能。设计具备自动调速、语音识别、定时控制等特点,体现出良好的人机交互性与智能控制能力,具备良好的实用性与推广价值。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)