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