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.
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.
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:
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:
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:
- 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);
- 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á;
- 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;
- 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.
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:
Link com o código fonte do artigo: https://github.com/jualabs/iot/blob/master/gas-sensor/gas_sensors.ino
Bom dia. Queria saber se essa calibracao serve para o sensor MQ-131
CurtirCurtir
Olá! A calibração deve ser feita de maneira análoga, no entanto, utilizando os dados do datasheet do sensor MQ-131.
CurtirCurtir
Bom dia
Qual a fórmula para calcular Rs?
CurtirCurtir
AUTOUNISAL, reveja o passo 2. Tem o algoritmo que utilizei e retorna RS.
CurtirCurtir
Com estes sensores, se possível calcular o consumo de gás de cozinha, em tempo Real! Poderia colocar o sensor na mangueira do Gás!
CurtirCurtir
Olá! Não sei se seria possível e/ou viável. Uma aplicação interessante seria a detecção de vazamento de gás de cozinha, colocando o sensor próximo ao botijão.
CurtirCurtir
muito interessante, gostaria de saber se pode disponibilizar o codigo novamente.
CurtirCurtir
Mateus, estarei disponibilizando o código novamente.
CurtirCurtir
Olá, o código foi repostado e pode ser encontrado em: https://github.com/jualabs/iot/blob/master/gas-sensor/gas_sensors.ino
CurtirCurtir
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.
CurtirCurtir
Boa noite, gostaria de saber como foi determinado a resistência de carga = 5. Preciso determinar para o MQ9 e MQ135.
Obrigado
CurtirCurtir
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?
CurtirCurtir
pq vc tira os dados da curva por log ?
CurtirCurtir