지난번에는 주방팬을 습도 기준으로 작동시킨 내용이 담긴 글을 올린 적이 있습니다.
이번에는 열화상 센서를 사용해 보았습니다. 사실 전부터 열화상은 생각하고 있었지만, AMG8833이라는 물건이 있는 것을 몰랐어서,,, 보통 사람 감지하는데 이용하나 봅니다. 사람 감지 관련해서는 지난번 글 댓글로부터 Human Presence Detection 센서도 있음을 알게 되었는데, 이 8x8 어레이 열화상 센서도 또 다른 선택지인 듯합니다.
음식 할 때 수증기나 냄새때문에 주방 후드 환풍기를 켜게 됩니다.
- 수증기의 경우에 실내 습도를 높일 뿐 큰 문제는 아닙니다.
- 기름에 뭔가 볶거나 튀길 때에는 초미세먼지가 급증하므로 반드시 환풍기를 켜야 합니다. 여담이지만 모기살충제를 뿌려도 심각하게 초미세먼지가 증가(100이상)하므로 반드시 환기가 필요합니다.
문제는 잊고 가끔 안 켤 때가 있는데 이를 자동화하려고 여러 가지 검색을 해 보았는데 뾰족한 방법은 없어 보였습니다.
- 상용화된 경우를 한 가지 정도만 본 듯 합니다.
- 지난번 글 댓글에서 (인덕션 전원과 환풍기 팬을 연동하기를 원한다면) 인덕션이 플러그 없이 시공된 경우에도 인덕션의 전원 켜짐을 감지하는 센서가 있음도 알게 되었습니다만, 일단 이 방법을 먼저 해보았습니다.
제가 기존에 사용한 방법은 다음과 같습니다.
- 인덕션레인지 후드 근처에 IoT 온습도계(Aqara 온습도계)를 설치합니다.
- 습도가 75%가 넘어가면 주방 팬(환풍기의 220V 플러그를 IoT 플러그에 연결)을 작동합니다.
- Wireless 스위치(Aqara 무선 미니 스위치)를 사용하여, IoT 플러그를 꺼서 주방 환풍기를 정지합니다.
- 위 방법은 샤오미 IoT 생태계를 쓴 것으로 자동화하는데 Mi Home 앱에서 가능하며, 별도의 서버(여기서는 라즈베리파이나 시놀로지 NAS 등 항상 켜 놓을 수 있는 가정 내의 컴퓨터 장치)가 필요한 Home Assistant는 꼭 필요하지 않습니다.
기존 방법의 단점은
- 기름으로 요리하면 수증기가 잘 나오지 않아서 주방 팬이 돌아가지를 않습니다.
- 환풍기를 끌 때에는 늘 수동으로 Wireless 스위치를 눌러서 꺼야 합니다(환풍기를 켜는 동안 습도가 떨어지므로 습도를 기준으로 끌 수 없습니다).
그래서 이번에는 열화상 센서를 사용해 보기로 했습니다. 위에서 언급했지만 이 센서는 보통 사람을 감지하는데 사용하는 듯합니다.
- 파나소닉 8x8 어레이 적외선 열화상 센서를 사용하는 것입니다.
- 알리익스프레스에서 저렴하게는 2만원대 초반에 구입이 가능했는데, 보통 정가는 4~5만원대인 듯합니다. 여담으로 저는 2개 샀는데 모두 SMD 표면실장 부품이 냉납인 상태였고 한 개만 재납땜을 통해 겨우 살렸는데 그나마 8줄 중 2줄은 센서가 불량(이상한 온도 표시)이었습니다. 정신건강상 비싸더라도 Adafruit등 이름이 있는 것을 사는 것도 좋을 듯합니다.
본 구현에 사용된 것들은 다음과 같습니다.
- 홈어시스턴트 운영 - 오드로이드 XU4 보드(보통 RPi 3B이상을 쓰면 무난한 듯합니다)
- 샤오미 게이트웨이3(지그비용) 및 아카라 온습도계(지그비), 아카라 무선 스위치(지그비), 샤오미 IoT 220V 플러그
- AMG8833 8x8 열화상센서 보드 및 Wemos D1 mini 보드(ESP8266기반/ESPHome) - GitHub - TheRealWaldo/AMG8833-ESPHOME GitHub - TheRealWaldo/thermal: Thermal Vision Sensor and Camera for Home Assistant
결과적으로 홈어시스턴트(Home Assistant) 대시보드의 일부를 캡쳐 한 화면을 보고 읽으시면 좀 더 직관적으로 알 수 있습니다.
- 3개의 인덕션 포트 중 1개가 사용 중입니다.
- 물이 끓는 중이지만 온도는 55도 가량입니다.
- 대략 50도를 넘으면 사용 중이라고 봐도 될 것 같고, 인덕션을 끄더라도 냄비를 치우지 않으면 온도는 서서히 내려갈 것입니다. => 이 기준은 센서와의 거리 등 영향이 있으므로 절대적인 값은 아니겠습니다.
- 대략 40도 이하로 내려오면 껐다고 인식할 수 있겠네요.
홈어시스턴트에서는 카메라 장치로 추가를 하면 되는데, GitHub - TheRealWaldo/thermal: Thermal Vision Sensor and Camera for Home Assistant에 그 방법이 나와 있습니다. 저는 HACS에서 Termal Vision을 추가하는 방법을 썼습니다.
노코딩으로 임베디드 장치를 프로그래밍할 수 있는 ESPHome은 별도로 PC에 설치하고 GitHub - TheRealWaldo/AMG8833-ESPHOME의 소스 코드를 사용하여 ESP8266보드인 Wemos D1 mini에 프로그래밍을 한 후 WiFi에 접속시켜서 홈어시스턴트에 ESPHome 장치로 추가하면 됩니다(ESP8266의 D1과 D2포트를 AMG8833과의 I2C 통신에 사용).
오늘 아침에 측정한 값은 다음 그래프로 나타나므로 기준을 잡는데 참고가 되겠습니다.
임시로 설치한 열화상센서는 아래와 같습니다.
큰 틀에서는 문제가 없어 보이지만 알고 있거나 예상되는 부분들이 있습니다.
- 습기에 취약한 보드를 보호하는 방법(케이스 추가 등)이 필요합니다.
- 열화상센서로 감지한 최고 온도가 환풍기팬을 끄는 기준으로 잡은 40도까지 내려오는데 5~10분 걸릴 수 있습니다.
막상 운영을 해보니까, 다음과 같은 사항들이 있었습니다.
- 뚜껑이 있는 냄비의 경우 온도가 생각보다 천천히 오르고 높지 않습니다(아직 센서의 거리에 따른 정확도를 점검하지 않음).
- 도중에 뚜껑을 닫으면 온도가 떨어집니다.
- 프라이펜과 같이 열고 요리할 때도 마찬가지인데 몇백도로 오르다가 음식물을 넣으면 빠르게 식습니다.
결국 특정한 온도를 기준으로 켜고 끄면 부정확한 부분들이 생기게 됩니다. 그래서, 온도가 오르는 패턴에 켜고, 내리는 패턴에 끄는 것으로 해보았습니다.
홈어시스턴트는 일반적으로 필요한 기능이 필요하다 싶으면 거의 구현이 되어 있는 것이 장점입니다. 온도의 경향성을 찾는 기능이 있었는데요, configuration.yaml에 다음과 같이 바이너리 센서를 만듭니다.
binary_sensor:
- platform: trend
sensors:
induction_thermal_rising:
entity_id: sensor.thermal_sensor_max
sample_duration: 180
max_samples: 36
min_gradient: 0.0416667
device_class: heat
induction_thermal_falling:
entity_id: sensor.thermal_sensor_max
sample_duration: 180
max_samples: 36
min_gradient: -0.0416667
device_class: cold
대략 3분(180초)동안 36개(5초마다 나오도록 .h파일 수정해서 ESPHome 펌웨어 올렸음)의 온도를 분석하여, 7.5도(별다른 의미 없이 정한 값)가 오르는가 내리는가에 따라 heat상태인지 cold상태인지를 알려주는 바이너리 센서를 기준으로 자동화하는 것입니다.
- 0.0416667은 7.5/180의 값입니다. -> 온도변화량/소요시간(초)
GUI에서 자동화 내용을 선택하고 나면 automations.yaml에는 다음과 같은 내용이 추가됩니다. 끄는 것도 같은 방식이라 생략합니다.
- id: '1668995129733'
alias: 인덕션 온도가 3분간 오르는 패턴이면 환풍기 작동
description: ''
trigger:
- platform: state
entity_id:
- binary_sensor.induction_thermal_rising
to: 'on'
condition: []
action:
- type: turn_on
device_id: c0b513d1666c
entity_id: switch.212a01_cloud_979
domain: switch
mode: single
물론, 기존 습도가 75% 넘으면 팬을 가동하는 기능은 그대로 두었습니다. 그리고 원하는 시점에 안꺼지면 무선 스위치를 눌러서 바로 끌 수도 있습니다.
그리고, 온도 값에 대해 말씀드리자면 실제 온도보다는 낮게 나옵니다.
- 레인지 표면에 손을 갖다 놓아도 25도 정도로 되고 뚜껑을 덮은 상태로 물이 끓어도 70도 정도 밖에 안올라 갑니다.
- 프라이팬을 그냥 달구는(?) 경우에는 200도가 넘게 올라가기도 합니다. => 매우 드물지만 과열되어 화재가 나는 것을 경고하는 기능도 생각해 볼 수 있겠습니다.
2022-12-02 추가
- 온도가 상승하는 패턴이라고 하더라도, 온도가 45도 이상일 때부터 켜지도록 수정했습니다.
- 온도가 하강하는 패턴이라고 하더라도, 온도가 50도 이하일 때 꺼지도록 수정했습니다. 냄비를 치워도 플레이트의 온도는 쉽게 내려가지 않습니다(예를 들면 고온 경고 H 글자가 깜빡이는 상태)
- 추가로 머신러닝(인공지능)을 도입하는 것도 좋겠지만 그 정도까지 필요한 것은 아닌 듯 합니다.
/Vollago
/Vollago
링 형태로 전류를 재는 것은 지난번에 알아보다가 적당한 것을 찾지 못했습니다...
부모님 댁의 경우에는 인덕션 설치할 때 제가 없었는데, 다시 확인해 보니까 인덕션 및 서랍장 안쪽에 콘센트가 설치되어 있었습니다. 다만 인덕션 최대 소비 전력이 3.3kWh라서 15A이상의 전류를 견디는 IoT 플러그가 필요한 듯합니다(샤오미꺼 중에는 16A 지원이 있네요). 그렇다면 소비전력을 모니터링하여 팬을 자동화할 수 있을 거 같아요.
IOT 플러그도 처음 생각을 해 보았으나.. 허용 전류 때문에 사용하지 않고 있습니다. 만약 플러그를 사용하신다면 인덕션의 최대 전류 사용량에서 넉넉하게 마진도 고려 하시는 것을 추천 드립니다. 전기 무셥습니다 ㅠ..
저는 습도와 적외선열화상센서를 사용했는데, 습도는 팬이 도는 동안 떨어져버리므로 끄는 기준을 잡을 수가 없고, 열화상센서는 음식하는 도중의 다양한 조건에 모두 반응하기 어려운 부분이 있습니다. 사실 수증기가 많이 나오는 것은 큰 문제가 될 것이 없는데, 기름을 사용하는 요리의 경우 초미세먼지가 급증하고 실제 주부의 눈과 호흡기에 좋지 않으므로, 초미세먼지센서만으로 팬을 가동하면 어떨까 하는 생각이 드네요. -> 평소 후드 켜는 것을 싫어하신다고 하니까, 건강에 꼭 필요할 때만 가동한다는 의미로요.
PMM-300은 차단기 중 내부 차단기 중 하나에서 전원을 공급받고 클램프는 외부 인입선쪽(주 차단기 위나 아래 중 하나) 중 중성선이라고 써 있지 않은 쪽에 물려주니까 바로 잘 작동되었습니다.
기존의 습도방식, 적외선온도측정방식보다 이 방법이 더 단순하고 사용자가 "왜 작동 안하지? 언제 종료하지?" 등 생각이 필요 없도록 하는 장점도 있습니다. 집에서 1600W가 넘으면 1분 후부터 팬을 작동하고 800W 이하이면 1분 후 팬 작동을 멈추게 해 놓았습니다.