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

1 功能介绍

本系统以STM32F103C8T6单片机为核心控制器,围绕ASRPRO语音识别模块、喇叭、蜂鸣器、温度传感器、HC-SR501人体感应模块、LCD1602显示屏、风扇电路以及按键电路构建而成。该智能风扇不仅可以实现传统的手动模式控制,还增加了自动模式和语音模式,使系统更加人性化和智能化。用户可以根据实际使用场景选择不同的控制方式,从而提升舒适性与便利性。

系统的主要功能如下:

  1. 电源指示:打开电源后LED灯点亮,提示系统处于工作状态。

  2. 模式控制:通过按键选择手动、自动或语音模式。

  3. 手动模式:用户通过档位按键控制风扇转速,当人体传感器检测到有人时风扇运行,离开后风扇停止。

  4. 自动模式:系统根据温度传感器采集的数据与人体感应情况自动调节风扇档位。

    • 20℃<温度<25℃:一档;
    • 25℃<温度<30℃:二档;
    • 30℃<温度<40℃:三档;
    • 温度超过40℃:蜂鸣器报警,风扇停止转动。
  5. 语音模式:通过ASRPRO语音识别模块采集语音命令,实现风扇档位与开关控制。

  6. 定时功能:在任意模式下可通过定时按键进入定时模式,支持最长60秒定时。

  7. LCD1602显示:实时显示温度、档位、模式状态以及定时时间。

该系统通过多模块协同工作,实现了较为完整的智能风扇功能,不仅满足基本需求,还增强了用户体验。


2 系统电路设计

在硬件电路方面,系统采用模块化设计思想,将不同功能模块与STM32主控进行合理的接口连接。各模块既可独立工作,又能通过程序逻辑形成统一的整体。

2.1 主控电路(STM32F103C8T6)

STM32F103C8T6作为主控单片机,具有强大的处理能力和丰富的外设接口,满足多传感器、多模块的控制需求。其内部拥有多个GPIO口,可用于驱动LCD1602、风扇电路、按键输入和蜂鸣器控制,同时具备USART接口用于与ASRPRO语音识别模块通信。电源部分提供稳定的3.3V与5V电压,保证各模块的正常运行。

2.2 电源与指示灯电路

系统电源输入为5V直流电压,经稳压电路后为不同模块提供所需电源。STM32核心板采用3.3V供电,而LCD1602、蜂鸣器、语音模块等使用5V供电。电源指示灯LED直接与电源端口相连,当系统上电后点亮,提示系统处于工作状态。

2.3 按键电路

按键电路负责模式切换与定时功能的触发。其原理采用常见的下拉电阻+按键设计,按键按下时引脚电平发生变化,STM32检测后进行相应模式切换。档位控制按键共三个,分别对应风扇一档、二档和三档;另有一个模式选择键和一个定时按键。

2.4 温度传感器电路

温度传感器用于采集环境温度,本设计可采用常见的DS18B20数字温度传感器。其与STM32单片机通过单总线协议通信,具有较高的测量精度和稳定性。传感器测得的温度值用于自动模式下风扇档位的自动调节。

2.5 HC-SR501人体感应模块电路

HC-SR501是常用的红外人体感应模块,能够检测一定范围内人体的存在。模块输出数字信号,高电平表示检测到有人,低电平表示无人。STM32根据此信号判断是否需要启动风扇,从而节省能源并提高系统智能性。

2.6 LCD1602显示电路

LCD1602显示屏通过并行接口与STM32相连,主要用于显示实时温度、风扇档位、当前模式状态以及定时时间。系统采用4位数据线工作模式,可以有效减少GPIO占用数量。

2.7 蜂鸣器与喇叭电路

蜂鸣器作为报警与提示装置,当温度过高或出现异常情况时,蜂鸣器发出声响提醒用户。喇叭则配合语音识别模块,主要用于播放提示音或语音反馈。两者均通过GPIO口实现驱动。

2.8 风扇电路

风扇电路由继电器或MOSFET开关电路控制风扇电机的启动与档位调速。不同档位对应不同的PWM信号占空比或电压驱动,从而实现一档、二档和三档的速度变化。

2.9 语音识别模块电路(ASRPRO)

ASRPRO语音识别模块通过串口与STM32通信,负责采集用户语音并进行识别。当识别到有效命令时,将指令结果通过串口传输至STM32,主控根据语音内容执行相应操作。例如,识别“开一档”时,风扇转为一档运行。


3 程序设计

系统软件采用模块化编程思想,将各个硬件功能单独编写驱动程序,并通过主循环进行统一调度。整个程序可分为初始化部分、主程序循环以及中断处理三大部分。

3.1 主程序框架

主程序主要负责系统初始化、模式切换逻辑、传感器数据采集、风扇档位控制、LCD显示以及定时控制。

#include "stm32f10x.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "hc_sr501.h"
#include "asrpro.h"
#include "fan.h"
#include "beep.h"
#include "key.h"

int main(void)
{
    SystemInit();
    LCD1602_Init();
    DS18B20_Init();
    HC_SR501_Init();
    ASRPRO_Init();
    FAN_Init();
    BEEP_Init();
    KEY_Init();

    while(1)
    {
        Key_Scan();         // 按键检测
        Temperature_Read(); // 读取温度
        Human_Check();      // 人体检测
        Voice_Command();    // 语音识别
        Fan_Control();      // 风扇控制
        Timer_Control();    // 定时功能
        LCD_Display();      // 显示数据
    }
}

3.2 按键程序设计

按键扫描用于模式切换、定时启动以及手动模式档位调节。通过去抖动处理确保输入稳定。

void Key_Scan(void)
{
    if(KEY_MODE == 0) // 模式切换键
    {
        Delay_ms(20);
        if(KEY_MODE == 0)
        {
            mode++;
            if(mode > 3) mode = 1; // 循环切换
        }
    }
    
    if(KEY_TIM == 0) // 定时键
    {
        Delay_ms(20);
        if(KEY_TIM == 0)
        {
            timer_set = 60; // 60秒定时
        }
    }
}

3.3 温度采集与处理程序设计

温度数据由DS18B20采集,转换为摄氏度后用于风扇档位调节。

float Temperature_Read(void)
{
    float temp = DS18B20_GetTemp();
    return temp;
}

3.4 人体检测程序设计

通过读取HC-SR501的数字信号,判断当前环境是否有人。

uint8_t Human_Check(void)
{
    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
        return 1; // 有人
    else
        return 0; // 无人
}

3.5 语音识别程序设计

语音模块通过USART通信返回识别结果,STM32解析后执行相应动作。

void Voice_Command(void)
{
    uint8_t cmd = ASRPRO_GetCommand();
    switch(cmd)
    {
        case CMD_FAN_ON1: Fan_SetSpeed(1); break;
        case CMD_FAN_ON2: Fan_SetSpeed(2); break;
        case CMD_FAN_ON3: Fan_SetSpeed(3); break;
        case CMD_FAN_OFF: Fan_Stop(); break;
    }
}

3.6 风扇控制程序设计

风扇控制既可响应手动输入,也可根据自动模式进行温度判断调速。

void Fan_Control(void)
{
    if(mode == MODE_MANUAL)
    {
        // 按键或语音控制档位
    }
    else if(mode == MODE_AUTO)
    {
        if(Human_Check())
        {
            float t = Temperature_Read();
            if(t > 20 && t < 25) Fan_SetSpeed(1);
            else if(t >= 25 && t < 30) Fan_SetSpeed(2);
            else if(t >= 30 && t < 40) Fan_SetSpeed(3);
            else if(t >= 40)
            {
                BEEP_On();
                Fan_Stop();
            }
        }
        else
        {
            Fan_Stop();
        }
    }
}

3.7 定时程序设计

定时功能通过软件计数实现,每秒减一,时间到达后风扇自动关闭。

void Timer_Control(void)
{
    if(timer_set > 0)
    {
        timer_set--;
        if(timer_set == 0)
        {
            Fan_Stop();
        }
    }
}

3.8 LCD显示程序设计

LCD用于显示温度值、档位状态、模式信息以及定时剩余时间。

void LCD_Display(void)
{
    LCD1602_Clear();
    LCD1602_ShowString(0,0,"Temp:");
    LCD1602_ShowNum(5,0,(int)Temperature_Read(),2);
    LCD1602_ShowString(0,1,"Mode:");
    LCD1602_ShowNum(5,1,mode,1);
    LCD1602_ShowString(8,1,"Time:");
    LCD1602_ShowNum(13,1,timer_set,2);
}

4 总结

基于STM32单片机的智能语音控制风扇系统,综合利用了温度传感器、人体感应、语音识别、LCD显示以及蜂鸣器等模块,实现了多模式下的风扇控制。用户既可以通过按键完成手动控制,也能依靠温度与人体检测实现自动化运行,还可通过语音指令完成远程操作。整个系统设计思路清晰,电路实现合理,程序架构模块化,既方便调试,也具备较好的扩展性。在实际生活中,该设计能够显著提升用户体验,体现了智能家居控制的应用价值。

Logo

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

更多推荐