基于天问 ASRPRO 的语音控制台灯设计

#智能硬件#语音识别

视频介绍:

摘要

针对传统台灯交互方式单一、夜间使用不便的问题,本文设计并实现了一种基于天问 ASRPRO 离线语音芯片的语音控制台灯。系统以 ASRPRO 为控制核心,集成 BH1750 数字光照传感器、红外对射(避障)传感器与 DHT11 温湿度传感器,驱动共阴极三色 RGB 灯完成调色与流光效果。系统分为手动模式与自动模式:手动模式下用户通过"你好小智"唤醒后,以"打开红灯""变颜色""快速闪动"等中文命令词直接控制灯光,并可语音查询当前温度与湿度;自动模式下系统每秒检测一次光照强度与遮挡状态,当光照不足且检测到障碍物(即夜晚有人靠近)时自动点亮白光,人离开后自动熄灭。用户说出任意灯光命令即可退出自动模式、切回手动控制。测试表明,命令词识别与执行稳定,温湿度播报准确,自动模式亮灭灯逻辑符合预期。

关键词:ASRPRO;离线语音识别;RGB 调色;DHT11;BH1750

1 引言

台灯是使用频率最高的家用照明设备之一,但传统台灯依赖按键或触摸交互,在双手占用、夜间摸黑等场景下并不方便。随着离线语音识别芯片的成本不断降低,把"说话即控制"搬到台灯上已经成为一种低成本的改进方案。

与联网语音方案相比,离线方案有两个明显优势:一是识别在本地完成,不依赖网络,响应快且无隐私上传问题;二是命令词集合可由开发者自定义,非常适合"开关灯、变颜色、查温湿度"这类小指令集场景。本文选用天问 ASRPRO V2.0 开发板作为主控,它内置语音识别与 MP3 播放能力,同时提供了足够的 GPIO、PWM 与软 I2C 资源,单芯片即可完成"识别—播报—控制"全链路。

2 系统总体设计

2.1 功能需求分析

系统需要实现以下功能:

  1. 语音唤醒与命令识别:唤醒词"你好小智",识别后进入命令词监听;
  2. 灯光控制:支持红、绿、蓝、黄等单色命令,"变颜色"随机切换一种颜色,"快速闪动/闪动"在 10 秒内按 1 秒或 2 秒间隔轮换颜色;
  3. 温湿度播报:说出"当前温度/当前湿度",芯片合成语音播报数值;
  4. 音量调节:语音控制播报音量在 1~10 级之间增减;
  5. 双模式运行:自动模式下"光照不足 + 检测到遮挡"时自动亮白光,任意灯光命令可将系统切回手动模式。

2.2 系统总体架构

系统以 ASRPRO 为核心,外围分为三个部分:感知层(BH1750 光照、红外对射遮挡检测、DHT11 温湿度)、执行层(三色 RGB 灯)、交互层(拾音麦克风与喇叭)。ASRPRO 内部运行识别引擎与 FreeRTOS,识别结果以中断号(snid)形式进入命令分发函数;一个 1 秒周期的软件定时器负责自动模式巡检与流光节奏控制。

两种模式的切换逻辑设计为单向自动回退自动模式是一条普通命令词(snid=19),唯一不做模式切换;其余任何命令词执行前都先把运行模式置回手动。这样设计的好处是用户永远不会被"困"在自动模式里——只要开始手动指挥灯光,系统立即跟随。

2.3 元器件选型

模块型号关键参数作用
主控天问 ASRPRO V2.0内置离线识别 + MP3 播放,多路 PWM识别、播报与控制核心
光照BH1750I2C 接口,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/SCLPA1 / PA0软 I2C地址 0x23
红外对射输出PA3(pin3)数字输入低电平 = 有遮挡
DHT11 数据线PC4单总线使用官方 DHTxx 库
调试串口PB5/PB6USART 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 / 1810 秒内按 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 连续灰度,实现任意混色与亮度无级调节;二是给自动模式加入人体存在的持续判断(如超时无人自动熄灯)与呼吸灯渐亮效果,使夜灯体验更接近商用产品。