ESP32 - MQ3 Alcoholsensor

Deze handleiding helpt u bij het aansluiten van de MQ3 alcoholsensor op de ESP32 om de concentratie ethanol en alcoholdampen in de omgevingslucht te detecteren en te meten. De MQ3 sensor is een fundamenteel onderdeel van breathalyzer projecten, alcoholdetectiesystemen en toepassingen voor het monitoren van luchtkwaliteit.

In deze gids behandelen we:

ESP32 met MQ3 alcoholgas sensor module

Hardware Vereist

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB-kabel Type-C
1×MQ3 Alcoholsensor
1×Breadboard (experimenteerprint)
1×Jumperdraden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de MQ3 Alcoholsensor

Geclassificeerd als een Chemiresistor, maakt de MQ3 gebruik van Metal Oxide Semiconductor (MOS) technologie om alcohol te detecteren via weerstandswijzigingen in de detectielaag. Deze sensor heeft een uitstekende gevoeligheid voor ethanol dampen bij verschillende concentraties.

Het hart van de sensor bestaat uit tin dioxide (SnO2) gecoat op een keramische aluminiumoxide-substraat. Door dit materiaal te verwarmen, kan het reageren met alcoholmoleculen. Een beschermend gaasje van roestvrij staal (antiexplosienet) omhult het sensorelement, waardoor het verwarmingsgedeelte beschermd wordt, terwijl gasdiffusie naar de meetkamer mogelijk blijft.

Veelvoorkomende toepassingen zijn ademtestapparaten, DUI-detectie (driving under influence), alcoholalarm-systemen en monitoring van alcoholdampen in de omgeving.

Technische Specificaties

  • Bedrijfsspanning: 5V DC
  • Belastingsweerstand: 200 kΩ
  • Verwarmingsweerstand: 33 Ω ± 5%
  • Vermogen verwarming: < 800 mW
  • Meetweerstand: 1 MΩ – 8 MΩ
  • Detectiebereik: 25 – 500 ppm (parts per million)
  • Opwarmtijd: 24-48 uur voor eerste gebruik

Over ppm: Parts-per-million (ppm) geeft de verhouding aan van doelmoleculen ten opzichte van het totaal aantal gasmoleculen. Bijvoorbeeld: een waarde van 500 ppm betekent dat er 500 alcoholmoleculen zijn per 1.000.000 totale moleculen, waarbij 999.500 uit andere atmosferische componenten bestaan.

Pinout

De MQ3 sensormodule heeft vier aansluitpinnen:

  • VCC pin: Verbind met +5V voedingsspanning.
  • GND pin: Verbind met aarde (0V).
  • DO pin: Digitale uitgang – wordt LOW als de alcoholconcentratie boven de drempelwaarde komt, anders HIGH. Drempel instelbaar via potentiometer op de module.
  • AO pin: Analoge uitgang – spanning varieert proportioneel met alcoholconcentratie. Hoe hoger de alcohol, hoe hoger de spanning.
Pinout diagram MQ3 alcoholsensor module

Visuele indicatoren op de module:

  • PWR-LED: Gaat branden zodra de module stroom ontvangt.
  • DO-LED: Volgt de digitale uitgang – brandt bij alcoholdetectie, uit als er geen alcohol wordt waargenomen.

Werking

De MQ3 werkt door veranderingen in de weerstand van het tin dioxide (SnO2) halfgeleidermateriaal:

Schooneluchttoestand: Door het SnO2 te verwarmen hechten zuurstofmoleculen zich aan het oppervlak en vangen elektronen weg, waardoor een laag met verminderde geleiding ontstaat. Dit zorgt voor een hoge weerstand.

Aanwezigheid van alcohol: Alcoholmoleculen reageren met de zuurstof aan het oppervlak, waarbij de bindingen verbreken en gevangen elektronen vrijkomen. Dit verhoogt de geleiding en verlaagt de weerstand – naarmate de alcoholconcentratie stijgt, daalt de weerstand.

De sensor heeft twee uitgangsmodes:

Digitale uitgang (DO pin):

  • Drempel instelbaar met potentiometer.
  • DO wordt LOW (LED aan) als alcohol boven drempelwaarde is.
  • DO wordt HIGH (LED uit) als alcohol onder drempelwaarde blijft.

Analoge uitgang (AO pin):

  • Spanning is evenredig met alcoholconcentratie.
  • Meer alcohol betekent hogere spanning.
  • Minder alcohol betekent lagere spanning.
  • Let op: de potentiometer beïnvloedt alleen de digitale uitgang, niet de analoge.

Opwarmen en Kalibratie

Voorverwarming

De MQ3 heeft een opwarmperiode nodig voor nauwkeurige metingen:

  • Eerste gebruik of langdurige opslag (30+ dagen): Continu voeding geven gedurende 24-48 uur voor stabilisatie.
  • Regelmatig gebruik: 5-10 minuten opwarmen is voldoende. Vroege metingen kunnen grillig zijn maar stabiliseren snel.

Sluit VCC en GND gewoon aan op 5V voeding of de voedingspinnen van de ESP32 gedurende deze periode.

Bepalen van Drempelwaarden

MOS-sensoren zoals de MQ3 kunnen tijdens opslag drift vertonen. Stel nauwkeurige drempels in via kalibratie:

  1. Schoonluchtniveau meten: Meet analoge waarden bij zuivere lucht, doorgaans tussen 100-150.
  2. Alcoholblootstelling: Houd isopropylalcohol of handdesinfecterend middel dicht bij (zonder aanraking) de sensor, zodat alleen damp binnenkomt. Noteer de hogere waarden (meestal 400-900 afhankelijk van dampsterkte).
  3. Bereiken vaststellen: Definieer zones aan de hand van gemeten waarden:
  • Nuchter: Lager dan schoonluchtniveau + 20 (bijv. < 120)
  • Licht alcoholgebruik: Middenbereik (bijv. 120-400)
  • Zwaar alcoholgebruik: Boven matige drempel (bijv. > 400)

Belangrijk: Sensorwaarden verschillen per module en omgeving. Kalibreer altijd met uw eigen hardware.

Digitale Drempel Instellen

Stel het triggerniveau van de DO pin in met de trim potentiometer:

  1. Blootstelling aan alcoholdamp.
  2. Draai de potentiometer met de klok mee tot LED aangaat.
  3. Draai tegen de klok in tot LED net uitgaat.
  4. Drempel is nu ingesteld.

Aansluitschema

De MQ3 module biedt beide uitgangen. Gebruik een of beide afhankelijk van uw projectwens.

MQ3 AlcoholsensorESP32
VCC3.3V
GNDGND
DOGPIO 19
AOGPIO 36 (ADC0)
Aansluitschema ESP32 en MQ3 alcoholsensor met pin connecties

This image is created using Fritzing. Click to enlarge image

ESP32 Code - Digitale Uitgang Lezen

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for digital output from the sensor #define PIN_DO 14 // ESP32 pin GPIO14 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 }

Snelle stappen

  • Als u voor het eerst werkt met ESP32, bekijk dan hoe u de ESP32-ontwikkelomgeving instelt in Arduino IDE.
  • Kopieer bovenstaande code en open deze in Arduino IDE.
  • Klik op de Upload-knop in Arduino IDE om de code naar de ESP32 te uploaden.
  • Breng een alcoholdampbron dicht bij de MQ3 sensor (handdesinfecterend middel of isopropylalcohol op watje werkt goed).
  • Bekijk het resultaat in de Seriële Monitor.
COM6
Send
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
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Opmerking: Als de metingen niet overeenkomen met de werkelijkheid (valse triggers of missen van detecties), stel dan de potentiometer van de module bij. Met de klok mee verhoogt u de gevoeligheid; tegen de klok in verlaagt u deze. Fijninstellen tot de nauwkeurigheid verbetert.

ESP32 Code - Analoge Uitgang Lezen

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 }

Snelle stappen

  • Kopieer de bovenstaande code en open met Arduino IDE.
  • Klik op de Upload-knop om code naar ESP32 te laden.
  • Breng alcoholdamp aan op de sensor (bijvoorbeeld handdesinfecterend middel of isopropylalcohol).
  • Bekijk de resultaten in de Seriële Monitor.
COM6
Send
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
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Met zowel digitale als analoge uitgang kunt u drempellogica implementeren voor het activeren van alarmen, waarschuwingslichten of het loggen van gegevens voor breathalyzer toepassingen.

※ Notiz:

Deze handleiding gebruikt de functie analogRead() om waarden te lezen van een ADC (Analog-to-Digital Converter) die is aangesloten op een sensor of component. De ADC van de ESP32 is geschikt voor projecten die geen hoge precisie vereisen. Houd echter rekening met het volgende bij projecten die nauwkeurige metingen wensen:

  • De ADC van de ESP32 is niet perfect nauwkeurig en kan kalibratie nodig hebben voor correcte resultaten. Elke ESP32-module kan iets verschillen, dus kalibratie per bord is aan te raden.
  • Kalibreren kan uitdagend zijn, vooral voor beginners, en zal niet altijd de exacte gewenste resultaten opleveren.

Voor projecten met hoge precisie overweeg een externe ADC (bijvoorbeeld ADS1115) te gebruiken met de ESP32 of een ander board zoals de Arduino Uno R4 WiFi die een betrouwbaardere ADC heeft. Wilt u toch de ESP32 ADC kalibreren, raadpleeg dan de ESP32 ADC Calibratie Driver.

ESP32 Code - Breathalyzer met Drempeldetectie

Dit voorbeeld laat zien hoe u de analoge uitgang interpreteert met gekalibreerde drempels voor het schatten van intoxicatieniveaus.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 }

Snelle stappen

  • Belangrijk: Kalibreer eerst uw sensor met het analoge voorbeeld om passende drempelwaarden te bepalen.
  • Pas de constanten SOBER_THRESHOLD en DRUNK_THRESHOLD aan met uw gekalibreerde waarden.
  • Kopieer de aangepaste code en open die in Arduino IDE.
  • Klik op de Upload-knop om code naar ESP32 te uploaden.
  • Test met alcoholdamp (bijv. isopropylalcohol of handdesinfecterend middel damp).
  • Check statusberichten in de Seriële Monitor.
COM6
Send
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
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Disclaimer: Dit project is alleen bedoeld voor educatieve doeleinden. Gebruik dit apparaat nooit voor officiële breathalyzer-toepassingen of verkeersveiligheidsbeoordelingen.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u sneller aan de slag te gaan.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!