使用Matter和Arduino构建智能家居系统解决方案

描述

想象走进一个万物和谐运转的家——灯光会根据你的存在而自动调节;百叶窗会根据阳光强度自动开合;温度始终保持在舒适的状态——而这一切都不需要你动一根手指。这就是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电源适配器

焊接板

USB Type-C ^®^ 至Type-C电缆

Arduino Nano螺丝端子适配器

散热片

Amazon Echo(第四代)

卷帘式窗帘

项目代码/软件

Arduino集成开发环境(IDE)

Amazon Alexa移动应用

VirtualBox 7.1.2

Home Assistant移动应用

Home Assistant

Arduino Cloud(需订阅)

其他资源

调试技巧与GitHub资源

Arduino IoT Cloud API文档

Arduino Nano Matter引脚布局

项目硬件概览

Arduino Nano Matter开发板(图1)结合了Arduino的易用性与Silicon Labs MGM240S多协议无线模块的强大功能,是开发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:处理微控制器与I²C设备之间的I²C通信协议。

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,以及提升工程应用的用户体验。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分