Skip to main content

매터와 아두이노로 스마트 홈 통합하기

매터와 아두이노 나노 매터 보드의 파급력 살펴보기

A house with a kitchen and a large island

AI-generated content may be incorrect.

이미지 출처: JJ1990/stock.adobe.com, AI 생성

작성자: 리키 플로레스(Ricky Flores), 마우저 일렉트로닉스

2024 12 27

 

손가락 하나 까딱하지 않고도 조명이 사용자의 존재에 맞춰 조정되고, 블라인드가 열리면서 햇빛이 완벽하게 들어오고, 원하는 온도로 유지되는 모든 것이 완벽한 조화를 이루는 집에 들어섰다고 상상해 보자. 이것이 바로 매터(Matter) 표준이 실현하고자 하는 비전이다. 아마존(Amazon), 애플(Apple), 구글(Google) 같은 빅테크 기업이 설립한CSA(Connectivity Standards Alliance) 2019년에 제정한 매터 표준은 스마트 기기의 혼란을 단순화하고 있다. 이상 서로 다른 앱이나 통신을 거부하는 기기들 사이에서 헤맬 필요가 없다. 매터를 사용하면 브랜드에 관계없이 온도 조절기, 초인종, 보안 카메라가 원활하게 작동한다.

가이드에서는 오픈 소스 어시스턴트(Home Assistant) 소프트웨어와 아두이노 클라우드(Arduino Cloud) 통합된 센서 데이터와 아마존 알렉사(Alexa) 음성 AI 통해 제어되는 스마트 롤러 블라인드 시스템을 구축하여 자동화 실시간 모니터링을 강화하는 방법을 알아본다. 개발자들은 경험이나 숙련도와 상관없이 프로젝트를 통해 집을 연결된 지능형 환경으로 바꿀 있다.

 

프로젝트 자료 리소스

 

프로젝트 BOM(자재 명세서)

 

프로젝트 코드/소프트웨어

 

추가 리소스

 

프로젝트 하드웨어 개요

 

아두이노 나노 매터 보드(그림 1) 아두이노의 단순성과 사용자 친화성을 강력한 실리콘랩스의 MGM240S 멀티 프로토콜 무선 모듈과 결합하여 매터 호환 사물 인터넷(IoT) 장치를 개발하는 이상적인 솔루션이다.

그림 1: 실리콘랩스의 MGM240S 모듈을 갖춘 아두이노 나노 매터 보드. (출처: Arduino)

 

컴팩트한 플랫폼을 사용하면 모든 경험 수준의 제작자가 스마트 기기를 쉽게 제작하고, 기존 프로젝트를 업그레이드하고, 매터, 오픈스레드(OpenThread), 지그비(Zigbee) Bluetooth® LE 같은 프로토콜을 실험해 있다.

나노 매터 보드의 핵심인 실리콘랩스의 MGM240S 모듈은 배터리 구동식 IoT 장치에 최적화된 시스템 패키지(SiP) 모듈이다. Series 2 EFR32MG24 SoC 기반으로 구축된 모듈은 고급 연결성, 보안 에너지 효율성을 제공하여 스마트 자동화 애플리케이션에 탁월한 선택이 있다.

 

프로젝트 소프트웨어 개요

 

프로젝트는 다음 소프트웨어와 환경을 사용한다.

  • 아두이노 IDE: 아두이노 나노 매터 보드에 코드를 작성, 편집 업로드하는 사용

  • 아마존 알렉사 모바일 : 프로젝트와 통합되어 음성 명령 루틴을 통해 스마트 블라인드 제어

  • VirtualBox 7.1.2: Windows 호스트에서 어시스턴트 환경을 가상화하는 사용

  • 어시스턴트 모바일 : 디바이스 모니터링 제어를 위한 간편한 액세스 제공

  • 어시스턴트: 고급 자동화를 위해 배포되어 IoT 디바이스의 유연한 로컬 제어를 지원

  • 아두이노 클라우드: 장치를 원격으로 모니터링 제어하는 사용, 센서 데이터의 실시간 시각화를 위한 클라우드 기반 대시보드 제공, 원격 액세스 자동화를 위한 IoT 애플리케이션과의 통합 가능

 

프로젝트 개발

 

프로젝트의 목표는 스레드 통신을 통해 아두이노 나노 매터 보드를 아마존 알렉사 허브에 연결하여 알렉사 앱을 통해 롤러 블라인드를 제어할 있도록 하는 것이다. 또한 아두이노 클라우드 대시보드와 어시스턴트 앱을 통해 블라인드를 모니터링할 있어 스마트 자동화를 위한 다양하고 유연한 제어 시스템을 제공할 있다.

먼저, 개발에 필요한 소프트웨어를 검토한 다음 프로젝트에 사용된 하드웨어 구성 요소로 넘어갈 것이다.

 

아두이노 IDE 설정

 

개발 당시에는 아두이노 클라우드 IDE 원활하게 작동하지 않던 나노 매터 보드와의 완벽한 호환성을 보장하기 위해 개발용으로 아두이노 IDE 선택했다. 프로젝트는 테스트와 디버깅을 쉽게 있도록 단계별로 나누어 진행되었으며, 나노 매터 라이브러리에서 제공하는 사전 구축된 예제 스케치를 사용하여 보드의 매터 기능에 대한 기본 테스트부터 시작했다(그림 2).

A screenshot of a computer

AI-generated content may be incorrect.

그림 2: 아두이노 IDE에는 매터에 대한 많은 예제 스케치가 포함되어 있다. (출처: 마우저 일렉트로닉스)

 

개발을 위해 나노 매터 코어를 설정한다:

  1. File 클릭하고 Preferences 선택한다.

  2. Settings 탭의 Additional boards manager URLs 필드(그림 3)

    "https://siliconlabs.github.io/arduino/package_arduinosilabs_index.json"

    입력한 다음 OK 누른다.

A screenshot of a computer

AI-generated content may be incorrect.

그림 3: Arduino IDE 기본 설정 . (출처: 마우저 일렉트로닉스)

 

  1. Tools 클릭하고 Board 선택한 다음 Board Manager 선택한다.

  2. "Silicon Labs" 검색하고 최신 Silicon Labs 코어를 설치한다(그림 4).

A screenshot of a computer

AI-generated content may be incorrect.

그림 4: 아두이노 나노 매터를 위한 실리콘랩스 코어. (출처: 마우저 일렉트로닉스)

 

  1. Tools 클릭한 다음 Protocol stack 클릭하고 Matter 선택한다(그림 5).

A screenshot of a computer

AI-generated content may be incorrect.

그림 5: 아두이노 나노 매터 프로토콜 스택을 보여주는 아두이노 IDE. (출처: 마우저 일렉트로닉스)

 

아두이노 클라우드 API 설정

 

아두이노 나노 매터 보드에는 Wi-Fi® 연결 기능이 탑재되어 있지 않으므로 자동화를 위해 어시스턴트를 사용하여 매터 프로토콜을 통해 아두이노 클라우드에 연결했다. 통합에는 유료 구독을 통해 사용할 있는 아두이노 클라우드 애플리케이션 프로그래밍 인터페이스(API) 필요하다. 구독 요금제에 장치 연결에 대한 API 지원이 포함되어 있는지 확인한다.

  1. 아두이노 클라우드(그림 6)에서 온도 센서에서 데이터를 수신하는 변수, 광도 센서용 변수, 블라인드의 열림 또는 닫힘 위치의 백분율 수준을 추적하는 변수(그림 7) 가지 변수가 있는 Things 설정한다.

A screenshot of a computer

AI-generated content may be incorrect.

그림 6: 아두이노 클라우드 대시보드. (출처: 마우저 일렉트로닉스)

 

A screenshot of a computer

AI-generated content may be incorrect.

그림 7: 아두이노 클라우드에서 변수 추가하기. (출처: 마우저 일렉트로닉스)

 

  1. 프로젝트의 후반부에서 사용할 변수 ID 저장한다(그림 8).

A screenshot of a device

AI-generated content may be incorrect.

그림 8: 변수 ID 표시하는 아두이노 클라우드. (출처: 마우저 일렉트로닉스)

 

  1. 왼쪽 메뉴에서 Space Settings 클릭하고 나중에 사용할 있도록 Space ID 복사한다(그림 9).

A screenshot of a computer

AI-generated content may be incorrect.

그림 9: 아두이노 클라우드의 Space 설정 Space ID. (출처: 마우저 일렉트로닉스)

 

  1. 왼쪽 상단 모서리에 있는 계정 프로필 로고를 클릭한 다음 API Keys 선택한다.

  2. API 키를 만들고 나중에 사용할 있도록 안전하게 저장한다(그림 10).

A screenshot of a computer

AI-generated content may be incorrect.

그림 10: 아두이노 클라우드에서 API 찾기. (출처: 마우저 일렉트로닉스)

 

어시스턴트 설정

 

섹션에서는 Windows 컴퓨터에서 VirtualBox 사용하여 어시스턴트를 설치하는 방법에 대한 단계별 가이드를 제공한다.

어시스턴트 VM 이미지 다운로드

  1. 어시스턴트 웹사이트에서 Getting Started 메뉴로 이동하여 설치 클릭한 다음 Install Home Assistant on Windows 선택한다(그림 11).

  2. View Tutorial 버튼을 클릭한다.

  3. VirtualBox(.vdi) 이미지를 다운로드한다.

A screenshot of a computer

AI-generated content may be incorrect.

그림 11: Windows .vdi 이미지를 얻을 있는 위치를 보여주는 어시스턴트 웹사이트. (출처: 마우저 일렉트로닉스)

 

VirtualBox 다운로드 설치

  1. VirtualBox 웹사이트에서 Download 클릭하거나 Windows Hosts 플랫폼 패키지를 선택하여 VirtualBox 다운로드한다.

  2. 설치 관리자를 열고 지시에 따라 컴퓨터에 VirtualBox 설치한다.

VirtualBox 설치되는 동안 다운로드한 Home Assistant.vdi 이미지 파일을 찾아 압축을 푼다.

 

VirtualBox에서 가상 머신 만들기

  1. VirtualBox 열고 New 클릭하여 가상 머신(VM) 생성한다.

  2. Name 필드에 "Home Assistant" 입력한다.

  3. Type Linux 설정하고 Version Other Linux(64-bit) 설정한 다음 클릭한다(그림 12).

A screenshot of a computer

AI-generated content may be incorrect.

그림 12: 가상 머신 생성을 위한 VirtualBox 설정. (출처: 마우저 일렉트로닉스)

 

VM 설정 구성

  1. 메모리(RAM) 용량과 CPU 수를 설정한다. 권장 설정은 최소 2GB RAM 2개의 가상 CPU이다.

  2. Enable EFI 선택한다. 설정은 어시스턴트를 불러오는 중요하다(그림 13).

A screenshot of a computer

AI-generated content may be incorrect.

그림 13: 가상 머신의 메모리 프로세서 할당을 위한 VirtualBox 설정. (출처: 마우저 일렉트로닉스)

 

어시스턴트 가상 하드 디스크 추가

  1. Hard Disk에서 Use an existing virtual hard disk file 확인란을 선택한 다음 폴더 아이콘을 클릭한다(그림 14).

  2. 다음 창에서 왼쪽 상단의 Add 아이콘을 클릭한 다음 압축을 Home Assistant .vdi 파일을 찾는다.

  3. 파일을 선택하고 Choose 클릭한 다음 Next 클릭한다.

  4. Finish 클릭한다.

 

A computer screen shot of a computer

AI-generated content may be incorrect.

그림 14: VirtualBox Home Assistant vdi 파일 로드. (출처: 마우저 일렉트로닉스)

 

네트워크 설정 구성

  1. VM 설정을 열고 Network 탭을 클릭한다.

  2. Adapter 1에서 Bridge Adapter 선택한 다음 드롭다운 메뉴에서 네트워크 어댑터를 선택한다(그림 15).

A computer screen shot of a computer

AI-generated content may be incorrect.

그림 15: VirtualBox 설정에서 네트워크 어댑터 추가하기. 네트워크 어댑터가 잘못 설정된 경우 어시스턴트가 인터넷과 통신하지 않는다. (출처: 마우저 일렉트로닉스)

  1. Audio 탭을 클릭하고 Intel HD Audio 컨트롤러로 선택한 다음 OK 클릭한다.

 

VM 시작

이제 VM 네트워크 설정을 구성했으므로 Start 클릭하여 어시스턴트 VM 시작하고 부팅 프로세스가 완료될 때까지 지켜본다(그림 16).

A screenshot of a computer

AI-generated content may be incorrect.

그림 16: VirtualBox 표시되는 VM. (출처: 마우저 일렉트로닉스)

 

어시스턴트 설정 완료

VM 실행되면 브라우저를 열고http://homeassistant.local:8123 으로 이동한다.

필요한 경우 VM IPv4 주소를 사용한다(그림 17).

A screenshot of a computer

AI-generated content may be incorrect.

그림 17: 가상 머신에서 실행 중인 어시스턴트. IPv4 주소를 사용하여 어시스턴트에 원격으로 액세스했다. (출처: 마우저 일렉트로닉스)

 

  1. 어시스턴트 시작 화면에서 Create My Smart Home 클릭하여 설정 마법사를 연다(그림 18).

A screenshot of a computer

AI-generated content may be incorrect.

그림 18: 어시스턴트 시작 화면. (출처: 마우저 일렉트로닉스)

 

  1. 설정 마법사를 완료하면 어시스턴트 대시보드가 나타난다(그림 19).

A screenshot of a chat

AI-generated content may be incorrect.

그림 19: 어시스턴트 대시보드. (출처: 마우저 일렉트로닉스)

 

나노 매터 보드에 전원 공급

 

나노 매터 보드는 USB Type-C 케이블 또는 IN5V 핀에 연결된 외부 5V 전원 공급 장치로 전원을 공급할 있다. 프로젝트 자료 리소스에서 보드의 핀아웃을 참조한다.

 

스테퍼 모터 TMC2209 드라이버 설정하기

 

프로젝트에서는 스마트 블라인드 시스템에 이상적인 조용한 작동, 높은 정밀도, 부드러운 제어 기능을 제공하는 Analog Devices TMC2209 스테퍼 모터 드라이버를 사용했다. 다음은 최적의 성능을 보장하고 손상을 방지하기 위한 중요한 고려 사항과 함께 스테퍼 모터 드라이버를 설정하는 방법에 대한 상세 설명이다.

  1. 모터 와이어를 TMC2209 드라이버의 A1, A2, B1, B2 핀에 연결한다. 배선 순서가 확실하지 않은 경우 멀티미터를 사용하여 모터 전선 사이의 연속성을 확인한다. 개의 전선이 쌍을 이룬 경우(, 연속성이 감지된 경우) 드라이버의 A1/A2 또는 B1/B2 핀에 연결한다(그림 20).

참고: 배선이 잘못되면 모터가 회전하지 않고 진동하거나 전혀 작동하지 않을 있다.

A close-up of a circuit board

AI-generated content may be incorrect.

그림 20: (a) 브레드 보드 설정에서 TMC2209 드라이버와 아두이노 나노 매터 보드를 사용하여 스테퍼 모터를 테스트하는 모습. (b) 모터 구동기와 아두이노 나노 매터를 통합하는 납땜 보드. (출처: 마우저 일렉트로닉스)

 

12V 전원 공급 장치를 사용하여 스테퍼 모터에 전원을 공급하므로 원활한 모터 작동을 위해 TMC2209 드라이버의 내부 로직용 5V 입력이 보드에 제대로 연결되어 있는지 확인한다.

  1. 드라이버의 전원을 끈다. 전원이 꺼지면 드라이버의 전위차계를 시계 반대 방향으로 돌려 전류를 늘리거나 시계 방향으로 돌려 전류를 줄인다.

  2. 전류를 조정한 드라이버의 전원을 다시 켜고 기준 전압을 측정하여 올바른 설정인지 확인한다. 전압을 측정하면 정확하고 반복 가능하며 안전한 방법으로 모터 전류를 설정할 있으므로 직관만으로 조정하는 것보다 안정적으로 설정할 있다.

TMC2209 드라이버는 작동 중에 열이 발생할 있으므로 적절한 관리가 중요하다. 드라이버에 방열판을 부착하고 주변 핀과의 단락을 방지할 있도록 충분한 간격을 두고 배치한다. 과열을 방지하고 드라이버의 성능을 최적으로 유지하려면 필요한 경우 냉각 팬을 사용하는 것이 좋다.

중요 설정 참고 사항:

  • 설치 중에는 항상 드라이버의 방향을 다시 확인한다. 잘못 설치하면 영구적으로 손상될 있다.

  • 전압을 측정하는 동안 모터를 연결하면 드라이버가 타버릴 있으므로 절대로 연결하지 않는다.

  • 설정 테스트 중에는 USB 전원에 의존하지 말고 전원 공급 장치를 사용하여 전압을 측정한다.

 

프로젝트 개요

 

그림 21 프로젝트의 개략도를 보여준다.

A diagram of a computer

AI-generated content may be incorrect.

그림 21: 프로젝트에 사용된 하드웨어의 회로도. (출처: 마우저 일렉트로닉스)

 

아두이노 스케치

 

프로젝트의 최종 스케치는 마우저의 GitHub에서 확인할 있으며 주요 기능과 변수에 대한 설명이 포함되어 있다. 스케치를 다운로드한 USB 통해 Arduino 나노 매터 보드를 컴퓨터에 연결한다. Arduino IDE에서 올바른 보드와 포트가 선택되어 있는지 확인한 다음 업로드 클릭하여 코드를 보드에 전송한다.

다음 섹션에서는 스케치의 주요 기능과 변수에 대해 설명한다.

 

라이브러리

#include <Matter.h>

#include <MatterWindowCovering.h>

#include <MatterTemperature.h>

#include <TMCStepper.h>

#include <Wire.h>

#include <BH1750.h>

#include <MatterIlluminance.h>

#include <Adafruit_MCP9808.h>

#include <Adafruit_VL53L0X.h>

  • Matter MatterWindowCovering: 라이브러리는 Alexa Thread 네트워크와 같은 스마트 디바이스와 통신하는 사용되는 Matter 프로토콜을 처리한다.

  • TMCStepper: 범용 비동기식 수신기/송신기(UART) 통신을 사용하여 TMC2209 스테퍼 모터 드라이버를 제어하기 위한 라이브러리이다.

  • Wire: 마이크로컨트롤러와 I²C 디바이스 간의 I²C 통신 프로토콜을 처리한다.

  • BH1750 MatterIlluminance: BH1750 센서이며, MatterIlluminance 매터 에코시스템에 쉽게 통합할 있도록 지원한다.

  • Adafruit_MCP9808 MatterTemperature: MCP9808 디지털 온도 센서이며, MatterTemperature 판독값을 매터와 통합한다.

  • 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: 조명 온도 수준을 매터 에코시스템(: Alexa) 보고하는 오브젝트이다.

 

임계값 정의

const float lightCloseThreshold =  1000.0;

const float lightOpenThreshold =  5.0;

블라인드 개폐 시의 빛의 강도(lux 단위) 정의한다. 빛이 1,000 lux 초과하면 블라인드가 닫히고 5 lux 미만이면 블라인드가 열린다.

 

정의 스테퍼 모터 설정

#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 주소를 정의하는 사용된다.

 

스테퍼 모터 개체

TMC2209스테퍼 드라이버(&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.start() matter_temperature_sensor.start() 함수는 매터 보고를 위해 이러한 센서를 초기화한다.

  • TMC2209 설정:

    • driver.begin() 모터 드라이버를 시작한다.

    • driver.toff(5) 스테퍼 모터 드라이버의 오프 타임을 5 설정한다.

    • driver.rms_current(500) 모터의 전류를 500mA 제한하도록 구성한다. 사용하는 드라이버에 따라 최대 전류는 수동으로 설정해야 수도 있다.

    • driver.microsteps(1) 모터가 최대 스텝으로 작동하도록 한다.

    • driver.en_spreadCycle(false) 사용하면 StealthChop이라는 조용한 모드를 활성화하여 보다 부드럽고 조용하게 작동할 있다.

  • LED 설정: 핀모드() 함수는 내장 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_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) { ... }

  • lux 임계값 확인: 조도가 높은 임계값(1,000 lux) 이상이면 블라인드가 닫힌다. 조도가 낮은 임계값(5럭스) 미만이면 블라인드가 열린다. 현재 알렉사(Alexa) 앱은 조명 센서를 사용한 루틴 생성을 지원하지 않기 때문에 자동화를 코드로 구현하기로 결정했다.

  • 블라인드 이동: move_blinds() 함수는 블라인드의 위치를 또는 아래로 조정한다.

 

모터 이동 기능

void step_motor() { ... }

void stop_motor() { ... }

  • step_motor(): STEP_PIN 토글하고 속도 제어를 위해 펄스 폭을 조정하여 모터가 걸음씩 나아가도록 제어한다.

  • stop_motor(): 모터 드라이버를 비활성화하고 STEP_PIN 대한 펄스를 중단하여 모터를 중지한다.

 

해체 처리기

void decommission_handler() { ... }

기능은 내장된 버튼을 10 이상 누르면 저장된 데이터를 삭제하여 매터에서 디바이스 해체를 시작한다.

 

LED 밝기 업데이트

void update_onboard_led(uint8_t brightness) { ... }

블라인드의 위치에 따라 온보드 LED 밝기가 조정된다. 블라인드가 닫혀 있으면 밝기가 0 되고, 완전히 열리면 10에서 255 사이의 밝기로 매핑된다.

 

Amazon Alexa와의 통합

 

아두이노 나노 매터 보드를 아마존 알렉사와 통합하려면 다음 단계를 따른:

  1. 아두이노 나노 매터 보드에 스케치를 업로드하면 직렬 모니터에 QR코드 URL 나타난다(그림 22).

A screenshot of a computer

AI-generated content may be incorrect.

그림 22: 작동에 필요한 QR 코드의 URL 보여주는 아두이노 IDE. (출처: 마우저 일렉트로닉스)

  1. URL 복사하여 브라우저에 붙여넣어 QR 코드에 액세스한다.

  2. 아마존 알렉사(Amazon Alexa) 앱을 열고 오른쪽 상단 모서리에 있는 + 기호를 클릭한다.

  3. Device 선택한 다음 Matter 로고를 선택한다.

  4. Alexa 앱을 사용하여 나노 매터 스케치에서 생성된 QR 코드를 스캔칸다.

  5. 사용 가능한 Thread 네트워크를 선택하고 장치가 작동하여 Alexa 앱에 추가될 때까지 기다린다(그림 23).

A screenshot of a device

AI-generated content may be incorrect.

그림 23: 스마트 블라인드와 조명 온도 센서를 보여주는 Amazon Alexa. (출처: 마우저 일렉트로닉스)

 

이제 매터 호환 장치가 통합되어 Alexa 앱에서 사용할 있다.

참고: 아두이노 나노 매터 보드를 알렉사 앱에 연결하는 문제가 발생하면 디버깅 팁을 따른다. 그림 24 구현 중에 발생한 가지 문제를 보여준다.

Screens screenshots of a device

AI-generated content may be incorrect.

그림 24: 다음은 아두이노 나노 매터를 Alexa 앱에 연결할 발생한 가지 오류이다. 비슷한 문제가 발생하면 마우저 GitHub에서 제공되는 디버깅 팁을 사용해 본다. (출처: 마우저 일렉트로닉스)

 

어시스턴트 아두이노 클라우드 통합

 

섹션에서는 아두이노 나노 매터 보드를 어시스턴트와 통합하고 센서 데이터를 아두이노 API 통해 모니터링할 있도록 아두이노 클라우드로 전달한다.

 

어시스턴트 설정 장치 추가

 

매터 장치를 관리하기 위해 어시스턴트를 구성하려면 매터 서버 추가 기능을 설치한다:

  1. 어시스턴트에서 Settings 메뉴를 연다(그림 25).

A screenshot of a computer

AI-generated content may be incorrect.

그림 25: 어시스턴트 설정 메뉴. (출처: 마우저 일렉트로닉스)

  1. Add-Ons 클릭한 다음 Add-On Store 클릭한다.

  2. 검색 필드에 "Matter Server" 입력한다.

  3. 결과에서 Matter Server 애드온을 찾아 Install 클릭한다.

  4. 이후 단계에서 필요하므로 File editor 애드온을 설치한다.

  5. 추가 기능을 설치한 후에는(그림 26) 어시스턴트 내에서 매터 장치를 관리할 있도록 제대로 구성되고 실행되는지 확인한다.

A screenshot of a computer

AI-generated content may be incorrect.

그림 26: 파일 편집기 매터 서버 어시스턴트 애드온. (출처: 마우저 일렉트로닉스)

 

그런 다음 스마트폰에 어시스턴트 앱을 설치하고 계정에 로그인한다. 그런 다음 어시스턴트에 센서를 추가한다:

  1. Alexa 앱에서 Control device with another assistant or app 선택한다(그림 27).

Screenshot of a phone screen

AI-generated content may be incorrect.

그림 27: 장치를 제어하기 위해 다른 비서 또는 앱을 추가하기 위한 Amazon Alexa 설정. (출처: 마우저 일렉트로닉스)

 

  1. Add Matter Device 창에서 Yes, it’s already in use 선택한다.

  2. Other controllers 선택한 다음 제공된 설정 코드를 복사한다.

  3. 어시스턴트 앱에서 Add Matter Device 이동하여 설정 코드를 붙여 넣는다(그림 28).

A screenshot of a phone

AI-generated content may be incorrect.

그림 28: Alexa 앱에서 복사한 페어링 코드를 사용하여 어시스턴트에 매터 디바이스 추가하는 방법. (출처: 마우저 일렉트로닉스)

 

장치가 통합되면 어시스턴트 대시보드에 온도 센서 조도 센서의 데이터와 블라인드 제어 아이콘이 표시되어야 한다(그림 29).

A screenshot of a computer

AI-generated content may be incorrect.

그림 29: 연결된 매터 장치를 보여주는 어시스턴트 (오른쪽). (출처: 마우저 일렉트로닉스)

 

어시스턴트에서 아두이노 클라우드 통합 구성하기

 

왼쪽 메뉴에서 파일 편집기 부가 기능을 다음 디렉터리에서 secrets.yaml 찾는다(그림 30). 파일이 없는 경우 파일을 생성한다. 파일은 프로젝트 ID, 자격 증명 API 키와 같은 중요한 데이터를 안전하게 저장하여 기본 구성 파일을 깨끗하고 안전하게 보호한다.

A screenshot of a browser

AI-generated content may be incorrect.

그림 30: 어시스턴트 파일 편집기. Browse Filesystem 클릭하여 편집할 파일을 선택한다. (출처: 마우저 일렉트로닉스)

 

secrets.yaml 파일에서 다음 구성을 추가하고, 자리 표시자를 Space ID, Client ID, Client Secret Thing ID 대체한다:

 

arduino_organization: <Space ID>

token_get_payload: '{"grant_type":"client_credentials","client_id":"","client_secret":"","audience":"https://api2.arduino.cc/iot"}'

arduino_temp_url: https://api2.arduino.cc/iot/v2/things//properties//publish

 

다음으로 RESTful 통합을 만든다:

  1. 파일 편집기 애드온(그림 31)에서 configuration.yaml 파일을 열고 RESTful 통합을 정의하여 Arduino Cloud API 토큰을 생성한다:

 

rest:

  - resource: "https://api2.arduino.cc/iot/v1/clients/token"

    scan_interval: 240 #4 min

    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'

A screenshot of a computer

AI-generated content may be incorrect.

그림 31: configuration.yaml 파일을 보여주는 어시스턴트 파일 편집기. (출처: 마우저 일렉트로닉스)

 

  1. configuration.yaml 파일에 다음 코드를 추가하여 데이터를 Arduino Cloud 전송하는 RESTful 명령을 정의하고 변경 사항을 저장한다.

 

rest_command:

    send_temperature:

      method: PUT

      url: !secret arduino_temp_url  # URL for temperature sensor

      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:  # New sensor (e.g., light level sensor BH1750)

      method: PUT

      url: !secret arduino_light_url  # Add URL for light sensor

      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:  # Percentage of blind open/close

      method: PUT

      url: !secret arduino_blind_url  # Add URL for blind level

      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')}}}"  # Referencing the position attribute of the cover

 

장치에는 특정 속성이 있으며, 블라인드의 경우 current_position 속성을 사용하여 데이터를 아두이노 클라우드로 전송했다. 속성을 찾으려면 왼쪽 메뉴의 Developer tools 이동하여 States 탭을 클릭한다(그림 32).

A screenshot of a computer

AI-generated content may be incorrect.

그림 32: 매터 디바이스의 상태와 속성을 보여주는 어시스턴트 개발자 도구. (출처: 마우저 일렉트로닉스)

 

  1. Developer Tools에서 YAML 탭을 클릭한다.

  2. Check Configuration 클릭하여 YAML 구성에 오류가 없는지 확인한다.

  3. 오류가 발견되지 않으면 Restart 클릭한다(그림 33).

A screenshot of a computer

AI-generated content may be incorrect.

그림 33: 코드 편집에서 오류가 발견되지 않으면 어시스턴트 서버를 다시 시작한다. (출처: 마우저 일렉트로닉스)

 

어시스턴트에서 자동화 만들기

 

다음으로 온도 업데이트를 위한 자동화를 설정한다.

  1. Settings 메뉴를 열고 Automations & scenes 선택한다(그림 34).

A screenshot of a computer

AI-generated content may be incorrect.

그림 34: 자동화 추가 편집을 위한 어시스턴트 설정. (출처: 마우저 일렉트로닉스)

 

  1. Create automation 창에서 Create new automation 클릭한다(그림 35).

A screenshot of a computer

AI-generated content may be incorrect.

그림 35: 어시스턴트에 새로운 자동화 추가하기. (출처: 마우저 일렉트로닉스)

 

  1. 오른쪽 상단에 있는 3개를 클릭하고 Edit in YAML 선택한다(그림 36).

  2. 다음 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

 

A screenshot of a computer

AI-generated content may be incorrect.

그림 36: 어시스턴트의 편집 자동화. (출처: 마우저 일렉트로닉스)

 

  1. 자동화가 완료되면 센서가 변화를 감지할 때마다 나노 매터 보드의 센서 데이터가 자동으로 아두이노 클라우드로 전달된다.

 

아두이노 클라우드에서 데이터 모니터링

 

아두이노 클라우드에서 센서 데이터를 모니터링하려면 먼저 대시보드를 만들어야 한다:

  1. 아두이노 클라우드 계정에 로그인한다.

  2. 대시보드를 클릭하고 사용 가능한 위젯을 사용하여 대시보드를 만든다.

  3. 온도 센서 기타 데이터 포인트(: 광도, 블라인드 제어) 위한 위젯을 추가하여 나노 매터 보드의 데이터를 모니터링한다(그림 37). 프로젝트의 아두이노 클라우드 API 설정하기 섹션에서 만든 변수에 위젯이 연결되어 있어야 한다.

A screenshot of a computer

AI-generated content may be incorrect.

그림 37: 가젯에 변수를 추가하고 연결하기 위한 아두이노 클라우드 대시보드. (출처: 마우저 일렉트로닉스)

 

Alexa Routine 추가하기

 

 앞서 언급했듯이 Alexa 앱은 현재 조도 센서 데이터를 기반으로 하는 Routine 지원하지 않는다. 문제를 해결하기 위해 조도가 특정 임계값에 도달하면 블라인드가 자동으로 닫히도록 아두이노의 제어 로직을 프로그래밍했다. 그러나 글이 작성되는 시점을 기준으로 Alexa 온도, 동작, 접촉 습도 센서의 데이터에 의해 트리거되는 Routine 지원한다.

개념 증명을 위해 85°F( 29 )에서 블라인드를 닫고 70°F( 21)에서 블라인드를 열도록 온도에 따른 Alexa Routine 설정했다.

  1. 스마트폰 또는 태블릿에서 Amazon Alexa 앱을 실행한다.

  2. 오른쪽 하단에 있는 More 아이콘(가로줄 3) 탭하고 Routines 선택한다.

  3. 오른쪽 상단의 + 아이콘을 탭하여 Routine 만들 있다.

  4. Routine 이름을 " Close Blinds at High Temperature(고온에서 블라인드 닫기)" 같은 설명적인 이름으로 지정한다.

  5. When this happens 탭한 다음 Smart Home 선택하여 트리거를 설정한다.

  6. 모니터링하려는 방의 온도 센서를 선택한다.

  7. 트리거 조건을 '온도가 85°F 이상일 ' 설정하고 Save 탭한다.

  8. Add Action 탭한 다음 Smart Home 선택한다.

  9. 제어할 스마트 블라인드를 선택한다.

  10. 동작을 Close (또는 블라인드 옵션에 따라 Lower) 설정한다.

  11. Finish 탭하여 Routine 마무리한다.

온도가 70°F 떨어지면 블라인드가 자동으로 열리는 Routine 만들 있다(그림 38).

A screenshot of a device

AI-generated content may be incorrect.

그림 38: Amazon Alexa Routine 편집 화면. (출처: 마우저 일렉트로닉스)

Routine 모두 생성한 온도 센서를 수동으로 조정하거나 실제 실내 온도 변화를 기다리면서 테스트한다. 블라인드가 프로그래밍된 온도 트리거에 적절하게 반응하는지 확인한다.

 

정리

 

프로젝트는 제어 모니터링을 위해 다수의 플랫폼을 활용하는 완전 통합형 스마트 롤러 블라인드 시스템을 구현했다. 먼저 Echo(4세대) 중앙 허브로 사용하여 Alexa 앱을 통해 제어를 설정하여 실내 온도에 따라 블라인드의 자동 Routine 만들 있도록 했다. 이후에는 시스템을 어시스턴트와 통합하여 외부 클라우드 서비스에 의존하지 않고도 보다 고급화된 로컬 자동화 옵션을 사용할 있게 되었다. 이를 통해 온도 조도 센서를 비롯한 시스템의 다양한 구성 요소를 유연하게 관리하고 자동화할 있었다(그림 39).

A screenshot of a computer

AI-generated content may be incorrect.

그림 39: 완성된 프로젝트 빌드, (a) 프로젝트에 사용된 하드웨어(a.1) 아두이노 나노 매터, (a.2) 모터 드라이버, (a.3) 스테퍼 모터, (a.4) 광도 센서, (a.5) 온도 센서, (a.6) 거리 센서, (b) 코드가 포함된 아두이노 IDE, (c) Amazon Echo 4세대, (d) 매터 장치와 Amazon Alexa 앱을 보여준다. (출처: 마우저 일렉트로닉스)

 

설정을 완료하기 위해 센서 데이터를 아두이노 클라우드로 전달하여 센서 데이터를 시각화하고 모니터링할 있는 실시간 대시보드를 구축했다. Alexa, 어시스턴트, 아두이노 클라우드를 결합하여 원활한 스마트 통합과 실시간 모니터링 제어를 제공하는 강력한 멀티 플랫폼 자동화 시스템을 만들었다. 프로젝트는 매터 기반 스마트 시스템을 설계하고 구축하는 방법을 보여줄 뿐만 아니라 다양한 플랫폼을 사용하여 기능과 제어를 극대화할 있는 유연성을 강조한다(그림 40).

A screenshot of a computer

AI-generated content may be incorrect.

그림 40: (a) 연결된 매터 디바이스를 보여주는 어시스턴트 대시보드, (b) 연결된 매터 디바이스를 보여주는 아두이노 클라우드 대시보드. (출처: 마우저 일렉트로닉스)

 

단계 나아가기

 

현재의 스마트 블라인드 시스템을 개선하여 더욱 다양하고 효율적으로 만드는 방법에는 여러 가지가 있다.

 

거리 센서

 

다양한 크기에 맞게 블라인드 높이를 재보정하는 전용 버튼을 추가하여 DFRobot SEN0245 거리 센서 개선 현재 전체 스케치를 다시 초기화하는 아두이노 보드의 리셋 버튼을 누를 필요가 없다.

 

밝기 센서

 

Adafruit BH1750 조도 센서는 주변 조도의 미세한 변화에 대한 민감도와 루프에서 지속적인 조도 레벨 확인이 결합되어 불필요하고 빈번한 블라인드 조정이 발생하여 모터 마모 시스템 비효율성을 초래할 있다. 다음 솔루션을 구현하면 문제를 해결할 있다.

 

 디바운스/데드밴드

미세한 변동으로 인한 잦은 변경을 방지하려면 블라인드를 움직이기 전에 시스템이 일정 시간 동안 임계값 내에서 안정적인 조명 상태를 기다리는 디바운스 기간을 도입한다. 또한 lux 임계값 주변에 데드밴드를 구현하면(: lux ±10 lux 범위를 벗어난 경우에만 작동) 불필요한 빈번한 움직임을 방지할 있다.

다음 코드는 디바운스 데드밴드 최적화를 구현한다:

 

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("Current light level: ");

        Serial.print(lux);

        Serial.println(" lx");

 

        // **빛이 데드밴드를 넘어 임계값을 초과하는 경우에만 블라인드를 닫는다.**

        if (lux > (lightCloseThreshold + deadband) && current_percent < 100) {

            Serial.println("Light is too bright! Closing blinds automatically...");

            move_blinds(current_percent, 100); // 블라인드를 완전히 닫는다.

        }

        // **데드밴드를 넘어 빛이 임계치 이하인 경우에만 블라인드 연다.**

        else if (lux < (lightOpenThreshold - deadband) && current_percent > 0) {

            Serial.println("Light is too low! Opening blinds automatically...");

            move_blinds(current_percent, 0); // 블라인드를 완전히 연다.

        }

    }

}

 

피드백 시스템

전위차계 또는 인코더를 사용하는 피드백 시스템을 통합하여 블라인드의 정확한 위치를 추적한다. 이렇게 하면 시스템이 항상 블라인드의 정확한 위치를 파악할 있어 오버슈팅이나 언더슈팅의 가능성을 줄일 있다. 또한 모터와 함께 엔코더를 사용하면 정밀한 움직임 제어가 가능하므로 조도 수치에만 의존하지 않고 필요한 만큼만 시스템이 움직일 있다.

 

리미트 스위치

완전 개방 완전 폐쇄 위치에 리미트 스위치를 추가하여 추가적인 안전 제어 기능을 제공해줘야 한다. 시스템은 이를 사용하여 모터가 블라인드의 물리적 한계를 넘어 움직이려고 시도하여 손상을 일으킬 있는 것을 방지할 있다. 리미트 스위치는 정전 또는 수동 조정 시스템이 위치를 추적할 없는 경우 블라인드의 위치를 재설정하기 위한 기준 역할을 수도 있다.

 

센서 판독값 평균화 또는 평활화

미세한 조도 변동을 방지하려면 블라인드의 개폐 여부를 결정하기 전에 시스템에서 최근 번의 센서 판독값을 평균(: 5 판독값마다)하도록 한다. 이렇게 하면 일시적인 조명 조건 변화의 영향을 제거하는 도움이 있다.

 

컴팩트한 설계 프로토타이핑

 

모든 부품이 통합된 컴팩트한 3D 프린팅 하우징을 사용하여 설계를 개선할 있다. 또한 블라인드를 제어하는 기어도 개선하여 3D 프린팅할 있으므로 개발 중에 쉽게 조정할 있다.

 

확장된 자동화 루틴

 

여러 장치를 제어하는 추가 루틴을 생성하여 시스템이 조명, 온도 조절기 또는 보안 시스템과 같은 다른 스마트 구성 요소와 상호 작용할 있도록 한다. 매력적인 조명 효과를 위해 RGB 조명을 포함하도록 코드를 개선할 수도 있다.

 

음성 제어 고급 자동화

 

IFTTT(If This Then That) 또는 어시스턴트와 같은 플랫폼을 사용하여 음성 제어를 통합하면 사용자가 간단한 음성 명령으로 블라인드를 제어할 있다. 실시간 날씨 데이터를 기반으로 블라인드를 자동화할 수도 있다.

 

에너지 효율 수동 제어

 

태양광 패널을 추가하여 동안 배터리를 충전하면 에너지 효율을 높이고 외부 전원에 대한 의존도를 줄일 있다. 블라인드를 수동으로 제어할 있는 정전식 센서를 추가하면 더욱 편리하다.

 

보안 시스템 통합

 

스마트 블라인드를 집의 보안 시스템과 통합하여 알람 활성화에 따라 블라인드를 개폐할 있다.

 

정밀도를 위한 피드백 센서

 

리미트 스위치 또는 인코더와 같은 피드백 센서를 통합하면 블라인드의 정확한 위치를 모니터링하는 도움이 된다. 이렇게 하면 보다 정확한 제어가 가능하고 블라인드가 올바르게 배치되도록 있다.

같은 개선 사항을 구현하면 스마트 블라인드 시스템을 더욱 적응력 있고 에너지 효율적이며 다른 스마트 기술과 완벽하게 통합하여 사용자에게 제어와 편의성을 제공할 있다.

 

맺음말

 

프로젝트는 커넥티드 스마트 시스템을 구축하는 있어 매터 프로토콜의 강력한 잠재력을 보여준다. 온보드 실리콘랩스 MGM240S 모듈, 다양한 센서 제품들, Alexa 탑재된 아두이노 나노 매터 보드를 사용하여 Thread 블루투스 LE(Bluetooth Low Energy) 사용하여 여러 장치를 통합하는 원활하고 안전하며 확장 가능한 솔루션을 만들었다. 매터 프로토콜은 시운전 프로세스를 간소화하고, 강력한 보안을 보장하며, 장치 상호 운용성을 촉진하여 스마트 자동화의 미래가 것이다. 엔지니어와 개발자는 아두이노 나노 매터 보드의 유연성을 통해 IoT 시스템을 쉽게 프로토타이핑하고 확장할 있으며, 새로운 매터 호환 장치를 추가할 있는 무한한 가능성을 제공한다. 프로젝트는 향후 개선을 위한 견고한 기반이 되어 복잡하고 창의적인 스마트 통합을 위한 잠재력을 시사한다.

 


저자 소개

Profile Photo of Ricky Flores

리키 플로레스(Ricky Flores) 마우저 일렉트로닉스의 기술 마케팅 엔지니어이다. 그는 미시간 대학교(University of Michigan)에서 전기 공학 석사 학위를 취득했으며 Texas Instruments 뉴멕시코 대학교(University of New Mexico) 첨단 기술 소재 센터(CHTM, Center for High Technology Materials)에서 근무했다. 그는 MEMS, ESD 아날로그 설계 엔지니어링에 대한 폭넓은 전문 지식과 10 이상의 기술 마케팅 경력을 보유하고 있다. 업무 외에는 부동산, 코딩, DIY, 엔지니어링 애플리케이션의 사용자 경험 향상에 관심을 갖고 있다.