Tutorial: Breathalyzer using Alcohol Gas Sensor with Arduino

In this tutorial, we will demonstrate how to use the gas sensors and also how you can make a homemade Breathalyzer using an alcohol sensor, Arduino and LEDs


Material List

1x Arduino

1x Alcohol Sensor

1x Breadboard


6x Resistor 330Ω

1x Resistor 10KΩ

Some jumpers

1. How it works

1.1) Gas Sensor

The gas sensor operates as potentiometer, but instead of get the resistance variation, we will take the variation of gas concentration(0d to 1023d).

1.2) LEDs (Bargraph)

Arduino will transform the variation of gas concentration, that ranging 0d to 1023, in a scale of 6 LEDs using the function map(maxreading01023, 0, qtyLED).

1.3) Adaptations

For this aplication we use a mouthwash, so we changed  the scale of (0d to 1023) to (0d to 200d), because the mouthwash not contain a high level of alcohol. So we use the funcion map(maxreading0200, 0, qtyLED).

2. The Sketch

#define qtyLED 6  //Declare the quantity of LED's for the bar graph
int LEDs[qtyLED]; //Array to store the states of the LEDs
int sensorPin = 0; //Variable that will hold the current value of the sensor
int time; //Variable that will hold the amount of time for the sensor to be read
int maxreading; //Variable to store the maximum value read during the last reading
//For loop counting variables
int i;
int j;
void setup()

  //Initialize the counting variables
  while(i < qtyLED) //While i is less than the number of defined LED's
  {                 //...save the value of i+2 in the LEDs array. we add 2 so that it represents one of our digital pins
    LEDs[i] = j;
  for(i=0;i<qtyLED;i++) //Define the LED Pins as outputs. In this case 2->7
    pinMode(LEDs[i], OUTPUT);
  pinMode(13, OUTPUT); //Define pin 13 as an output so we can show when we are not taking a reading from the sensor(Blinkin
                       //...Or when we are taking a reading from the sensor (Solid)

void loop()
  PORTB = PORTB ^ 100000;  //Invert pin 13 to give the LED a blinking effect
  delay(100); //Delay so that the user can see the blinking happen
  int sensor = analogRead(sensorPin); //Read the sensors value and store it in the sensor variable
  if(sensor >= 40) //If the value is less that 40(value for the chemical being used in this example)
    digitalWrite(13, HIGH); //Turn on the blue LED indecating that the sensor detected a minimal amount of alcohol (sensor >= 40)
    maxreading = 0;         //Initiate the max reading to 0
    for(time = 0;time <= 5000;time++) //Read the sensor for 5 seconds
    {                                 //...every millisecond update the value of the max reading of the sensor
      int sensor = analogRead(sensorPin);
      if(sensor > maxreading)
        maxreading = sensor;
    digitalWrite(13, LOW); //As soon as the reading is complete turn off the blue LED
    int level = map(maxreading, 0, 200, 0, qtyLED); //Map the value from 0 to 200(reading from sensor) to 0 and the number of LEDs which is 6
                                                    //...0 to 6(LEDs) level determines how many of them turn on.
    for(i=0;i<qtyLED;i++) //Compare all the leds current state with the value of the level that was read
    {                     //if for example the level read was 5, then LEDs 2->6 would turn on.
      if (i < level) //If the current LED being checked is less that the level
        digitalWrite(LEDs[i], HIGH); //...Turn it on
      else //If the current LED being checked is higher than the level
        digitalWrite(LEDs[i], LOW); //...Turn it off
    delay(10000); //Wait 10 seconds for the user to get the reading from the led bar graph
    for(i=0;i<qtyLED;i++) //Turn off all the LEDs

3. The Circuit



Views: 9613

Comment by clivelobo on March 9, 2016 at 4:59am

please give a detailed explanation on how to implement this and which software did you'll use?


You need to be a member of GarageLab (arduino, electronics, robotics, hacking) to add comments!

Join GarageLab (arduino, electronics, robotics, hacking)

Latest Activity

Roosevelt Sebial left a comment for Roosevelt Sebial
"I have left a message to your given e-mail address Mr. Frank. Thanks!"
1 hour ago
Eric Delgado updated their profile
2 hours ago
Jose Gustavo Abreu Murta left a comment for Jose Gustavo Abreu Murta
"SPAM !!!!"
6 hours ago
Selig Plapp updated their profile
8 hours ago
Alexander Perez updated their profile
11 hours ago
Marco Mauro left a comment for Marco Mauro
"replyin in PM"
16 hours ago
AUGUTIN AZIAKOU updated their profile
17 hours ago
Dmitry Slepov posted a blog post

Control smart RGBW LEDs from your Tibbo Project System

Test application for the FPGA Tibbit (#57) in the smart LED controller configuration…See More
Profile IconAUGUTIN AZIAKOU, FRANK KWABENA and RossBurk joined GarageLab (arduino, electronics, robotics, hacking)
Profile IconOjasvi Gupta, Simran Singh, ebraam yousif doud and 6 more joined GarageLab (arduino, electronics, robotics, hacking)
Richard Reubenstone left a comment for David
"Hi, David. Please see the friends invite I sent you recently. I wanted to introduce you to…"
Sep 23
GarageLab posted a blog post
Sep 19
Faiyaz Ahamed is now a member of GarageLab (arduino, electronics, robotics, hacking)
Sep 16
Sylvain Monette is now a member of GarageLab (arduino, electronics, robotics, hacking)
Sep 15
vivid posted blog posts
Sep 14
Profile IconAutha Rachman, Nguyễn Anh Tú and mohammad nabe joined GarageLab (arduino, electronics, robotics, hacking)
Sep 14
vivid and Richard Reubenstone are now friends
Sep 9
vivid joined Marcelo Rodrigues's group


Group for the Arduino communitySee More
Sep 9
Anatolio Filho is now a member of GarageLab (arduino, electronics, robotics, hacking)
Sep 5
Richard Reubenstone added a discussion to the group Arduino

RF Controlled Robot Using Arduino

I just joined GarageLab and the Arduino group. My son, Steven, is the Founder & CEO of…See More
Aug 30

© 2016   Created by Marcelo Rodrigues.   Powered by

Badges  |  Report an Issue  |  Terms of Service