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

1 系统功能介绍

本设计基于 STM32F103C8T6 单片机,结合语音识别、人机交互和传感器技术,实现了一个多功能的 智能语音控制风扇 系统。该系统在传统电风扇的基础上,加入了 多模式控制、自动调速、人体感应、定时控制、语音交互 等功能,提升了风扇的智能化与便捷性,具有较强的实用价值与推广意义。

系统的主要功能如下:

  1. 电源指示:当电源打开时,电源指示灯亮,提示系统已进入工作状态。

  2. 多模式切换:通过按键可选择三种工作模式——手动模式、自动模式、语音模式。

  3. 手动模式

    • 用户可通过三个档位按键对风扇进行调速。
    • 结合人体红外感应模块(HC-SR501),只有当检测到有人时风扇才会运行,当人离开时风扇自动关闭。
  4. 自动模式

    • 系统先判断是否有人,如果无人,则风扇保持关闭状态。

    • 如果有人,则根据温度传感器检测到的环境温度自动调节风扇档位:

      • 20℃<温度<25℃:一档运行;
      • 25℃<温度<30℃:二档运行;
      • 30℃<温度<40℃:三档运行;
      • 温度>40℃:蜂鸣器报警,风扇停止运行。
  5. 语音模式

    • 用户可通过 ASRPRO语音识别模块 对风扇进行语音控制,实现与手动模式相同的功能(语音指令代替按键)。
  6. 定时模式

    • 在任意模式下,用户可通过“定时”按键进入定时功能,演示情况下最大定时 60 秒,到时后风扇自动关闭。
  7. LCD1602 显示

    • 实时显示环境温度、风扇档位、当前工作模式(手动/自动/语音)以及定时倒计时信息。

该系统通过 传感器感知、单片机运算处理、外设执行与人机交互 的结合,形成了一个完整的智能家电控制平台。


2 系统电路设计

系统电路由多个功能模块组成,各模块之间通过 STM32 进行统一调度。

2.1 单片机核心电路(STM32F103C8T6)

  • 主控单元:STM32F103C8T6 作为系统核心,负责语音数据处理、温度采集处理、人体感应数据采集、按键检测、LCD 显示刷新、风扇调速与蜂鸣器控制。
  • 资源优势:STM32F103C8T6 拥有丰富的 I/O 口、UART、ADC、定时器等硬件资源,能很好地满足多模块协同工作的需求。

2.2 语音识别模块(ASRPRO)

  • 功能:负责采集用户的语音指令并转化为控制信号。
  • 交互方式:通过串口与 STM32 通信,STM32 接收解析后的语音命令,执行相应的风扇控制操作。
  • 特点:识别准确率高,支持多组自定义语音指令。

2.3 温度传感器模块

  • 常用的温度传感器如 DS18B20DHT11,均可与 STM32 接口通信。
  • 主要作用是采集环境温度,供自动模式下的风扇调速逻辑使用。
  • 温度数据会实时显示在 LCD1602 上。

2.4 人体感应模块(HC-SR501)

  • 原理:基于热释电红外传感技术,能够感应到人体的运动。
  • 作用:用于检测当前环境中是否有人存在,只有检测到人时风扇才会运行。

2.5 LCD1602 液晶显示模块

  • 功能:显示风扇的工作状态,包括:

    • 当前温度
    • 风扇档位
    • 当前模式(手动/自动/语音)
    • 定时时间
  • 接口方式:通常采用并口或 I2C 模块与 STM32 连接。

2.6 风扇执行电路

  • 驱动方式:STM32 通过 PWM 控制三档风速(低速、中速、高速)。
  • 电路结构:采用三极管或 MOSFET 驱动风扇电机,保证稳定供电与调速能力。

2.7 按键电路

  • 提供 模式切换键、定时键、档位键 等。
  • 通过 STM32 GPIO 扫描按键状态,结合去抖动程序实现稳定输入。

2.8 蜂鸣器电路

  • 当环境温度超过 40℃ 时蜂鸣器报警提示。
  • 采用有源蜂鸣器,方便直接驱动。

2.9 电源电路

  • 系统工作电压 5V,STM32 内部使用 3.3V 电压,因此需加入 LDO 稳压芯片。
  • 电源需要提供足够电流,以保证风扇电机、LCD、语音模块同时工作时的稳定性。

3 程序设计

系统软件设计采用模块化思想,分为 主程序、模式管理、温度采集、人体感应、风扇控制、语音控制、LCD 显示、定时控制 等模块。

3.1 主程序框架

#include "stm32f10x.h"
#include "lcd1602.h"
#include "asrpro.h"
#include "dht11.h"
#include "timer.h"

u8 mode = 0;          // 0-手动,1-自动,2-语音
u8 fan_level = 0;     // 风扇档位
u8 hasPerson = 0;     // 人体检测标志
u8 temperature = 0;   // 温度值
u8 timer_count = 0;   // 定时计数

int main(void)
{
    SystemInit();
    LCD1602_Init();
    ASRPRO_Init();
    DHT11_Init();
    Timer_Init();
    GPIO_Init_All();

    while(1)
    {
        hasPerson = HC_SR501_Read();
        temperature = DHT11_Read();

        switch(mode)
        {
            case 0: Manual_Mode(); break;
            case 1: Auto_Mode(); break;
            case 2: Voice_Mode(); break;
        }
        LCD1602_Display(temperature, fan_level, mode, timer_count);
    }
}

3.2 手动模式程序

void Manual_Mode(void)
{
    if(hasPerson)
    {
        if(Key1_Pressed()) fan_level = 1;
        if(Key2_Pressed()) fan_level = 2;
        if(Key3_Pressed()) fan_level = 3;
        Fan_Control(fan_level);
    }
    else
    {
        Fan_Control(0); // 无人则关闭
    }
}

3.3 自动模式程序

void Auto_Mode(void)
{
    if(hasPerson)
    {
        if(temperature > 20 && temperature <= 25) fan_level = 1;
        else if(temperature > 25 && temperature <= 30) fan_level = 2;
        else if(temperature > 30 && temperature <= 40) fan_level = 3;
        else if(temperature > 40)
        {
            Buzzer_Alarm();
            Fan_Control(0);
        }
        Fan_Control(fan_level);
    }
    else
    {
        Fan_Control(0); // 无人则关闭
    }
}

3.4 语音模式程序

void Voice_Mode(void)
{
    char cmd = ASRPRO_GetCommand();
    if(hasPerson)
    {
        if(cmd == '1') fan_level = 1;
        else if(cmd == '2') fan_level = 2;
        else if(cmd == '3') fan_level = 3;
        else if(cmd == '0') fan_level = 0;
        Fan_Control(fan_level);
    }
    else
    {
        Fan_Control(0);
    }
}

3.5 定时功能

void Timer_IRQHandler(void)
{
    if(timer_count > 0)
    {
        timer_count--;
        if(timer_count == 0)
        {
            Fan_Control(0);
        }
    }
}

3.6 风扇控制(PWM调速)

void Fan_Control(u8 level)
{
    switch(level)
    {
        case 0: PWM_SetDuty(0); break;
        case 1: PWM_SetDuty(30); break;
        case 2: PWM_SetDuty(60); break;
        case 3: PWM_SetDuty(100); break;
    }
}

3.7 蜂鸣器报警

void Buzzer_Alarm(void)
{
    for(int i=0;i<50;i++)
    {
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        Delay_ms(200);
        GPIO_ResetBits(GPIOB, GPIO_Pin_0);
        Delay_ms(200);
    }
}

4 总结

本设计基于 STM32F103C8T6 单片机,通过集成 语音识别、温度传感器、人体感应、PWM 调速、LCD 显示、蜂鸣器报警 等模块,构建了一个功能全面的智能语音控制风扇。系统的主要优点如下:

  1. 多模式运行:用户可根据需求选择手动、自动或语音模式,灵活性强。
  2. 自动化与智能化:自动模式下能根据环境温度和人体存在情况进行智能调速。
  3. 语音交互:通过语音识别模块实现人机交互,符合智能家居的发展趋势。
  4. 安全性:高温时蜂鸣器报警,确保环境安全。
  5. 实时显示:LCD 显示屏提供直观的运行状态信息,增强用户体验。
  6. 扩展性:可进一步拓展联网功能,实现远程控制。

该智能风扇不仅提升了生活的舒适性,还展示了物联网与单片机在家电控制中的应用潜力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值