想象走進一個萬物和諧運轉的家——燈光會根據(jù)你的存在而自動調節(jié);百葉窗會根據(jù)陽光強度自動開合;溫度始終保持在舒適的狀態(tài)——而這一切都不需要你動一根手指。這就是Matter標準致力實現(xiàn)的愿景。該標準由CSA聯(lián)盟于2019年制定,目標是簡化智能家居設備的碎片化問題。CSA該聯(lián)盟由亞馬遜、蘋果、谷歌等科技巨頭聯(lián)合創(chuàng)立。在Matter的支持下,無法互通的應用和設備都將成為歷史,恒溫器、門鈴、攝像頭等設備都將實現(xiàn)無縫協(xié)作。
在本指南中,您將學習如何構建一個通過Amazon Alexa語音AI控制的智能卷簾系統(tǒng),并將傳感器數(shù)據(jù)集成至開源Home Assistant軟件和Arduino Cloud,實現(xiàn)更加強大的自動化與實時監(jiān)控功能。無論您是經(jīng)驗豐富的開發(fā)人員,還是剛剛入行的新手,此項目都將助您打造一個互聯(lián)、智能的家居環(huán)境。
項目材料與資源
項目物料清單(BOM)
Arduino Nano Matter
DFRobot SEN0245飛行時間距離傳感器
Adafruit BH1750光傳感器
Adafruit MCP9808溫度傳感器擴展板
Analog Devices TMC2209步進電機驅動器(或Arduino電機擴展版Rev3)
12V電源適配器
焊接板
Arduino Nano螺絲端子適配器
散熱片
Amazon Echo(第四代)
卷簾式窗簾
項目代碼/軟件
Arduino集成開發(fā)環(huán)境(IDE)
Amazon Alexa移動應用
VirtualBox 7.1.2
Home Assistant移動應用
Home Assistant
Arduino Cloud(需訂閱)
其他資源
調試技巧與GitHub資源
Arduino Nano Matter引腳布局
項目硬件概覽
Arduino Nano Matter開發(fā)板(圖1)結合了Arduino的易用性與Silicon LabsMGM240S多協(xié)議無線模塊的強大功能,是開發(fā)Matter兼容物聯(lián)網(wǎng)(IoT)設備的理想平臺。

圖1:搭載Silicon Labs MGM240S模塊的Arduino Nano Matter開發(fā)板。(圖源:Arduino)
這款緊湊的平臺可以使各種經(jīng)驗水平的制造商都能輕松構建智能家居設備、升級現(xiàn)有項目,并嘗試使用Matter、OpenThread、Zigbee和低功耗藍牙等協(xié)議。
Silicon Labs MGM240S模塊是Nano Matter開發(fā)板的核心,它是一個系統(tǒng)級封裝(SiP)模塊,專為電池供電的物聯(lián)網(wǎng)設備而優(yōu)化。該模塊基于2系列EFR32MG24 SoC構建,具有先進的連接功能、高安全性和出色的能效,是智能家居和自動化應用的絕佳選擇。
項目軟件概覽
該項目使用以下軟件和環(huán)境:
Arduino IDE:編寫、上傳代碼至Nano Matter開發(fā)板
Amazon Alexa移動應用:與項目集成,通過語音命令和例程控制智能卷簾
VirtualBox 7.1.2:在Windows主機上虛擬化Home Assistant
Home Assistant移動應用:為設備監(jiān)控提供便利
Home Assistant:先進的家居自動化平臺,可實現(xiàn)物聯(lián)網(wǎng)設備的靈活本地控制
Arduino Cloud:用于遠程監(jiān)控設備;提供基于云的儀表板,實現(xiàn)傳感器數(shù)據(jù)實時可視化;可與物聯(lián)網(wǎng)應用集成,實現(xiàn)遠程訪問和自動化
項目開發(fā)
本項目的目標是通過Thread通信將Arduino Nano Matter開發(fā)板連接到Amazon Alexa Hub,從而通過Alexa應用控制卷簾。此外,您還可以通過Arduino Cloud儀表板和Home Assistant應用監(jiān)控卷簾,實現(xiàn)靈活的多功能智能家居自動化控制系統(tǒng)。
首先,我們將介紹開發(fā)過程所需的軟件,然后再介紹本項目中使用的硬件。
設置Arduino IDE
我們選擇使用Arduino IDE進行開發(fā),以確保與Nano Matter開發(fā)板完全兼容,因為這款開發(fā)板并沒有完全適配Arduino Cloud IDE。為了便于測試和調試,我們將該項目分成幾個階段來實現(xiàn)。首先,使用Nano Matter庫提供的預構建示例草圖對開發(fā)板的Matter功能進行基本測試(圖2)。

圖2:Arduino IDE提供了許多用于Matter的示例草圖。(圖源:貿澤電子)
設置用于開發(fā)的Nano Matter內核:
1.單擊文件,選擇首選項。
2.在設置選項卡的
其他開發(fā)板管理器地址字段(圖3)中,輸入“https://siliconlabs.github.io/arduino/package_arduinosilabs_index.json”,然后單擊確定。

圖3:Arduino IDE首選項窗口。(圖源:貿澤電子)
3.單擊工具,選擇開發(fā)板,然后選擇開發(fā)板管理器。
4.搜索“Silicon Labs”,安裝最新的Silicon Labs內核(圖4)。

圖4:用于Arduino Nano Matter的Silicon Labs內核。(圖源:貿澤電子)
5.單擊工具,單擊Protocol stack,然后選擇Matter(圖5)。

圖5:Arduino IDE中顯示Arduino Nano Matter協(xié)議棧。(圖源:貿澤電子)
設置Arduino Cloud API
由于Arduino Nano Matter開發(fā)板沒有內置Wi-Fi ^?^ 連接,因而我們使用Home Assistant通過Matter協(xié)議連接到Arduino Cloud以實現(xiàn)自動化。該集成方案需使用付費訂閱的Arduino Cloud API。請確保您的訂閱計劃包含對設備連接的API支持。
在Arduino Cloud(圖6)中,新建一個Thing并添加三個變量:一個用于接收溫度傳感器數(shù)據(jù),一個用于光傳感器,還有一個用于跟蹤卷簾打開或關閉位置的百分比大小(圖7)。

圖6:Arduino儀表板。(圖源:貿澤電子)

圖7:在Arduino Cloud中添加變量。(圖源:貿澤電子)
2.記下變量ID(圖8),本項目中稍后需要用到它們。

圖8:Arduino Cloud中顯示變量ID。(圖源:貿澤電子)
3.單擊左側菜單中的Space Settings,將Space ID復制出來,稍后也需要用到它(圖9)。

圖9:Arduino Cloud中顯示Space Settings和Space ID。(圖源:貿澤電子)
4.單擊左上角的賬戶圖標,選擇API Keys。
5.創(chuàng)建新的API Key并妥善保存,稍后需要用到它(圖10)。

圖10:在Arduino Cloud中查找API Key。(圖源:貿澤電子)
設置Home Assistant
本節(jié)將介紹在Windows計算機上使用VirtualBox安裝Home Assistant的操作步驟。
下載Home Assistant虛擬電腦映像
在Home Assistant網(wǎng)站上,單擊導航欄中的Getting Started項,然后找到Install Home Assistant on Windows(圖11)。
單擊View Tutorial按鈕。
下載VirtualBox (.vdi) 映像。

圖11:Home Assistant網(wǎng)站顯示獲取Windows .vdi映像的位置。(圖源:貿澤電子)
下載并安裝VirtualBox
在VirtualBox網(wǎng)站上,單擊Download,然后在VirtualBox Platform Packages中選擇Windows Hosts。
打開安裝程序,按照提示在計算機上安裝VirtualBox。
在安裝VirtualBox的同時,找到之前下載的Home Assistant映像文件,將.vdi映像從.zip壓縮包中解壓縮出來。
在VirtualBox中新建虛擬電腦
1.打開VirtualBox,單擊新建創(chuàng)建新虛擬電腦(VM)。
2.在名稱字段中,輸入“Home Assistant”。
3.將類型設為Linux、版本設為Other Linux (64-bit),然后單擊下一步(圖12)。

圖12:VirtualBox新建虛擬電腦的設置(圖源:貿澤電子)
配置虛擬電腦設置
1.設置內存(RAM)大小和CPU內核數(shù)。建議至少設置2GB RAM和兩個虛擬CPU核心。
2.選中啟用EFI。該設置對Home Assistant正常運行必不可少(圖13)。

圖13:VirtualBox為虛擬電腦分配內存和處理器數(shù)量的設置。(圖源:貿澤電子)
添加Home Assistant虛擬硬盤
在虛擬硬盤下,選中使用已有的虛擬硬盤文件,然后單擊文件夾圖標(圖14)。
在接下來出現(xiàn)的窗口中,單擊左上方的添加圖標,瀏覽到先前解壓縮出來的Home Assistant .vdi文件。
選中該文件,單擊選擇,然后單擊下一步。
單擊完成。

圖14:將Home Assistant .vdi文件載入到VirtualBox中。(圖源:貿澤電子)
配置網(wǎng)絡設置
打開虛擬電腦設置,單擊網(wǎng)絡選項卡。
在網(wǎng)卡1下,選擇橋接網(wǎng)卡,然后從下拉菜單中選擇您的網(wǎng)卡(圖15)。

圖15:在VirtualBox設置中添加網(wǎng)卡。如果網(wǎng)卡設置錯誤,Home Assistant將無法與網(wǎng)絡通信。(圖源:貿澤電子)
3.單擊聲音選項卡,選擇Intel HD Audio作為控制器,然后單擊確定。
啟動虛擬電腦
配置好虛擬機和網(wǎng)絡設置后,單擊啟動以啟動Home Assistant虛擬電腦,觀察啟動過程直至完成(圖16)。

圖16:VirtualBox中的虛擬電腦。(圖源:貿澤電子)
完成Home Assistant設置
虛擬電腦運行后,打開瀏覽器并訪問http://homeassistant.local:8123,必要時也可使用虛擬電腦的IPv4地址(圖17)。

圖17:Home Assistant在虛擬電腦上運行。我們使用IPv4地址遠程訪問Home Assistant。(圖源:貿澤電子)
1.在Home Assistant歡迎屏幕上,單擊Create My Smart Home打開設置向導(圖18)。

圖18:Home Assistant歡迎屏幕。(圖源:貿澤電子)
2.完成設置向導后,將顯示Home Assistant儀表板(圖19)。

圖19:Home Assistant儀表板。(圖源:貿澤電子)
為Nano Matter開發(fā)板供電
Nano Matter開發(fā)板可通過USB Type-C電纜或連接到IN5V引腳的外部5V電源供電,具體請參閱“項目材料與資源”中的開發(fā)板引腳布局。
設置步進電機和TMC2209驅動器
本項目中,我們使用了Analog Devices的TMC2209步進電機驅動器,它具有運行安靜、精度高和控制平穩(wěn)的特點,是智能卷簾系統(tǒng)的理想之選。下面將詳細介紹如何設置步進電機和驅動器,以及確保高性能和防止損壞的重要注意事項。
1.將電機導線連接至TMC2209驅動器的A1、A2、B1和B2引腳。如果不確定接線順序,請使用萬用表檢查電機導線之間的導通性。如果兩根導線是成對的(即檢測到導通),請將它們連接倒驅動器的A1/A2或B1/B2引腳(圖20)。
注:接線錯誤會導致電機振動而不旋轉或完全不運轉。

圖20:(a)在面包板上使用TMC2209驅動器和Arduino Nano Matter開發(fā)板測試步進電機。(b)集成了電機驅動器和Arduino Nano Matter的焊接板。(圖源:貿澤電子)
由于我們使用12V電源為步進電機供電,因此要確保TMC2209驅動器內部邏輯的5V輸入正確連接到電路板上,以確保電機平穩(wěn)運行。
2.關閉驅動器電源。關閉電源后,逆時針旋轉驅動器電位器以增加電流,順時針旋轉以減少電流。
3.調整電流后,重新打開驅動器電源并測量參考電壓,以確保設置正確。通過測量該電壓,可以精確、可重復、安全地設置電機電流,比僅憑直覺調節(jié)更加可靠。
TMC2209驅動器在運行過程中會產(chǎn)生熱量,因此適當?shù)臒峁芾碇陵P重要。在驅動器上安裝散熱片,確保周圍有足夠的空隙,以避免與附近的引腳短路。必要時可考慮使用散熱風扇,以防止過熱并確保驅動器維持高性能。
安裝注意事項:
安裝時務必仔細檢查驅動器的方向。安裝錯誤會導致永久性損壞。
測量電壓時切勿連接電機,否則會燒壞驅動器。
在設置和測試過程中,請使用主電源進行電壓測量,不要依賴USB供電。
項目概覽
圖21是本項目的示意圖。

圖21:本項目所使用硬件示意圖。(圖源:貿澤電子)
Arduino項目
本項目使用的最終Arduino項目可從貿澤的GitHub上獲取,其中包括對關鍵函數(shù)和變量的說明。下載項目后,Arduino Nano Matter開發(fā)板通過USB連接到計算機。確保在Arduino IDE中選擇了正確的板和端口,然后點擊上傳將代碼傳輸?shù)介_發(fā)板上。
下文將對Arduino項目的主要函數(shù)和變量進行說明。
庫
#include
#include
#include
#include
#include
#include
#include
#include
#include
Matter和MatterWindowCovering:這些庫處理Matter協(xié)議,該協(xié)議用于與Alexa等智能家居設備和Thread網(wǎng)絡進行通信。
TMCStepper:用于使用通用異步收發(fā)器(UART)通信來控制TMC2209步進電機驅動器的庫。
Wire:處理微控制器與I2C設備之間的I2C通信協(xié)議。
BH1750和MatterIlluminance:BH1750是一款光傳感器,MatterIlluminance有助于將其集成到Matter生態(tài)系統(tǒng)中。
Adafruit_MCP9808和MatterTemperature:MCP9808是一款數(shù)字溫度傳感器,MatterTemperature將其讀數(shù)與Matter集成。
Adafruit_VL53L0X:用于控制VL53L0X接近傳感器的庫。
傳感器對象初始化
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
BH1750 lightMeter;
Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
MatterIlluminance matter_illuminance_sensor;
MatterTemperature matter_temperature_sensor;
VL53L0X:管理接近傳感器的對象。該傳感器用于初始化窗戶的高度。
BH1750 (lightMeter):用于測量照度的對象。
MCP9808 (tempsensor):用于檢測溫度。從MCP9808傳感器讀取溫度值。
MatterIlluminance和MatterTemperature:向Matter生態(tài)系統(tǒng)(如Alexa)報告光照和溫度水平的對象。
閾值定義
const float lightCloseThreshold = 1000.0;
const float lightOpenThreshold = 5.0;
定義關閉和打開卷簾時的光照強度(單位:勒克斯)。如果光照強度超過1000勒克斯,卷簾就會關閉;如果低于5勒克斯,卷簾就會打開。
引腳定義和步進電機設置
#define EN_PIN 7
#define DIR_PIN 4
#define STEP_PIN 3
#define R_SENSE 0.11
#define UART_ADDRESS 0x00
EN_PIN、DIR_PIN、STEP_PIN:這些引腳用于控制TMC2209電機驅動器。
R_SENSE:配置電機驅動器電流測量所需的感應電阻值(通常為0.11Ω)。
UART_ADDRESS:用于定義微控制器與TMC2209之間通信的UART地址。
步進電機對象
TMC2209Stepper driver(&Serial1, R_SENSE, UART_ADDRESS);
使用UART (Serial1) 為TMC2209步進電機創(chuàng)建驅動程序對象,以便與電機驅動程序通信。
設置函數(shù)
void setup() { ... }
串行通信:Serial.begin(115200) 用于初始化串行通信,Serial1.begin(115200) 用于與TMC2209進行UART通信。
VL53L0X傳感器初始化:lox.begin(0x29) 在默認I2C地址(0x29)上初始化接近傳感器。
光傳感器和溫度傳感器初始化:matter_illuminance_sensor.begin() 和matter_temperature_sensor.begin() 函數(shù)將初始化這些傳感器,以便進行Matter報告。
TMC2209設置:
driver.begin():啟動電機驅動器。
driver.toff(5):將步進電機驅動器的關閉時間設置為5。
driver.rms_current(500):將電機電流限制在500mA。根據(jù)您使用的驅動器,最大電流可能需要手動設置。
driver.microsteps(1):確保電機全速運行。
driver.en_spreadCycle(false):啟用名為StealthChop的靜音模式,實現(xiàn)更流暢的靜音運行。
LED和引腳設置:pinMode() 函數(shù)設置特定引腳的方向,如內置LED和電機控制引腳(STEP、DIR、EN)。
循環(huán)函數(shù)
void loop() { ... }
光照和溫度報告:
float lux = lightMeter.readLightLevel():讀取環(huán)境光亮度。
float tempC = tempsensor.readTempC():讀取當前溫度(攝氏度)。
matter_illuminance_sensor.set_measured_value_lux(lux) 和matter_temperature_sensor.set_measured_value_celsius(tempC):向Matter報告光照和溫度水平。
電機控制:
電機的位置通過matter_blinds.get_requested_lift_position_raw() 和set_actual_lift_position_raw() 函數(shù)不斷更新。
使用check_light_and_adjust_blinds() 函數(shù)可根據(jù)照度調整卷簾位置(向上或向下)。
光照控制邏輯(卷簾)
void check_light_and_adjust_blinds (int32_t current_percent) { ... }
勒克斯閾值檢查:如果照度大于高閾值(1000勒克斯),卷簾將關閉。如果照度小于低閾值(5勒克斯),卷簾將打開。由于Alexa應用目前不支持創(chuàng)建帶有光傳感器的例程,因此我們決定用代碼來實現(xiàn)這一自動化。
卷簾動作:move_blinds() 函數(shù)將卷簾的位置調整為向上或向下。
電機動作函數(shù)
void step_motor() { ... }
void stop_motor() { ... }
step_motor():通過切換STEP_PIN和調整脈沖寬度來控制電機走動一步,實現(xiàn)速度控制。
stop_motor():通過禁用電機驅動器和停止向STEP_PIN發(fā)送脈沖來停止電機。
停用處理函數(shù)
void decommission_handler() { ... }
該函數(shù)檢查內置按鈕是否被按下超過10秒,通過清除存儲的數(shù)據(jù)讓設備退出Matter。
LED亮度更新
void update_onboard_led(uint8_t brightness) { ... }
根據(jù)卷簾位置調整板載LED的亮度。如果卷簾關閉,亮度將為零;如果完全打開,亮度將映射到10至255的范圍內。
集成Amazon Alexa
要將Arduino Nano Matter開發(fā)板與Amazon Alexa集成,請按照以下步驟操作:
1.將項目上傳到Arduino Nano Matter開發(fā)板后,“串口監(jiān)視器”中會出現(xiàn)一個二維碼URL(圖22)。

圖22:Arduino IDE中顯示集成到Alexa所需的二維碼URL。(圖源:貿澤電子)
2.將URL復制并粘貼到瀏覽器中,即可顯示該二維碼。
3.打開Amazon Alexa應用,點擊右上角的 + 符號。
4.選擇Device,然后選擇Matter徽標。
5.使用Alexa應用掃描Nano Matter項目生成的二維碼。
6.選擇可用的Thread網(wǎng)絡,等待設備納入其中并添加到Alexa應用中(圖23)。

圖23:Amazon Alexa中顯示智能卷簾以及光和溫度傳感器。(圖源:貿澤電子)
現(xiàn)在,您的Matter兼容設備將集成到Alexa應用中,隨時可供使用。
注:如果在連接Arduino Nano Matter開發(fā)板和Alexa應用時遇到任何問題,請按照我們的調試提示進行操作。圖24是我們在實施過程中曾遇到過的一些問題。

圖24:這是我們在將Arduino Nano Matter與Alexa應用連接時曾遇到過的一些錯誤。如果發(fā)生類似的問題,請嘗試按照貿澤GitHub上提供的調試提示操作。(圖源:貿澤電子)
與Home Assistant和Arduino Cloud集成
在本節(jié)中,我們將把Arduino Nano Matter開發(fā)板與Home Assistant相集成在一起,并通過Arduino API將傳感器數(shù)據(jù)傳送到Arduino Cloud進行監(jiān)控。
設置Home Assistant并添加設備
要配置Home Assistant管理Matter設備,請安裝Matter Server附加組件:
1.打開Home Assistant的Settings菜單(圖25)。

圖25:Home Assistant的設置菜單(圖源:貿澤電子)
2.單擊Add-Ons,然后單擊Add-On Store。
3.在搜索欄中輸入“Matter Server”。
4.在結果中找到Matter Server附加組件,然后單擊Install。
5.安裝File editor附加組件,后面的步驟中會需要它。
6.安裝附加組件后(圖26),請確保它們配置正確并且運行正常,以便在Home Assistant中啟用Matter設備管理。

圖26:Home Assistant中的File editor和Matter Server附加組件。(圖源:貿澤電子)
接下來,在智能手機上安裝Home Assistant應用并登錄您的賬戶,然后將傳感器添加到Home Assistant中:
1.在Alexa應用中,選擇Control device with another assistant or app(圖27)。

圖27:在Amazon Alexa應用設置中添加另一個助手或應用來控制設備。(圖源:貿澤電子)
2.在Add Matter Device中,選擇Yes, it’s already in use。
3.選擇Other controllers,然后復制提供的配對碼。
4.在Home Assistant應用中,找到Add Matter Device,將配對碼粘貼進來(圖28)。

圖28:使用從Alexa應用復制的配對碼將Matter設備添加到Home Assistant。(圖源:貿澤電子)
設備集成進來后,Home Assistant儀表板中應顯示溫度傳感器和光傳感器的數(shù)據(jù),以及卷簾的控制圖標(圖29)。

圖29:Home Assistant網(wǎng)頁應用中顯示出連接的Matter設備(位于右側)。(圖源:貿澤電子)
在Home Assistant中配置Arduino Cloud集成
從左側菜單中打開File editor附加組件,然后在文件夾中找到secrets.yaml(圖30)。如果該文件不存在,請創(chuàng)建它。該文件可以安全地存儲項目ID、憑證和API密鑰等敏感數(shù)據(jù),使主配置文件保持整潔并受到保護。

圖30:Home Assistant的File editor。單擊Browse Filesystem選擇要編輯的文件。(圖源:貿澤電子)
在secrets.yaml文件中,添加以下配置,注意將占位符替換為實際的Space ID、Client ID、Client Secret和Thing ID:
arduino_organization:
token_get_payload:
'{"grant_type":"client_credentials","client_id":"<您的Client ID>","client_secret":"<您的
Client Secret>","audience":"https://api2.arduino.cc/iot"}'
arduino_temp_url: https://api2.arduino.cc/iot/v2/things//properties/<溫度變量ID>/publish
接下來,創(chuàng)建一個RESTful集成:
1.在File editor附加組件中(圖31),打開configuration.yaml文件并定義RESTful集成,以便為Arduino Cloud生成API Token:
resource: "https://api2.arduino.cc/iot/v1/clients/token"
scan_interval: 240 #4分鐘
timeout: 60
method: "POST"
headers:
content_type: 'application/json,application/x-www-form-urlencoded'
payload: !secret token_get_payload
sensor:
name: "API_Token_Bearer"
value_template: "OK"
json_attributes_path: '$..'
json_attributes:
'access_token'

圖31:Home Assistant的File editor中顯示configuration.yaml文件。(圖源:貿澤電子)
2.在configuration.yaml文件中添加以下代碼,定義向Arduino Cloud發(fā)送數(shù)據(jù)的RESTful命令,然后保存更改。
rest_command:
send_temperature: method: PUT url: !secret arduino_temp_url # 溫度傳感器的URL headers: Authorization: "Bearer {{ state_attr('sensor.api_token_bearer', 'access_token') }}" accept: "application/vnd.arduino.property+json,application/vnd.goa.error+json" content_type: 'application/json,application/x-www-form-urlencoded' X-Organization: !secret arduino_organization payload: "{"value":{{states('sensor.matter_device_temperature_2')}}}" send_light_level: # 新傳感器(如光傳感器BH1750) method: PUT url: !secret arduino_light_url # 添加光傳感器URL headers: Authorization: "Bearer {{ state_attr('sensor.api_token_bearer', 'access_token') }}" accept: "application/vnd.arduino.property+json,application/vnd.goa.error+json" content_type: 'application/json,application/x-www-form-urlencoded' X-Organization: !secret arduino_organization payload: "{"value":{{states('sensor.matter_device_illuminance')}}}" send_blind_percent: # 卷簾打開/關閉的百分比 method: PUT url: !secret arduino_blind_url # 添加卷簾URL headers: Authorization: "Bearer {{ state_attr('sensor.api_token_bearer', 'access_token') }}" accept: "application/vnd.arduino.property+json,application/vnd.goa.error+json" content_type: 'application/json,application/x-www-form-urlencoded' X-Organization: !secret arduino_organization # payload: "{"value":{{states('cover.matter_device_cover')}}}" payload: "{"value":{{state_attr('cover.matter_device_cover', 'current_position')}}}" # 引用位置屬性
請注意,每個設備都有特定的屬性;對于卷簾,我們使用current_position屬性向Arduino Cloud發(fā)送數(shù)據(jù)。要找到該屬性,請轉到左側菜單中的Developer tools,然后單擊States選項卡(圖32)。

圖32:Home Assistant的Developer tools中顯示Matter設備的狀態(tài)和屬性。(圖源:貿澤電子)
3.依然在Developer Tools中,單擊YAML選項卡。
4.單擊Check Configuration,確保YAML配置中沒有錯誤。
5.如果沒有發(fā)現(xiàn)錯誤,請單擊Restart(圖33)。

圖33:確保代碼編輯中沒有錯誤后,請重新啟動Home Assistant服務器。(圖源:貿澤電子)
在Home Assistant中創(chuàng)建自動化操作
接下來,我們將設置自動溫度更新。
1.打開Settings菜單,選擇Automations & scenes(圖34)。

圖34:Home Assistant中添加和編輯自動化操作的設置項。(圖源:貿澤電子)
2.在Create automation窗口中,單擊Create new automation(圖35)。

圖35:在Home Assistant中新增自動化操作。(圖源:貿澤電子)
3.單擊右上角的三個點,選擇Edit in YAML(圖36)。
4.粘貼以下YAML代碼。
alias: Nano Matter Temperature
description: ""
trigger:
platform: state
entity_id:
sensor.matter_device_temperature_2
condition: []
action:
data: {}
action: rest_command.send_temperature
mode: single
alias: Send blind level
description: ""
trigger:
platform: state
entity_id:
cover.matter_device_cover
condition: []
action:
data: {}
action: rest_command.send_blind_percent
mode: single

圖36:在Home Assistant中編輯自動化操作。(圖源:貿澤電子)
5.自動化操作設置完畢后,只要傳感器檢測到變化,來自Nano Matter開發(fā)板的傳感器數(shù)據(jù)就會自動轉發(fā)到Arduino Cloud。
在Arduino Cloud中監(jiān)控數(shù)據(jù)
1.要在 Arduino Cloud 中監(jiān)控傳感器數(shù)據(jù),必須先創(chuàng)建儀表板:
2.登錄Arduino Cloud帳戶。
單擊“Dashboards”,使用可用部件創(chuàng)建新的儀表板。
3.添加用于溫度傳感器和其他數(shù)據(jù)點(如亮度、卷簾控制)的小部件,以監(jiān)控來自Nano Matter開發(fā)板的數(shù)據(jù)(圖37)。不要忘記將小部件鏈接到本項目在“設置Arduino Cloud API”部分中創(chuàng)建的變量。

圖37:Arduino Cloud儀表板,用于添加變量并將其鏈接到小部件。(圖源:貿澤電子)
添加Alexa例程
如前所述,Alexa應用尚不支持基于光傳感器數(shù)據(jù)的例程。為了解決這個問題,我們在Arduino中編寫了控制邏輯,以便在照度達到一定閾值時自動關閉百葉窗。不過,在撰寫本文時,Alexa已經(jīng)支持由溫度、運動、接觸和濕度傳感器數(shù)據(jù)觸發(fā)的例程。
在這個概念驗證項目中,我們設置了基于溫度的Alexa例程,在85°F(約合30°C)時關閉百葉窗,在70°F(約合21°C)時打開百葉窗。
1.在智能手機或平板電腦上打開Amazon Alexa應用。
2.點按右下角的More圖標(三條水平線),選擇Routines。
3.點按右上角的 + 圖標創(chuàng)建新例程。
4.為例程命名,可以取一個描述性的名稱,如“高溫時關閉卷簾”。
5.設置觸發(fā)器:點按When this happens,選擇Smart Home。
6.選擇要監(jiān)控的房間的溫度傳感器。
7.將觸發(fā)條件設置為“Temperature is above 85°F”,然后點按Save。
點按Add Action,選擇Smart Home。
9.選擇要控制的智能卷簾。
10.將操作設置為Close(或Lower,具體取決于卷簾提供的選項)。
11.點按Finish完成例程設置。
按同樣方法創(chuàng)建另一個例程,讓卷簾在溫度降至70°F時自動打開(圖38)。

圖38:Amazon Alexa例程編輯屏幕。(圖源:貿澤電子)
創(chuàng)建好兩個例程后,通過手動調節(jié)溫度傳感器或等待實際室溫變化來對其進行測試,以確保卷簾對程序設定的溫度觸發(fā)條件做出正確響應。
組裝
在本項目中,我們成功實施了一個完全集成的智能卷簾系統(tǒng),利用多個平臺進行控制和監(jiān)控。首先,我們使用Echo(第四代)作為中心樞紐,通過Alexa應用設置控制,創(chuàng)建根據(jù)室溫決定百葉窗動作的自動化例程。在此基礎上,我們將該系統(tǒng)與Home Assistant集成,實現(xiàn)了更先進的本地執(zhí)行自動化選項,而無需依賴外部云服務。這為管理和自動化系統(tǒng)的各個組件(包括溫度和光傳感器)提供了所需的靈活性(圖39)。

圖39:構建完成的本項目,從中可見:(a)項目中使用的硬件——(a.1)Arduino Nano Matter、(a.2)電機驅動器、(a.3)步進電機、(a.4)光傳感器、(a.5)溫度傳感器和(a.6)距離傳感器;(b)加載了我們代碼的Arduino IDE、(c)Amazon第四代Echo和(d)集成了我們的Matter設備的Amazon Alexa應用。(圖源:貿澤電子)
為了完成設置,我們將傳感器數(shù)據(jù)轉發(fā)到Arduino Cloud,并在Arduino Could上建立了實時儀表板,用于可視化和監(jiān)控傳感器數(shù)據(jù)。通過將Alexa、Home Assistant和Arduino Cloud結合在一起,我們創(chuàng)建了一個強大的多平臺自動化系統(tǒng),可實現(xiàn)智能家居的無縫集成和實時監(jiān)控。本項目不僅展示了如何設計和構建由Matter驅動的智能家居系統(tǒng),還展現(xiàn)了使用多平臺盡可能提高功能性和控制性所帶來的靈活性(圖40)。

圖40:(a)Home Assistant儀表板顯示已連接的Matter設備;(b)Arduino Cloud儀表版顯示已連接的Matter設備。(圖源:貿澤電子)
更進一步
當前的智能卷簾系統(tǒng)還可以在多方面上進一步增強,實現(xiàn)更多的功能、更高的效率。
距離傳感器
改進DFRobot SEN0245距離傳感器,增設專用校準按鈕,使之能夠根據(jù)不同的窗戶尺寸重新校準卷簾的高度。這樣就無需再去按Arduino開發(fā)板上的重置按鈕,那個按鈕會重新初始化整個Arduino項目。
光傳感器
Adafruit BH1750光傳感器對環(huán)境光的細微變化比較敏感,加上循環(huán)函數(shù)中連續(xù)執(zhí)行照度檢測,可能會引發(fā)頻繁、非必要的調節(jié),加劇電機磨損,降低系統(tǒng)效率。以下方案或能解決這一問題。
消抖/死區(qū)機制
為避免因數(shù)據(jù)微小波動而頻繁改變電機運轉方向,可以引入消抖周期,即系統(tǒng)需在設定的閾值內檢測到穩(wěn)定光照條件持續(xù)一定時間后才觸發(fā)調節(jié)。同時,設置照度閾值死區(qū)(例如,只有當照度超出±10勒克斯范圍時才執(zhí)行調節(jié)),同樣有助于避免不必要的頻繁移動。
以下代碼實現(xiàn)了消抖和死區(qū)優(yōu)化:
const float lightDebounceTime = 5000; // 5秒消抖周期
const float deadband = 50.0; // 設置照度死區(qū)以避免微小波動
unsigned long lastLightCheck = 0; // 追蹤上次光照檢測
void check_light_and_adjust_blinds(int32_t current_percent) {
float lux = lightMeter.readLightLevel(); // 獲取以勒克斯為單位的照度 unsigned long currentTime = millis(); // 僅檢查上次檢測后的時間間隔是否超出消抖周期 if (currentTime - lastLightCheck > lightDebounceTime) { lastLightCheck = currentTime; // 重置消抖計時器 Serial.print("當前照度:"); Serial.print(lux); Serial.println("lx"); // **僅當照度高于死區(qū)閾值時才關閉卷簾** if (lux > (lightCloseThreshold + deadband) && current_percent < 100) { Serial.println("光照太強!自動關閉卷簾..."); move_blinds(current_percent, 100); // 完全關閉卷簾 } // **僅當照度低于死區(qū)閾值時才打開卷簾** else if (lux < (lightOpenThreshold - deadband) && current_percent > 0) { Serial.println("光照太弱!自動打開卷簾..."); move_blinds(current_percent, 0); // 完全打開卷簾 } }
}
反饋系統(tǒng)
采用電位計或編碼器構建反饋系統(tǒng),追蹤卷簾的準確位置。此舉使系統(tǒng)始終知道卷簾的精確位置,減少過沖或欠沖的風險。將編碼器與電機一起使用,還能實現(xiàn)精確的移動控制,確保系統(tǒng)只移動所需的行程,而非僅僅依賴照度數(shù)據(jù)。
限位開關
在全開和全關位置加裝限位開關,提供額外的安全和控制。系統(tǒng)可利用這些限位開關防止電機運轉超出卷簾的物理極限,以免造成損壞。限位開關還可在系統(tǒng)失去對卷簾位置的追蹤時(如斷電或手動調節(jié)后)作為重置位置的參考。
傳感器讀數(shù)平滑
為應對輕微的照度波動,在決定打開或關閉百葉簾之前,可讓系統(tǒng)將最近幾次傳感器讀數(shù)(如最近五次讀數(shù))進行平均處理。此舉可消除光線條件瞬時波動造成的影響。
緊湊型設計和原型制作
使用集成所有元器件的緊湊型3D打印外殼完善設計。此外,控制卷簾的齒輪也可以通過3D打印進行改進,便于在開發(fā)過程中輕松調整。
擴展自動化和例程
創(chuàng)建控制多個設備的附加例程,使系統(tǒng)能夠與其他智能家居組件(如燈、恒溫器或安全系統(tǒng))進行交互。還可以在代碼中增加RGB燈效功能,增強燈光效果。
語音控制和高級自動化
通過IFTTT或Home Assistant等平臺集成語音控制功能,使用戶能夠通過簡單的語音指令控制卷簾。此外還可以實現(xiàn)基于實時天氣數(shù)據(jù)自動化控制的功能。
能效提升和手動控制
加裝太陽能電池板,在白天為電池充電,使本項目更加節(jié)能,減少對外部電源的依賴。為了進一步的便利,還可以安裝電容式傳感器,對卷簾進行手動控制。
安防系統(tǒng)集成
將智能卷簾與住宅安防系統(tǒng)集成,支持根據(jù)警報觸發(fā)情況關閉或打開。
精確反饋傳感器
采用限位開關或編碼器等反饋傳感器,幫助監(jiān)控卷簾的準確位置。此舉可以讓系統(tǒng)控制更精確,確保卷簾位置正確。
通過實施這些增強方案,可以顯著提升智能卷簾系統(tǒng)的適應性和能效,并與其他智能家居技術深度集成,為用戶提供更強的控制力和更大的便利性。
結語
本項目展示了Matter協(xié)議在構建互聯(lián)智能家居系統(tǒng)方面的強大潛力。我們使用Arduino Nano Matter開發(fā)板,板載Silicon Labs MGM240S模塊、各種傳感器和Alexa,創(chuàng)建了一個無縫、安全和可擴展的解決方案,并使用Thread和低功耗藍牙集成了多個設備。Matter協(xié)議簡化了調試過程,確保了強大的安全性,促進了設備間的互操作性,這些使其成為了智能家居自動化的未來。Arduino Nano Matter開發(fā)板的靈活性使工程師和開發(fā)人員能夠輕松構建和擴展其物聯(lián)網(wǎng)系統(tǒng)原型,并為添加新的Matter兼容設備提供無限可能。該項目為未來的改進奠定了堅實的基礎,為更復雜、更有創(chuàng)意的智能家居集成提供了可能。
作者簡介
Ricky Flores是貿澤電子的技術營銷工程師。他擁有密歇根大學電氣工程碩士學位,曾就職于Texas Instruments和新墨西哥大學高科技材料中心(CHTM)。Ricky將MEMS、ESD和模擬設計工程方面的豐富專業(yè)知識與十多年的技術營銷經(jīng)驗相結合。工作之余,他熱衷于房地產(chǎn)、編程、DIY,以及提升工程應用的用戶體驗。
-
傳感器
+關注
關注
2576文章
55028瀏覽量
791243 -
AI
+關注
關注
91文章
39755瀏覽量
301363 -
智能家居
+關注
關注
1943文章
9995瀏覽量
197410 -
Arduino
+關注
關注
190文章
6526瀏覽量
196913 -
Matter
+關注
關注
1文章
334瀏覽量
7147
原文標題:純干貨!手把手教你借助Matter和Arduino打造自己的智能家居
文章出處:【微信號:貿澤電子,微信公眾號:貿澤電子】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Matter 智能家居的通用語言
智能家居系統(tǒng)、智能家居解決方案及智能家居定制開發(fā)
求基于Cortex-M3與Android的智能家居控制系統(tǒng)解決方案
飛睿科技代理樂鑫WiFi模塊方案,智能家居無線技術應用
關于簡化構建支持Matter智能家居的過程
英飛凌支持Matter標準,助推綠色智能家居落地
TI Matter 解決方案助力智能家居創(chuàng)新
基于PSoC? 6 Matter的智能家居解決方案
看視頻,了解Matter協(xié)議如何多方面促進智能家居行業(yè)大統(tǒng)一
移遠通信推出一站式Matter解決方案,構建智能家居開放新生態(tài)
Matter over Thread方案,如何助力智能家居生態(tài)互通?
使用Matter和Arduino構建智能家居系統(tǒng)解決方案
評論