基於天問 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 連續灰階,實現任意混色與亮度無段調節;二是給自動模式加入人體存在的持續判斷(如逾時無人自動熄燈)與呼吸燈漸亮效果,使夜燈體驗更接近商用產品。