Sensor de Gás MQ-135 e a família MQ de detectores de Gás
O sensor gás MQ-135 é capaz de detectar a concentração de vários gases tóxicos em um ambiente tais como: amônia, dióxido de carbono, benzeno, óxido nítrico e também fumaça ou álcool. Neste tutorial vamos aprender como usa o módulo sensor de gás MQ-135 junto a um Arduino. Esse tutorial também pode ser aplicado para outros sensores de gás, com alguns ajustes, tais como: MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7, MQ-8,MQ-9, etc.
[toc]
A importância dos sistemas de proteção
Os processos industriais envolvem o uso e fabricação de substâncias altamente perigosas, especialmente produtos inflamáveis, tóxicos e oxidantes. Os gases fazem parte desses ambientes como participantes de reações, catalisadores ou produtos finais. Outras vezes são resíduos ou subprodutos indesejáveis. Escapes ocasionais de gás ocorrem e criam um perigo potencial para a planta industrial, seus funcionários e pessoas que vivem nas proximidades. Incidentes e acidentes em todo o mundo, envolvendo asfixia, intoxicação, explosões e perdas de vidas é um lembrete constante desse problema.
Por isso, sistemas automáticos de detecção de gases são fundamentais para a proteção das pessoas envolvidas nesses processos. É necessário que tenhamos sensores adequados e que sejam posicionados em lugares estratégicos, de preferência com redundância.
É claro que esse tipo de proteção não se limita a industria. Podemos ver facilmente a aplicação de sensores de gás e fumaça em uma cozinha residencial ou em ambientes públicos. Enfim, podemos usar a automação a favor da vida, evitando assim acidentes.
Sensor de gás MQ
Existe uma grande gama de sensores de gás, estre eles, temos os MQ’s. Esses sensores de detecção modernos e de baixo custo para gás combustível, são do tipo eletro-catalítico. Eles são feitos de uma bobina de fio de platina aquecido eletricamente, coberto primeiro com uma base de cerâmica, tais como alumina e, em seguida, com um revestimento final exterior do catalisador de paládio ou ródio disperso em um substrato de tório.
– Por dentro do sensor MQ
Na figura a seguir podemos entender um pouco melhor como é por dentro de um sensor de gás MQ.
Na vertical temos um resistência elétrica que aquece o ar. Essa resistência é ligada através da alimentação dos pinos H’s, um vai no 5V e o outro no GND (0V).
De A para B temos nosso sensor de gás. Em uma atmosfera onde possa haver gás poluidor, a resistência do sensor de gás diminui conforme a concentração do gás poluente aumenta. Ou seja, quanto mais gás poluente, menor será a resistência entre A e B. Podemos conferir as variação da resistência conforme a concentração de gases no gráfico à seguir retirado da folha de dados do MQ-135:
Sendo assim, podemos montar um circuito onde temos uma tensão que será proporcional à quantidade de gases poluentes.
Conforme a resistência entre A e B diminuir (mais gases poluentes), maior será a tensão em cima do resistor RL. Falamos um pouco sobre esse tipo de circuito, o divisor de tensão, no tutorial sobre o sensor de luz LDR.
– Encapsulamento dos sensores MQ
Em geral, os sensores da família MQ possuem o formato como o da figura a seguir:
Como você pode ver, na parte de baixo temos alguns pinos. Ao todo são seis. Esse seis pinos dão acesso ao circuito interno já explicado.
Para facilitar o uso, podemos adquirir esse sensores junto a uma placa que já conta com o circuito necessário para seu pronto funcionamento alem de contar com um circuito comparador.
Lista de sensores de Gás
Aqui está a lista de alguns dos sensores de gás que você pode encontrar. Você pode escolher o mais adequado para o seu projeto.
Nome do Sensor | Sensível para |
---|---|
MQ-2 | Detecção de gases inflamáveis: GLP, Metano, Propano, Butano, Hidrogênio, Álcool, Gás Natural, outros inflamáveis e fumaça. |
MQ-3 | Detecção de Álcool , Etanol e fumaça. |
MQ-4 | Detecção de Metano, Propano e Butano. |
MQ-5 | Detecção de GLP e gás natural |
MQ-6 | Detecção de gás GLP (Gás de Cozinha), Propano, Isobutano e Gás Natural Liquefeito |
MQ-7 | Detecção do gás Monóxido de Carbono |
MQ-8 | Detecção do gás hidrogênio |
MQ-9 | Detecção de Monóxido de Carbono e gases inflamáveis |
MQ-131 | Detecção de ozônio |
MQ-135 | Detecção de Gás Amônia, Óxido Nítrico, Álcool, Benzeno, Dióxido de Carbono e Fumaça |
MQ-136 | Detecção de Gás Sulfídrico H2S |
MQ-137 | Detecção de Gás Amônia |
MQ-138 | Detecção de n-hexano, benzeno, NH3, álcool, fumaça, CO, etc. |
Módulo sensor de Gás MQ-135 – Gases tóxicos e Fumaça
O modulo utilizado, MQ-135 funciona bem detecção de fumaça e outros gases tóxicos, especialmente amônia, vapor de sulfeto e benzeno. Sua capacidade de detectar vários gases nocivos e menor custo faz do MQ-135 uma escolha ideal de diferentes aplicações de detecção de gás.
Ele pode detectar concentrações na faixa de 10 a 1.000ppm (partículas por milhão), possuindo um range de tensão de 0 – 5V. Os módulos do MQ135 são capazes de operar na faixa de temperatura de -10 a 70ºC, consumindo uma corrente aproximada de 150mA.
O módulo também conta com um potenciômetro para regular a sensibilidade do sensor, girando ele para um dos lados o sensor ficara mais sensível aos gases.
Mãos a Obra – Desenvolvimento do Projeto
Componentes necessários
- 1 x Sensor de gás MQ -135
- 1 x Arduino UNO ou outra placa Arduino
- 1 x Protoboard 400 furos ou outra Protoboard
- Fios Jumpers
Montando o projeto
A montagem do circuito é bem simples e direta. Basta seguir o esquemático abaixo.
O modulo MQ 135 possui 4 pinos: dois pinos para alimentação (Vcc e GND) e dois pinos para emissão dos sinais elétricos, sendo um sinal digital (D0) e o outro um sinal analógico (A0). Para realizar a montagem, iremos conectar os pinos na seguinte ordem:
Em nossa experiência conectamos os pinos do sensor direto na placa Uno, sem o auxilio do protoboard, tal como indicado na tabela anterior. Veja como ficou o nosso montado:
Programando
Segue o código que utilizamos nesse projeto para fazer a detecção de gás no ambiente.
#define MQ_analog A2 #define MQ_dig 7 int valor_analog; int valor_dig; void setup() { Serial.begin(9600); pinMode(MQ_analog, INPUT); pinMode(MQ_dig, INPUT); } void loop() { valor_analog = analogRead(MQ_analog); valor_dig = digitalRead(MQ_dig); Serial.print(valor_analog); Serial.print(" || "); if(valor_dig == 0) Serial.println("GAS DETECTADO !!!"); else Serial.println("GAS AUSENTE !!!"); delay(500); }
Colocando para funcionar
Primeiramente precisamos deixar que a resistência interna do sensor de gás esquente o suficiente para que as medições se estabilizem. Espere por 3 minutos. Chamamos essa espera de tempo de queima. Explicaremos isso mais a frente.
Após deixar o sensor de gás esquentar, vamos testa-lo forçando o ambiente com um fosforo/isqueiro para gerar CO2 (fumaça). O monitor serial irá indicar o valor analógico lido pelo sensor e também indicara se o gás foi detectado ou não, isso é uma resposta ao sinal digital emitido pelo módulo, e esse será calibrado conforme nos quisermos ao girar o potenciômetro. Para calibrar a detecção digital vamos estimular o sensor com o gás do isqueiro e quando acharmos que a estimulação seja suficiente, giramos o potenciômetro até que ele altere o estado entre NÃO DETECTADO <-> DETECTADO, assim esse passa a ser o novo ponto de referencia digital.
As imagens a seguir mostram a sequência que o sensor digital teve alternando o estado de LOW <->HIGH quando o valor analógico estava próximo de 82, neste exemplo eu mantive o fosforo acesso por alguns segundos próximo ao sensor apenas. Veja que na sequência de valores analógicos chega até 380, então de acordo com a duração e proximidade do fosforo ao sensor podemos ir calibrando o sensor digital dele.
Entendo a fundo
Software
– Nomeando os pinos utilizados através da diretiva #define
O primeiro passo do programa consiste fazer o uso das diretivas #define para nomear os pinos que serão utilizados no projeto, ou seja, o pinos que estarão conectados ao sensor apresentado anteriormente. Sendo assim, neste caso temos que o pino de entrada analógica do Arduino UNO A2 passa a ser identificado no código através do nome MQ_analog, enquanto, o pino de entrada digital 7 do mesmo será referenciado no código pelo nome MQ_dig.
#define MQ_analog A2 #define MQ_dig 7
– Declarando a variável responsável por armazenar o estado do sensor
Em seguida, declaramos duas variáveis para armazenar os valores que forem lidos pelas portas do Arduino UNO, sendo uma delas do tipo inteiro, para a parte analógica e a outra, booleana, para a parte digital.
int valor_analog; bool valor_dig;
– Configurando o sistema
Dentro da função void setup() vamos configurar as portas do Arduino e a comunicação serial. Vamos iniciar a comunicação serial numa taxa de 9600 bits por segundo e as portas utilizadas devem ser setadas como ENTRADAS (INPUT), afinal eles irão receber sinais elétricos para o Arduino.
void setup() { Serial.begin(9600); pinMode(MQ_analog, INPUT); pinMode(MQ_dig, INPUT); }
– Rodando o programa principal
Dentro do void loop() teremos o programa rodando em loop infinito, sendo assim iremos faremos a leitura das portas do Arduino e imprimiremos na serial os valores para que possamos ter parâmetros mensuráveis. Com a função analogRead() fazemos a leitura analógica da porta A2. Utilizaremos esse valor apenas como parâmetro para calibrar a sensibilidade digital do sensor.
valor_analog = analogRead(MQ_analog);
Utilizando a função digitalRead() temos a leitura booleana do sensor, quando a resposta for 1 o gás esta sendo detectado, e quando for 0 o gás está ausente. Veremos mais adiante que a sensibilidade do sensor precisa ser ajustada com o potenciômetro do modulo.
valor_dig = digitalRead(MQ_dig);
Por fim fazemos a impressão dos valores lidos na serial, para que assim, possamos ver o resultado das leituras.
if(valor_dig == 0) Serial.println("GAS DETECTADO !!!"); else Serial.println("GAS AUSENTE !!!");
Hardware
– Calibrando o módulo digital
Como dito antes é necessário calibrar o sensor digital do módulo MQ 135. Para isso rode o programa anterior e abra o monitor serial e, com auxilio de uma pequena chave Philips, gire o potenciômetro na parte de trás do módulo até que o você encontre um ponto que altere de 0 pra 1. O valor analógico irá servir como base para mediar a sensibilidade do sensor.
– Tempo de queima – Burn-in time
Para que o sensor esteja pronto para fazer as medições é necessário aguardar um tempo denominado como Burn -in time (Tempo de queima) ou preheat (pré aquecimento). Esse tempo varia de modelo para modelo, mas para testes mais simples, como para familiarizar com o sensor, podemos aguardar cerca de 3 minutos. Esse é o tempo necessário para que a resistência do sensor aqueça até a temperatura ideal de funcionamento do sensor. Durante esse período as medições podem oscilar muito.
Para aplicações oficiais, tal como implementação de um detector de incêndio, onde precisamos de uma precisão de medição maior e mais confiável, é recomendado pelos fabricantes que o tempo de queima seja de pelo menos 24 horas. Esse é o tempo necessário para que o sensor alcance a plena estabilização das medições entre os terminais internos A e B.
Considerações finais
Este projeto apresenta uma utilização básica do sensor MQ 135. Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.
Caso esteja começando com Arduino recomendamos que conheça a Apostila Arduino Básico.
Formando em Engenharia de Controle e Automação pela UFOP em 2017. Professor de automação na Faculdade Adjetivo CETEP, para as turmas de ensino médio integrado ao tecnico em automação. Sou hobbista de robótica móvel, principalmente com arduino, desde de 2012.
17 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
Boa noite, estou fazendo um projeto da faculdade de um purificador de ar.
mas não estou conseguindo encontra uma relação sobre o nível do sensor, qual é o nível adequado?
Poderia me ajudar por favor
segue minha programação:
int led_verm = 6;
int led_amarelo = 5;
int buzzer = 9;
int rele = 4;
int sensor = A0;
int nivel_sensor = 350;
void setup ()
{
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(led_verm, OUTPUT);
pinMode(led_amarelo, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(rele, OUTPUT);
No datasheet do sensor, existe uma tabela que relaciona o valor da sensibilidade (Rs/Ro) com a umidade e temperatura.
Gostaria de saber se a placa a qual o sensor ja vem embutido realiza essa compensação, pois os valores se alteram dada uma variação na temperatura e umidade.
XCBVFFFFFFIPLGJIPLGJIPLGJIPLGJIPLGJIPLGJIPLGJRNHÇ KR;WENG~D,SAFÇJWEF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F BRGJKLRTQEEEWRLYHBMTGNRWR TGWWGTQRYEEEEEEEJURKGUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7GUY7NE
O meu MQ-135 está dando leitura trocada, quando detecta o gás, o valor diminui ( ppm ) e quando está em ambiente, ele fica valor superior a 1000 ppm . Poderia me ajudar?
Me ajudou tanto!!! Obrigado mesmo.
O primeiro fonte está:
#define MQ_analog A2
#define MQ_dig 7
int valor_analog;
int valor_dig;
Já no terceiro:
int valor_analog;
bool valor_dig;
Atentem para esta divergência…
Segue repositório com fonte para os diversos gases que o sensor suporta:
https://github.com/zesteros/ArduinoAirQualityMonitor
Olá! Para detecção do gás Amônia já algum modelo pronto ou biblioteca? Também preciso realizar ensaios para monitorar a formação deste.
Muito obrigado!
Para o mq 4 devo mudar oq?
Boa noite!
O que seria este valor de “ratio” ???
Boa tarde Gradimilo, este sensor consegue detectar GLP também?.
Ola, fiz o experimento mas minha leitura analógica já começa em 515 para cima! Consegue me explicar como chegar no valor real?
Precisava saber como identificar a concentração de cada tipo de gás, podem me responder? Preferencialmente de co2. Obrigado!
Olá André, para cada tipo de gás é necessário desenvolver o método matemático com base nas variações da resistência do sensor, essas formulas podem ser encontradas no datasheet dos fornecedores, geralmente é uma divisão e uma formula exponencial. Para o caso do CO2 eu já encontrei uma formula base utilizando o MQ-2, mas deve ser algo parecido para o MQ 135, o que deve mudar é o calculo do ratio e da concentração em PPM:
– Você encontra a tensão de saída(Vout)do sensor com base no valor analógico da leitura dele:
Vout = Leitura_Analógica * 5 / 1023
– Agora usa desse valor para encontrar a resistência(Rs) equivalente do sensor neste momento, onde RL é a resistência interna do divisor de tensão do modulo MQ, que vale 20 KOhms
Rs = RL * ( 5.00 – Vout) / Vout
-Analisando a curva do datasheet temos uma formula exponencial:
CO2_PPM= 37143 * pow (ratio, -3.178);
Onde ratio é:
ratio=(Rs/R0) , onde R0 é uma resistência fixa do modulo no valor de 10 KOhms
Espero ter ajudado.
Então é possível com um único ensaio, descobrir a concentração de cada gás, certo?
Registrar os valores da curva num vetor de umas 100 posições (ou mais) e depois usa a respectiva modelagem matemática pra descobrir os tipos de gás que estão na amostragem né?
Creio ser possível sim, com o valor Rs representado numa curva de um numero grande de pontos você terá a variação da resistência interna do sensor ao longo do tempo no seu ambiente. A partir da modelagem desta curva deve ser possível aplicar a modelagem especifica de cada gás para determinar as concentrações. É interessante fazer isso com um ambiente controlado para poder comparar os valores.
Parabens pelo seu trabalho Gramildo! Trabalho com equipamentos de Ozonio, necessito montar sensor p medir o O3. Estaria interessado em me auxiliar?