基于天问 ASRPRO 的语音控制台灯设计
视频介绍:
摘要
针对传统台灯交互方式单一、夜间使用不便的问题,本文设计并实现了一种基于天问 ASRPRO 离线语音芯片的语音控制台灯。系统以 ASRPRO 为控制核心,集成 BH1750 数字光照传感器、红外对射(避障)传感器与 DHT11 温湿度传感器,驱动共阴极三色 RGB 灯完成调色与流光效果。系统分为手动模式与自动模式:手动模式下用户通过"你好小智"唤醒后,以"打开红灯""变颜色""快速闪动"等中文命令词直接控制灯光,并可语音查询当前温度与湿度;自动模式下系统每秒检测一次光照强度与遮挡状态,当光照不足且检测到障碍物(即夜晚有人靠近)时自动点亮白光,人离开后自动熄灭。用户说出任意灯光命令即可退出自动模式、切回手动控制。测试表明,命令词识别与执行稳定,温湿度播报准确,自动模式亮灭灯逻辑符合预期。
关键词:ASRPRO;离线语音识别;RGB 调色;DHT11;BH1750
1 引言
台灯是使用频率最高的家用照明设备之一,但传统台灯依赖按键或触摸交互,在双手占用、夜间摸黑等场景下并不方便。随着离线语音识别芯片的成本不断降低,把"说话即控制"搬到台灯上已经成为一种低成本的改进方案。
与联网语音方案相比,离线方案有两个明显优势:一是识别在本地完成,不依赖网络,响应快且无隐私上传问题;二是命令词集合可由开发者自定义,非常适合"开关灯、变颜色、查温湿度"这类小指令集场景。本文选用天问 ASRPRO V2.0 开发板作为主控,它内置语音识别与 MP3 播放能力,同时提供了足够的 GPIO、PWM 与软 I2C 资源,单芯片即可完成"识别—播报—控制"全链路。
2 系统总体设计
2.1 功能需求分析
系统需要实现以下功能:
- 语音唤醒与命令识别:唤醒词"你好小智",识别后进入命令词监听;
- 灯光控制:支持红、绿、蓝、黄等单色命令,"变颜色"随机切换一种颜色,"快速闪动/闪动"在 10 秒内按 1 秒或 2 秒间隔轮换颜色;
- 温湿度播报:说出"当前温度/当前湿度",芯片合成语音播报数值;
- 音量调节:语音控制播报音量在 1~10 级之间增减;
- 双模式运行:自动模式下"光照不足 + 检测到遮挡"时自动亮白光,任意灯光命令可将系统切回手动模式。
2.2 系统总体架构
系统以 ASRPRO 为核心,外围分为三个部分:感知层(BH1750 光照、红外对射遮挡检测、DHT11 温湿度)、执行层(三色 RGB 灯)、交互层(拾音麦克风与喇叭)。ASRPRO 内部运行识别引擎与 FreeRTOS,识别结果以中断号(snid)形式进入命令分发函数;一个 1 秒周期的软件定时器负责自动模式巡检与流光节奏控制。
两种模式的切换逻辑设计为单向自动回退:自动模式是一条普通命令词(snid=19),唯一不做模式切换;其余任何命令词执行前都先把运行模式置回手动。这样设计的好处是用户永远不会被"困"在自动模式里——只要开始手动指挥灯光,系统立即跟随。
2.3 元器件选型
| 模块 | 型号 | 关键参数 | 作用 |
|---|---|---|---|
| 主控 | 天问 ASRPRO V2.0 | 内置离线识别 + MP3 播放,多路 PWM | 识别、播报与控制核心 |
| 光照 | BH1750 | I2C 接口,1~65535 lx,地址 0x23 | 环境光照强度检测 |
| 遮挡 | 红外对射(避障)模块 | 输出低电平表示检测到障碍 | 夜间"有人靠近"判断 |
| 温湿度 | DHT11 | 单总线,温度 ±2℃,湿度 ±5%RH | 语音播报数据来源 |
| 灯光 | HW-479 共阴 RGB 灯 | 三通道 PWM 调色 | 照明与变色执行 |
元器件套装购买:https://item.taobao.com/item.htm?ft=t&id=1060015770713
3 硬件系统设计
3.1 引脚资源分配
| 外设 | ASRPRO 引脚 | 资源 | 说明 |
|---|---|---|---|
| RGB 红 | PA5(pin5) | PWM3 | 共阴极阳极 PWM |
| RGB 绿 | PA6(pin6) | PWM4 | 共阴极阳极 PWM |
| RGB 蓝 | PA2(pin2) | PWM0 | 共阴极阳极 PWM |
| BH1750 SDA/SCL | PA1 / PA0 | 软 I2C | 地址 0x23 |
| 红外对射输出 | PA3(pin3) | 数字输入 | 低电平 = 有遮挡 |
| DHT11 数据线 | PC4 | 单总线 | 使用官方 DHTxx 库 |
| 调试串口 | PB5/PB6 | USART 115200 | 日志输出 |
RGB 三通道均以 1 kHz 频率输出 PWM,满亮度占空比取 80%(0.8/1.0),兼顾亮度与限流安全。由于三路颜色只取 0 或 1 两档,占空比也只在 800 与 0 之间切换,后续若要扩展混色,只需把 0/1 扩展为 0~255 灰度即可。
3.2 BH1750 软 I2C 读取
ASRPRO 硬件 I2C 引脚有限,本设计使用软件 I2C 库(asr_softiic.h)在 PA1/PA0 上模拟时序。初始化时先发送上电命令 0x01,再发送连续高分辨率模式命令 0x10;读取时连续读出高低两个字节,按数据手册公式乘 10 除 12 换算为 lux:
uint16_t bh1750_read_lux(){
softiic.start((BH1750_ADDR<<1)|1);
uint8_t h = softiic.read(0);
uint8_t l = softiic.read(1);
softiic.stop();
return (uint16_t)(((uint16_t)h<<8|l)*10/12);
}
红外对射模块输出为集电极开路结构,PA3 依靠内部上拉读取:无遮挡时为高电平,检测到障碍物时拉低。程序中约定 digitalRead(IR_PIN) == LOW 即"有人靠近"。
4 软件系统设计
4.1 命令词模型与命令分发
语音模型在天问 Block 平台生成,命令词集合如下:
| 命令词 | snid | 动作 |
|---|---|---|
| 你好小智 | — | 唤醒,应答"我在" |
| 当前温度 / 查看温度 | 1 / 8 | 播报"当前温度为 xx 度" |
| 当前湿度 / 查看湿度 | 2 / 9 | 播报"当前湿度为 xx%" |
| 加大音量 / 减小音量 | 6 / 7 | 音量 1~10 级增减 |
| 打开红/绿/蓝/黄灯 | 11/15/12/13 | 停止闪动并切换单色 |
| 变颜色 | 16 | 随机切换一种颜色 |
| 快速闪动 / 闪动 | 17 / 18 | 10 秒内按 1s/2s 轮换颜色 |
| 关闭灯光 | 14 | 熄灯 |
| 自动模式 | 19 | 进入自动巡检模式 |
所有命令在 ASR_CODE() 中按 snid 分发。除了 snid=19 之外,每条命令执行前都会执行 run_mode = MODE_MANUAL,实现"说话即接管"的模式回退。
4.2 自动模式巡检逻辑
自动模式的判断被收敛到一个独立的巡检函数中,由 1 秒定时器回调统一调用:
void auto_mode_check(){
if(run_mode != MODE_AUTO) return;
uint16_t lux = bh1750_read_lux();
uint8_t obstacle = (digitalRead(IR_PIN) == LOW) ? 1 : 0;
if(lux < 50 && obstacle){
set_rgb(1, 1, 1); // 光照不足且有人:亮白光
} else {
set_rgb(0, 0, 0); // 条件不满足:熄灯
}
}
光照阈值取 50 lux:一般室内白天照度远高于该值,而夜晚关灯后环境照度通常低于 10 lux,因此该阈值能够稳定区分"白天"与"晚上"。只有"晚上"且"红外对射检测到障碍"两个条件同时成立才亮灯,避免白天路过时误触发。
4.3 定时器与流光效果
系统创建了一个 1 秒周期的 FreeRTOS 软件定时器,承担两件事:一是调用 auto_mode_check() 完成自动模式巡检;二是驱动流光(闪动)效果。闪动分快速(每 1 秒换色)与慢速(每 2 秒换色)两档,计数器累计到 10 秒后自动停止并保持当前颜色。换色采用顺序轮转颜色表的方式——预置红、绿、蓝、黄、紫、青、白 7 种颜色,每次换色索引自增取模,保证连续两次颜色必不相同,观感比纯随机更均匀。
温度播报中有一个细节值得一提:play_num() 只能播报整数,而 DHT11 本身只输出整数位温度,程序仍将浮点温度乘 100 取整后按"一位小数"格式播放,为日后更换 DHT22 等高精度传感器预留了接口。
5 系统测试与结果分析
| 测试项目 | 测试方法 | 测试结果 |
|---|---|---|
| 唤醒与识别 | 3 米内正常音量依次说出全部命令词各 5 次 | 唤醒与命令识别均正常,无误触发 |
| 单色控制 | 依次说"打开红/绿/蓝/黄灯" | 灯色切换准确,重复命令无抖动 |
| 变色与流光 | 说"变颜色""快速闪动""闪动" | 随机换色正常;10 秒后自动停止并保持颜色 |
| 温湿度播报 | 与温湿度计对比 | 温度一致,湿度播报准确,无跳读漏读 |
| 音量调节 | 连续说"加大/减小音量"至边界 | 到最大/最小时播报提示,无越界 |
| 自动模式 | 夜间关灯后用手遮挡红外对射 | 1 秒内亮白光;移开后熄灯;白天同动作不亮灯 |
结果分析:命令词集较小且均为四字左右的短指令,识别率表现良好。自动模式在"50 lux + 低电平遮挡"双条件下动作干脆,从触发到亮灯的延迟约 1 秒,来自定时器巡检周期,对于台灯场景完全可接受。边界处理(音量上下限、传感器读取失败提示)均已覆盖。
6 结论与展望
本文基于天问 ASRPRO 实现了一款离线语音控制台灯,完成了命令词识别、RGB 调色与流光、温湿度语音播报、音量调节以及"光照不足 + 有人靠近"自动亮灯等全部设计功能。整个系统单芯片即可完成,外围电路简单,成本低廉。
后续可以从两个方向继续完善:一是把 RGB 的占空比从两档扩展为 0~255 连续灰度,实现任意混色与亮度无级调节;二是给自动模式加入人体存在的持续判断(如超时无人自动熄灯)与呼吸灯渐亮效果,使夜灯体验更接近商用产品。