基于STM32单片机的智能语音控制风扇设计

1 功能介绍

本系统是一款基于STM32F103C8T6单片机的智能语音控制风扇。通过语音识别模块、温度传感器、人体感应模块等多种硬件的协同工作,实现了手动、自动、语音三种控制模式。系统既能满足用户日常手动调节风扇的需求,也能根据环境情况进行自动化控制,还能利用语音指令进行操作,真正实现了人性化和智能化的功能。

具体功能如下:

  1. 电源指示灯:系统通电后,电源指示灯点亮,提示用户设备已进入工作状态。
  2. 模式切换:通过按键可以在手动、自动和语音三种模式之间进行切换。
  3. 手动模式:用户可通过档位按键选择一档、二档或三档控制风扇速度,同时通过人体感应模块实现“人来风扇启动,人走风扇关闭”的功能。
  4. 自动模式:系统通过温度传感器检测环境温度,并结合人体感应模块判断是否有人,最终根据温度区间控制风扇档位。当温度过高时,蜂鸣器报警,并自动关闭风扇。
  5. 语音模式:通过ASRPRO语音识别模块采集语音指令,实现与手动模式相同的功能,只是输入方式由按键变为语音。
  6. 定时模式:用户可在任意模式下按下“定时”键进入定时状态,演示设置的最长定时时间为60s,到时风扇自动关闭。
  7. 信息显示:LCD1602实时显示温度值、风扇档位、当前运行模式及定时时间,帮助用户清晰了解当前系统工作状态。

该系统充分结合了STM32的强大处理能力与外围模块的多样化功能,体现了现代家用电器的智能化设计理念。


2 系统电路设计

2.1 STM32F103C8T6最小系统

STM32F103C8T6作为主控芯片,承担整个系统的信号采集、逻辑运算、模式判断以及外设驱动功能。最小系统包括电源电路、时钟电路和复位电路。其32位ARM Cortex-M3内核可提供较高的运算效率,足以处理语音控制、传感器数据采集与多任务运行。

2.2 语音识别模块ASRPRO

ASRPRO语音识别模块用于采集用户语音指令并转换为串口信号传输至STM32。该模块支持常用的开关、档位调节等指令,能够快速响应用户的语音输入。在语音模式下,系统将根据识别到的语音指令进行操作,例如“开启风扇”、“关闭风扇”、“一档”、“二档”等。

2.3 温度传感器模块

温度传感器用于检测当前环境温度,并将数据反馈给STM32。通过编程可以实现温度区间判断与风扇档位调节,例如:

  • 20℃<温度≤25℃:运行一档;
  • 25℃<温度≤30℃:运行二档;
  • 30℃<温度≤40℃:运行三档;
  • 温度>40℃:蜂鸣器报警并关闭风扇。

2.4 HC-SR501人体感应模块

HC-SR501模块基于红外热释电原理,可检测周围是否有人。在手动和自动模式下,该模块起到启停风扇的重要作用,即“人在风扇工作,无人风扇停止”,从而避免能源浪费并提升安全性。

2.5 蜂鸣器电路

蜂鸣器作为声光报警模块,当温度超过40℃或系统需要发出提示时启动,发出报警声,提醒用户环境异常或操作完成。

2.6 风扇驱动电路

风扇通过三档电机控制电路进行驱动,采用PWM调速方式控制不同的转速档位。电机与单片机之间通过三极管或MOSFET进行隔离与驱动,保证系统稳定性与安全性。

2.7 LCD1602显示电路

LCD1602用于实时显示温度、档位、模式和定时信息。其接口采用并行通信方式,通过数据总线与STM32相连,显示信息清晰直观,便于用户查看。

2.8 按键电路

系统配置了多个按键:

  1. 模式切换按键:在手动、自动、语音模式之间切换。
  2. 档位按键:在手动模式下选择不同风速。
  3. 定时按键:进入定时模式,并设置倒计时时间。

2.9 电源电路

系统采用稳压电源模块,将输入电压稳定为5V供给外围电路,STM32通过LDO稳压进一步得到3.3V电源。电源指示灯用于提示电源状态。


3 程序设计

系统程序基于STM32固件库开发,采用模块化编程思路,将功能分为语音识别、温度采集与处理、人体检测、模式管理、定时管理、风扇控制与LCD显示等部分。

3.1 主程序流程

主程序主要完成系统初始化、模式切换与任务调度。

int main(void)
{
    System_Init();   // 系统初始化
    LCD_Init();      // LCD初始化
    TempSensor_Init(); // 温度传感器初始化
    Voice_Init();    // 语音识别模块初始化
    PIR_Init();      // 人体感应模块初始化
    Fan_Init();      // 风扇控制初始化
    Timer_Init();    // 定时功能初始化

    while(1)
    {
        Key_Scan();       // 检测按键输入
        Voice_Process();  // 处理语音指令
        Temp_Process();   // 处理温度传感器数据
        PIR_Process();    // 处理人体感应数据
        Mode_Control();   // 模式逻辑判断
        Timer_Process();  // 定时功能处理
        LCD_Display();    // 刷新显示信息
    }
}

3.2 温度采集与控制程序

温度模块通过ADC采样并进行判断,决定风扇档位与报警条件。

void Temp_Process(void)
{
    float temp = Temp_Read();  // 读取温度

    if(currentMode == AUTO_MODE && pirFlag == 1)
    {
        if(temp > 20 && temp <= 25)
            Fan_SetSpeed(1);
        else if(temp > 25 && temp <= 30)
            Fan_SetSpeed(2);
        else if(temp > 30 && temp <= 40)
            Fan_SetSpeed(3);
        else if(temp > 40)
        {
            Buzzer_On();
            Fan_Stop();
        }
    }
}

3.3 人体感应处理程序

人体感应模块用于判断是否有人,若无人则停止风扇。

void PIR_Process(void)
{
    if(PIR_Read() == 1)
    {
        pirFlag = 1;
    }
    else
    {
        pirFlag = 0;
        Fan_Stop();
    }
}

3.4 语音识别控制程序

通过串口接收ASRPRO语音识别结果,并执行相应指令。

void Voice_Process(void)
{
    if(currentMode == VOICE_MODE)
    {
        char cmd = Voice_ReadCmd(); 
        switch(cmd)
        {
            case '1': Fan_SetSpeed(1); break;
            case '2': Fan_SetSpeed(2); break;
            case '3': Fan_SetSpeed(3); break;
            case 'O': Fan_Stop(); break;  // 关闭风扇
            default: break;
        }
    }
}

3.5 手动模式控制程序

用户通过按键进行档位选择,结合人体感应模块进行启停。

void Manual_Control(void)
{
    if(currentMode == MANUAL_MODE && pirFlag == 1)
    {
        if(Key_Read(KEY1)) Fan_SetSpeed(1);
        if(Key_Read(KEY2)) Fan_SetSpeed(2);
        if(Key_Read(KEY3)) Fan_SetSpeed(3);
    }
}

3.6 定时功能程序

定时功能用于在任意模式下自动关闭风扇。

void Timer_Process(void)
{
    if(timerEnable)
    {
        if(timerCount > 0)
        {
            timerCount--;
            if(timerCount == 0)
            {
                Fan_Stop();
            }
        }
    }
}

3.7 LCD显示程序

LCD显示当前温度、模式、档位和定时信息。

void LCD_Display(void)
{
    LCD_Clear();
    LCD_ShowString(0,0,"Temp:");
    LCD_ShowNum(0,5,(int)temperature,2);
    LCD_ShowString(1,0,"Mode:");
    if(currentMode == MANUAL_MODE) LCD_ShowString(1,5,"Manual");
    else if(currentMode == AUTO_MODE) LCD_ShowString(1,5,"Auto");
    else if(currentMode == VOICE_MODE) LCD_ShowString(1,5,"Voice");

    LCD_ShowString(0,10,"Fan:");
    LCD_ShowNum(0,14,fanSpeed,1);

    LCD_ShowString(1,12,"T:");
    LCD_ShowNum(1,14,timerCount,2);
}

4 总结

基于STM32单片机的智能语音控制风扇系统,融合了语音识别、温度传感、人体感应、自动调速、LCD信息显示等多种功能。该系统不仅能通过传统按键进行操作,还能根据环境温度和人体活动实现智能控制,更支持语音输入,极大提升了用户体验与交互方式。其设计思路具有较强的扩展性,可进一步拓展到智能家居系统,如与无线模块结合实现远程控制。

整个系统在硬件电路和软件程序上都体现了智能化与人性化,展示了嵌入式系统在智能生活场景中的应用价值。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐