This guide shows how to build a smoke detector that beeps when it detects flammable gas or smoke.
The MQ-2 smoke sensor is the one in the following figure:

The MQ-2 smoke sensor is sensitive to smoke and to the following flammable gases:
The resistance of the sensor is different depending on the type of the gas.
The smoke sensor has a built-in potentiometer that allows you to adjust the sensor digital output (D0) threshold. This threshold sets the value above which the digital pin will output a HIGH signal.

The voltage that the sensor outputs changes accordingly to the smoke/gas level that exists in the atmosphere. The sensor outputs a voltage that is proportional to the concentration of smoke/gas.
In other words, the relationship between voltage and gas concentration is the following:

The output can be an analog signal (A0) that can be read with an analog input of the Arduino or a digital output (D0) that can be read with a digital input of the Arduino.
The MQ-2 sensor has 4 pins.
| Pin | Wiring to Arduino Uno |
| A0 | Analog pins |
| D0 | Digital pins |
| GND | GND |
| VCC | 5V |
In this example, you will read the sensor analog output voltage and when the smoke reaches a certain level, it will make sound a buzzer and a red LED will turn on.
When the output voltage is below that level, a green LED will be on.
So, for this example, you’ll need:

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!
Follow these schematics to complete the project:
Upload the following sketch to your Arduino board (feel free to adjust the variable sensorThres with a different threshold value):
/******* All the resources for this project: https://randomnerdtutorials.com/ *******/ int redLed = 12; int greenLed = 11; int buzzer = 10; int smokeA0 = A5; // Your threshold value int sensorThres = 400; void setup() { pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT); pinMode(buzzer, OUTPUT); pinMode(smokeA0, INPUT); Serial.begin(9600); } void loop() { int analogSensor = analogRead(smokeA0); Serial.print("Pin A0: "); Serial.println(analogSensor); // Checks if it has reached the threshold value if (analogSensor > sensorThres) { digitalWrite(redLed, HIGH); digitalWrite(greenLed, LOW); tone(buzzer, 1000, 200); } else { digitalWrite(redLed, LOW); digitalWrite(greenLed, HIGH); noTone(buzzer); } delay(100); }
Copyright ©2025. All Rights Reserved Emblab THE RAVE INNOVATION