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

技术选型
语音识别芯片对比
我们对比了 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 连接各模块。
系统架构
整个系统由四个主要部分组成:
- 语音识别模块(LD3320)
- 传感器模块(DHT11)
- 音频播放模块(DFPlayer Mini)
- 主控单元(Arduino Nano)
数据流:语音指令→LD3320→Arduino→DHT11 数据采集→Arduino 处理→DFPlayer 播放
核心实现
语音唤醒词训练
- 使用厂商提供的 PC 端工具录制唤醒词
- 设置 3 - 5 个相近发音的负样本提高抗干扰性
- 调整识别阈值至 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。
避坑指南
- MP3 爆音问题 :在 DFPlayer 的 VCC 和 GND 之间并联 100μF 电容,并在播放前增加 50ms 静音延迟
- 内存碎片 :避免频繁的 String 操作,使用静态缓冲区
- 电磁干扰 :
- 传感器导线双绞处理
- 电源线远离信号线
- 在 DHT11 数据线加 10K 上拉电阻
延伸思考
- BLE 扩展 :可添加 HC-08 模块,手机 APP 连接后查看历史数据
- ESP32-C3 迁移 :
- 优势:内置 WiFi/BLE,主频高达 160MHz
- 挑战:需要重写语音识别驱动
- 低功耗优化 :
- 加入 PIR 人体感应,无人时进入深度睡眠
- 采用太阳能充电
结语
这套系统实现了环境监测与语音交互的无缝结合,特别适合智能家居、农业大棚等场景。虽然还存在识别距离有限(约 2 米)等不足,但 50 元以内的成本使其具有很高的实用价值。期待看到读者在此基础上做出更多创新应用!
