STM32智能家居语音系统(ASRPRO版)

一、系统架构与核心硬件选型

主控芯片:STM32F103C8T6Q

性能分析

ARM Cortex-M3内核,72MHz主频,64KB Flash,20KB RAM,满足基础功能需求,但需优化代码以避免内存溢出(如动态内存分配限制、模块化编程)。

资源瓶颈:若需扩展更多功能(如WiFi通信、复杂语音指令),建议升级至STM32F4系列(如F407VET6,192KB RAM)。

外设分配

I2C接口:连接OLED屏幕、EEPROM存储器(AT24C02)。

UART接口:与ASRPRO语音模块通信。

GPIO:控制按键、继电器、LED灯、步进电机驱动信号。

PWM输出:TIM2/TIM3通道控制风扇转速、LED亮度。

ADC输入:采集光敏电阻信号(若未用数字传感器)。

传感器选型与优化

温湿度传感器

DHT22(精度±2%RH/±0.5℃)优于DHT11,但需注意单总线通信时序(建议使用HAL库的DHT驱动库)。

烟雾传感器

MQ-2需预热10分钟以上,且对酒精等气体敏感,建议增加滤波算法(如移动平均)降低误报。

光照传感器

BH1750(I2C接口,精度±20%)优于光敏电阻,但成本较高;若用光敏电阻,需分压电路+ADC采样,并通过软件校准(如建立光照强度-ADC值映射表)。

二、功能模块深度扩展

1. 检测功能:多传感器融合与数据预处理

数据采集策略:

分时轮询:

温湿度:每5秒采集一次(DHT22响应时间约2秒)。

烟雾浓度:每10秒采集一次(MQ-2响应较慢)。

光照强度:每1秒采集一次(实时性要求高)。

异常处理:

传感器故障检测(如DHT22通信超时,触发OLED报警提示)。

数据滤波(如卡尔曼滤波或滑动平均)消除噪声。

环境联动逻辑:

温湿度联动:

温度>30℃且湿度<40% → 风扇全速+加湿器开启。

温度<20℃ → 关闭风扇,LED调至暖光(PWM模拟)。

烟雾安全策略:

烟雾浓度>阈值 → 关闭所有电器(风扇、窗帘),触发蜂鸣器报警,OLED显示“烟雾超标!”。

光照智能调节:

光照强度<50lux → LED亮度自动调至80%(PWM占空比80%)。

光照强度>1000lux → 关闭LED,窗帘自动闭合(步进电机控制)。

2. 显示功能:OLED交互界面设计

界面布局:

主界面:

顶部:实时时间(通过RTC模块实现)。

中部:温湿度、烟雾浓度、光照强度(图标+数值)。

底部:设备状态(灯/风扇/窗帘/加湿器图标,开关状态颜色区分)。

设置界面:

阈值调节(按键/语音控制,数值滚动显示)。

模式切换(手动/自动,图标高亮提示)。

动态刷新优化:

仅更新变化的数据(如温湿度),减少OLED刷新频率(延长寿命)。

使用u8g2库的u8g2_FirstPage()和u8g2_NextPage()实现双缓冲,避免闪烁。

3. 手动模式:按键与语音双控设计

按键控制:

硬件设计:

4个独立按键(上/下/左/右)+ 1个确认键(减少GPIO占用)。

功能映射:

上/下键:调节LED亮度或风扇转速(PWM占空比±10%)。

左/右键:切换设备(灯/风扇/窗帘/加湿器)。

确认键:开关当前设备。

语音控制:

ASRPRO模块集成:

通过串口接收语音指令(如“打开窗帘”“调亮灯光”)。

支持唤醒词(如“小智”)避免误触发。

指令解析:

简单指令:直接映射到GPIO或PWM控制(如“开灯”→GPIO置高)。

复杂指令:解析参数(如“调光到50%”→设置PWM占空比50%)。

4. 自动模式:智能场景联动

场景预设:

睡眠模式:

22:00后自动关闭所有电器,窗帘闭合,LED调至暗光(PWM占空比10%)。

离家模式:

通过按键或语音触发,关闭所有设备,启动烟雾监测(超标时发送报警信号至手机,需扩展WiFi模块)。

阈值自适应:

根据季节调整阈值(如夏季湿度阈值降低10%,冬季温度阈值提高5℃)。

5. PWM调光/速:精细化控制

LED调光:

冷暖双色LED控制:通过PWM分别调节冷光(TIM3_CH1)和暖光(TIM3_CH2)的占空比,实现色温调节。

风扇调速:

无级调速:PWM频率20kHz(避免人耳可听噪音),占空比0-100%对应转速0-3000RPM。

6. 阈值调节:用户自定义与存储

调节方式:

按键调节:

长按确认键3秒进入设置模式,通过上下键调整阈值,确认键保存。

语音调节:

支持指令如“设置温度阈值为28度”“将湿度下限调至30%”。

数据存储:

使用AT24C02 EEPROM保存阈值(I2C通信,写入前需检查设备地址)。

上电时自动读取EEPROM值,避免每次重启需重新设置。

三、系统优化与可靠性设计

低功耗优化:

传感器休眠:

温湿度传感器在非采集周期进入低功耗模式(DHT22无此功能,可改用SHT30)。

光照传感器在夜间降低采样频率(如每5秒一次)。

主控休眠:

空闲时进入Stop模式(电流<2μA),通过RTC或外部中断唤醒。

代码架构优化:

状态机设计:

定义enum状态(如MANUAL_MODE、AUTO_MODE、SETTING_MODE),通过switch-case处理逻辑。

模块化封装:

将传感器驱动、OLED显示、PWM控制等封装为独立.c/.h文件,便于维护。

异常处理:

看门狗保护:

启用独立看门狗(IWDG),防止程序卡死。

通信容错:

语音模块通信超时重试3次,失败后切换至手动模式。

四、扩展功能与未来升级

无线通信扩展:

添加ESP8266模块,通过MQTT协议将数据上传至云平台(如阿里云IoT),实现远程控制。

AI语音交互:

升级至离线语音识别芯片(如LD3320),支持自然语言指令(如“把灯光调成阅读模式”)。

多设备联动:

通过ZigBee或蓝牙Mesh扩展更多智能家居设备(如智能插座、空气净化器)。

五、总结

该系统通过STM32F103C8T6Q实现了低成本、高集成度的智能家居控制,核心优势在于:

多传感器融合:实时感知环境并智能联动。

双控模式:按键+语音满足不同场景需求。

可扩展性:预留接口支持未来功能升级。

改进方向:

优化代码结构以应对资源瓶颈。增加传感器冗余设计(如双温湿度传感器互校验)。引入OTA升级功能,便于远程维护。

 

原理图

 系统总体框架

程序:

#include <stdint.h>
#include <stdlib.h>

// 假设的驱动初始化函数声明
void PlatformDrvInit(void);
void DelayInit(void);
void Usb2ComDrvInit(void);
void STEP_MOTOR_Init(void);
void led_init(void);
void KeyDrvInit(void);
void BH1750_Init(void);
void fan_init(void);
void OLED_Init(void);
void OLED_ColorTurn(uint8_t color);
void OLED_DisplayTurn(uint8_t display);

// 假设的任务函数声明
void HmiTask(void);
void DisplayTask(void);
void Intelligent_Voice_Task(void);

// 假设的定时器回调注册函数声明
void TaskScheduleCbReg(void (*cb)(void));

// 传感器数据结构体
typedef struct {
    uint8_t temp_threshold;
    uint8_t light_threshold;
} SensorData_t;

SensorData_t g_sensor_data;

typedef struct{
    uint8_t run;                    // 调度标志,1:调度,0:挂起
    uint16_t timCount;              // 时间片计数值
    uint16_t timRload;              // 时间片重载值
    void (*pTaskFuncCb)(void);      // 函数指针变量,用来保存业务功能模块函数地址
} TaskComps_t;

static TaskComps_t g_taskComps[] = 
{
    {0, 10,   10,   HmiTask},
    {0, 500,  500,  DisplayTask},
    {0, 100,  100,  Intelligent_Voice_Task},
    /* 添加业务功能模块 */
};

#define TASK_NUM_MAX   (sizeof(g_taskComps) / sizeof(g_taskComps[0]))

static void TaskHandler(void)
{
    for (uint8_t i = 0; i < TASK_NUM_MAX; i++)
    {
        if (g_taskComps[i].run)                      // 判断时间片标志
        {
            g_taskComps[i].run = 0;                  // 标志清零
            if (g_taskComps[i].pTaskFuncCb == NULL)
            {
                continue;
            }
            g_taskComps[i].pTaskFuncCb();            // 执行调度业务功能模块
        }
    }
}

/************************************************************** 
@brief 在定时器中断服务函数中被间接调用,设置时间片标记,
       需要定时器1ms产生1次中断
@param*
@return
************************************************************/
static void TaskScheduleCb(void)
{
    for (uint8_t i = 0; i < TASK_NUM_MAX; i++)
    {
        if (g_taskComps[i].timCount)
        {
            g_taskComps[i].timCount--;
            if (g_taskComps[i].timCount == 0)
            {
                g_taskComps[i].run = 1;
                g_taskComps[i].timCount = g_taskComps[i].timRload;
            }
        }
    }
}

static void DrvInit(void)
{
    PlatformDrvInit();
    DelayInit();
    Usb2ComDrvInit();
    STEP_MOTOR_Init();
    led_init();
    KeyDrvInit();
    BH1750_Init();
    fan_init();
    OLED_Init();
    OLED_ColorTurn(0);
    OLED_DisplayTurn(0);
}

static void AppInit(void)
{
    TaskScheduleCbReg(TaskScheduleCb);
}

// 假设的任务函数实现
void HmiTask(void) {
    // 实现HMI任务逻辑
}

void DisplayTask(void) {
    // 实现显示任务逻辑
}

void Intelligent_Voice_Task(void) {
    // 实现智能语音任务逻辑
}

int main(void)
{   
    DrvInit();
    AppInit();
    g_sensor_data.temp_threshold = 33;
    g_sensor_data.light_threshold = 50;
    while (1)
    {
         TaskHandler();
    }
}



通过以上设计,该系统可广泛应用于家庭、办公室等场景,实现真正的智能化环境管理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值