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

1. 功能介绍

本系统基于STM32F103C8T6单片机,结合ASRPRO语音识别模块、温度传感器、HC-SR501人体红外感应模块、LCD1602显示屏、风扇驱动电路、按键电路及蜂鸣器,构建了一个智能语音控制风扇系统。该设计融合了自动控制、手动操作、语音识别、人体检测以及温度感应等多种功能,能够根据不同的使用场景灵活调整风扇运行方式,具有良好的实用性与拓展性。

主要功能如下:

  1. 电源指示灯:系统通电时点亮LED,指示设备处于工作状态。

  2. 多模式切换:通过按键可选择手动模式、自动模式或语音模式。

  3. 手动模式:用户通过三个档位按键控制风扇速度。若有人体进入传感器感应范围,风扇运行;若无人,风扇停止。

  4. 自动模式:系统实时检测温度和人体存在情况,在有人时根据温度区间自动调节风扇档位:

    • 20℃<T<25℃:一档
    • 25℃<T<30℃:二档
    • 30℃<T<40℃:三档
    • T>40℃:蜂鸣器报警,风扇停止
  5. 语音模式:利用ASRPRO语音识别模块识别用户语音命令,替代手动按钮实现档位调节与开关控制。

  6. 定时功能:任意模式下均可进入定时模式,支持最长60秒的定时运行,定时结束后风扇自动停止。

  7. 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单片机,集成了语音识别、温度检测、人体感应、自动与手动模式切换、定时功能以及报警功能,实现了智能语音控制风扇系统的完整方案。其主要特点在于:

  1. 多模式运行:手动、自动和语音模式灵活切换,满足不同用户的操作需求。
  2. 智能化控制:通过温度与人体感应器实现节能控制,避免无人时风扇空转。
  3. 语音交互:语音识别模块使用户可以通过语音直接操作,提升交互便捷性。
  4. 安全与可靠:温度过高时蜂鸣器报警,防止设备长时间高温运行带来的风险。
  5. 人机交互友好:LCD1602提供实时信息显示,直观清晰。

整体来看,该系统功能全面、逻辑清晰、实用性强,能够在日常生活中带来更加舒适和智能的使用体验,同时也为嵌入式系统与智能家居方向的研究提供了良好的参考价值。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐