Co2 이산화탄소 측정기 만들기
이산화 탄소 측정기를 만들어 볼까 합니다.
국내에 있는 제품들중 5만원대 제품들은 대부분 TVOC 센서를 이용해 Co2 값을 추정하는 시스템이 대부분입니다.
제대로 된 Co2 센서를 가진 측정기를 구매하려면 10만원 가까이 줘야하기 때문에 직접 제작하기로 했습니다.
부품:
1. Node mcu 1.0 5800원
2. mh-z19b 이산화탄소 센서 28000원
3. oled 0.96" 128x64 7300원
4. dht-11 온습도센서 2500원
5. tp4056 배터리 충전 모듈(충전중 사용가능) 900원
6. 1000mah 배터리 6700원
기타 비용 제외하고 51200원입니다.
우선 디바이스마트에서 부품을 구매하고 제작을 합니다.
우선 브레드보드에 테스트를 다 하고 진행을 했습니다.(생략)
보드는 나중에 IoT로 확장이 가능한 Node mcu로 선택을 했습니다.
Wemos d1 mini로 처음엔 생각을 했으나, GND 핀의 개수가 모자라서 Node mcu로 진행을 했습니다.
사용한 핀번호는 node mcu 기준 다음과 같습니다.
D1(GPIO5) -> mhz19b Tx
D2(GPIO4) -> mhz19b Rx
D4(GPIO2) -> OLED SCK(SCL)
D5(GPIO14) -> OLED SDA
Tx(GPIO1) -> DHT 11 S
OLED도 이렇게 납떔 해주구요
배터리도 양면테이프로 붙여주고, 배터리 충전 모듈도 납땜으로 연결해줍니다.
배터리 충저모듈은 tp4056 중 충전중에도 출력 사용이 가능하고 type C 포트를 가진걸로 선택했습니다.
온습도 센서도 납떔을 해줍니다. 뒷면 PCB에도 양면테이프로 고정을 해주었습니다.
이산화탄소 센서도 납땜해줍니다.
이산화탄소 센서는 양면테이프가 너덜너덜해서 배터리에 캡톤테이프를 붙이고 그 위에 순간접착제로 붙였습니다.
그후 node mcu 보드 위에 충전모듈을 순간접착제로 붙이고
필통에 넣어다녀도 쇼트가 일어나지 않도록 캡톤테이프로 감아서 절연하여 마무리 합니다.
만든김에 대충 하나더 만들어봤습니다. 이건 납땜하기 귀찮아서 그냥 점퍼케이블 채로 테이프 붙여서 마무리 했습니다.
보드에 코드를 업로드 하여 완성시켜줍니다. 참 쉽죠?
코드는 다음과 같습니다. 최적화된 코드는 아니라 필요하시면 수정해서 사용하세요.
(라이브러리는 라이브러리 매니저에서 필요한건 다운받으셔야 합니다. MH-Z19 라이브러리는 Jonathan Dempsey의 것을 사용.)
아 그리고 배터리를 이용하는만큼 on/off 기능이 있어야해서 node mcu의 deepsleep 기능을 이용했습니다.
node mcu의 reset버튼(좌)과 flash버튼(우)을 이용하여, 오른쪽 버튼 입력시 off, 왼쪽 버튼 입력시 on 하도록 구성하였습니다.
중간에 치킨이 와서 먹고했습니다. ㅎㅎ..
이산화탄소 센서는 데이터시트를 확인했을때 0~5000ppm범위에 대략 50+3% ppm의 오차로
대기중 이산화탄소 농도가 대략 400ppm으로 400ppm 기준 최대로는 대략 62ppm 정도의 오차를 가질 것으로 예상됩니다.
또한 이산화탄소 센서는 켈리브레이션(보정) 작업을 해야하는데,
소프트웨어를 이용한 캘리브레이션 방법과 (ABC calibration), 하드웨어 캘리브레이션 방법이 있습니다.
소프트웨어 방식은 ABC calibration은 24시간 주기로 최저점을 영점으로(대기중 이산화탄소 농도인 400ppm)으로 설정하는 방법입니다. 자동으로 된다는점이 장점이지만, 24시간 내에 1회이상 환기가 필요하며, 환기가 불가능한 공간에서는 24시간 이후에 값이 부정확할 가능성이 있습니다.
제가 사용한 방식은 하드웨어 캘리브레이션 방법으로, 이산화 탄소 센서의 HD핀을 GND로 7초 이상 입력하게 되면 그 때의 농도를 영점으로 캘리브레이션 하게 됩니다.
이후 코드에서는 myMHZ19.autoCalibration(false);로 소프트웨어 캘리브레이션을 꺼준다음 업로드하여 다시 캘리브레이션이 되는것을 방지했습니다.
이후 실내를 1시간 이상 환기 후 캘리브레이션 완료 하여 캘리브레이션 작업을 마쳤습니다.
온습도 센서는 DHT 11모델을 사용했는데 온도 오차는 ±2도, 습도 오차는 ±5% 로 나와있는데
다이소 5000원짜리 온습도계와 같은 스펙입니다.
몇천원 더 비싼 DHT 22모델을 사용하면 온도 오차는 ±0.5도, 습도 오차는 ±2%로 좀더 정확한 값을 얻을 수 있습니다.
다시 주문할까 했지만, 다음기회에 업그레이드 하기로 했습니다.
만들어진 측정기 두대의 값을 비교해보면, Co2 오차는 67 ppm으로 나타났습니다. 아까 살펴본 데이터시트 상으로의 오차인 62 ppm의 2배인 대략 124ppm이상으로 나타날 수 있을것으로 예상했습니다.
또한 센서마다의 편차도 있고, 손으로 잡으면 센서에 영향을 미치는것을 고려하면, 정확한 값을 얻기보다는 대략적인 값을 얻는 용도로 사용하면 될것같습니다.
이상입니다.