YOGYUI

힐스테이트 광교산::주방 싱크대 LED 조명 IoT 연동 본문

홈네트워크(IoT)/힐스테이트 광교산

힐스테이트 광교산::주방 싱크대 LED 조명 IoT 연동

요겨 2022. 11. 19. 15:50
반응형

 

신규 입주할 때부터 주방 싱크대 상단LED 조명이 장착되어 있었다

(인터넷으로 찾아보니 주방하부조명, 주방벽장하부 슬림행거 LED 조명, 주방벽장하부 행거레일 LED 조명, 싱크대 레일조명 등 다양한 명칭으로 불리는 것 같다)

설거지할 때 주방 전체 조명을 켤 필요없이 요놈만 켜면 되기 때문에 상당히 유용하게 사용하고 있다

(식기세척기 들인 이후에는 설거지할 일이 거의 없긴 하지만.. ㅎㅎ)

※ 별도로 옵션 계약을 한 기억이 없는걸로 봐선 디폴트로 제공하는 제품이었던 것 같다

 

제품 좌측에 'unifur'라는 상호명이 적혀있고, 우측의 터치 버튼을 손가락으로 눌러서 조명을 켜고 끄는 단순한 제어 방식으로 작동한다

 

별도로 홈네트워크와 연동된 부분이 없다보니 사람이 수동으로 켜고 끌 수 밖에 없는데, 간혹 설거지 후에 불을 끄는 걸 깜빡하고 침대에 누웠다가 다시 일어나 끄러 갈 때 깊은 빡침을 느꼈기에, 공돌이 종특을 발휘해서 IoT (애플 홈, 구글 어시스턴트)랑 연동해야겠다고 마음먹었다

목표: 주방 싱크대 조명을 IoT 플랫폼(Homebridge, Home Assistant)과 연동하기

1. 본체 뜯어보기

본체 좌/우측 커버의 나사를 십자드라이버로 풀어준다

본체 우측에 전선들이 체결되어 있다

터치버튼이 부착된 패널을 잡아당길 수 있는데, 본체 뒤쪽의 LED 드라이버와 연결된 전선 두가닥 때문에 빼낼 수가 없어서, 전선을 과감히 잘라줬다!

전선들을 자른 뒤, LED 드라이버 쪽 전선 2가닥에 레버 타입 커넥터를 장착해줬다

전기/전자공학자들에게 아주 유용한 아이템!

무탈피 커넥터에 PCB쪽의 전선을 체결한 뒤 LED가 정상 동작하는지 확인~

터치패널 뒷면에 제어 PCB가 장착되어 있다

 

본체를 통채로 주방 수납장에서 떼어낸 뒤에 내부를 살펴봤다

오스람(OSRAM)의 정전류 LED 전원공급기가 장착되어 있다 (22W 출력, 역률 0.95)

흠... 정전류 전원을 제어해주는 회로라... 쉽지 않겠구먼~

 

LED 스트립도 본체에서 떼어내서 살펴보니, 직사각형 형태의 PCB 2개가 직렬로 연결된 형태였다

PCB Top면 실크에 'DONSUNG HANGER LED LIGHTING 900mm_LUMMICRO 3528PKG 8S3P_B_Rev1.0_171228'이라고 기재되어 있다

 

LED가 총 48개 장착되어 있는데, 멀티미터로 찍어보니 8개의 LED가 직렬로 연결된 회로 6개가 병렬로 연결된 것으로 보였다

아무래도 '동성'이란 이름을 가진 회사의 제품으로 보이는데, 구글링해보니 (주)동성사를 기반으로 설립된 unifur라는 이름의 회사의 제품인 것 같다 (인테리어 가구 전문 업체인듯?)

https://unifur.co.kr/company/

제품 정보를 알 수 있을까싶어서 열심히 찾아봤는데, unifur 회사 홈페이지를 비롯해서 unifur에서 제작했다는 LED 조명 모듈 정보를 찾아볼 수가 없어서 포기했다... (사실 한 30분 정도밖에 안찾아봤다 ㅎㅎ)

 

제품을 찾는다고 해서 내부 회로 정보까지 알 수 있을 확률은 희박하니, 그만 검색하고 직접 회로를 분석해보자 (사실 내가 뻘짓하다가 고장났을 때 A/S 가능한지 여부를 알아보려고 검색해봤다 ㅋㅋㅋ)

2. PCB 회로 연구

회로를 대충 알아보기 쉽게 도식화하면 다음과 같다 (이거 그리는데 1시간은 쓴듯 ㅋㅋ)

IC들은 U3가 HC74SM54914, U4가 SC24, U5가 HC123OH8X004로 각인되어 있는데, 이놈들 데이터시트를 아무리 살펴봐도 이 회로 동작이랑 매칭이 안되는 것 같아서 정확한 회로 분석은 포기하기로 했다...(U2가 +5V 전압 레귤레이터인것 정도만 알아냈다)

밤늦게 작업하는지라 근성이 바닥났다

 

결국 맨땅에 헤딩한다는 정신으로 오실로스코프 노가다 시작!

Probe로 회로 이곳저곳을 조심조심 찍어보면서 <터치 센서를 눌렀을 때>, <조명이 켜져있을 때> 및 <꺼져있을 때> 상태가 변하는 파트가 있는지 열심히 찾아봤다

 

2시간 정도 근성을 발휘한 덕분에 I/O 제어신호로 쓸만한 녀석들(디지털 신호)을 찾아냈다!

2.1. 회로 그라운드(Ground)

U2의 1번 핀과 C1 연결부

2.2. 터치 신호

Q1(트랜지스터로 추정)과 R6 연결부 

> IDLE일 때 HIGH를 유지하다가, 터치가 되는 순간 LOW로 떨어지는 Active Low 신호로 추정됨

2.3. 조명 On/Off 상태 신호

Q3(트랜지스터로 추정)와 R2 연결부

> LED가 꺼져있을 때 LOW, LED가 켜져있을 때 HIGH

3. 배선 작업

주의: 혹시나 동일 제품이라 하여 아래 작업을 따라하는 것은 권장하지 않음!
전기/전자공학 전문가라 하더라도 반드시 전원이 인가된 상태에서 멀티미터나 오실로스코프로 측정 작업을 마친 상태로 아래 내용을 참고해야 함!

위 주의문은 면책용 ^^;; (사실 따라할 사람이 1명이라도 있긴 할까 싶긴 하다...)

위에서 찾아낸 정보를 바탕으로 배선용 와이어를 납땜해주자

(별도의 테스트 포인트가 없어서 소자들에 직접 땜질을 해줘야하는 상당히 번거로운 작업 ㅠ)

신호선들을 ESP32 Devkit에 연결해주자

  • 조명 On/Off 신호: GPIO22
  • 터치센서 신호: GPIO23

4. 펌웨어 코딩 + 홈네트워크 연동

지난번 싱크대 밸브 자동잠금 보드와 마찬가지로 espressif의 SDK인 esp-idf를 이용해서 펌웨어를 제작했다

소스코드는 깃허브 저장소에 커밋해뒀다

https://github.com/YOGYUI/hillstate-esp32-sink-light-iot

 

GitHub - YOGYUI/hillstate-esp32-sink-light-iot: 힐스테이트 광교산 - 주방 싱크대 LED 조명 IoT 연동 (esp32)

힐스테이트 광교산 - 주방 싱크대 LED 조명 IoT 연동 (esp32). Contribute to YOGYUI/hillstate-esp32-sink-light-iot development by creating an account on GitHub.

github.com

 

구현 기능이라고 해봐야 GPIO 2개를 활성화하고, 1개는 Output으로, 1개는 Input으로 제어하는게 전부라 크게 부연 설명할 게 없다..

(물론 인터럽트 서비스 루틴, FreeRTOS에서의 태스크 및 큐 핸들링, MQTT 브로커, WiFi Provisioning 등 잡다한 코어 기능들이 포함되어 있긴 하지만.. ㅋㅋ)

 

한가지 트릭을 소개하면, 터치 센서 신호를 모사하는 GPIO23번은 평소에는 Input으로 설정했다가, 조명을 켜고 끌 때만 Output으로 설정한 뒤 출력 레벨을 토글해야 한다는 것이다

(module_gpio.cpp)

이는 ESP32의 GPIO23 핀을 터치 센서 제어 보드에 direct로 물려놔서, GPIO의 풀업/풀다운을 설정하지 않더라도 신호의 전압 레벨이 깨지게 되어 수동 On/Off 제어가 불가능하게 되기 때문이다 

(토글 인터벌은 대충 200ms로 하니까 문제없이 잘 동작하더라~)

static bool set_ctrl_pin_as_input() {
    if (gpio_set_direction((gpio_num_t)GPIO_PIN_CTRL, GPIO_MODE_INPUT) != ESP_OK) {
        ESP_LOGE(TAG, "Failed to set GPIO(%d) mode as input", GPIO_PIN_CTRL);
        return false;
    }
    return true;
}

static bool set_ctrl_pin_as_output() {
    if (gpio_set_direction((gpio_num_t)GPIO_PIN_CTRL, GPIO_MODE_OUTPUT) != ESP_OK) {
        ESP_LOGE(TAG, "Failed to set GPIO(%d) mode as output", GPIO_PIN_CTRL);
        return false;
    }
    return true;
}

bool toggle_ctrl_signal() {
    set_ctrl_pin_as_output();

    if (!set_ctrl_level(0))
        return false;
    
    vTaskDelay(CTRL_SIG_TOGGLE_INTERVAL_MS / portTICK_PERIOD_MS);
    
    if (!set_ctrl_level(1))
        return false;

    set_ctrl_pin_as_input();

    return true;
}

 

MQTT를 이용해서 애플 홈킷과 연동하기 위해, 다음과 같이 homebridge 액세서리를 추가해줬다

{
    "accessory": "mqttthing",
    "type": "switch",
    "name": "Kitchen Sink Light",
    "url": "mqtt broker host",
    "username": "아이디",
    "password": "패스워드",
    "topics": {
        "getOn": {
            "topic": "home/hillstate/sinklight/state",
            "apply": "return JSON.parse(message).state;"
        },
        "setOn": {
            "topic": "home/hillstate/sinklight/command",
            "apply": "return JSON.stringify({state: message});"
        }
    },
    "integerValue": true,
    "onValue": 1,
    "offValue": 0,
    "history": true,
    "logMqtt": false
}

마찬가지로 구글 어시스턴트와 연동하기 위해 home assistant에 다음과 같이 액세서리를 추가해줬다

light:
  - platform: mqtt
    name: "싱크대 조명"
    unique_id: "sinklight"
    schema: template
    state_topic: "home/hillstate/sinklight/state"
    command_topic: "home/hillstate/sinklight/command"
    state_template: "{% if value_json.state %} on {% else %} off {% endif %}"
    command_on_template: '{"state": 1}'
    command_off_template: '{"state": 0}'
    optimistic: false

간단하게 테스트해보자

4.1. 애플 홈 앱으로 LED 켜고 끄기

4.2. 수동 조작 시 애플 홈 앱 상태 업데이트

두 경우 모두 문제없이 잘 동작한다! 헤헤헤

5. 하드웨어 정리

별도로 PCB를 뜨기에는 너무 시간과 비용이 아까워서, 테스트할 때 썼던 esp32 devkit이랑 빵판을 그대로 본체안에 구겨넣기로 했다!

 

PCB에서 따온 3개의 전선도 레버형 전선 커넥터를 이용해서 빵판이랑 연결해주고, 빵판 뒷면에 양면테이프를 붙여서 하부조명 본체 내부에 부착해주자 (전선을 분리할 수 있게 해둬야 유지보수가 편하다!)

전선을 요리조리 구부려서 잘 정리해주자

그리고 220V AC 전원부에 큰 구멍(hole)이 뚫려있는데, 이쪽으로 USB 케이블도 같이 넣어주자

(220V 전원선 연결 해체 필요)

본체를 다시 조립하면 USB 케이블이 추가로 튀어나온 것 말고는 감쪽같아진다 ㅎㅎ

이제 해체했던 과정을 되돌려서 주방 하부장에 다시 장착해주면 정리 끝!

USB 케이블은 주방 벽면의 220V 아울렛(소켓/돼지코)에 5V 어댑터를 장착한 뒤에 연결해주자

6. 결과 확인 (Demo)

구글 홈 AI 스피커를 이용해서 음성 제어도 해보자 (목소리 주의)

이제 침대에 누워서도 스마트폰 없이도 음성 명령만으로 싱크대 조명을 끌 수 있게 됐다!


사실 조명 자체를 필립스 휴 LED 스트립으로 바꿀까 고민을 많이 해봤는데, 2m짜리 스트립을 비싸게 주고 사서 정작 쓰는건 1m도 채 안되기 때문에 굉장한 낭비라고 느껴서 생각을 바꿨다

 

결국 뼛속 깊이 박힌 엔지니어 본능이 깨어나서 전부 해체하고 분석하는 과정을 거쳤는데, 집안에 굴러다니던 ESP32 devkit 한개로 간단하고 저렴하게 IoT 연동까지 완료할 수 있었다

(대략 가격을 따져보면 devkit + 빵판 + 전선 6가닥 + 레버형 전선 커넥터 2개 등등 해서 만원 정도?)

 

삶에 불편함이 조금이라도 있다면, 해결하는 것이 인지상정(??)

정전류 제어 회로라 약간의 어려움은 있었지만, 결국은 디지털 신호를 찾아내서 홈 IoT 연동까지 무리없이 진행할 수 있었다 (작업 기간은 3일)

영화 인터스텔라 포스터 중 발췌

끝~!

반응형