posted by ShinJjang 2018. 5. 1. 00:15

ESPCO2_DTH.txt

0. 시작하기 전에


ESP8266을 이용하여 처음 만든건 이산화탄소 농도 측정기이다. 


 사실 Netatmo를 사용하여 이산화탄소농도를 측정해보기 전에는 이산화탄소농도에 대해 중요하게 생각하지 않았다. 

(Netatmo에 대한 자세한 내용은 Makelism님의 글을 참조하면 좋다)



 왜냐하면 우리집은 단독 주택이고 침실에는 4짝으로된 아주 큰 창이 있고 창문을 닫아도 틈이 생각보다 많기 때문에 이산화탄소 농도가 높지 않을것이라고 생각했다. 하지만 Netatmo를 처음 설치하고 내 생각이 아주 잘못되었음을 알게되었다. 


대기중의 이산화탄소농도는 400ppm정도인데 이산화탄소 농도에 따라 아래와 같은 신체 영향을 유발할 수 있다고 한다. 


농도(ppm)

영   향

~450

  건강한 환기 관리가 된 레벨

~700

  장시간 있어도 건강에 문제가 없는 실내 레벨

~1000

  건강 피해는 없지만 불쾌감을 느끼는 사람이 있는 레벨

~2000

  졸림을 느끼는 등 컨디션 변화가 나오는 레벨

~3000

  어깨 결림이나 두통을 느끼는 사람이 있는 등 건강 피해가 생기기 시작하는 레벨

3000~

  두통, 현기증 등의 증상이 나오고, 장시간으로는 건강을 해치는 레벨

*우리나라의 경우 실내환기조건을 1000ppm으로 권고하고 있음


 실제로 침실을 장시간 비웠을때 400ppm 초반으로 낮아지는데 밤에 퇴근후 아내와 함께 방으로 들어가면 창문을 닫아 놓을 경우 불과 30분이면 1200ppm을 넘어서고 잠시후면 1500ppm을 넘어선다. 


 종전에 자고 일어나면 머리가 아픈경우가 종종있고 자고 일어나도 피곤함이 계속 남아있는 느낌이 많았는데 그것이 이산화탄소 농도때문이라고는 전혀 상상하지 못했다. Netatmo를 통해 환기의 중요성을 알고는 창문을 10Cm~20Cm는 항상 열어 놓는다. 그렇게 하면 침실의 이산화탄소 농도가 800ppm내외로 유지된다. 하지만 조금있으면 여름이라 다른 대안을 마련중이다.


 아무튼 실내의 이산화탄소농도를 적절하게 유지하는것은 요즘 이슈가 되는 미세먼지 만큼 중요하다. 그래서 아이들 방에도 이산화탄소 센서를 두고 싶은 마음에 Netatmo 추가 모듈을 구입할까 고민했지만 가격도 비싸고($79-약 9만원/+배송비) 연결성의 문제때문에 고민하고 있다 ST까페의 af님의 글을 통해 ESP8266으로 직접 만들어 보기로 했다. 



아래의 내용을 따르기 전에 먼저 이전에 작성된 아래의 두 글의 내용을 알고 있거나 선행하여야 한다.

ESP8266으로 IOT 시작하기 1 - 필요한것들

ESP8266으로 IOT 시작하기 2 -ESP Easy 설치하기



ST용 센서를 만들기 위한 전체적인 과정은 처음 접하면 어려워 보이지만 사실 아주 간단하다. 좀더 이해를 돕기 위해 전체과정을 요약해보면 다음과 같아. 


ESP8266에 펌웨어설치 - ESP Easy 설정 - ESP8266에 센서연결 - ST에 DTH설치 및 장치생성 - STapp에서 장치 연결




1. ESP Easy 디바이스 설정하기 


ESP Easy를 이용하면 펌웨어에서 지원하는 장치들은 아주 쉽게 연결하고 사용할 수 있다. ESP Easy에 접속하여 Device항목에서 장치를 선택하면 아래 사진 처럼 장치 이름 옆에 "?"가 있고 "?"를 클릭하면 해당 장치와 연결방법등 자세한 내용을 확인할 수 있다. 



1-1. 이산화탄소 센서 설정하기


먼저 이산화탄소 센서를 연결하기 위한 정보를 확인해 보자. Device에서 Gases-CO2 MH-Z19를 선택하면 아래와 같은 화면을 볼수있다.

그럼 위와 같이 설정을 한다. 1st GPIO와 2nd GPIO는 아래 센서의 TX, RX와 연결할 핀을 선택하는 부분이다. 위 처럼 선택하면 된다. 그리고 아래 이산화탄소 센서의 Tx, Rx부분에 연결하면 된다.  

아래로 스크롤하여 아래부분 처럼 설정하면된다. 


참고로 Formula부분은 센서의 값을 보정하는 수식을 넣을수 있는 곳이다. 예를 들어 이산화탄소농도가 대기중에 노출했을때 450ppm이 나온다면 이값을 0.9를 곱하거나 50을 빼서 400ppm으로 맞추어 줄수있다. 




1-2. 조도 센서 설정하기


이산화탄소외에 조도센서도 필요하여 조도센서도 연결하였다. 조도센서가 있다면 아래와 같이 설정하면 된다. 



조도 센서의 경우 작동 전압이 3.3V이기 때문에 
VCC는 ESP8266의 3.3V 핀에 연결하고 
GND는 ESP8266의 GND핀에 연결하면 된다. 그리고 
SCL은 ESP8266의 D1핀에 연결하고
SDA는 ESP8266의 D2핀에 연결하면 된다. 



위와 같이 설정하고 Close를 누르고 나오면 아래와 같이 두개의 장치가 등록된 화면을 볼 수 있다. 




2. 브레드보드에 ESP와 센서 연결하기 


 브레드보드를 이용하여 ESP8266과 장치를 연결하기위한 가장 흔한 방법은 점프 선을 이용하는 것이다. 점프선은 보통 이전 글에서 소개한 두종류가 가장 많이 쓰이는데 조도센서와 이산화탄소는 서로 다른 점프선을 이용하여 연결하여 보았다.


 브레드보드는 아래 첫번째 사진의 설명처럼 가로 5칸이 서로 연결되어있다. 그래서 같은 5칸안에 핀이 꽂히면 점프선을 이용하여 연결해 줄 필요가 없다. 하지만 대부분 다른 곳에 연결되기 때문에 점프선을 이용하여 아래처럼 연결해주어야한다. 

  

 위 사진처럼 조도 센서를 연결하는데 사용한 점프선의 경우 장치를 연결하기 전에 핀번호를 확인하고 미리 꽂아서 사용하는데 깔끔하게 설치할 수 있는 장점이 있다.


  

 아래 사진처럼 이산화탄소센서를 연결한 점프선은 공간을 많이 차지하지만 장치를 미리 배치한 후에 핀을 연결할 수 있기때문에 설치하기가 편한 장점이 있다. 


  



 아래처럼 ESP8266에 OLED 디스플레이를 연결하여 센서에서 측정된 값이나 할당 받은 IP주소등을 직접확인 할 수도 있다. 아니면 LED를 이용하여 특정 농도이상일때 점등하여 상태를 표시할수도 있다.





3. ST와 연결하기



3-1. ST IDE사이트에 장치 추가하기


 ST와 연결은 첨부된 DTH를 다운로드하여 IDE사이트에 추가한 후 아래처럼 My Device항목에서 원하는 이름으로 장치를 추가해주면 된다. 




3-2. ST app에서 ESP8266 연결하기


IDE사이트에서 추가한 장치에 들어가면 아래와 같은 화면을 볼 수 있다. 그럼 우측 상단의 톱니모양의 설정 버튼을 누르면 오른쪽 화면이 나오는데 여기서 ESP8266이 할당받은 IP주소(192.168.31.81)을 입력하고 CO2업데이트 주기를 설정해준다음 Save를 눌러준다. 




설정해주면 아래처럼 측정값들을 ST에서 불러오는 것을 확인할 수 있다.



4. 기성 제품과 비교하기 


4-1. Netatmo와 ESP8266의 이산화탄소 측정결과 비교


 두 말할 필요가 없다. 아래 비교 결과를 보자.  같은 시간대에 어플에 표시된 수치를 비교한 것이다. 평균적으로 ESP8266용 이산화탄소 센서의 농도가 조금더 높다. 어느값이 더 정확한지는 알수가 없다. ㅠㅠ 그리고 ESP8266의 경우 측정값을 임의로 보정해 줄수 있다.




아래의 그래프는 측정값을 그래프로 비교한 것이다. 시각적으로 좀더 비교가 쉬울것 같다. ESP8266의 경우 데이터를 Ubitos에 업로드하여 그래프로 시각화한 것이고 Netatmo의 경우 아이폰에서 가로모드로 변경하였을때 제공하는 그래프를 여러장 캡쳐하여 포토샵을 이용하여 붙인 후 두개의 그래프를 겹친것이다.


사실 어떤 장치가 더 정확한지 알수는 없지만 농도의 증가와 감소를 비교해보면, 그리고 나와 아내의 출입 시간등을 고려해보면 둘다 높은 신뢰도를 보여주는 것으로 유추할 수 있다. 



4-2. 조도 센서 비교하기


 사실 Smartthings를 사용하면 다양한 센서류를 사용가능하다는 장점이 있지만 사실 만족스러운 조도센서를 찾기는 쉽지않다. 왜냐하면 첫째는 리포팅 주기이다. 대부분 조도센서를 포함한 장치들이 조도 리포팅 주기가 빠르지 않은 경우가 많거나 미세한 변화에는 수치가 바뀌지 않거나 리포팅하지 않는 경우가 대부분이다. 


 그리고 두번째는 조도 센서를 이용하여 자동화 하려다 포기한 이유이기도 한데, 바로 저조도에서 분별력이 없다는 것이었다. 

 조금 어두우면 조도값이 무조건 '0'이다. 그래서 휴 취침등이 켜져있으나 꺼져있으나 조도값이 '0'이기 때문에 자동화 자체가 불가능하다. 그럼 ESP8266의 조도 센서는 어떨까? 그래서 에이온 멀티센서의 조도값과 비교해보았다. 비교환경은 아래 사진처럼 침대 헤드보드 위, 휴 벌브 아래에 위치 시켜 휴의 밝기에 따라 변화되는 값을 측정해 보았다. 조도 센서는 최대한 비슷한 위치에 두고 테스트 하였다.




그 결과는 아래 사진을 보면 바로 비교가 될것 같다. 결론 부터 말하면 저조도에서의 분별력은 기성제품보다 훨씬 뛰어나다. 




아래는 휴에서 밝기가 가장 낮은 상태이며 사진은 실제 눈으로 봤을때보다 약간 밝은? 거의 비슷한 정도이다. 에이온 센서의 경우 벌써 조도가 '0'이지만 ESP센서의 경우 3.4lux값이다. 


아래 사진은 방에 모든 등이 꺼진 상태이며 맞은편 벽에 TV가 켜져 있는 상태이다. 에이온은 '0'이지만 ESP센서의 경우 '0.9'의 값으로 빛을 감지한다. 


위의 상태에서 손으로 ESP센서부위를 1Cm정도 위에서 덮으면 조도값이 '0'으로 바뀐다. 




5. 홈킷과 연동


당연히 homebridge-smartthings를 이용하여 홈킷과 연동이 가능하도록 DTH를 만들었다. 홈킷에서는 CO2센서, 온도센서, 조도센서의 3가지 장치로 표시된다. 


홈킷에서는 1200ppm이상이면 경고알림이 뜬다. 




6. 알아야할 것 들


1. ESP8266은 상당히 안정적으로 작동한다. 하지만 WiFi기반이기 때문에 WiFi네트워크에 문제가 있거나 연결이 끊어지면 ST에서 정보를 가져올 수 없다. 


2. ESP8266에서 ST로 정보를 보내는 방식이 안정적이고 좋으나 내가 그 정도의 실력이 되지 않아 현재는 ST에서 ESP8266의 json값을 가져와 상태를 반영하는 방식이다. 그런데 ST의 DTH의 시간 함수 run이 정상적으로 작동하지 않을때가 있는데 그러면 데이터를 가져오지 않을수도 있다.그때는 refresh를 해주어야 한다. 물론 이런 경우는 아주 드물긴하다. 


3. 이산화탄소 센서는 캘리브레이션(보정)이 필요하다. (co2meter.com참조)


3-1. 신선한 야외공기에 장시간 노출하여 이 때값이 400ppm이 되도록 보정하는 방법

이는 주1회나 월1회 정도 신선한 공기에 노출하여 보정해주면 된다.


3-2. ABC (Automatic Baseline Calibration)을 이용하는 방법

 이는 위의 ESP Easy의 이산화탄소센서 설정페이지의 ABC항목에서 선택해주면 된다.

ABC방법은 일반적인 가정 처럼 주기적으로 사람이 없어서 센서가 이산화탄소 농도가 400ppm 인 신선한 공기에 노출된다는 가정하에 센서가 스스로 보정하는 방식이다. 이 방식은 며칠에 한번씩 신선한 공기에 노출된다는 전제하에 별다른 교정이 필요하지 않다.


4. 이산화탄소 농도를 아는것도 중요하지만 농도를 낮추는 방법이 더 중요하다.

이산화탄소 농도가 실내공기질을 평가하는 중요한 요소중의 하나지만 농도가 높을때 낮추는 방법은 일반가정에서는 실외공기를 유입하는 방법이 유일한 방법이다. 


 하지만 창문을 열어 환기를 시키는 것은 또 다른 공기질 저하를 가져온다. 거주지의 주변환경에 따라 다르겠지만 가장 큰 것은 미세먼지이다. 요즘은 꽃가루도 한몫한다. 


그래서 가장 좋은 방법은 전열교환기를 이용하여 필터링된 외부 공기를 실내 공기와 교환해주는 것이다. 최근에 지어진 아파트들은 대부분 전열교환기가 설치되어있는데 많은 사람들이 어떤 용도인지 모르거나 전기가 든다는 이유로 사용하지 않는 경우가 대부분이다. 


나처럼 전열교환기가 설치되어있지 않은 노후한 단독주택은 사실 창문을 여는 방법외에는 딱히 방법이 없다. 그러던 차에 ST까페의 플루님께서 샤오미 공기청정기를 이용해서 외부공기를 필터링하여 유입하는 DIY 도구를 소개해 주셔서 구매를 했는데 기대만큼 효과가 있었으면 좋겠다.


 


7. 다음 프로젝트


위의 장치들을 이용하여 아이들방에 놓을수 있도록 케이스를 만드는것과 아이들이 시각적으로 알수있게 하는것이다. 

posted by ShinJjang 2017. 5. 23. 11:12

 샤오미 ( Xiaomi ) 에서 새로나온, Aqara version* 도어/창문 센서(3개)와 온습도 센서(3개), 그리고 무선 스위치(4개)가 어제 오전에 도착했다. -왜 이렇게 많이 시킨건지 모르겠다. 기존 센서와 합치면 스위치를 제외하고 도어, 온습도, 모션센서만 20개가 넘게 되었다. 센서 부자다. 기쁜게 아니라 무계획의 결과에 가슴이 아프다.



*(아카라 버전에 대한 정확한 의미는 모르나 샤오미 홈 버전 출시이후에 나온 홈 자동화 디바이스들을 통칭하는 것으로 보인다. 그리고 Aqara버전은 Zigbee통신을 이용하기 때문에 샤오미 홈 게이트웨이를 통해 통합관리된다.)


 어제 오전에 받자 마자 급한 마음에 무선 스위치만 스마트싱스(Smartthings) 허브에 연결해 보았다. 연결**은 아무 어려움 없이 되었다. 하지만 스위치의 버튼을 눌러도 스마트싱스(Smartthings)에는 'Pushed'나 'Held'의 어떤 신호도 감지되지 않았다. 멘붕이 왔다.


**(일반적으로 나의 경우 샤오미 센서의 연결은 스마트싱스(Smartthings) 허브에 올라오는 Catcall의 Network ID를 이용해서 수동으로 디바이스를 등록해 주었는데, 새로나온 제품들은 운이 좋았던 건지 스마트싱스(Smartthings) APP에서 '+ Add a Thing'을 누르고 기다리면 자동으로 잡힌다. 각각의 센서와 스위치 모두 시간차는 있었지만 자동으로 'Thing'로 잡혔다. -일부러 기다린건 아니고 두번은 catcall 잡아서 수동등록하고 있는데 폰에서 자동으로 'Thing'으로 잡혔다. 그래서 한번은 그냥 기다렸는데 안올라와서 리셋버튼 누른후 허브 가까이 두었더니 자동으로 'Thing'이 잡혔다.) 



1. 샤오미 Aqara 무선 스위치(버튼)


일단 외관은 아래와 같다. 디자인 부분은 호불호가 다르니 개인의 판단에 맡기겠다. 개인적으로는 Aqara버전이 마음에 든다. 특히 2개 이상을 함께 사용할때 두개를 나란히 설치해도 이질감이 덜 하기 때문이다. 하지만 하나만 설치 하거나 놓아둔다고 생각하면 상황에 따라 다를것 같다. 



디자인적인 차이보다 나에게 더 눈에 들어오는 것은 알림LED와 리셋 버튼의 변화이다. 기존의 버튼은 아래 사진처럼 둘다 버튼 밑면에 배치 되어있다. 특히 리셋 버튼을 누르기 위해서는 가늘고 긴 핀(아이폰 유심트레이 토출용 핀과 같은)이 필요하다. 그러나 새로 나온 스위치는 알림 LED는 윗면(위 사진의 아랫쪽 작은 점)에 나와있고



리셋 버튼은 아래 사진 처럼 손으로도 누를수 있게 바뀌었다. 이점이 외형적 변화에서는 가장 마음에 든다. 




처음 새 스위치를 스마트싱스와 연결했을때, 연결은 문제가 없었으나 버튼을 눌러도 스마트싱스에서는 아무런 응답이 없었다. 멘붕이 왔다. 


답답한 놈이 우물 판다고 잘은 모르지만 그동안 본것은 있어서 Smartthing IDE에 올라 오는 Logs를 보았다. 한번 누르든 길게 누르든 아래와 같이 'on/off: 0'만 올라왔다. 두번 클릭하면 아무 로그도 올라오지 않았다.


아는건 없지만 무작정 디바이스 핸들러러(My Devices Handlers)를 열어보니 아래와 같이 되어있었다. 


코드는 정말 전혀모르지만 로그에 'on/off: 0'과 'on/off: 1'이 올라오는 시간 차를 이용해서 버튼의 작동을 판단한다는 것 정도는 알겠더라. 그래서 감으로 코드를 잘라 붙였다. 몇번의 실패끝에 아래와 같이 수정하니 'Pushed'는 잡힌다.




 기존 샤오미 무선 스위치(버튼)을 사용하는 분들은 아마 'Pushed'와 'Held'가 정확히 구분이 되지 않고 오작동 하는 것을 알고 있을것이다. 그래서 그런지 새 스위치는 샤오미 홈게이트웨이에 연결해도 'Click'과 'Double Click' 두 가지로만 인식되고 'Hold'는 되지 않는다. 샤오미에서도 오작동을 알고 새 버전에서는 'Hold'를 없앤것 같다. 


아래 사진은 SmartThings APP 화면이다.




아래 사진에 보듯이 버튼을 누르면 'Pushed'가 정상적으로 올라오는 것을 볼수 있다. 그리고 정확도에는 의문이 있지만 배터리량 또한 100%로 올라온다. 믿고싶은 수치다.





2. 샤오미 Aqara 온도/습도 센서


온도/습도 센서의 경우 둥근 모양에서 네모난 모양으로 바뀐것 외에 큰변화는 없어 보인다. 실제 성능의 개선이나 변화가 있는지는 알 길이 없다. 



공기 구멍이 조금 더 작다.


리셋버튼의 크기가 달라졌다.


아래 사진은 SmartThings APP 화면이다. 정상적으로 온도와 습도가 올라온다. 그런데 추가로 뭔가 다른 내용이 올라오는것 같다. 무슨 내용인지 알수는 없다. 





아래 두장의 사진은 같은 장소에 구모델(위사진-Xiaomi Home에 연결)과 Aqara모델(아래사진-ST에 연결)의 온습도를 비교한 것이다. 온도는 같으나 습도가 2%정도 차이가 난다. 어느게 더 정확한지 알수는 없다.




위의 사진에 배터리는 올라오지 않았지만 지금은 배터리가 올라와있다. 그러나 25%이다. 믿고 싶지 않은 수치다.



3. 샤오미 Aqara 도어/창문 열림닫힘 센서


일단 도어 센서는 개인적으로 둥근것 보다 네모난 것이 더 낫다. 문이나 창문도 사각형에 표면이 평면이기 때문에 센서도 네모난 것이 개인적으로 더 안정감이 있다. 

그런데 다른 회사제품에 비하면 여전히 작지만 크기가 이전보다 아주 조금 이지만 커졌다. 작아지지는 못할 망정 더 커지다니... 아래 사진을 보면 더 크게 느껴진다.  


사진으로 보면 크기가 눈에 뛰게 커진것 같다. 그래서 글을 쓰다 정확하게 비교를 해보았다. 

결론적으로 두께는 본체와 마크네틱부분 모두 똑같다. 이전 제품이 곡면이라 두께가 더 얇아 보이지만 뒤집어서 높이를 비교해보면 완전 똑같다. 


아래 사진으로 볼때 본체의 경우 세로와 높이는 같고 가로만 1mm정도 크다. 마그네틱부분은 높이는 같고 Aqara버전이 세로는 1mm정도 작고 가로는 1mm정도 크다. 즉 보기와 다르게 거의 같다는 이야기다.


아래 사진은 SmartThings APP 화면이다. 열림과 닫힘 이전 제품과 거의 같은 속도로 인식된다. 

사진을 찍을때 배터리가 올라오지 않았지만 지금은 배터리가 올라왔다. 1%이다. 믿기 싫은 수치다. 역시 배터리 수치는 믿지 말아야 겠다.




결론


- 전반적으로 디자인 외에 큰 차이는 없다.


- 가격도 큰차이가 없다. 전체적으로 보면 오히려 싸다.

    기어베스트 기준 가격은 아래와 같다.


                   구버전    Aqara버전

도어 센서     $7.89     $6.99

온습도 센서  $11.99    $9.99

무선 스위치  $6.89    $7.99



- 쿠쿠님 처럼 코드를 만질수 있으면 좋겠다.

- 제품을 지를때 계획을 가지고 지르자. 예전보다 좋아졌지만 아직 멀었다.



posted by ShinJjang 2017. 5. 15. 18:59

1. 디자인 수정


처음 모션센서용 거치대를 만들어서 글을 쓴 후에 이리 저리 조작해 보면서 내구성의 아쉬움을 느꼈다. 작게 만드는데 초점을 두다 보니 3D프린터의 결과물에 쉽게 크랙이 생겼다. 그래서 연결부위를 조금 사이즈를 다르게 해서 출력하고 보완해 보았다. 


그래서 아래의 사진과 같이 모두 5개의 디자인이 나왔다. 



첫번째, 두번째는 처음 디자인이 었고 내구성의 문제로 패스. 

그 이후로 세번째, 다섯번째, 네번째 순서로 디자인을 변경해서 출력해 보았다. 


그 결과 3번째는 내구성에서 미달이었고, 5번째는 내구성은 좋으나 조인트부분이 너무 커서 미관상 마음에 들지 않았다.


그래서 최종적으로 4번째 모델로 디자인을 수정 출력하였다. 다행히 크기와 내구성, 디자인 면에서 모두를 만족했다. 



2. 현관 입구 설치


아래 사진은 실제 설치를 위해 샤오미 센서를 거치대에 끼운 모습이다. 





현관에 센서등 자동화를 위해 천장에 설치 했다.


샤오미 모션센서의 작동 범위를 고려하여 설치 했는데 거실에 지나 다녀도 센서가 인식 한다. 그래서 3번의 각도 조절을 통해 정확한 위치를 설정했다. 




거치대를 만드는 과정을 통해 3D 디자인을 할수있게 되었고 좋은 프로그램도 알게 되었다. 

디자인을 수정하고 출력하고 하는 과정이 너무 길고 지루하다.

언제든지 쉽게 위치 변경이 가능하고 모션 센서의 베터리 교체시도 편하다.

최종 모델은 상당히 마음에 든다.


최종모델 파일

Xiaomi_motion_holder_ball_Lar70.stl

Xiaomi_motion_wall_socket_lar 70.stl