Building a Breathalyzer with MQ-3 and Arduino

During the First Meeting of Electronic Arts in Florianópolis, we built a Breathalyzer using the Alcohol Gas Sensor MQ-3 and an Arduino Board to use in the last day of the meeting, in which we gave a party. You can see a quick video two posts below. Last days I received many emails asking for the code or how to make one, so I decided to build the sensor again, take pictures/videos and make a tutorial showing how you can make one, so here it is.

Parts Needed:

  • Arduino Board
  • 10x 5mm LEDs (Green, Yellow and Red)
  • 100KΩ Potentiometer (to calibrate the sensor)
  • 10x ≈ 220Ω Resistor (anything between 220Ω and 470Ω is OK)
  • BreadBoard
  • MQ-3 Sensor from Sparkfun

Here are some pictures from the building process:

To make the LEDs work, I have connected them in sequence using the Digital Pins 2 till 11 (ten LEDs total). Remember to use a resistor between 220Ω and 470Ω for each LED, like shown on the picture below:

To connect the sensor, you have to connect one of the H pin to +5V Supply (use an external power supply for that, it may be too much current for the arduino) and the other one to Ground.

Pin B (any of them) you connect to Ground. And the A pin (also any of them) you connect to the 100KΩ potentiometer as shown on the picture below. In the same pin where you are connecting the pin A, you need to connect a wire to the Analog/Digital Converter in Arduino, that is where you are going to read the Alcohol information.

This is a quick and easy DIY project, but if you have any problem building it, please feel free to post questions!

You can DOWNLOAD the .PDE file HERE.

And now, have a great drinking!!!

Remember, if you gonna drive, don’t drink,
but if you do, call me!!

159 comments on “Building a Breathalyzer with MQ-3 and Arduino

  1. carol March 7, 2010 6:55 am

    hilarious! joão, how can u be so hilarious!!
    great boys, congrat…
    1. does the beer integrate the part list?
    2. did you use fritzing to draw your schematics?

    kisses

  2. DanielAndrade March 7, 2010 7:03 am

    @carol

    1. not beer, but Velho Barreiro (stronger 35%, soon I will add video)
    2. I used EagleCad. I tried using Fritzing, but I didn’t liked.

    🙂

    • sqqqrly January 4, 2013 12:48 pm

      RE Fritzing: I love it. But to grow to love it, I had to get the latest beta version. It is very much improved. The version that is in most Linux repos is old.

      If you’re using the Windows version, well, there’s your first problem.

  3. ioniser March 7, 2010 10:31 pm

    Have you done any work on converting the lvls to Alc/Vol
    eg millilitre(alcohol)/Litre(air)

  4. Tyler March 7, 2010 11:12 pm

    Good job on the excellent writeup.

  5. Alan Parekh March 8, 2010 9:48 am

    Great project! I have no need for one but I could test it for you. 🙂

  6. Gianni March 9, 2010 10:25 am

    On the datasheet of MQ3 I’ve read that this sensor need a pre-heat time >24hours. Is really needed to preheat the sensor all this time?

    • Michael Antoniadis April 6, 2016 11:07 pm

      I am trying to build a breathalyzer and I am trying to upload the code to my Arduino uno here but I am running into a problem. The code compiles and then when I go to upload it to the Arduino it gives me this error code saying “problem uploading to board. I am sitting here trying to figure this out why I am having this problem. Anyone have similar problems. and if so how did you guys fix it.

      • Matt Norrod April 6, 2017 1:05 am

        Did you try changing the port? Its under tools on the Arduino program. For some reason it does this because it isn’t able to upload through one USB port and you have to change it to another one.

  7. DanielAndrade March 9, 2010 1:47 pm

    @Gianni time > 24h is a lot!
    I’m not sure about that, I didn’t used it to make exact measurements so I can’t tell about it. 🙂

  8. Michael Hodgins March 10, 2010 6:30 pm

    Cool. I love that the Arduino can be used for projects like this.

  9. Gianni March 10, 2010 9:22 pm

    @Daniel: Yes I know >24 is a lot… I suppose that this time period is to obtain most precise measurements

  10. dan March 29, 2010 8:51 am

    Did you use a resistor on the sensor?then what is the value of resistor?thnx!

  11. DanielAndrade March 29, 2010 5:36 pm

    @dan I used a 100KΩ Potentiometer to calibrate 🙂

    • prathamesh patil July 9, 2016 9:51 am

      hey bro you left the one pin of potentiometer open. where to connect it? plz tell me 🙂 thanks

  12. dan April 6, 2010 8:17 am

    what is the use of pulldown resistor at pin-A of the sensor?should i connect the port A to a resistor?thanx!

  13. Alejandro May 6, 2010 3:05 am

    good job. you can make the schematic of the entire assembly and post it?

  14. dan May 13, 2010 6:25 am

    can you pls post the schematic and all the connections to the breadboard?thanx in advance..=)

  15. Jowie Jabillo June 30, 2010 12:08 pm

    can you explain this line of code:

    int ledLevel = map(sensorReading, 500, 1023, 0, ledCount);

    and how can we measure the electrical current from the analog input converting to digital output ???

  16. ms July 15, 2010 4:06 am

    could u post the complete code please? 🙂
    thanks a lot 🙂

  17. Michael July 15, 2010 11:54 pm

    This will NOT work if wired the way you describe. Sensor pin B needs to be connected to VCC, not GND. Current needs to flow between A and B (direction does not matter). If you connect B to GND, and A to GND (through a resistor) no current flows. I have the MQ-3 and use it for similar circuits. Look at the datasheet. Just to verify, I did wire a circuit just as you describe, and of course there is no voltage at the analog input of the Arduino. Just connect B to VCC and everything will work.

    • mattgilbert December 5, 2012 8:04 pm

      Michael is right. Sensor pin B needs to be connected to power for this to work.

  18. Érico October 7, 2010 11:29 pm

    Is it possible to build the breathalyzer using the MQ-3, but not using the arduino?

    • DanielAndrade October 11, 2010 3:28 pm

      Sure it is possible! But you will need a way to measure the voltage from the sensor some other way.

  19. Guilherme Nabeyama December 2, 2010 12:43 pm

    Hi, how good is this breathalyzer, for how long it can measure the alcohol in blood, or this is only measure for a short period of time when the alcohol ate in the mouth?

  20. geoff December 16, 2010 4:27 pm

    Thanks for this. Very informative, and it helped me build this fireplace breathalyzer for my Christmas party:

    http://vimeo.com/17752413

    I used the light to indicate when it was taking the reading, not display the result — but the inspiration came from your version.

  21. DanielAndrade December 19, 2010 10:12 am

    @geoff Congrats!!
    @hammy Thanks for the info! 🙂

  22. Daniel Sousa December 21, 2010 8:35 am

    Very good this project! But, how many doses of “Velho Barreiro” were necessary to test? eheheheheh….

    Daniel

  23. jaclyn February 18, 2011 3:55 pm

    DO you have the circuit of this project?

  24. DanielAndrade February 18, 2011 11:03 pm

    @jaclyn what do you mean by that? If I have the scheme?

  25. jaclyn February 20, 2011 6:53 pm

    Why we need to calibrate the sensor? The pin A of MQ-3 connect to port analog/digital pin 0. The potentiometer 100k one leg connect to gnd and another leg connect to analog/digital pin 0?

  26. lol February 22, 2011 2:08 pm

    How to calibrate the sensor?

  27. sailor February 23, 2011 9:43 am

    i bought a Figaro TGS822 sensor, anyone use it??! there is any way to calibrate it…??!

  28. omee khatri February 26, 2011 2:38 pm

    what a superb project…………… if even provided with brief circuit

  29. DanielAndrade February 27, 2011 11:36 pm

    @omee what do you mean by that? The circuit is there, just read the post 😉

  30. Kevin Patrizio February 28, 2011 12:15 pm

    I am in a robotics class in highschool and I am trying to do this for a final project I was wondering if i could use any other boards other than the Arduino board?

  31. Kevin Patrizio March 1, 2011 4:21 pm

    Is it possible to use a Propellor microcontroller?

  32. piyu March 4, 2011 12:54 pm

    how many leg does mq-3 have? 6 or 4?

  33. Kevin Patrizio March 31, 2011 3:37 pm

    I recently built this breathalyzer to a T. The only problem I have with it is that when its turned on all the LEDS are lite. Why is this? Do I have to edit the code at all? PLEASE HELP!

  34. Daniel Andrade April 2, 2011 12:38 am

    @Kevin you have to calibrate it with the potentiometer 🙂

  35. DanielAndrade April 6, 2011 9:58 pm

    @Ian you can check that there is a difference between A side and B side just looking! 🙂

  36. Alex May 7, 2011 12:16 am

    What type of arduino board did you use for the proejct could you direct me to the exact model number?

  37. IShan May 7, 2011 1:19 pm

    Can u give me a link to ur schematic or circuit diagram about ur project cz i m facing a problem regarding my circuit…
    thx in Advance

  38. gokul May 29, 2011 2:18 pm

    How can we take the output from the ardiuino board to some other application other than the ‘serial monitor’ in the arduino s/w?? we are tryin to develop an electronic nose using artificial neural nw, so we hav to get d o/p in analog form… also the sensor is always showing some values even if we remov it frm ‘alchoholic air’…
    do help me
    thanx!!

    • nick November 21, 2011 2:17 am

      If you still need help with this send me an email I have just completed an electronic nose using the MQ sensor series and an arduino. [email protected]

      Nick

  39. Levi July 17, 2011 8:53 pm

    How should the potentiometer be wired? Should it be connected to my A0 analog port??

  40. Pingback: Quora
  41. Guilherme August 23, 2011 9:39 am

    Tentei reproduzir o projeto usando o mesmo esquema é o Arduino Mega 2650, mas o sensor MQ-3 retorna apenas o valor 0 (zero), mesmo quando há presença de alchool. O que está errado? Como posso identificar o problema?

  42. Austin Mathew Dilip P September 2, 2011 10:00 am

    Sir you could have shown the complete circuit diagram along with procedure

  43. Austin Mathew Dilip P September 2, 2011 10:06 am

    Sir you could have given the circuit diagram along with procedure. Next day after posting this comment could you please show the daigram

  44. Brendan September 15, 2011 6:08 am

    I ran across your blog, i believe your web site is awsome, keep writing.

  45. Mike Patton October 20, 2011 3:22 pm

    Are you still active in answering questions for this project? Or are you tired of it? Ha
    I have what appears to be a common question that I still can’t seem to understand.

    I have the whole circuit built. The potentiometer part I still can’t dem to get right. Or I need to know its right so I can rule it out as my current problem.

    I am realatitvly new to all this, but I have built my own projects in the past

    Let’s please keep it in simpliest terms for everyone.

    100k pot has three legs. One SIDE leg goes to ground. The CENTER leg goes to analog input A0. The OTHER SIDE leg goes to MQ-3 pin A.

    Can you please confirm or correct. Thank you very much!

  46. Rob Gleason February 8, 2012 6:55 pm

    Hey guys this is an awesome project and I am interested in doing the same for a biomed electronics project. Anyway you could e-mail me a parts list and any pointers? Thanks alot!

  47. Hendrik Roedel March 27, 2012 3:53 pm

    do i have to use the mq-3 or can i use everey gas sensor i want?

    great work btw 😉

  48. Dorin June 4, 2012 10:34 am

    Hi Daniel,

    did you connect all 6 pins from sensor to the Arduino or only 4 of them ? What value did you used for load resistence ?
    The detection concentration scope of your sensor was 0.05 to 10 mg/L of alcohol or 0.04 to 4 mg/L of alcohol ? I ask you this because I have found on Internet 2 differnts datasheets…

    Thanks

    • DanielAndrade June 4, 2012 11:06 am

      Yeah, I just used 4 pins! Because the two A are the same.

  49. Chris July 16, 2012 12:09 pm

    Hi, would you happen to have a schematic of this project? This project looks exciting and I am just getting involved with Arduino so a lot of the terminology I am still getting familiar with.

    • DanielAndrade July 16, 2012 12:16 pm

      What do you mean what happened?
      The schematic is fine, it doesnt show it all.

      Anything I can help you

  50. Chris July 19, 2012 3:49 pm

    Hi Daniel,
    The schematic is great. Just being as though I am new to this… I can’t see how everything is connected via the photos. Like I see multiple wires going into the (-) negative section but I don’t see in the diagrams what is connected in (-). I’m guessing because I don’t know how to read the schematic being as though I’m just starting off.

  51. calvin July 31, 2012 9:47 am

    hi daniel
    awesome work!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    i am new and cant understand by the photo pls give a video or something showing how to connect pppppllllllllllllllllsssssssssss
    help me plsplsplsplsplspls

  52. calvin July 31, 2012 9:49 am

    i have only 1 week left for the exhibition
    and can u show me how to take the reading digitally or by computer

  53. Nicholas August 15, 2012 11:21 am

    Hi, there im currently doing a final year project about MQ-3 Sensor, so by just measuring the resistance drop on the load resistor, we will be able to know the concentration of the alchohol? as in ppm? Im totally confused, can anyone help to explain this? what does the graph in the datasheet refers to? How do i measure the concentration of gas?

  54. MATEO RAMIREZ August 15, 2012 3:36 pm

    HELLO!! CAN YOU POST FURTHER INFO ON HOW TO CONNECT THE 100 OHM RESISTOR, IM HAVING TRIUBLE READING THE VALUES FROM THE SENSOR

  55. sudip neupane September 18, 2012 3:36 pm

    would you please explain the working principle ? i think it will be quite helpful for my final year project.

  56. brian March 13, 2013 3:31 am

    i have made it,,but the sensor is tgs2620..and i can’t calibrating the sensor,,can you help me? simulating by proteus..please send your project in my email,,[email protected]

  57. João Miguel Correia March 23, 2013 8:54 pm

    boas, qual é o código usado, apenas para receber e enviar para o ecra (como os valores certos de alcool no ar)

    • DanielAndrade March 26, 2013 4:31 pm

      é simplesmente o int sensorReading = analogRead(analogPin);

  58. Julian April 2, 2013 4:42 am

    Is the pull down resistor the potentiometer?how do you connect the potentiometer?Urgently need to hear from you =)

    • Julian April 3, 2013 12:24 pm

      one more thing..how can i calibrate the sensor using a potentiometer? am still new to these kind of stuff

  59. Romeo Coreas April 12, 2013 8:46 pm

    el sketch tiene un error tiene el numero de led’s al revés tiene que comenzar del 2 al 11

  60. Lucinda Bel April 19, 2013 2:36 pm

    Hi,
    I am a third year student, and i have my project abt how to prevent drink driving. Basically my professor last minute he asked me to build a breathalyzer and your work is very good. I had some questions if it’s ok?!
    1. Is it ok to use arduino uno board?
    2. the LEDs are connected to 330ohm resistors right?!
    3. The sensor has 4legs so there are connected to the board and the potentiometer right?!
    Thank you
    🙂 x

  61. Lucinda Bel May 1, 2013 9:33 am

    hi, I have one more question if it is ok; what is the output of this breathalyzer? i need to connect the output to a car simulation but i couldn’t find it and besides i am having short circuit for no reason.
    Thx

  62. Lucinda Bel May 1, 2013 10:40 am

    And the connection from the arduino to the LEDs please
    thx

  63. Siddharth May 6, 2013 7:17 pm

    Hello..I’m building Alcohol Sensor for my university project but I have to use an mbed instead of audrino and show the results on a LCD display. Can you please guide me how the circuit diagram will look? Thanks

    • dansku May 15, 2013 4:12 pm

      Hi, I don’t know how is the mbed circuit.

  64. rossi May 14, 2013 8:30 am

    Hey Daniel,
    I was really excited about your project, so i decided to use the idea for part of my thesis by adding lcd and buzzer and stuff. I want to use a potentiometer for calibrating my sensor, but its a bit confusing for me with the mq3 “useless” legs. Could you please send me the schematic by email, because I didn’t find it in the comment section 🙁 ? Thanks in advance!

    • dansku May 15, 2013 4:16 pm

      Like it’s said on the pos, you connect the pin B to ground and the A to the AnalogPic that connects to one leg of the potentiometer.

  65. Alexa Mejia June 18, 2013 9:14 pm

    hi I am using this idea as a project but am a little confused on the connections. I already calibrated the sensor the 24 hours as requested so I don’t know if I still need the potentiometer in my circuit. Also I was wondering if you could upload a better picture of how you connected your wires since we can’t really see it very well. I also wanted to know if that is all the code or if it’s only part of it. Iwould appreciate your help so much I have hard time with circuits and I need a lot of help. When I make all the connections all the lights blink.

  66. turw July 1, 2013 8:09 am

    Hi, i’m newer in the arduino use. I’m interested to the alcohol meter. i want to use it to calculate the amount of the air for my experiment. if i have a continuious air + alcohol stream it’s possible to use the same connection. what can i do if i would use a concentartion of alcohol between 0 and 6 %
    thanks

  67. Rusphil Francisco August 9, 2013 7:48 am

    how can i put the LCD display in this project and what will be the program help me please!

    • Rusphil Francisco August 9, 2013 9:48 am

      thanks!

  68. Rusphil Francisco August 9, 2013 11:58 pm

    can i use mq2 sensor instead?

    • Daniel Andrade August 10, 2013 12:01 am

      MQ-2 is a Combustible Gas Sensor, SnO2, so if you want to make a breathalyzer I would say no. But you can make a SnO2 sensor.

      • Rusphil Francisco August 12, 2013 12:01 am

        mq303?

        • Daniel Andrade August 13, 2013 10:00 am

          Try looking it’s datasheet!

  69. Rusphil Francisco August 10, 2013 12:31 am

    well you don’t use the LM7805 in here? where did you get the supply?

  70. Rusphil Francisco August 13, 2013 7:51 am

    what if i use mq303 ?how will i connect it? it has 3 pins,

  71. Rusphil Francisco August 17, 2013 4:13 am

    why is not working?

    • Daniel Andrade August 17, 2013 10:23 am

      Show me the code!

      • Rusphil Francisco August 18, 2013 11:14 am

        it just use ur code but using mq303 it has 3 pins, the 2 is i connected to the A0 and the 1 is grnd and 3 is +5v. i just change the sensor by mq303

  72. Alexa Mejia August 19, 2013 6:48 pm

    hi i had a question what does this part of the code for and what do the numbers stand for
    int ledLevel = map(sensorReading, 500, 1023, 0, ledCount

    also im trying to get the BAC percentage with a seven segment display how would i do it

  73. kserkses November 18, 2013 3:41 pm

    Hi. How to read values from MQ-3? Or this code above is enough?

      • kserkses December 2, 2013 9:07 pm

        another question 😉
        Red led light is on faster than green, because green LED shines very poorly.
        How to fix it?

  74. kserkses December 5, 2013 7:01 am

    another question 😉
    Red led light is on faster than green, because green LED shines very poorly.
    How to fix it?

  75. Tristan Novak February 20, 2014 2:41 pm

    Hello, I am looking at the power consumption of this sensor. The heater will draw about 150mA max. My Arduino has a UA78M05 regulator, which can supply 500mA max. Therefore, if I don’t interface with too many other things, I should be able to power this from my Arduino, right?

  76. Thomas Boyer April 11, 2014 9:10 am

    Hello, I was just wondering, can we do this on a raspberry ?

  77. nithin poovanna May 6, 2014 3:36 pm

    hi,i wanted to know whats the output of the MQ-3 sensor ,what does the 500-1023 range specify exactly ,what values are those?does it provide the output in millivolts or is it the BAC values ?

    • Sam Brown July 11, 2015 12:43 am

      These little sensors aren’t known for high accuracy. You certainly wouldn’t want to use one as legal evidence. That being said, to try to convert your reading to a BAC level, two things would get you most of the way there:

  78. Bhushan January 13, 2015 6:50 pm

    hello can i make this project on ti’s msp430 family microcontrollers,can u help me with that?

  79. Peppinosh February 11, 2015 5:26 pm

    Hi Daniel, I bought LM393-MQ-3 Gas Sensor module. How should I connect this module to Arduino and what kind of conversion and calibration should I do to get the level of BAC and display it on a LCD.

    Thank you very much

  80. Rossine Gonzales March 11, 2015 12:05 pm

    will ATmega168 work in this project?

      • Rossine Gonzales March 13, 2015 2:20 pm

        Sir did i do the circuit right? I havent tested it yet. I forgot to buy the usb cord for the arduino.😁 I’m not sure if i did the circuit right in the external power supply.

        • Rossine Gonzales March 13, 2015 2:24 pm

          This is my circuit.

  81. naveen March 13, 2015 11:08 am

    which Arduino ide will suit ?

  82. Jeremiah Schmidt March 23, 2015 10:36 pm

    Ok so i have an external 5v supply from 9v battery using 7805 and capacitor. So i connect one H to 5v supply power, then does the other H go to 5v ground or arduino ground. I assume B goes to arduino ground? TY

  83. suhail April 27, 2015 5:39 pm

    can it works with arduino uno r3 ATmega328p…plss reply

    • James Senkiw May 16, 2015 5:14 am

      There is no reason it shouldn’t as long as you use an analog input. in the code shown A0 is the analog input. Any Arduino will work for this code. as far as what the BAC level I don’t know yet need to calibrate to known levels. Clearly the first point is easy Fresh air has no or 0 BAC as far as the second calibration point use another breathalyzer to calibrate to the next point or….. Another option is to use the weight vs time chart for a reference how much you drank @ what % of ETOH and time, that should give you a very good approximation of your BAC, do a little testing and math and you’ll have a fairly accurate BAC meter. BTW do not try this until you’ve completed burn in proceedure.

      • suhail May 17, 2015 6:23 pm

        ok thankyou and how can i show the %level of alcohol on LCD display with leds?

  84. Nathan June 16, 2015 10:47 am

    HI ! I want to know if it’s possible to convert the value to legal value in mg/l ?

    Thanks

  85. Lucas Shoshilos September 9, 2015 5:20 pm

    What is the effective range of the sensor?

  86. Miguel Stevens September 23, 2015 9:26 am

    Thanks for the tutorial! I see many people using a capacitor and / or mosfet.. But I don’t see it here? So ( i do hope ) it’s perfectly possible without those?

  87. Sai Reddy October 6, 2015 1:14 pm

    where is the mq3 sensor used in code?

  88. Ryan April 15, 2016 10:40 am

    can anyone help me find an arduino code. I cant find one that will work on my computer. thanks

  89. haziqah April 19, 2016 11:33 am

    hai daniel.. i’m haziqah from malaysia.. can i know how much your budget to build this sensor??

  90. Squid April 25, 2016 11:46 pm

    Well I thought everything was going great, seemed easy enough……but I cannot get my first light to light up. Calibration works well, sensor works, just that one light. I take out the light and it looks perfect……

  91. Rami Levin July 19, 2016 1:18 pm

    How would this work if I used a Raspberry Pi instead of the Arduino?

  92. Aditya jadhav October 5, 2016 4:16 am

    Nice one but would plese tell a different projects to me means which will be different from others

  93. Teja October 25, 2016 12:20 pm

    give me the code for MQ3 gas sensor interfacing with arduino

    • Teja October 25, 2016 12:26 pm

      sir its Urgent please send me the code

  94. Emanuel June 19, 2017 3:52 pm

    hey Daniel
    I have been working on developing a breath alayzer.
    can you send me the circuit diagram , i want to know the connctions of the LEDs and the POT and MQ3 with the arduino.
    thanks in advance.

  95. sunny leone September 28, 2017 4:16 am

    Please add a circuit diagram with fretting

  96. Todd November 10, 2017 1:52 am

    Hi, I like your write-up, but can you please post a circuit diagram or fritzing/cad image of it? Its a little challenging to see some of your connections based on the pics.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.