想象走進一個萬物和諧運轉的家——燈光會根據你的存在而自動調節;百葉窗會根據陽光強度自動開合;溫度始終保持在舒適的狀態——而這一切都不需要你動一根手指。這就是Matter標準致力實現的愿景。該標準由CSA聯盟于2019年制定,目標是簡化智能家居設備的碎片化問題。CSA該聯盟由亞馬遜、蘋果、谷歌等科技巨頭聯合創立。在Matter的支持下,無法互通的應用和設備都將成為歷史,恒溫器、門鈴、攝像頭等設備都將實現無縫協作。
在本指南中,您將學習如何構建一個通過Amazon Alexa語音AI控制的智能卷簾系統,并將傳感器數據集成至開源Home Assistant軟件和Arduino Cloud,實現更加強大的自動化與實時監控功能。無論您是經驗豐富的開發人員,還是剛剛入行的新手,此項目都將助您打造一個互聯、智能的家居環境。
項目材料與資源
項目物料清單(BOM)
Arduino Nano Matter
DFRobot SEN0245飛行時間距離傳感器
Adafruit BH1750光傳感器
Adafruit MCP9808溫度傳感器擴展板
Analog Devices TMC2209步進電機驅動器(或Arduino電機擴展版Rev3)
12V電源適配器
焊接板
Arduino Nano螺絲端子適配器
散熱片
Amazon Echo(第四代)
卷簾式窗簾
項目代碼/軟件
Arduino集成開發環境(IDE)
Amazon Alexa移動應用
VirtualBox 7.1.2
Home Assistant移動應用
Home Assistant
Arduino Cloud(需訂閱)
其他資源
調試技巧與GitHub資源
Arduino Nano Matter引腳布局
項目硬件概覽
Arduino Nano Matter開發板(圖1)結合了Arduino的易用性與Silicon LabsMGM240S多協議無線模塊的強大功能,是開發Matter兼容物聯網(IoT)設備的理想平臺。
圖1:搭載Silicon Labs MGM240S模塊的Arduino Nano Matter開發板。(圖源:Arduino)
這款緊湊的平臺可以使各種經驗水平的制造商都能輕松構建智能家居設備、升級現有項目,并嘗試使用Matter、OpenThread、Zigbee和低功耗藍牙等協議。
Silicon Labs MGM240S模塊是Nano Matter開發板的核心,它是一個系統級封裝(SiP)模塊,專為電池供電的物聯網設備而優化。該模塊基于2系列EFR32MG24 SoC構建,具有先進的連接功能、高安全性和出色的能效,是智能家居和自動化應用的絕佳選擇。
項目軟件概覽
該項目使用以下軟件和環境:
Arduino IDE:編寫、上傳代碼至Nano Matter開發板
Amazon Alexa移動應用:與項目集成,通過語音命令和例程控制智能卷簾
VirtualBox 7.1.2:在Windows主機上虛擬化Home Assistant
Home Assistant移動應用:為設備監控提供便利
Home Assistant:先進的家居自動化平臺,可實現物聯網設備的靈活本地控制
Arduino Cloud:用于遠程監控設備;提供基于云的儀表板,實現傳感器數據實時可視化;可與物聯網應用集成,實現遠程訪問和自動化
項目開發
本項目的目標是通過Thread通信將Arduino Nano Matter開發板連接到Amazon Alexa Hub,從而通過Alexa應用控制卷簾。此外,您還可以通過Arduino Cloud儀表板和Home Assistant應用監控卷簾,實現靈活的多功能智能家居自動化控制系統。
首先,我們將介紹開發過程所需的軟件,然后再介紹本項目中使用的硬件。
設置Arduino IDE
我們選擇使用Arduino IDE進行開發,以確保與Nano Matter開發板完全兼容,因為這款開發板并沒有完全適配Arduino Cloud IDE。為了便于測試和調試,我們將該項目分成幾個階段來實現。首先,使用Nano Matter庫提供的預構建示例草圖對開發板的Matter功能進行基本測試(圖2)。
圖2:Arduino IDE提供了許多用于Matter的示例草圖。(圖源:貿澤電子)
設置用于開發的Nano Matter內核:
1.單擊文件,選擇首選項。
2.在設置選項卡的
其他開發板管理器地址字段(圖3)中,輸入“https://siliconlabs.github.io/arduino/package_arduinosilabs_index.json”,然后單擊確定。
圖3:Arduino IDE首選項窗口。(圖源:貿澤電子)
3.單擊工具,選擇開發板,然后選擇開發板管理器。
4.搜索“Silicon Labs”,安裝最新的Silicon Labs內核(圖4)。
圖4:用于Arduino Nano Matter的Silicon Labs內核。(圖源:貿澤電子)
5.單擊工具,單擊Protocol stack,然后選擇Matter(圖5)。
圖5:Arduino IDE中顯示Arduino Nano Matter協議棧。(圖源:貿澤電子)
設置Arduino Cloud API
由于Arduino Nano Matter開發板沒有內置Wi-Fi ^?^ 連接,因而我們使用Home Assistant通過Matter協議連接到Arduino Cloud以實現自動化。該集成方案需使用付費訂閱的Arduino Cloud API。請確保您的訂閱計劃包含對設備連接的API支持。
在Arduino Cloud(圖6)中,新建一個Thing并添加三個變量:一個用于接收溫度傳感器數據,一個用于光傳感器,還有一個用于跟蹤卷簾打開或關閉位置的百分比大小(圖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.創建新的API Key并妥善保存,稍后需要用到它(圖10)。
圖10:在Arduino Cloud中查找API Key。(圖源:貿澤電子)
設置Home Assistant
本節將介紹在Windows計算機上使用VirtualBox安裝Home Assistant的操作步驟。
下載Home Assistant虛擬電腦映像
在Home Assistant網站上,單擊導航欄中的Getting Started項,然后找到Install Home Assistant on Windows(圖11)。
單擊View Tutorial按鈕。
下載VirtualBox (.vdi) 映像。
圖11:Home Assistant網站顯示獲取Windows .vdi映像的位置。(圖源:貿澤電子)
下載并安裝VirtualBox
在VirtualBox網站上,單擊Download,然后在VirtualBox Platform Packages中選擇Windows Hosts。
打開安裝程序,按照提示在計算機上安裝VirtualBox。
在安裝VirtualBox的同時,找到之前下載的Home Assistant映像文件,將.vdi映像從.zip壓縮包中解壓縮出來。
在VirtualBox中新建虛擬電腦
1.打開VirtualBox,單擊新建創建新虛擬電腦(VM)。
2.在名稱字段中,輸入“Home Assistant”。
3.將類型設為Linux、版本設為Other Linux (64-bit),然后單擊下一步(圖12)。
圖12:VirtualBox新建虛擬電腦的設置(圖源:貿澤電子)
配置虛擬電腦設置
1.設置內存(RAM)大小和CPU內核數。建議至少設置2GB RAM和兩個虛擬CPU核心。
2.選中啟用EFI。該設置對Home Assistant正常運行必不可少(圖13)。
圖13:VirtualBox為虛擬電腦分配內存和處理器數量的設置。(圖源:貿澤電子)
添加Home Assistant虛擬硬盤
在虛擬硬盤下,選中使用已有的虛擬硬盤文件,然后單擊文件夾圖標(圖14)。
在接下來出現的窗口中,單擊左上方的添加圖標,瀏覽到先前解壓縮出來的Home Assistant .vdi文件。
選中該文件,單擊選擇,然后單擊下一步。
單擊完成。
圖14:將Home Assistant .vdi文件載入到VirtualBox中。(圖源:貿澤電子)
配置網絡設置
打開虛擬電腦設置,單擊網絡選項卡。
在網卡1下,選擇橋接網卡,然后從下拉菜單中選擇您的網卡(圖15)。
圖15:在VirtualBox設置中添加網卡。如果網卡設置錯誤,Home Assistant將無法與網絡通信。(圖源:貿澤電子)
3.單擊聲音選項卡,選擇Intel HD Audio作為控制器,然后單擊確定。
啟動虛擬電腦
配置好虛擬機和網絡設置后,單擊啟動以啟動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開發板供電
Nano Matter開發板可通過USB Type-C電纜或連接到IN5V引腳的外部5V電源供電,具體請參閱“項目材料與資源”中的開發板引腳布局。
設置步進電機和TMC2209驅動器
本項目中,我們使用了Analog Devices的TMC2209步進電機驅動器,它具有運行安靜、精度高和控制平穩的特點,是智能卷簾系統的理想之選。下面將詳細介紹如何設置步進電機和驅動器,以及確保高性能和防止損壞的重要注意事項。
1.將電機導線連接至TMC2209驅動器的A1、A2、B1和B2引腳。如果不確定接線順序,請使用萬用表檢查電機導線之間的導通性。如果兩根導線是成對的(即檢測到導通),請將它們連接倒驅動器的A1/A2或B1/B2引腳(圖20)。
注:接線錯誤會導致電機振動而不旋轉或完全不運轉。
圖20:(a)在面包板上使用TMC2209驅動器和Arduino Nano Matter開發板測試步進電機。(b)集成了電機驅動器和Arduino Nano Matter的焊接板。(圖源:貿澤電子)
由于我們使用12V電源為步進電機供電,因此要確保TMC2209驅動器內部邏輯的5V輸入正確連接到電路板上,以確保電機平穩運行。
2.關閉驅動器電源。關閉電源后,逆時針旋轉驅動器電位器以增加電流,順時針旋轉以減少電流。
3.調整電流后,重新打開驅動器電源并測量參考電壓,以確保設置正確。通過測量該電壓,可以精確、可重復、安全地設置電機電流,比僅憑直覺調節更加可靠。
TMC2209驅動器在運行過程中會產生熱量,因此適當的熱管理至關重要。在驅動器上安裝散熱片,確保周圍有足夠的空隙,以避免與附近的引腳短路。必要時可考慮使用散熱風扇,以防止過熱并確保驅動器維持高性能。
安裝注意事項:
安裝時務必仔細檢查驅動器的方向。安裝錯誤會導致永久性損壞。
測量電壓時切勿連接電機,否則會燒壞驅動器。
在設置和測試過程中,請使用主電源進行電壓測量,不要依賴USB供電。
項目概覽
圖21是本項目的示意圖。
圖21:本項目所使用硬件示意圖。(圖源:貿澤電子)
Arduino項目
本項目使用的最終Arduino項目可從貿澤的GitHub上獲取,其中包括對關鍵函數和變量的說明。下載項目后,Arduino Nano Matter開發板通過USB連接到計算機。確保在Arduino IDE中選擇了正確的板和端口,然后點擊上傳將代碼傳輸到開發板上。
下文將對Arduino項目的主要函數和變量進行說明。
庫
#include
#include
#include
#include
#include
#include
#include
#include
#include
Matter和MatterWindowCovering:這些庫處理Matter協議,該協議用于與Alexa等智能家居設備和Thread網絡進行通信。
TMCStepper:用于使用通用異步收發器(UART)通信來控制TMC2209步進電機驅動器的庫。
Wire:處理微控制器與I2C設備之間的I2C通信協議。
BH1750和MatterIlluminance:BH1750是一款光傳感器,MatterIlluminance有助于將其集成到Matter生態系統中。
Adafruit_MCP9808和MatterTemperature:MCP9808是一款數字溫度傳感器,MatterTemperature將其讀數與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生態系統(如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步進電機創建驅動程序對象,以便與電機驅動程序通信。
設置函數
void setup() { ... }
串行通信:Serial.begin(115200) 用于初始化串行通信,Serial1.begin(115200) 用于與TMC2209進行UART通信。
VL53L0X傳感器初始化:lox.begin(0x29) 在默認I2C地址(0x29)上初始化接近傳感器。
光傳感器和溫度傳感器初始化:matter_illuminance_sensor.begin() 和matter_temperature_sensor.begin() 函數將初始化這些傳感器,以便進行Matter報告。
TMC2209設置:
driver.begin():啟動電機驅動器。
driver.toff(5):將步進電機驅動器的關閉時間設置為5。
driver.rms_current(500):將電機電流限制在500mA。根據您使用的驅動器,最大電流可能需要手動設置。
driver.microsteps(1):確保電機全速運行。
driver.en_spreadCycle(false):啟用名為StealthChop的靜音模式,實現更流暢的靜音運行。
LED和引腳設置:pinMode() 函數設置特定引腳的方向,如內置LED和電機控制引腳(STEP、DIR、EN)。
循環函數
void loop() { ... }
光照和溫度報告:
float lux = lightMeter.readLightLevel():讀取環境光亮度。
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() 函數不斷更新。
使用check_light_and_adjust_blinds() 函數可根據照度調整卷簾位置(向上或向下)。
光照控制邏輯(卷簾)
void check_light_and_adjust_blinds (int32_t current_percent) { ... }
勒克斯閾值檢查:如果照度大于高閾值(1000勒克斯),卷簾將關閉。如果照度小于低閾值(5勒克斯),卷簾將打開。由于Alexa應用目前不支持創建帶有光傳感器的例程,因此我們決定用代碼來實現這一自動化。
卷簾動作:move_blinds() 函數將卷簾的位置調整為向上或向下。
電機動作函數
void step_motor() { ... }
void stop_motor() { ... }
step_motor():通過切換STEP_PIN和調整脈沖寬度來控制電機走動一步,實現速度控制。
stop_motor():通過禁用電機驅動器和停止向STEP_PIN發送脈沖來停止電機。
停用處理函數
void decommission_handler() { ... }
該函數檢查內置按鈕是否被按下超過10秒,通過清除存儲的數據讓設備退出Matter。
LED亮度更新
void update_onboard_led(uint8_t brightness) { ... }
根據卷簾位置調整板載LED的亮度。如果卷簾關閉,亮度將為零;如果完全打開,亮度將映射到10至255的范圍內。
集成Amazon Alexa
要將Arduino Nano Matter開發板與Amazon Alexa集成,請按照以下步驟操作:
1.將項目上傳到Arduino Nano Matter開發板后,“串口監視器”中會出現一個二維碼URL(圖22)。
圖22:Arduino IDE中顯示集成到Alexa所需的二維碼URL。(圖源:貿澤電子)
2.將URL復制并粘貼到瀏覽器中,即可顯示該二維碼。
3.打開Amazon Alexa應用,點擊右上角的 + 符號。
4.選擇Device,然后選擇Matter徽標。
5.使用Alexa應用掃描Nano Matter項目生成的二維碼。
6.選擇可用的Thread網絡,等待設備納入其中并添加到Alexa應用中(圖23)。
圖23:Amazon Alexa中顯示智能卷簾以及光和溫度傳感器。(圖源:貿澤電子)
現在,您的Matter兼容設備將集成到Alexa應用中,隨時可供使用。
注:如果在連接Arduino Nano Matter開發板和Alexa應用時遇到任何問題,請按照我們的調試提示進行操作。圖24是我們在實施過程中曾遇到過的一些問題。
圖24:這是我們在將Arduino Nano Matter與Alexa應用連接時曾遇到過的一些錯誤。如果發生類似的問題,請嘗試按照貿澤GitHub上提供的調試提示操作。(圖源:貿澤電子)
與Home Assistant和Arduino Cloud集成
在本節中,我們將把Arduino Nano Matter開發板與Home Assistant相集成在一起,并通過Arduino API將傳感器數據傳送到Arduino Cloud進行監控。
設置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儀表板中應顯示溫度傳感器和光傳感器的數據,以及卷簾的控制圖標(圖29)。
圖29:Home Assistant網頁應用中顯示出連接的Matter設備(位于右側)。(圖源:貿澤電子)
在Home Assistant中配置Arduino Cloud集成
從左側菜單中打開File editor附加組件,然后在文件夾中找到secrets.yaml(圖30)。如果該文件不存在,請創建它。該文件可以安全地存儲項目ID、憑證和API密鑰等敏感數據,使主配置文件保持整潔并受到保護。
圖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
接下來,創建一個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發送數據的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發送數據。要找到該屬性,請轉到左側菜單中的Developer tools,然后單擊States選項卡(圖32)。
圖32:Home Assistant的Developer tools中顯示Matter設備的狀態和屬性。(圖源:貿澤電子)
3.依然在Developer Tools中,單擊YAML選項卡。
4.單擊Check Configuration,確保YAML配置中沒有錯誤。
5.如果沒有發現錯誤,請單擊Restart(圖33)。
圖33:確保代碼編輯中沒有錯誤后,請重新啟動Home Assistant服務器。(圖源:貿澤電子)
在Home Assistant中創建自動化操作
接下來,我們將設置自動溫度更新。
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開發板的傳感器數據就會自動轉發到Arduino Cloud。
在Arduino Cloud中監控數據
1.要在 Arduino Cloud 中監控傳感器數據,必須先創建儀表板:
2.登錄Arduino Cloud帳戶。
單擊“Dashboards”,使用可用部件創建新的儀表板。
3.添加用于溫度傳感器和其他數據點(如亮度、卷簾控制)的小部件,以監控來自Nano Matter開發板的數據(圖37)。不要忘記將小部件鏈接到本項目在“設置Arduino Cloud API”部分中創建的變量。
圖37:Arduino Cloud儀表板,用于添加變量并將其鏈接到小部件。(圖源:貿澤電子)
添加Alexa例程
如前所述,Alexa應用尚不支持基于光傳感器數據的例程。為了解決這個問題,我們在Arduino中編寫了控制邏輯,以便在照度達到一定閾值時自動關閉百葉窗。不過,在撰寫本文時,Alexa已經支持由溫度、運動、接觸和濕度傳感器數據觸發的例程。
在這個概念驗證項目中,我們設置了基于溫度的Alexa例程,在85°F(約合30°C)時關閉百葉窗,在70°F(約合21°C)時打開百葉窗。
1.在智能手機或平板電腦上打開Amazon Alexa應用。
2.點按右下角的More圖標(三條水平線),選擇Routines。
3.點按右上角的 + 圖標創建新例程。
4.為例程命名,可以取一個描述性的名稱,如“高溫時關閉卷簾”。
5.設置觸發器:點按When this happens,選擇Smart Home。
6.選擇要監控的房間的溫度傳感器。
7.將觸發條件設置為“Temperature is above 85°F”,然后點按Save。
點按Add Action,選擇Smart Home。
9.選擇要控制的智能卷簾。
10.將操作設置為Close(或Lower,具體取決于卷簾提供的選項)。
11.點按Finish完成例程設置。
按同樣方法創建另一個例程,讓卷簾在溫度降至70°F時自動打開(圖38)。
圖38:Amazon Alexa例程編輯屏幕。(圖源:貿澤電子)
創建好兩個例程后,通過手動調節溫度傳感器或等待實際室溫變化來對其進行測試,以確保卷簾對程序設定的溫度觸發條件做出正確響應。
組裝
在本項目中,我們成功實施了一個完全集成的智能卷簾系統,利用多個平臺進行控制和監控。首先,我們使用Echo(第四代)作為中心樞紐,通過Alexa應用設置控制,創建根據室溫決定百葉窗動作的自動化例程。在此基礎上,我們將該系統與Home Assistant集成,實現了更先進的本地執行自動化選項,而無需依賴外部云服務。這為管理和自動化系統的各個組件(包括溫度和光傳感器)提供了所需的靈活性(圖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應用。(圖源:貿澤電子)
為了完成設置,我們將傳感器數據轉發到Arduino Cloud,并在Arduino Could上建立了實時儀表板,用于可視化和監控傳感器數據。通過將Alexa、Home Assistant和Arduino Cloud結合在一起,我們創建了一個強大的多平臺自動化系統,可實現智能家居的無縫集成和實時監控。本項目不僅展示了如何設計和構建由Matter驅動的智能家居系統,還展現了使用多平臺盡可能提高功能性和控制性所帶來的靈活性(圖40)。
圖40:(a)Home Assistant儀表板顯示已連接的Matter設備;(b)Arduino Cloud儀表版顯示已連接的Matter設備。(圖源:貿澤電子)
更進一步
當前的智能卷簾系統還可以在多方面上進一步增強,實現更多的功能、更高的效率。
距離傳感器
改進DFRobot SEN0245距離傳感器,增設專用校準按鈕,使之能夠根據不同的窗戶尺寸重新校準卷簾的高度。這樣就無需再去按Arduino開發板上的重置按鈕,那個按鈕會重新初始化整個Arduino項目。
光傳感器
Adafruit BH1750光傳感器對環境光的細微變化比較敏感,加上循環函數中連續執行照度檢測,可能會引發頻繁、非必要的調節,加劇電機磨損,降低系統效率。以下方案或能解決這一問題。
消抖/死區機制
為避免因數據微小波動而頻繁改變電機運轉方向,可以引入消抖周期,即系統需在設定的閾值內檢測到穩定光照條件持續一定時間后才觸發調節。同時,設置照度閾值死區(例如,只有當照度超出±10勒克斯范圍時才執行調節),同樣有助于避免不必要的頻繁移動。
以下代碼實現了消抖和死區優化:
const float lightDebounceTime = 5000; // 5秒消抖周期
const float deadband = 50.0; // 設置照度死區以避免微小波動
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"); // **僅當照度高于死區閾值時才關閉卷簾** if (lux > (lightCloseThreshold + deadband) && current_percent < 100) { Serial.println("光照太強!自動關閉卷簾..."); move_blinds(current_percent, 100); // 完全關閉卷簾 } // **僅當照度低于死區閾值時才打開卷簾** else if (lux < (lightOpenThreshold - deadband) && current_percent > 0) { Serial.println("光照太弱!自動打開卷簾..."); move_blinds(current_percent, 0); // 完全打開卷簾 } }
}
反饋系統
采用電位計或編碼器構建反饋系統,追蹤卷簾的準確位置。此舉使系統始終知道卷簾的精確位置,減少過沖或欠沖的風險。將編碼器與電機一起使用,還能實現精確的移動控制,確保系統只移動所需的行程,而非僅僅依賴照度數據。
限位開關
在全開和全關位置加裝限位開關,提供額外的安全和控制。系統可利用這些限位開關防止電機運轉超出卷簾的物理極限,以免造成損壞。限位開關還可在系統失去對卷簾位置的追蹤時(如斷電或手動調節后)作為重置位置的參考。
傳感器讀數平滑
為應對輕微的照度波動,在決定打開或關閉百葉簾之前,可讓系統將最近幾次傳感器讀數(如最近五次讀數)進行平均處理。此舉可消除光線條件瞬時波動造成的影響。
緊湊型設計和原型制作
使用集成所有元器件的緊湊型3D打印外殼完善設計。此外,控制卷簾的齒輪也可以通過3D打印進行改進,便于在開發過程中輕松調整。
擴展自動化和例程
創建控制多個設備的附加例程,使系統能夠與其他智能家居組件(如燈、恒溫器或安全系統)進行交互。還可以在代碼中增加RGB燈效功能,增強燈光效果。
語音控制和高級自動化
通過IFTTT或Home Assistant等平臺集成語音控制功能,使用戶能夠通過簡單的語音指令控制卷簾。此外還可以實現基于實時天氣數據自動化控制的功能。
能效提升和手動控制
加裝太陽能電池板,在白天為電池充電,使本項目更加節能,減少對外部電源的依賴。為了進一步的便利,還可以安裝電容式傳感器,對卷簾進行手動控制。
安防系統集成
將智能卷簾與住宅安防系統集成,支持根據警報觸發情況關閉或打開。
精確反饋傳感器
采用限位開關或編碼器等反饋傳感器,幫助監控卷簾的準確位置。此舉可以讓系統控制更精確,確保卷簾位置正確。
通過實施這些增強方案,可以顯著提升智能卷簾系統的適應性和能效,并與其他智能家居技術深度集成,為用戶提供更強的控制力和更大的便利性。
結語
本項目展示了Matter協議在構建互聯智能家居系統方面的強大潛力。我們使用Arduino Nano Matter開發板,板載Silicon Labs MGM240S模塊、各種傳感器和Alexa,創建了一個無縫、安全和可擴展的解決方案,并使用Thread和低功耗藍牙集成了多個設備。Matter協議簡化了調試過程,確保了強大的安全性,促進了設備間的互操作性,這些使其成為了智能家居自動化的未來。Arduino Nano Matter開發板的靈活性使工程師和開發人員能夠輕松構建和擴展其物聯網系統原型,并為添加新的Matter兼容設備提供無限可能。該項目為未來的改進奠定了堅實的基礎,為更復雜、更有創意的智能家居集成提供了可能。
作者簡介
Ricky Flores是貿澤電子的技術營銷工程師。他擁有密歇根大學電氣工程碩士學位,曾就職于Texas Instruments和新墨西哥大學高科技材料中心(CHTM)。Ricky將MEMS、ESD和模擬設計工程方面的豐富專業知識與十多年的技術營銷經驗相結合。工作之余,他熱衷于房地產、編程、DIY,以及提升工程應用的用戶體驗。
-
傳感器
+關注
關注
2562文章
52560瀏覽量
763675 -
AI
+關注
關注
87文章
34197瀏覽量
275355 -
智能家居
+關注
關注
1933文章
9749瀏覽量
189610 -
Arduino
+關注
關注
188文章
6491瀏覽量
190094 -
Matter
+關注
關注
1文章
260瀏覽量
6272
原文標題:純干貨!手把手教你借助Matter和Arduino打造自己的智能家居
文章出處:【微信號:貿澤電子,微信公眾號:貿澤電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Matter 智能家居的通用語言
智能家居系統、智能家居解決方案及智能家居定制開發
求基于Cortex-M3與Android的智能家居控制系統解決方案
飛睿科技代理樂鑫WiFi模塊方案,智能家居無線技術應用
關于簡化構建支持Matter智能家居的過程
英飛凌支持Matter標準,助推綠色智能家居落地

TI Matter 解決方案助力智能家居創新
基于PSoC? 6 Matter的智能家居解決方案

看視頻,了解Matter協議如何多方面促進智能家居行業大統一
移遠通信推出一站式Matter解決方案,構建智能家居開放新生態

評論