ESP32 - Sensor de Álcool MQ3

Este tutorial guia você na conexão do sensor de álcool MQ3 ao ESP32 para detectar e medir a concentração de etanol e de vapor de álcool no ar ao redor. O sensor MQ3 é um componente básico para projetos de bafômetro, sistemas de detecção de álcool e aplicações de monitoramento da qualidade do ar.

Neste guia, vamos ver:

ESP32 with MQ3 alcohol gas sensor module

Sobre o Sensor de Álcool MQ3

Classificado como um quimiorresistor, o MQ3 usa a tecnologia de semicondutor de óxido metálico (MOS) para detectar álcool por meio de variações de resistência na sua camada de detecção. Esse sensor tem uma sensibilidade excelente ao vapor de etanol em vários níveis de concentração.

O coração do sensor é feito de dióxido de estanho (SnO2) aplicado sobre um substrato cerâmico de óxido de alumínio. Aquecer esse material permite que ele interaja com as moléculas de álcool. Uma malha de aço inoxidável de proteção (tela antiexplosão) envolve o elemento sensor, protegendo o componente de aquecimento e ao mesmo tempo deixando o gás entrar na câmara de detecção.

Aplicações comuns incluem bafômetros, equipamentos de detecção de embriaguez ao volante, sistemas de alarme de álcool e monitoramento ambiental de vapor de álcool.

Especificações Técnicas

  • Tensão de operação: 5V DC
  • Resistência de carga: 200 KΩ
  • Resistência do aquecedor: 33Ω ± 5%
  • Consumo do aquecimento: < 800mW
  • Resistência de detecção: 1 MΩ – 8 MΩ
  • Faixa de detecção: 25 – 500 ppm (partes por milhão)
  • Tempo de pré-aquecimento: 24-48 horas no primeiro uso

Sobre o ppm: partes por milhão (ppm) expressa a proporção entre as moléculas do gás-alvo e o total de moléculas de gás. Por exemplo, uma leitura de 500 ppm significa que existem 500 moléculas de álcool em cada 1.000.000 de moléculas, sendo 999.500 outros componentes da atmosfera.

Pinagem

O módulo do sensor MQ3 tem quatro pinos de conexão:

  • Pino VCC: conecte à alimentação de +5V.
  • Pino GND: conecte ao terra (0V).
  • Pino DO: saída digital — vai para LOW quando o álcool passa do limite e para HIGH caso contrário. Ajuste o limite pelo potenciômetro da placa.
  • Pino AO: saída analógica — a tensão varia com a concentração de álcool. Mais álcool produz mais tensão.
MQ3 alcohol sensor module pinout diagram

Os indicadores visuais são dois LEDs:

  • LED PWR: acende quando o módulo recebe alimentação.
  • LED DO: reflete o estado da saída digital — acende durante a detecção de álcool e fica apagado caso contrário.

Como Funciona

O MQ3 funciona por meio de mudanças de resistência no seu material semicondutor de dióxido de estanho (SnO2):

Estado de ar limpo: aquecer o SnO2 faz as moléculas de oxigênio aderirem à superfície, capturando elétrons e formando uma camada de depleção. Essa captura de elétrons cria uma barreira de condutividade e mantém a resistência alta.

Presença de álcool: as moléculas de álcool reagem com o oxigênio da superfície, quebram ligações e devolvem ao dióxido de estanho os elétrons que estavam presos. Isso aumenta a condutividade — mais álcool significa menos resistência.

O sensor oferece dois modos de saída:

Saída digital (pino DO):

  • O limite é definido pelo potenciômetro da placa.
  • O DO envia LOW (LED aceso) quando o álcool passa do limite.
  • O DO envia HIGH (LED apagado) quando o álcool fica abaixo do limite.

Saída analógica (pino AO):

  • A tensão de saída é proporcional à concentração de álcool.
  • Mais álcool = mais tensão de saída.
  • Menos álcool = menos tensão de saída.
  • Observação: o potenciômetro afeta somente a saída digital, não as leituras analógicas.

Aquecimento e Calibração

Requisitos de Pré-aquecimento

O MQ3 precisa ser aquecido antes de dar medições corretas:

  • Primeiro uso ou longo período guardado (mais de 30 dias): mantenha o sensor ligado por 24 a 48 horas para ele se estabilizar e medir com precisão.
  • Uso frequente: um aquecimento de 5 a 10 minutos é suficiente. As primeiras leituras podem subir muito, mas depois se estabilizam.

Basta conectar VCC e GND à alimentação de 5V ou aos pinos de alimentação do seu ESP32 durante o período de aquecimento.

Determinando os Valores Limite

Sensores com aquecedor, como o MQ3, podem sofrer deriva durante o armazenamento. Defina limites corretos para o bafômetro com esta calibração:

  1. Referência com ar limpo: ligue o sensor em ar fresco e anote os valores analógicos (normalmente 100-150).
  2. Exposição ao álcool: posicione álcool isopropílico ou álcool em gel perto do sensor (sem tocar nele), deixando só os vapores chegarem até ele. Anote as leituras mais altas (geralmente 400-900, dependendo da força do vapor).
  3. Defina as faixas: use os valores anotados para definir as zonas:
  • Sóbrio: abaixo da referência + 20 (por exemplo, < 120)
  • Consumo leve: valores intermediários (por exemplo, 120-400)
  • Consumo alto: acima do limite intermediário (por exemplo, > 400)

Importante: as características do sensor variam entre unidades e ambientes. Sempre calibre com o seu próprio hardware antes de usar.

Ajustando o Limite Digital

Defina o nível de disparo do pino DO com o potenciômetro de ajuste:

  1. Exponha o sensor ao vapor de álcool.
  2. Gire o potenciômetro no sentido horário até o LED acender.
  3. Gire no sentido anti-horário, devagar, até o LED acabar de apagar.
  4. O limite agora está calibrado.

Diagrama de Ligação

Como o módulo do sensor de álcool MQ3 tem duas saídas, você pode usar uma delas ou as duas, conforme a sua necessidade.

  • Como conectar o ESP32 e o sensor de álcool MQ3 usando protoboard (alimentado pelo cabo USB)
The wiring diagram between ESP32 MQ3 alcohol sensor

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

  • Como conectar o ESP32 e o sensor de álcool MQ3 usando protoboard (alimentado pelo pino Vin)
ESP32 MQ3 alcohol sensor wiring instruction

This image is created using Fritzing. Click to enlarge image

How to connect ESP32 and MQ3 alcohol sensor
How to wire ESP32 and MQ3 alcohol sensor
Sensor de Álcool MQ3ESP32
VCC3.3V
GNDGND
DOGPIO 16
AOGPIO 36 (ADC0)

Código ESP32 - Leitura da Saída Digital

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for digital output from the sensor #define PIN_DO 16 // ESP32 pin GPIO16 connected to DO pin of MQ3 sensor void setup() { // Initialize serial communication at 9600 baud rate Serial.begin(9600); // Set the DO pin as an input pinMode(PIN_DO, INPUT); // Give the MQ3 sensor time to warm up (20 seconds) Serial.println("Warming up the MQ3 sensor..."); delay(20000); // Wait 20 seconds for sensor warm-up Serial.println("MQ3 sensor is ready!"); } void loop() { // Read the digital output from the sensor int alcoholState = digitalRead(PIN_DO); // Check if alcohol is detected if (alcoholState == LOW) { Serial.println("Alcohol is detected"); } else { Serial.println("Alcohol is NOT detected"); } delay(1000); // Wait 1 second before next reading }

Passos Rápidos

  • Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente do ESP32 na Arduino IDE.
  • Copie o código acima e abra na Arduino IDE
  • Clique no botão Upload da Arduino IDE para fazer o upload do código para o ESP32
  • Coloque uma fonte de vapor de álcool perto do sensor MQ3 (álcool em gel ou álcool comum em um algodão funcionam bem)
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Alcohol is NOT detected Alcohol is NOT detected Alcohol is NOT detected Alcohol is detected Alcohol is detected Alcohol is detected Alcohol is detected Alcohol is NOT detected Alcohol is NOT detected
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Observação: se as leituras não combinarem com a realidade (disparos falsos ou detecções perdidas), ajuste o potenciômetro do módulo. Sentido horário aumenta a sensibilidade; sentido anti-horário diminui. Faça o ajuste fino até a precisão melhorar.

Código ESP32 - Leitura da Saída Analógica

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for analog output from the sensor #define PIN_AO 36 // ESP32 pin GPIO36 (ADC0) connected to AO pin of MQ3 sensor void setup() { // Initialize serial communication at 9600 baud rate Serial.begin(9600); // Give the MQ3 sensor time to warm up (20 seconds) Serial.println("Warming up the MQ3 sensor..."); delay(20000); // Wait 20 seconds for sensor warm-up Serial.println("MQ3 sensor is ready!"); } void loop() { // Read the analog output from the sensor int alcoholValue = analogRead(PIN_AO); // Print the analog value to Serial Monitor Serial.print("MQ3 sensor AO value: "); Serial.println(alcoholValue); delay(1000); // Wait 1 second before next reading }

Passos Rápidos

  • Copie o código acima e abra na Arduino IDE
  • Clique no botão Upload da Arduino IDE para fazer o upload do código para o ESP32
  • Leve vapor de álcool até o sensor (álcool em gel ou álcool isopropílico)
  • Confira o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
MQ3 sensor AO value: 120 MQ3 sensor AO value: 125 MQ3 sensor AO value: 128 MQ3 sensor AO value: 450 MQ3 sensor AO value: 620 MQ3 sensor AO value: 850 MQ3 sensor AO value: 920 MQ3 sensor AO value: 980 MQ3 sensor AO value: 950 MQ3 sensor AO value: 680 MQ3 sensor AO value: 420
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Com a saída digital ou a analógica, você pode criar uma lógica de limite para disparar alarmes, acender luzes de aviso ou registrar dados em aplicações de bafômetro.

※ Nota:

Este tutorial usa a função analogRead() para ler valores de um ADC (Conversor Analógico-Digital) conectado a um sensor ou componente. O ADC do ESP32 é adequado para projetos que não precisam de alta precisão. Porém, para projetos que precisam de medições precisas, tenha em mente:

  • O ADC do ESP32 não é perfeitamente preciso e pode precisar de calibração para dar resultados corretos. Cada placa ESP32 pode variar um pouco, então a calibração é necessária para cada placa individualmente.
  • A calibração pode ser difícil, principalmente para iniciantes, e nem sempre dá o resultado exato que você quer.

Para projetos que precisam de alta precisão, considere usar um ADC externo (por exemplo, o ADS1115) com o ESP32, ou usar outro Arduino, como o Arduino Uno R4 WiFi, que tem um ADC mais confiável. Se mesmo assim você quiser calibrar o ADC do ESP32, consulte o ESP32 ADC Calibration Driver.

Código ESP32 - Bafômetro com Detecção por Limite

Este exemplo mostra como interpretar a saída analógica com limites calibrados para estimar o nível de embriaguez.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for analog output from the sensor #define PIN_AO 36 // ESP32 pin GPIO36 (ADC0) connected to AO pin of MQ3 sensor // Define threshold values (calibrate these based on your sensor and environment) const int SOBER_THRESHOLD = 120; // Below this value = sober const int DRUNK_THRESHOLD = 400; // Above this value = drunk void setup() { // Initialize serial communication at 9600 baud rate Serial.begin(9600); // Give the MQ3 sensor time to warm up (20 seconds) Serial.println("Warming up the MQ3 sensor..."); delay(20000); // Wait 20 seconds for sensor warm-up Serial.println("MQ3 sensor is ready!"); Serial.println("=== Breathalyzer Test ==="); } void loop() { // Read the analog output from the sensor int alcoholValue = analogRead(PIN_AO); // Print the sensor value Serial.print("Sensor Value: "); Serial.print(alcoholValue); Serial.print(" | Status: "); // Determine intoxication level based on thresholds if (alcoholValue < SOBER_THRESHOLD) { Serial.println("Stone Cold Sober"); } else if (alcoholValue < DRUNK_THRESHOLD) { Serial.println("Drinking but within limits"); } else { Serial.println("DRUNK"); } delay(2000); // Wait 2 seconds before next reading }

Passos Rápidos

  • Importante: calibre primeiro o seu sensor usando o exemplo de leitura analógica para encontrar os valores limite corretos para o seu projeto.
  • Modifique as constantes SOBER_THRESHOLD e DRUNK_THRESHOLD com os seus valores calibrados.
  • Copie o código modificado e abra na Arduino IDE
  • Clique no botão Upload da Arduino IDE para fazer o upload do código para o ESP32
  • Teste com vapor de álcool (álcool isopropílico ou vapor de álcool em gel)
  • Confira as mensagens de status no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Sensor Value: 115 | Status: Stone Cold Sober Sensor Value: 118 | Status: Stone Cold Sober Sensor Value: 350 | Status: Drinking but within limits Sensor Value: 480 | Status: DRUNK Sensor Value: 520 | Status: DRUNK Sensor Value: 290 | Status: Drinking but within limits Sensor Value: 125 | Status: Stone Cold Sober
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Aviso: este projeto é apenas para fins educacionais. Nunca use este dispositivo como bafômetro legal nem para avaliar a segurança ao dirigir.

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!