Hardware | 공기질 측정용 MiCS-6814 센서를 사용해 보자 - 1

|

1. 공기


사람이 건강하게 살아가는데 필요한게 뭘까 라고 생각했을 때, 육체적 관점에서 보면 아래와 같다고 생각합니다.


- 깨끗한 공기

- 깨끗한 물

- 오염되지 않은 먹거리

- 쾌적한 주거 환경

- 충분한 수면

- 충분한 운동


예전에는 당연한 것이였지만, 이 시대에 와서는 가장 돈을 많이 들여야 하는 항목들이 되었습니다.

과거로 회기하는데 드는 비용이죠.


자고로, 산업혁명이 일어나 지구가 오염되기 전 상황으로 되돌아 가는 것이, 육체적인 건강한 삶 되겠습니다. (나의 생각)

나만 잘한다고 되는건 아니라 요원하긴 하지만...


이 arduino 나 sensor 를 가지고 노는 이유도, 전자적인 지식을 습득해 나가는 것에 대한 희열 말고도,

위의 "건강한 삶을 보낼 수 있는 환경" 에 대한 추구가 다른 주된 이유이기도 합니다.


그래서, "깨끗한 공기" 가 목적이지만, 그 이전에 현재 "어떤 공기" 속에서 살고 있는지 알아보고 싶어졌습니다.

일전에 공기질의 척도만 나타내 주는 센서를 가지고 놀아본 적이 있습니다.


* Hardware | ZP07-MP901 공기질 측정 센서

https://chocoball.tistory.com/entry/Hardware-ZP07-MP901-air-quality-sensor


다만 위의 센서는 공기의 성분까지는 알려주지 못해 그닥 쓸모가 없었죠.





2. 센서


기체를 알아보는 sensor 는 꽤 많이 나와 있습니다. 대표적으로는 MQ series 가 있지요.





이 MQ 시리즈를 이용하면 왠만한건 다 잡아 낼 수 있을 것 같습니다.


다만, 이 MQ 시리즈의 단점이 히터를 통해서 기체를 태우고 그에 따른 반응으로 측정을 하는 방법인지라,

가스나 화기를 취급하는 곳에서는 발화의 원인이 될 수 있습니다. 그래서 인화 물질을 취급하는 공장이나 병원에서는 사용되지 못합니다.


그러던 중, MiCS-6814 라는 센서의 존재를 알게 됩니다.



이 센서는 metal oxide = 기체에 의한 금속 산화도 에 따른 저항 값을 가지고 측정하므로, MQ 시리즈보다는 더 안전합니다.


SGX-CMOS-Gas-Sensor-MiCs-6814.pdf

pollutant-visualizer.pdf


잡아낼 수 있는 기체들은 다음과 같다고 하네요.


• Carbon monoxide CO 1 – 1000ppm

• Nitrogen dioxide NO2 0.05 – 10ppm

• Ethanol C2H5OH 10 – 500ppm

• Hydrogen H2 1 – 1000ppm

• Ammonia NH3 1 – 500ppm

• Methane CH4 >1000ppm

• Propane C3H8 >1000ppm

• Iso-butane C4H10 >1000ppm


하나의 센서 chip 으로 많은 성분을 잡아 낼 수 으며, 소형인지라,

MQ 시리즈를 구입해서 실험 해보기 보단, 이놈으로 결정하였습니다.




3. Grove - Multichannel Gas Sensor


MiCS-6814 를 활용하기 위해 가장 좋은 방법은,

MiCS-6814 를 활용한 breakout board 인 Grove 사의 Multichannel Gas Sensor 를 구입하는 것 입니다.


* Grove - Multichannel Gas Sensor

http://wiki.seeedstudio.com/Grove-Multichannel_Gas_Sensor/



Arduino 와의 통신도 I2C로 이루어 지며, 센서의 3개 측정값 - CO, NH3, NO3 - 의 조합으로 다른 기체도 유추해 놓는것 같습니다.

거기에 정확하지는 않지만, 어느정도 calibration 도 잡혀 있을 것이구요.


다만, 항상 그렇 듯, 가격이 문제 입니다. 요즘은 팔지도 않거니와, 실 구매 가격은 약 10만원 정도.

나중에 혹시 PCB 라도 꾸며서 만들 수 있으면 만들어 보고자, 여기에 회로 관련 정보를 올려 놓습니다.


Grove-Multichannel_Gas_Sensor_v1.0_sch.pdf

Grove-Multichannel_Gas_Sensor_v1.0_eagle_files.zip

1143_Datasheet-MiCS-6814-rev-8.pdf


* Firmware (Seeed-Studio/Mutichannel_Gas_Sensor)

https://github.com/Seeed-Studio/Mutichannel_Gas_Sensor




4. 구입


눈물을 뒤로 하고, AliExpress 로 향합니다.


* 1pcs CJMCU- MICS-6814 Air Quality CO VOC NH3 Nitrogen Oxygen Gas Sensor

- https://www.aliexpress.com/item/32762216430.html



저를 위로해 주는 기교적 착한 가격. 거진 3만원돈 이지만, 과감하게 투자해 봅니다. (6개월 고민... ㅠㅠ)



대단한건 아니지만, 도착했을 시 꽤 기뻤습니다. 이제야 이런 고급진 센서 써보는구나~ 라고.



정말 단순한 구조. 레귤레이터도 없어...



뒷면입니다.





5. 연결


어떻게 arduino 와 연결하여, 각 기체의 값을 알아낼까 찾아보던 중 아래 사이트를 발견합니다.


* Wiring MiCs 5524 / 6814 CMOS MEMS Gas Detection Sensor

https://www.14core.com/wiring-mics-5524-6814-cmos-mems-gas-detection-sensor/



걍 analog pin 에 직결하라고 하네요?

제가 구매한 breakout 보드에는 MOSFET 도 없고 그렇지만, 일단 아래 소스를 가지고 돌려 봅니다.


int NH3 = 0;
int NO2 = 1;
int CO = 2;

void setup() {
	pinMode(NH3, OUTPUT);
	pinMode(NO2, OUTPUT);
	pinMode(CO, OUTPUT);
	
	Serial.begin(9600);
	Serial.println("MiCS 6814 simple test");
}
 
void loop() {
	int sense_val_1 = analogRead(NH3);
	int sense_val_2 = analogRead(NO2);
	int sense_val_3 = analogRead(CO);
	
	Serial.print("NH3 : ");
	Serial.print(sense_val_1);
	Serial.print(" \t NO2 : ");
	Serial.print(sense_val_2);
	Serial.print(" \t CO : ");
	Serial.println(sense_val_3);
	
	delay(1000);
}


Serial Monitor 로 값을 확인해 보고, EXCEL 로 그래프를 그려 봅니다.



음... 뭔가 알아보기 힘드네요. 각 기체의 값이 서로 비슷하게 나와버립니다.






6. 저항을 추가하여 연결


아래 사이트에서 이 아저씨가 한 작업은,

측정값이 현실적으로 되려면 analog pin 에 입력되는 값은, 3.3V 를 저항을 거쳐서 연결하라고 합니다.

(이론적으로는 50K ohm 이 좋으나, 제품으로 나오는 저항은 47K ohm 이 제일 가까운 값)


* ESP32, PMS5003, BME280, MICS6814 Sensor Build

http://kstobbe.dk/2019/02/16/esp32-pms5003-bme280-mics6814-sensor-build/



또한, 아래 arduino forum 에서는, 각 단자에 47K ohm 통해 연결하는 전원은 3.3V 보단, 5V 를 먹이라고 하네요.

아마도 MiCS-6814 구동 전압이 5V 임을 감안하면, 동일한 입력 값이 좀더 예민한 값의 도출에 좋다는 이야기 같습니다.

(솔직히 잘 모름)


* CJMCU-6814 adapter board with MICS-6814 CO/NH3/NO2-sensor

https://forum.arduino.cc/index.php?topic=619992.0


Tested the sensor with the code and schematic. Connected 47k to 3 gases and 5v rather than 3v. The results seem to reflect well to CO. Have not tested NO2 and NH3.


바로 따라해 봅니다.



Serial Monitor 에서 측정된 값이구요.



EXCEL 에서 그래프화 해 봤습니다.

오오오오오, 뭔가 나오네요.



가능한 24시간동안 예열하도록 안내가 되어 있듯이, 예열 구간동안 특정 값으로 꾸준히 변화되는 것을 알 수 있습니다.

위의 빨간 표시한 부분은, 시험삼아 숨을 한번 불어본 구간입니다. 변화를 잘 감지하는군요!



하룻밤 측정해본 결과 입니다.

각 기체의 상관 관계와 실내 공기 내에서의 NH3, NO2, CO 의 값은 이정도인 듯 합니다.




7. 15bit ADC + 저항을 추가하여 연결


Arduino 내장 10 bit ADC 를 가지고 측정한 결과 보다는 15 bit ADC 가 훨씬 정확합니다.

아래 포스트 이후로, 향후 모든 측정값은 더 높은 ADC 를 통하라고 배웠습니다.


* Hardware | ADS1115 16bit 4채널 ADC 를 사용해 보자

https://chocoball.tistory.com/entry/Hardware-ADS1115-16bit-4channel-ADC


ADS1115 이 입력값을 받구요.



소스를 ADS1115 용으로 살짝 수정해 줍니다.

#include "Wire.h"
#include "Adafruit_ADS1015.h"
 
Adafruit_ADS1115 ads(0x48);
 
void setup(void) {
    Serial.begin(115200);
    ads.begin();
}
 
void loop(void) {
    int16_t adc1; // CO
    int16_t adc2; // NH3
    int16_t adc3; // NO2
     
    adc1 = ads.readADC_SingleEnded(1);
    adc2 = ads.readADC_SingleEnded(2);
    adc3 = ads.readADC_SingleEnded(3);

    Serial.print("NH3 : ");
    Serial.print(adc2);
    Serial.print(" \t NO2 : ");
    Serial.print(adc3);
    Serial.print(" \t CO : ");
    Serial.println(adc1);
     
    delay(1000);
}


Serial Monitor 에서 확인한 값 들 입니다.

확실히 뭔가 엄청나게 숫자가 불어나 있습니다.



EXCEL 을 통해서 그래프화 시켜 봅니다.



패턴은 47K ohm 저항 꼽고 측정할 때와 비슷하게 나왔습니다.


다만, 높은 ADC 를 통하여 해상도는 좋아졌지만,

어떤 기준값으로 나누어야 할지 알지 못하기 때문에, trend 만 알 수 있지 정확한 수치화까지는 진행하지 못했습니다.




8. Next Step


이런 공기질 측정에서의 수치화는 calibration 인데,

그렇게 하려면 실제 실험실 환경을 통해서, 실제 기체를 가지고 기준을 잡아야 합니다.


위의 방법이 현실적으로 불가능 하기에,

다음에 할 것으로는 Grove - Multichannel Gas Sensor 의 breakout 을 만들어서 (아님 구입해서),

제조사인 SeeedStudio 의 경험이 녹아들어가 있는 firmware 와 소스코드를 가지고 수치화 해보는 것 이겠습니다.


공기 질에 관한 센서는 몇 개가 더 있습니다. 계속 놀아보도록 하지요.

To Be Continued...


And