基于Arduino的语音识别温湿度监测系统:从传感器到语音播报的全链路实现

1次阅读
没有评论

共计 1833 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景与痛点

传统温湿度监测系统往往只停留在数据采集和显示的层面,缺乏与用户的直接交互。在实际应用中,特别是在一些特殊场景(如黑暗环境或不便查看屏幕的情况下),语音交互能极大提升用户体验。此外,在电池供电场景下,持续运行的语音识别模块会带来较大的能耗挑战,这也是很多开发者头疼的问题。

基于 Arduino 的语音识别温湿度监测系统:从传感器到语音播报的全链路实现

技术选型

语音识别芯片对比

我们对比了 LD3320 和 SYN7318 两款常见的离线语音识别芯片:

参数 LD3320 SYN7318
识别率 85% 92%
待机功耗 3mA 5mA
唤醒响应时间 200ms 150ms
成本 25 元 35 元

最终选择 LD3320,因其在成本和功耗上的优势更适合我们的低功耗需求。

传感器选型

DHT11 虽然精度(±2℃, ±5%RH)不如 DHT22(±0.5℃, ±2%RH),但其响应速度快、价格低廉(仅 DHT22 的 1 /3),且对于室内环境监测完全够用。

通信协议选择

I2C 虽然节省 IO 口,但在长距离传输时稳定性较差。UART 虽然多用一根线,但抗干扰能力更强,最终选择 UART 连接各模块。

系统架构

整个系统由四个主要部分组成:

  1. 语音识别模块(LD3320)
  2. 传感器模块(DHT11)
  3. 音频播放模块(DFPlayer Mini)
  4. 主控单元(Arduino Nano)

数据流:语音指令→LD3320→Arduino→DHT11 数据采集→Arduino 处理→DFPlayer 播放

核心实现

语音唤醒词训练

  1. 使用厂商提供的 PC 端工具录制唤醒词
  2. 设置 3 - 5 个相近发音的负样本提高抗干扰性
  3. 调整识别阈值至 75% 灵敏度平衡误触发率

数据滤波算法

采用滑动平均滤波,窗口大小设为 5:

float filter(float newVal) {static float buffer[5] = {0};
    static byte index = 0;

    buffer[index] = newVal;
    index = (index + 1) % 5;

    float sum = 0;
    for(int i=0; i<5; i++) {sum += buffer[i];
    }
    return sum / 5;
}

MP3 音频拼接

预先录制好数字发音片段(0-9、十、百、度等),播放时动态组合。例如 ”25.6 度 ” 拆分为 ”20″+”5″+” 点 ”+”6″+” 度 ” 五个音频文件。

关键代码

非阻塞式语音检测

void loop() {
    static unsigned long lastCheck = 0;

    // 每 100ms 检查一次语音模块
    if(millis() - lastCheck > 100) {if(voice.update()) { // 非阻塞检测
            String cmd = voice.read();
            if(cmd == "查询温湿度") {readSensor();
            }
        }
        lastCheck = millis();}

    // 其他任务...
}

带 CRC 校验的传感器读取

bool readDHT(float &temp, float &humi) {byte data[5] = {0};
    // ... 传感器通信代码...

    // CRC 校验
    byte checksum = data[0] + data[1] + data[2] + data[3];
    if(data[4] != checksum) {return false; // 校验失败}

    temp = data[2] + data[3]*0.1;
    humi = data[0] + data[1]*0.1;
    return true;
}

性能优化

功耗测试结果

工作模式 电流消耗
深度睡眠 0.1mA
语音待机 3.2mA
语音识别中 45mA
播放音频 80mA

采用 2000mAh 锂电池时,理论续航:
– 每天 20 次查询:约 30 天
– 持续工作:约 25 小时

波特率测试

UART 设置为 9600bps 时误码率 <0.1%,19200bps 时误码率升至 1.2%,最终选择 9600bps。

避坑指南

  1. MP3 爆音问题 :在 DFPlayer 的 VCC 和 GND 之间并联 100μF 电容,并在播放前增加 50ms 静音延迟
  2. 内存碎片 :避免频繁的 String 操作,使用静态缓冲区
  3. 电磁干扰
  4. 传感器导线双绞处理
  5. 电源线远离信号线
  6. 在 DHT11 数据线加 10K 上拉电阻

延伸思考

  1. BLE 扩展 :可添加 HC-08 模块,手机 APP 连接后查看历史数据
  2. ESP32-C3 迁移
  3. 优势:内置 WiFi/BLE,主频高达 160MHz
  4. 挑战:需要重写语音识别驱动
  5. 低功耗优化
  6. 加入 PIR 人体感应,无人时进入深度睡眠
  7. 采用太阳能充电

结语

这套系统实现了环境监测与语音交互的无缝结合,特别适合智能家居、农业大棚等场景。虽然还存在识别距离有限(约 2 米)等不足,但 50 元以内的成本使其具有很高的实用价值。期待看到读者在此基础上做出更多创新应用!

正文完
 0
评论(没有评论)