본문 바로가기
모두의 아두이노 센서/아두이노 센서 (공기)

MQ2 아두이노 가스 센서 (LCD16X2 키패드실드)

by 로니킴 2021. 5. 26.


본 절은 [MQ-2] 아두이노 센서를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. 아두이노 센서의 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. 아두이노와 센서를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다. 

 

목차

     

     

     


    MQ2 아두이노 가스 센서 (LCD16X2 키패드실드)

     

     

     

     

     

     

     


    MQ-2 센서란?

    MQ-2 센서는 가스를 측정하는 센서다. 특정 가스(LPG, 알코올, 프로판, 수소, CO, 심지어 메탄 등 가스)를 측정하거나 감지 할 때 MQ 시리즈 가스 센서 가 가장 일반적으로 사용되는 센서다. 센서는 모듈로 구매하거나 센서만으로 구매할 수 있다. 가스의 존재만을 감지 (ppm을 측정하지 않음)하려는 경우 연산 증폭기 비교기와 디지털 출력 핀이 함께 제공되므로 모듈로 구입할 수 있다. 그러나 가스의 ppm을 측정 할 계획이라면 센서 만 (모듈없이) 구입하는 것이 좋다.

     

     

     

    다음은 센서의 데이터시트 파일이다. 

    MQ2 Gas sensor.pdf
    0.18MB

     

     

     

     


     

    MQ-2 아두이노 센서 특징

    MQ-2 센서의 특징은 다음과 같다. 

     

    • 작동 전압은 + 5V
    • LPG, 알코올, 프로판, 수소, CO 및 메탄을 측정하거나 감지하는 데 사용할 수 있다.
    • 아날로그 출력 전압 : 0V ~ 5V
    • 디지털 출력 전압 : 0V 또는 5V (TTL 로직)
    • 예열 시간 20 초
    • 디지털 또는 아날로그 센서로 사용 가능
    • 전위차계를 사용하여 디지털 핀의 감도를 변경할 수 있다.

     

     


    MQ 센서 시리즈

    MQ 센서는 다음과 같다. 

     

    MQ-2 Methane, Butane, LPG, Smoke
    MQ-3 Alcohol, Ethanol, Smoke
    MQ-4 Methane, CNG Gas
    MQ-5 Natural gas, LPG
    MQ-6 LPG, butane
    MQ-7 Carbon Monoxide
    MQ-8 Hydrogen Gas
    MQ-9 Carbon Monoxide, flammable gasses
    MQ131 Ozone
    MQ135 Air Quality
    MQ136 Hydrogen Sulphide gas
    MQ137 Ammonia
    MQ138 Benzene, Toluene, Alcohol, Propane, Formaldehyde gas, Hydrogen
    MQ214 Methane, Natural Gas
    MQ216 Natural gas, Coal Gas
    MQ303A Alcohol, Ethanol, smoke
    MQ306A LPG, butane
    MQ307A Carbon Monoxide
    MQ309A Carbon Monoxide, flammable gas

     


    MQ-2 센서 동작 원리

    MQ-2 센서를 사용하여 가스를 감지하는 것은 매우 쉽다. 센서 값을 얻기 위해 디지털 핀 또는 아날로그 핀을 사용할 수 있다. 5V로 모듈에 전원을 공급하기 만하면 모듈의 전원 LED가 켜지고 가스가 감지되지 않으면 출력 LED가 꺼진 상태로 유지되어 디지털 출력 핀이 0V가 된다.

     

    또한 센서는 실제로 사용하기 전에 예열 시간 (위의 기능에 언급 됨) 동안 계속 켜져 있어야 한다. 감지하려는 가스에 센서를 노출하면 출력이 높아질 때까지 전위차계를 사용하지 않으면 디지털 핀과 함께 출력 LED가 표시된다.

    센서가  특정 가스 농도에서 가스에 노출 될 때마다 디지털 핀이 높고 (5V) 그렇지 않으면 낮게 (0V) 유지된다.

    아날로그 핀을 사용하여 동일한 결과를 얻을 수도 있다. 아두이노를 사용하여 아날로그 값 (0~5V)을 읽을 수 있다.

    측정된 센서 값은 센서가 감지하는 가스의 농도에 정비례한다. 센서 값으로 실험하고 센서가 다른 농도의 가스에 어떻게 반응하는지 확인하고 그에 따라 프로그램을 개발할 수 있다.

     

     

    [ppm 측정 방법]

    센서의 값에 대한 정확도를 찾고 있다면 PPM을 측정하는 것이 가장 좋은 방법이다. 또한 하나의 가스를 다른 가스와 구별하는 데 도움이 될 수 있다. 따라서 PPM을 측정하기 위해 모듈을 직접 사용할 수 있다. 

     

    MQ 센서를 사용하여 PPM을 측정하는 절차는 동일하지만 사용되는 MQ 센서 유형에 따라 몇 가지 상수 값이 달라진다.다. 기본적으로 데이터 시트에 제공된 (Rs / Ro) VS PPM 그래프를 살펴볼 필요가 있다

     

     

    Ro 값은 신선한 공기의 저항 값이고 Rs 값은 가스 농도의 저항 값이다. 먼저 신선한 공기에서 Ro 값을 찾아 센서를 보정 한 다음 해당 값을 사용하여 공식을 사용하여 Rs를 찾아한다.

    Rs와 Ro를 계산하면 비율을 찾은 다음 위에 표시된 그래프를 사용하여 해당 특정 가스에 대한 PPM의 등가 값을 계산할 수 있다.

     

     

     


    MQ-2 센서 구입하기

    [MQ-2 센서]는 알리익스프레스, 네이버 쇼핑몰, 아마존 등에서 센서를 구입할 수 있다

     

     

     

     

     


     

    MQ-2 센서 하드웨어 연결

    다음과 같이 MQ-2 아두이노 센서를 연결할 수 있다. 

     

     

     

     

     

     [핀 배열]

    1 Vcc 핀은 모듈에 전원을 공급하며 일반적으로 작동 전압은 + 5V
    2 Gnd 모듈을 시스템 접지에 연결하는 사용
    3 Do 전위차계를 사용하여 임계 값을 설정하여이 센서를 사용하여이 핀에서 디지털 출력을 얻을 수도 있다.
    4 Ao 가스의 강도에 따라 0~5v 아날로그 전압을 출력

     


     

    MQ-2 센서 소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 아두이노 센서 소스코드를 코딩할 수 있다. 

     

    센서 코드는 다음과 같다. 

    /**
       MQ-2 Gas Sensor
    
       @ 모두의 아두이노 환경 센서 (Arduino Sensors for Everyone)
          https://book.naver.com/bookdb/book_detail.nhn?bid=18030644
       @ author STEAMEDU123 <steamedu123@gmail.com>
    */
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    #define MQ_PIN                       (1)
    #define RL_VALUE                     (5)
    #define RO_CLEAN_AIR_FACTOR          (9.83)
    
    #define CALIBARAION_SAMPLE_TIMES     (50)
    #define CALIBRATION_SAMPLE_INTERVAL  (500)
    
    #define READ_SAMPLE_INTERVAL         (50)
    #define READ_SAMPLE_TIMES            (5)
    
    #define GAS_LPG                      (0)
    #define GAS_CO                       (1)
    #define GAS_SMOKE                    (2)
    
    float LPGCurve[3]    = {2.3, 0.21, -0.47};
    float COCurve[3]     = {2.3, 0.72, -0.34};
    float SmokeCurve[3]  = {2.3, 0.53, -0.44};
    float Ro = 10;
    
    int gasLpgPPM = 0;
    int gasCoPPM = 0;
    int gasSmokePPM = 0;
    
    void setup()
    {
      lcd.begin(16, 2);
      initMQSensor();
    }
    
    void loop()
    {
      MQdetect();
      displayLCD();
    }
    
    void initMQSensor() {
      lcd.setCursor(0, 0);
      lcd.print("MQ-2 Gas Sensor");
      lcd.setCursor(0, 1);
      lcd.print("Calibrating...");
      Ro = MQCalibration(MQ_PIN);
    
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Calibration is");
    
      lcd.setCursor(0, 1);
      lcd.print("Ro=");
      lcd.print(Ro);
      lcd.print("kohm");
      delay(3000);
      lcd.clear();
    }
    
    void MQdetect() {
      gasSmokePPM = MQGetGasPercentage(MQDetect(MQ_PIN) / Ro, GAS_SMOKE);
      gasCoPPM = MQGetGasPercentage(MQDetect(MQ_PIN) / Ro, GAS_CO);
      gasLpgPPM = MQGetGasPercentage(MQDetect(MQ_PIN) / Ro, GAS_LPG);
    
      if (gasSmokePPM < 0) gasSmokePPM = 0;
      if (gasCoPPM < 0) gasCoPPM = 0;
      if (gasLpgPPM < 0) gasLpgPPM = 0;
    
      //  if (gasSmokePPM > 10000) gasSmokePPM = 10000;
      //  if (gasCoPPM > 10000) gasCoPPM = 10000;
      //  if (gasLpgPPM > 5000) gasLpgPPM = 5000;
    }
    
    
    
    float MQResistanceCalculation(int raw_adc)
    {
      return ( ((float)RL_VALUE * (1023 - raw_adc) / raw_adc));
    }
    
    float MQCalibration(int mq_pin)
    {
      float val = 0;
    
      for (int i = 0; i < CALIBARAION_SAMPLE_TIMES; i++) {
        val += MQResistanceCalculation(analogRead(mq_pin));
        delay(CALIBRATION_SAMPLE_INTERVAL);
      }
    
      val = val / CALIBARAION_SAMPLE_TIMES;
      val = val / RO_CLEAN_AIR_FACTOR;
    
      return val;
    }
    
    float MQDetect(int mq_pin)
    {
      int i;
      float rs = 0;
    
      for (i = 0; i < READ_SAMPLE_TIMES; i++) {
        rs += MQResistanceCalculation(analogRead(mq_pin));
        delay(READ_SAMPLE_INTERVAL);
      }
    
      rs = rs / READ_SAMPLE_TIMES;
      return rs;
    }
    
    int MQGetGasPercentage(float rs_ro_ratio, int gas_id)
    {
      if ( gas_id == GAS_LPG ) {
        return MQGetPercentage(rs_ro_ratio, LPGCurve);
    
      } else if ( gas_id == GAS_CO ) {
        return MQGetPercentage(rs_ro_ratio, COCurve);
    
      } else if ( gas_id == GAS_SMOKE ) {
        return MQGetPercentage(rs_ro_ratio, SmokeCurve);
      }
    
      return 0;
    }
    
    int  MQGetPercentage(float rs_ro_ratio, float *pcurve)
    {
      return (pow(10, ( ((log(rs_ro_ratio) - pcurve[1]) / pcurve[2]) + pcurve[0])));
    }
    
    
    void displayLCD() {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("SMOKE:");
      lcd.print(gasSmokePPM);
      lcd.print("ppm");
    
      lcd.setCursor(0, 1);
      lcd.print("CO:");
      lcd.print(gasCoPPM);
      lcd.print(" LPG:");
      lcd.print(gasLpgPPM);
      delay(200);
    }
    
    
    

     

     

     


     

    MQ-2 센서 동작확인

    하드웨어 연결, 소프트웨어 코딩이 완료되면 다음과 같이 동작 화면을 확인할 수 있다. 

     

    ------------------------------------------------------ 
    개발환경 : WINDOWS 10 
    아두이노 IDE : 1.8.13 
    ------------------------------------------------------ 
    01 연결
     - 아두이노와 PC 연결 
     - 아두이노 IDE 실행 
     - 메뉴 → 툴 → 보드:아두이노 UNO 확인 
      - 메뉴 → 스케치 → 확인/컴파일 

    02 컴파일 확인 

    스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행한다.

     


    03 아두이노 우노 업로드 

    컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 한다. 


    04 동작 확인

    다음과 같이 동작을 확인할 수 있다. 

     

     

     

     

     


     

    마무리

    아두이노와 MQ-2 센서를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다.  MQ-2 가스 센서는  LPG, 알코올, 프로판, 수소, CO, 심지어 메탄 등 가스를 측정 할 수있다.

     

    이 센서의 모듈 버전에는이 센서가 아두이노가 없이도 작동 할 수 있도록하는 디지털 핀이 포함되어 있다. 특정 가스를 감지하려고 할 때 유용하다. ppm 단위로 가스를 측정 할 때는 아날로그 핀을 사용해야하며, 아날로그 핀도 ​​TTL 구동되고 5V에서 작동하므로 아두이노와 함께 사용할 수 있다.

     

    [응용분야]


    LPG, 알코올, 프로판, 수소, CO 및 심지어 아두이노가가 있거나 없어도, 메탄과 같은 가스를 감지하거나 측정하는 센서를 찾고 있다면이 센서가 적합한 선택 일 수 있다.

     

     

     


     

    모두의 아두이노 환경 센서 책

    [모두의 아두이노 환경 센서] 책은 예스24, 인터넷 교보문고, 알라딘, 인터파크도서, 영풍문고, 반디앤루니스 , 도서11번가 등에서 구입할 수 있다. 이 책에서는 PMS7003, GP2Y1010AU0F, PPD42NS, SDS011 미세먼지 센서, DHT22 온습도 센서, MH-Z19B 이산화탄소 센서, ZE08-CH2O 포름알데히드 센서, CCS811 총휘발성유기화합물 TVOC, GDK101 방사선(감마선) 센서, MQ-131 오존(O3) 센서, MQ-7 일산화탄소, MICS-4514 이산화질소 센서, MICS-6814 암모니아 센서, DGS-SO2 아황산가스(SO2) 센서, BME280 기압 센서, GUVA-S12SD 자외선(UV) 센서, MD0550 기류 센서, QS-FS01 풍속 센서(Wind speed) 를 사용한다.  

     

    모두의 아두이노 환경 센서

    아두이노와 센서로 내 건강을 지킬 수 있다!다양한 환경 센서를 실생활 프로젝트에 응용해보자!시중에 판매되고 있는 간이측정기도 센서로 값을 측정합니다. 똑같은 센서를 아두이노에 연결하

    book.naver.com

     

     

     

     



    댓글