基于STM32单片机的智能语音控制风扇
本文介绍了一种基于STM32F103C8T6单片机的智能语音控制风扇系统。该系统集成了语音识别、温度检测、人体感应等功能,提供手动、自动和语音三种控制模式。在自动模式下,系统可根据环境温度和人体存在情况自动调节风扇档位;语音模式支持通过语音指令控制风扇;手动模式则保留传统按键操作。此外,系统还具备定时关闭、超温报警和LCD实时显示等功能,实现了智能、节能的风扇控制方案。该系统设计合理,功能全面,具
基于STM32单片机的智能语音控制风扇
1. 功能介绍
本系统基于STM32F103C8T6单片机,结合ASRPRO语音识别模块、温度传感器、HC-SR501人体红外感应模块、LCD1602显示屏、风扇驱动电路、按键电路及蜂鸣器,构建了一个智能语音控制风扇系统。该设计融合了自动控制、手动操作、语音识别、人体检测以及温度感应等多种功能,能够根据不同的使用场景灵活调整风扇运行方式,具有良好的实用性与拓展性。
主要功能如下:
-
电源指示灯:系统通电时点亮LED,指示设备处于工作状态。
-
多模式切换:通过按键可选择手动模式、自动模式或语音模式。
-
手动模式:用户通过三个档位按键控制风扇速度。若有人体进入传感器感应范围,风扇运行;若无人,风扇停止。
-
自动模式:系统实时检测温度和人体存在情况,在有人时根据温度区间自动调节风扇档位:
- 20℃<T<25℃:一档
- 25℃<T<30℃:二档
- 30℃<T<40℃:三档
- T>40℃:蜂鸣器报警,风扇停止
-
语音模式:利用ASRPRO语音识别模块识别用户语音命令,替代手动按钮实现档位调节与开关控制。
-
定时功能:任意模式下均可进入定时模式,支持最长60秒的定时运行,定时结束后风扇自动停止。
-
LCD1602显示:用于实时显示温度、风扇档位、当前运行模式以及剩余定时时间,增强人机交互体验。
该系统不仅适用于家庭场景,还能应用于办公室、实验室等场所,实现舒适、节能和智能化的风扇控制。
2. 系统电路设计
2.1 STM32F103C8T6核心控制模块
STM32F103C8T6作为系统核心,负责各传感器数据采集、模式逻辑控制和外设驱动。其主要职责包括:
- 通过ADC接口读取温度传感器数据;
- 通过GPIO口采集HC-SR501红外人体感应信号;
- 通过UART与ASRPRO语音识别模块通信;
- 通过GPIO驱动蜂鸣器和风扇电路;
- 通过I²C总线控制LCD1602显示屏;
- 响应按键输入,切换运行模式和档位。
2.2 ASRPRO语音识别模块
ASRPRO语音识别模块可识别预设的语音指令,如“开风扇”、“一档”、“二档”、“三档”、“关风扇”等,并将结果通过串口返回给STM32,STM32根据识别结果执行对应的控制逻辑。
2.3 温度传感器电路
温度传感器(如DS18B20或模拟NTC)用于实时采集环境温度。其输出信号由STM32读取后,作为自动模式下调速和报警的依据。
2.4 HC-SR501人体红外感应模块
HC-SR501用于检测人体是否进入感应区域。当有人存在时输出高电平信号,STM32据此判断风扇是否需要运行。在无人时,风扇停止工作,从而节省能源。
2.5 LCD1602液晶显示电路
LCD1602通过I²C接口与STM32通信,实时显示温度、风扇档位、模式状态及定时时间。该模块为用户提供直观的操作反馈。
2.6 风扇电路
风扇电路通过三档继电器或PWM驱动实现调速。STM32根据不同档位输出对应的控制信号,调整风扇转速。
2.7 按键电路
按键分为模式切换键、定时键和档位控制键。在手动模式下,档位按键直接控制风扇速度;在设置过程中,按键用于进入定时模式或选择模式。
2.8 蜂鸣器报警电路
蜂鸣器作为超温报警装置,当温度超过40℃时由STM32驱动发声,同时风扇停止运转,提示用户当前温度异常。
3. 程序设计
程序采用模块化结构,分为主程序、模式管理、传感器采集、语音控制、LCD显示、定时功能及报警控制等部分。
3.1 主程序结构
主循环不断执行数据采集、模式判断、显示更新和定时控制,确保系统在不同模式下的逻辑正确。
int main(void) {
System_Init(); // 初始化外设
LCD_Init();
Sensor_Init();
Voice_Init();
while (1) {
Read_Temperature();
Human_Detect();
Key_Scan();
Voice_Receive();
Mode_Process();
Display_Update();
Timer_Check();
}
}
3.2 模式管理程序
系统提供手动、自动和语音三种模式,根据按键或语音命令进行切换。
typedef enum { MODE_MANUAL, MODE_AUTO, MODE_VOICE } Mode;
Mode currentMode = MODE_MANUAL;
void Mode_Process(void) {
switch (currentMode) {
case MODE_MANUAL: Manual_Control(); break;
case MODE_AUTO: Auto_Control(); break;
case MODE_VOICE: Voice_Control(); break;
}
}
3.3 手动模式程序
在手动模式下,用户通过按键选择档位,同时结合人体感应器控制风扇开关。
void Manual_Control(void) {
if (humanDetected) {
if (keyLevel == 1) Fan_SetSpeed(1);
else if (keyLevel == 2) Fan_SetSpeed(2);
else if (keyLevel == 3) Fan_SetSpeed(3);
else Fan_Stop();
} else {
Fan_Stop();
}
}
3.4 自动模式程序
自动模式下根据温度区间调节档位,当温度过高触发报警。
void Auto_Control(void) {
if (!humanDetected) {
Fan_Stop();
return;
}
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.5 语音控制程序
语音控制模式通过串口接收ASRPRO识别结果,执行相应指令。
void Voice_Control(void) {
char command = Voice_GetCommand();
if (command == CMD_ON) Fan_SetSpeed(1);
else if (command == CMD_OFF) Fan_Stop();
else if (command == CMD_SPEED1) Fan_SetSpeed(1);
else if (command == CMD_SPEED2) Fan_SetSpeed(2);
else if (command == CMD_SPEED3) Fan_SetSpeed(3);
}
3.6 LCD显示程序
LCD显示实时温度、档位、模式和定时时间。
void Display_Update(void) {
LCD_ShowString(0, 0, "Temp:");
LCD_ShowNum(5, 0, temperature, 2);
LCD_ShowString(0, 1, "Mode:");
if (currentMode == MODE_MANUAL) LCD_ShowString(5, 1, "Manual");
else if (currentMode == MODE_AUTO) LCD_ShowString(5, 1, "Auto");
else LCD_ShowString(5, 1, "Voice");
LCD_ShowString(12, 1, "T:");
LCD_ShowNum(14, 1, timerCount, 2);
}
3.7 定时功能程序
定时功能在任意模式下均可开启,运行到达设定时间后风扇关闭。
uint16_t timerCount = 0;
void Timer_Check(void) {
if (timerCount > 0) {
timerCount--;
if (timerCount == 0) {
Fan_Stop();
}
}
}
3.8 报警控制程序
当温度超过阈值时蜂鸣器报警,并在LCD上提示。
void Alarm_Check(void) {
if (temperature > 40) {
Buzzer_On();
LCD_ShowString(0, 0, "TEMP HIGH!");
} else {
Buzzer_Off();
}
}
4. 总结
本设计基于STM32单片机,集成了语音识别、温度检测、人体感应、自动与手动模式切换、定时功能以及报警功能,实现了智能语音控制风扇系统的完整方案。其主要特点在于:
- 多模式运行:手动、自动和语音模式灵活切换,满足不同用户的操作需求。
- 智能化控制:通过温度与人体感应器实现节能控制,避免无人时风扇空转。
- 语音交互:语音识别模块使用户可以通过语音直接操作,提升交互便捷性。
- 安全与可靠:温度过高时蜂鸣器报警,防止设备长时间高温运行带来的风险。
- 人机交互友好:LCD1602提供实时信息显示,直观清晰。
整体来看,该系统功能全面、逻辑清晰、实用性强,能够在日常生活中带来更加舒适和智能的使用体验,同时也为嵌入式系统与智能家居方向的研究提供了良好的参考价值。
更多推荐



所有评论(0)