Introduction: MQ-3 Arduino Alcohol Sensor

Breathalyzers are used to estimate blood alcohol content (BAC) from breath samples. They do so by measuring the amount of alcohol (ethanol) in one’s breath. In this instructable we will be designing a device for a person to blow into, where a chemical sensor converts the ethanol amount within the volume to an electrical signal. We will then use a microcontroller to convert this signal into a value corresponding to arbitrary levels of intoxication.

*Disclaimer: This breathalyzer is not accurate enough to actually be used to gauge level of intoxication. Be smart when drinking, and never drink and drive!

Step 1: Materials

- MQ-3 alcohol sensor

- Arduino uno

- 10pcs 5V active buzzer

- Microtivity IM206 6x6x6mm tact switch

- 12C LCD screen

- 10 kOhm resistor

- Breadboard

- 10 X male/male jumper wires

- 10 X male/female jumper wires

Step 2: Understanding the Chemistry

When the user exhales into a breath analyzer, any ethanol present in their breath is oxidized to acetic acid at the anode: CH3CH2OH(g) + H2O(l) → CH3CO2H(l) + 4H+(aq) + 4e-. At the cathode, atmospheric oxygen is reduced: O2(g) + 4H+(aq) + 4e- → 2H2O(l). The overall reaction is the oxidation of ethanol to acetic acid and water. CH3CH2OH(l) + O2(g) → CH3COOH(l) + H2O(l). The electrical current produced by this reaction is measured and used to determine resistance, which corresponds to the different levels of intoxication that the microcontroller will determine.

Step 3: Wire Circuit


- Connect the 5V supply on the arduino to the red rail on your breadboard

- Connect the GND port of the arduino to the blue rail on your breadboard

- Connect the Vcc pin of the MQ-3 to the red rail of the breadboard

- Connect the GND pin of the MQ-3 to the blue rail of the breadboard

- Connect the signal pin of the MQ-3 to analog pin A0 on the arduino

Push Button

- Insert the push button onto the bread board across lanes (see picture). One of the 4 push button ports will not be wired at all.

- Connect one port of the push button to red rail on the breadboard (the port horizontal to this one will be unused).

- Connect one port on the other side of the button to digital pin 2 on the arduino, connect the other port on the same side to ground using a 10 kOhm resistor. pin -> resistor -> ground.


- Connect the + port on the buzzer to digital pin 7 on the arduino.

- Connect the - port on the buzzer to ground

LCD Screen

- Connect the green wire from the LCD to analog pin A5; connect the orange wire from the LCD to analog pin A4; connect the red and black wires on the LCD to the red rail and the blue rail, respectively.

Step 4: Code

The base code was provided by marcoschwartz on github at web address:

Tweak this code to say whatever messages you would like and calibration will be done with a lot of trial and error.

Step 5: Testing & Use

To start the test, plug arduino into your computer and upload the code.

Upon upload, you should see a message on the LCD that reads "Warming up: x%".

After the warming up process (should be about 30 seconds based on the code), you should get a message that says "Push to start..."

Press the button and you should get a message that says "Breathe until sound stops..." Do that.

When completed, you should get a readout of a number and then your level of intoxication.