dinist

아두이노 ESP8266 UNO 보드에 MQ-5센서 사용하기 (Arducam) 본문

아두이노

아두이노 ESP8266 UNO 보드에 MQ-5센서 사용하기 (Arducam)

dinist 2020. 7. 30. 00:30

졸업작품당시 사용했던 MQ-5를 다시 사용해보자.

 

이것이 MQ-5 센서다!

MQ-5 센서는 센서를 가열시켜 공기중에 LNG, LPG, 프로판, 이소 부탄 등 가스가 센서에 달라 붙게 되면, 저항값이 변화 하여 가스량을 측정 하는 방식이다.

 

MQ-5에 대한 데이터 시트도 있으니 확인해보는게 좋다.

https://www.parallax.com/sites/default/files/downloads/605-00009-MQ-5-Datasheet.pdf

 

데이터 시트를 보다보면 이 센서는 안전을 위한 장치보다는 가스를 확인하는 정도로만 사용하는것이 좋아보인다.

안전을 위한 수준까지는 사용할 용도는 아닌듯하다.

 

아두이노와 연결은 어떻게 할까?

A0는 아두이노의 A0에 연결하고 ,GND는 아두이노 GND에, VCC는 아두이노 VCC에 연결한다.

 

이후 다음 사이트를 참고하여 센서의 작동여부를 확인해보자

http://www.elecrow.com/wiki/index.php?title=Analog_Smoke/LPG/CO_Gas_Sensor(MQ2)

 

Analog Smoke/LPG/CO Gas Sensor(MQ2) - Elecrow

Description The Analog Smoke/LPG/CO Gas Sensor(MQ2) module utilizes an MQ-2 as the sensitive component and has a protection resistor and an adjustable resistor on board. The MQ-2 gas sensor is sensitive to LPG, i-butane, propane, methane, alcohol, Hydrogen

www.elecrow.com

이 사이트에서 MQ센서를 아두이노에 어떻게 코딩해야하는지에 대한 설명이 나온다. 위 링크에서는 MQ-2로 설명하지만 mq-5와 mq-2는 탐지할 수 있는 가스의 종류와 ppm 농도 범위의 차이 정도만 있고 나머지는 비슷하므로 위 코드방식을 활용하여 값을 측정했다.

 

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  float sensor_volt; 
  float RS_air;                 //  Get the value of RS via in a clear air
  float R0;                     // Get the value of R0 via in H2
  float sensorValue;
 
/*--- Get a average data by testing 100 times ---*/   
    for(int x = 0 ; x < 100 ; x++)
  {
    sensorValue = sensorValue + analogRead(A0);
  }
  sensorValue = sensorValue/100.0;
/*-----------------------------------------------*/
 
  sensor_volt = sensorValue/1024*5.0;
  RS_air = (5.0-sensor_volt)/sensor_volt; // omit *RL
  R0 = RS_air/10.0;                       // The ratio of RS/R0 is 10 in a clear air
 
  Serial.print("sensor_volt = ");
  Serial.print(sensor_volt);
  Serial.println("V");
 
  Serial.print("R0 = ");
  Serial.println(R0);
  delay(1000);
}

위 사이트에서 R0값을 구하기위한 코드를 가져온것이다. 

센서를 연결하고 R0를 측정하기 위한 코드를 업로드 한 후 5분동안 기다린 후 (센서가 가열되는 시간)

 

시리얼 모니터에 표시되는 R0값을 다음 소스코드의 R0에 입력해준다.

void setup() {
  Serial.begin(9600);
}
 
void loop() {
 
  float sensor_volt;
  float RS_gas; // Get value of RS in a GAS
  float ratio; // Get ratio RS_GAS/RS_air
  int sensorValue = analogRead(A0);
  sensor_volt=(float)sensorValue/1024*5.0;
  RS_gas = (5.0-sensor_volt)/sensor_volt; // omit *RL
 
  /*-Replace the name "R0" with the value of R0 in the demo of First Test -*/
  ratio = RS_gas/R0;  // ratio = RS/R0 
  /*-----------------------------------------------------------------------*/
  Serial.print("sensor_volt = ");
  Serial.println(sensor_volt);
  Serial.print("RS_ratio = ");
  Serial.println(RS_gas);
  Serial.print("Rs/R0 = ");
  Serial.println(ratio);
  Serial.print("\n\n");
  delay(1000);
}

이후 업로드를 해보면 값이 시리얼 모니터에 출력 될 것이다.

 

Rs/R0를 살펴보자 8~9에 가까운 수치이다.

이제 센서에 라이터의 가스를 노출시켜보자.

 

Rs/R0의 값이 0에 가까워지고 있다.

 

그래프를 보면 Rs/R0의 값이 0.1에 가까워질수록 ppm의 수치도 높은것을 알 수 있다.

10에 가까울때는 공기의 상태라는 것을 알 수 있다.

 

이렇게 MQ-5를 활용하여 가스를 확인하는것까지 해보았다.