Sensoriamento de gases em tempo real através de sensores MQ-(0-9)*

O monitoramento das emissões atmosféricas produzidas em laboratórios, indústrias e residências, além de ser importante para a segurança dos indivíduos, permite a manutenção da qualidade do ar e protege o meio ambiente.

Neste sentido, o objetivo deste tutorial é ensinar passo a passo a construção de um sistema de monitoramento de gases em tempo real através de sensores de gás da série MQ.

Breve descrição do funcionamento dos sensores MQ

Os sensores de gás da série MQ são sensores analógicos e de fácil integração com microcontroladores. Neste tutorial utilizamos uma placa Arduino UNO R3.

Os sensores de gases da série MQ utilizam um pequeno aquecedor interno em conjunto a um sensor eletroquímico. Estes sensores são sensíveis para uma variedade de gases conforme apresentado na tabela abaixo.

Sensor Sensibilidade Tensão aquecimento Datasheet
 MQ-2  Metano, butano, gás GLP, CO, fumo.  5v http://www.haoyuelectronics.com/Attachment/MQ-2/MQ-2.pdf
 MQ-3  Álcool, etanol, fumo.  5v https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf
 MQ-4  Metano, gás CNC.  5v https://www.pololu.com/file/0J311/MQ4.pdf
 MQ-5  Gás GLP. 5v https://www.parallax.com/sites/default/files/downloads/605-00009-MQ-5-Datasheet.pdf
 MQ-6  Gás GLP, butano.  5v https://www.sparkfun.com/datasheets/Sensors/Biometric/MQ-6.pdf
 MQ-7  Monóxido de carbono.  Tensão alternada de 5 e 1.4v https://www.sparkfun.com/datasheets/Sensors/Biometric/MQ-7.pdf
 MQ-8  Gás hidrogênio. 5v https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Biometric/MQ-8.pdf
 MQ-9  Monóxido de carbono, gases inflamáveis.  Tensão alternada de 5 e 1.5v https://www.pololu.com/file/download/MQ9.pdf?file_id=0J314
 MQ-131  Ozônio.  6v http://www.gassensor.ru/data/files/ozone/MQ-131-O3.pdf
 MQ-135  Benzeno, álcool, fumo.  5v  https://www.olimex.com/Products/Components/Sensors/SNS-MQ135/resources/SNS-MQ135.pdf
 MQ-136  Sulfeto de hidrogênio. 5v  https://www.mysensors.org/dl/57c3ebeb071cb0e34c90057a/design/MQ-136.pdf
 MQ-137  Amoníaco  5v  http://eph.ccs.miami.edu/precise/GasSensorSpecs/NH3.pdf
 MQ-138  Benzeno, tolueno, álcool, acetona, propano, gás formaldeído, gás hidrogênio.  5v  https://www.mysensors.org/dl/57c3ebeb071cb0e34c90057a/design/MQ-138.pdf
 MQ-214 Metano, gás natural. 6v  https://www.mysensors.org/dl/57c3ebeb071cb0e34c90057a/design/1341.pdf
 MQ-216  Gás natural, gás de carvão.  6v  http://www.china-total.com/Product/meter/gas-sensor/MQ-216.pdf
 MQ-303A  Álcool, etanol e fumo.  0.9v  http://www.kosmodrom.com.ua/pdf/MQ303A.pdf
 MQ-306A  GLP, gás butano.  0.9v  http://shop.aftabrayaneh.com/image/data/product%20extension/MQ/46.pdf
 MQ-307A  Monóxido de carbono.  Tensão alternada de 0.2 e 0.9v  http://www.gassensor.ru/data/files/carbon_monoxide/MQ307A.pdf
 MQ-309A  Monóxido de carbono, gases inflamáveis.  Tensão alternada de 0.2 e 0.9v  http://www.sensorica.ru/pdf/MQ-309A.pdf

Embora a sensibilidade para os diversos sensores da série MQ sejam distintas, o funcionamento dos mesmos é similar. A figura abaixo exemplifica o funcionamento de um sensor MQ genérico com alimentação de uma tensão de 5v.

gas_circuito

Em condições normais, a resistência do sensor será alta, então a queda de tensão na carga será baixa e será uma constante. Se o sensor detectar algum gás que tenha sensibilidade, a resistência do sensor irá cair, ou seja, mais corrente irá fluir do resistor de carga, fazendo com que a tensão aumente. Esta tensão de saída aumenta com o aumento da concentração de gás no ar.

Materiais utilizados:

  • Módulos sensores MQs
  • Sensor de temperatura DHT-11
  • Arduino UNO R3
  • Módulo Bluetooth
  • Cooler 12v
  • Resistores 330 Ohm
  • Uma caixa plástica para câmara de gás
  • Fontes de 5 e 12v

Protótipo:

gas_prototipo

Neste protótipo construído, foram utilizados os sensores MQ-2 e MQ-4. No entanto, pode ser expandido a qualquer sensor MQ, desde que a tensão de aquecimento seja de até 5v. A fonte de alimentação da placa microcontroladora deve ser a de 5v.

O protótipo apresentado deve estar dentro da câmara de gás, com um cooler acoplado e ligado a uma fonte de 12v. O protótipo da câmara de gás é apresentado na figura abaixo:

gas_camara

Passos para a detecção de gases:

Para construção do exemplo, iremos utilizar um sensor de gás MQ-2. No entanto, o exemplo é aplicado a qualquer outro sensor da série, sendo alterados apenas os parâmetros de acordo com o datasheet do sensor utilizado.

Os passos para detecção de gases por sensores MQs são os seguintes:

  1. Inicialmente os sensores são colocados em ar limpo para definição do controle.O sensor é calibrado e é descoberto o valor da resistência do ambiente limpo (R0);
  2. Em seguida, os sensores são colocados na área afetada por gases. Eles irão detectá-los e a resistência do sensor irá mudar e o sensor LED acenderá;
  3. Para o cálculo da concentração de gás detectado em ppm é necessário tomar dois pontos a partir da curva de gás do datasheet;
  4. A concentração de gás é calculada em relação ao declive dessa linha.

Passo 1:

O sensor de resistência RS e o resistor de carga RL formam um divisor de tensão. Com base no gráfico fornecido no datasheet do MQ-2, RS em ar limpo sob temperatura e umidade ideais é constante. A proporção de RS/R0 em ar limpo é aproximadamente 9,8. Precisa-se então calibrar o sensor no ar limpo do ambiente que será monitorado. Obtêm-se o valor de R0, dividindo-o pelo RS/valor do R0 em ar limpo.

float MQCalibration(int mq_pin) //funcao que calibra o sensor em um ambiente limpo utilizando a resistencia do sensor em ar limpo 9.83
{
 int i;
 float valor=0;

 for (i=0;i<ITERACOES_CALIBRACAO;i++) { //sao adquiridas diversas amostras e calculada a media para diminuir o efeito de possiveis oscilacoes durante a calibracao
 valor += calcularResistencia(analogRead(mq_pin));
 delay(500);
 }
 valor = valor/ITERACOES_CALIBRACAO; 

 valor = valor/RO_FATOR_AR_LIMPO; //o valor lido dividido pelo R0 do ar limpo resulta no R0 do ambiente

 return valor; 
}

Passo 2:

Uma vez R0 foi descoberto, o gás alvo pode ser detectado utilizando a razão RS/R0 como mostra a função a seguir:

float leitura_MQ2(int mq_pin)
{
  int i;
  float rs=0;

  for (i=0;i<ITERACOES_LEITURA;i++) {
    rs += calcularResistencia(analogRead(mq_pin));
    delay(50);
  }

  rs = rs/ITERACOES_LEITURA;

  return rs;  
}

Passo 3:

Para o cálculo da concentração de partículas por milhão (ppm) dos gases alvos no ambiente, é necessário tomar dois pontos base a partir do datasheet do sensor utilizado. A figura abaixo mostra o gráfico do sensor MQ-2.

gas_datasheet

Tomando os pontos da curva do gás GLP, P1=(log 200, log 1.6) e P2=(log 1000, log 0,26). Estes pontos estão em escala logarítmica. Podemos calcular a inclinação aproximada da curva utilizando a fórmula: Inclinação = (y2-y1)/(x2-x1). Descoberta a inclinação, utilizamos para cada gás um vetor com formato (x, y, inclinação).

float LPGCurve[3]  =  {2.3,0.20,-0.47};   //curva LPG aproximada baseada na sensibilidade descrita no datasheet {x,y,deslocamento} baseada em dois pontos 
                                          //p1: (log200, log1.6), p2: (log10000, log0.26)
                                          //inclinacao = (Y2-Y1)/(X2-X1)
                                          //vetor={x, y, inclinacao}

float COCurve[3]  =  {2.3,0.72,-0.34};    //curva CO aproximada baseada na sensibilidade descrita no datasheet {x,y,deslocamento} baseada em dois pontos 
                                          //p1: (log200, 0.72), p2(log10000, 0.15)
                                          //inclinacao = (Y2-Y1)/(X2-X1)
                                          //vetor={x, y, inclinacao}
                                                   
                                                    
float SmokeCurve[3] ={2.3,0.53,-0.44};    //curva LPG aproximada baseada na sensibilidade descrita no datasheet {x,y,deslocamento} baseada em dois pontos 
                                          //p1: (log200, 0.53), p2: (log10000, -0.22)
                                          //inclinacao = (Y2-Y1)/(X2-X1)
                                          //vetor={x, y, inclinacao}

Passo 4:

Para encontrar a concentração de cada gás no ambiente, são utilizados os pontos da medição e a inclinação da reta de acordo com a fórmula: concentração de gás = 10^{(((log(RS/R0) – (y1))/inclinação) +x1)} ppm.

int  calculaGasPPM(float rs_ro, float *pcurve) //Rs/R0 é fornecido para calcular a concentracao em PPM do gas em questao. O calculo eh em potencia de 10 para sair da logaritmica
{
  return (pow(10,( ((log(rs_ro)-pcurve[1])/pcurve[2]) + pcurve[0])));
}

Resultados:

Como resultado em ambiente limpo, utilizando o app Android Bluetooth Terminal, temos:

gas_results

Link com o código fonte do artigo: https://github.com/jualabs/iot/blob/master/gas-sensor/gas_sensors.ino

14 comentários em “Sensoriamento de gases em tempo real através de sensores MQ-(0-9)*

  1. Olá, gostaria de saber como chegou a formula para encontrar P1 e P2 do gás GLP, e como encontrou os índices de x e y para calculo da inclinação. Necessito fazer a coleta de informações de todos os gases que para o módulo MQ-135, obrigado.

    Curtir

  2. Olá, Parabéns pelo trabalho. Tentei reproduzir o projeto porém estou encontrando umidade acima de 100%, assim como temperatura negativa. Alguma dica do que pode estar acontecendo?

    Curtir

Deixe um comentário