Manual

do

Maker

.

com

Sensor de vapor Etanol MQ3

Sensor de vapor Etanol MQ3

Sensores de gases e vapores devem ser utilizados com muito critério. Por exemplo, você poderia ter a mais pura intenção de exaurir um gás vazado em sua cozinha, ligando um ventilador quando o sensor detectar o gás. Bom, pra ligar um ventilador, certamente você deve acionar um relé, o que gerará uma cadeia de eventos até a sentelha em algum ponto do circuito, previamente ao "buuummmm". Por isso um planejamento mais apurado deve ser feito e estudado para que se possa ter conhecimento de causa quanto ao volume de gás inferior ao necessário para uma explosão. Já se for apenas para alarmar mandando um sinal para um alarme externo ou então enviar os dados via MQTT para um Android, a coisa fica mais simples.

Recomendações

Se você é retardado, se comeu sabão em pó quando era criança, se caiu de cabeça do berço e não assimila seis com meia dúzia, se usa drogas pesadas ou é simpatizante do PT, esse tutorial não é pra você. Afaste-se enquanto ainda pode salvar sua vida. Desse e de outro modo, se você explodir sua casa, por fogo na vizinhança, matar seus pets, ficar com a cara do Freddy Krueger ou algo pior que vá desde a morte até algo pior (o que pode ser pior?), a responsabilidade é única e exclusivamente sua.

Características

Esse sensor pode perceber alémde álcool, benzina de forma sutil. É bastante sensível e possui um controle de sensibilidade via trimpot. Quando em uma board, trata-se já de um módulo pronto para uso e algumas poucas providências devem ser adotadas. Ele tem um preheat que pelo datasheet mostra um intervalo superior a 24h(!) mas ele opera em temperatura ambiente a partir de 20 graus e ~2 graus de margem, utilizando 5V. Muita atenção a isto:

O sensor tem um consumo altíssimo em relação ao que pode oferecer um pino do Arduino (40mA), por exemplo. Ele consome 750mw, então, se você utilizá-lo à 3V3, terá um consumo de 227mA no preheat. Se utilizá-lo em 5V, o consumo será de 150mA, por isso é altamente recomendado alimentação externa e jamais utilizar um pino de GPIO.

Se quiser dar uma olhada no datasheet, o link é esse.

Objetivo

Depois que você coloca esse sensor pra funcionar, integrá-lo com outras partes eletrônicas será fácil. Vamos apenas gerar uma interrupção a um limite de gás, acendendo um LED.

Materiais

Se eu não explodir a casa enquanto escrevo esse tutorial, o que você verá é além da configuração do sensor de gás, uma implementação viável de forma que você possa fazer mais do que colocá-lo a funcionar.

Wiring do sensor de vapor etanol MQ3

Indo por partes (alá Jack o estripador), o sensor MQ3 é o primeiro que devemos nos preocupar, porque ele será mantido ligado e seu consumo não é trivial. Supondo que você já tenha a alimentação adequada (uma fonte de 1.5A deve resolver tranquilamente para a MCU e o sensor, porém não para o cooler, que é 12V), vamos ao wiring do MQ3 (imagem kibada do Google images):

mq3-wiring.webp

Nesse kib... digo, nessa imagem, utilizou-se um LED para ter resposta do sensor. Vamos implementar um também mas não manteremos fidelidade a esse wiring, porque é melhor colocar os 5V de alimentação externa. Utilizaremos um Digispark invés do UNO porque afinal,  a similariedade é enorme. O GND do Arduino será comum ao GND da fonte externa, não se preocupe porque não haverá problema em tornar o ground comum, aliás, é fundamental.

Sem mistérios, o módulo não depende de resistores externos, devendo ser ligado diretamente ao 5V de uma fonte externa; GND ao GND e o GND do  Arduino/Digispark também.  AOUT ligado ao analógico do UNO ou a um GPIO qualquer do Digispark. Não ligaremos DOUT, apenas AOUT.

O sensor esquenta um bocado e é natural. Além disso, você deverá esperar o preheat por uns 15 minutos, não tem o que fazer em relação a isso.

Código

E o código é dos mais simples possível, e isso signifca que você terá seu sensor funcionando em poucos minutos. Mas antes de seguir adiante, gostaria de recomenda a você que não o ligue ao ESP8266, exceto tenha habilidade para fazer um divisor de tensão ou usar um diodo zener, porque a entrada analógica do ESP8266 é para 1V apenas. Também lembre-se de fazer uma alimentação separada.

Se optar por um divisor de tensão, lembre-se que normalmente há uma margem de tolerância de erro que pode variar conforme o resistor; faixa dourada é 10%, portanto faça o cálculo do resistor incluindo a tolerância para que você não tenha picos acima de 1V entrando no ESP8266. Voltando ao Arduino/Digispark.

Como o exemplo será com o Digispark, invés de adicionar um LED, utilizaremos o LED onboard igual exemplificado nesse artigo de sensor de nível d'água com Digispark. Outra coisa importante é que o regulador de tensão na Digispark USB que estou utilizando é o ST78M05, que tem um output de até 1.5A. Olhei o esquemático do Digispark nesse link e vi que o 5V sai direto do regulador de tensão para o pino, portanto é viável utilizar os 5V diretamente da Digispark invés de ter uma alimentação externa, e desse modo o wiring fica simplificado e "portátil".

Inicialmente é necessário um debug para que você possa calibrar o threshold do seu sensor, então utilizaremos o recurso de emulação de teclado do Digispark porque ele não tem monitor serial. Desse modo, será necessário que você abra um editor de texto e deixe a janela em foco para que o Digispark escreva nela.

#include "DigiKeyboard.h"
int sensor  = 0;
int counter = 0;
int alarm   = 0;

void preheat(){
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.println("Starting preheat for 15 minutes. Please, wait");
  for (int j=0; j<15;j++){
      DigiKeyboard.print("Time left (or remaining time104, I dont know) ");
      DigiKeyboard.println(15-j);
      for (int i= 0;i<60;i++){
          delay(1000);
      }
  }
  DigiKeyboard.println("Done! Start reading now.");
}

void setup(){
    pinMode(1,OUTPUT); //modelo b
    pinMode(0,OUTPUT); //modelo a
    
    preheat();
}

void loop(){
    DigiKeyboard.sendKeyStroke(0);

    /* Leitura analogica:
     *  1 para o pino 2
     *  2 para o pino 4
     *  3 para o pino 3
     *  5 para o pino 5
    */
    sensor += analogRead(1);

    DigiKeyboard.println(sensor);
    
    if (sensor > 50){
      if (counter > 2){
        digitalWrite(1,HIGH);
        digitalWrite(0,HIGH);
        alarm  = 1;
        sensor = 0;
      }
    }
    else{
      alarm = 0;
    }
    if (alarm == 0){ 
        counter = 0;
        sensor  = 0;
        digitalWrite(0,LOW);
        digitalWrite(1,LOW);
    }
    delay(500);
}

Só um detalhe muito importante; a porta USB do notebook só fornece 500mA, você pode arriscar por conta fazer o preheat com debug alimentando-o pela USB ou nesse momento você pode fazer uma alimentação externa. Posteriormente você deverá alimentar o Digispark de uma fonte externa que ofereça pelo menos 1A.

O intervalo de leitura também pode ser ampliado, mas para o tunning é melhor intervalo curto mesmo, depois você ajusta. Sem detecção de alcool, a medição iniciou em 40 e ampliou-se à 80 tão logo borrifei alcool na mão. Ao chegar perto, passou de 300, portanto a sensibilidade padrão me foi o suficiente (pelo menos para esse teste do sensor).

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.