Category :KOOKYE Kit


Arduino lesson – MQ-2 Smoke Sensor


In this project, we will go over how to build a smoke sensor circuit with an arduino board.

The smoke sensor we will use is the MQ-2. This is a sensor that is not only sensitive to smoke, but also to flammable gas.

The MQ-2 smoke sensor reports smoke by the voltage level that it outputs. The more smoke there is, the greater the voltage that it outputs. Conversely, the less smoke that it is exposed to, the less voltage it outputs.



  • Osoyoo UNO Board (Fully compatible with Arduino UNO rev.3) x 1
  • I2C LCD 1602 Display x 1
  • F/M jumpers
  • USB Cable x 1
  • PC x 1


  • Arduino IDE (version 1.6.4+)

About MQ2 Smoke Sensor

The MQ-2 smoke sensor is sensitive to smoke and to the following flammable gases:

  • LPG
  • Butane
  • Propane
  • Methane
  • Alcohol
  • Hydrogen

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 sensitivity according to how accurate you want to detect gas.


1. Wide detecting scope
2. High sensitivity and fast response
3. Long life and stable
4. Simple drive circuit

Due to its fast response time and high sensitivity, measurements can be taken as soon as possible. The sensor sensitivity can be adjusted by using the potentiometer.

Standard Working Condition

Symbol Parameter Name Technical Condition Remarks
VC Circuit voltage 5V±0.1 AC or DC
VH Heating voltage 5V±0.1 AC or DC
RL Load resistance adjustable
RH Heater resistance 33Kohm±5% Room temperature
PH Heating consumption Less than 800mW

Environment Condition

Symbol Parameter Name Technical Condition Remarks
TO Operating Temp. -20°C-50°C
TS Storage Temp. -20°C-70°C
RH Relative Humidity <95%
O2 Oxygen Concentration 21%(standard condition) Oxygen concentration can affect sensitivity Minimum value is 2%

Sensitivity Characteristics

Symbol Parameter Name Technical Condition Remarks
RS Sensor Resistance 3Kohm-30Kohm (1000ppm iso-butane) Detecting concentration scope:
200ppm-5000ppm LPG and propane
300ppm-5000ppm butane
5000ppm-20000ppm methane
300ppm-5000ppm H2
100ppm-2000ppm Alcohol
α (3000ppm/1000ppm iso-butane) Concentration slope rate ≤0.6
Standard detecting Condition Temp.: 20°C±2°C VC: 5V±0.1
Humidity:65%±5% VH:5V±0.1
Preheating Time Over 24 hours

How does it Work?

The MQ2 has an electrochemical sensor, which changes its resistance for different concentrations of varied gasses. The sensor is connected in series with a variable resistor to form a voltage divider circuit , and the variable resistor is used to change sensitivity. When one of the above gaseous elements comes in contact with the sensor after heating, the sensor’s resistance change. The change in the resistance changes the voltage across the sensor, and this voltage can be read by a microcontroller. The voltage value can be used to find the resistance of the sensor by knowing the reference voltage and the other resistor’s resistance. The sensor has different sensitivity for different types of gasses. The sensitivity characteristic curve is shown below for the different type of gasses.

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 greaterthe gas concentration,the greaterthe output voltage
  • The lowerthe gas concentration,the lowerthe output voltage

Working Mechanism

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 sensor value only reflects the approximated trend of gas concentration in a permissible error range, it DOES NOT represent the exact gas concentration. The detection of certain components in the air usually requires a more precise and costly instrument, which cannot be done with a single gas sensor. If your project is aimed at obtaining the gas concentration at a very precise level, then we don’t recommend this gas sensor.

Gas Detection : Basic Example

In this example, the sensor is connected to A0 pin. The voltage read from the sensor is displayed. This value can be used as a threshold to detect any increase/decrease in gas concentration.

void setup() {

void loop() {
    float sensor_volt;
    float sensorValue;

    sensorValue = analogRead(A0);
    sensor_volt = sensorValue/1024*5.0;

    Serial.print("sensor_volt = ");

Measurement : Approximation

These examples demonstrate ways to know the approximate concentration of Gas. As per the data-sheet of the MQx sensors, these equations are tested for standard conditions and are not calibrated. It may vary based on change in temperature or humidity.

  • Keep the Gas Sensor in clean air environment. Upload the program below.
void setup() {

void loop() {
    float sensor_volt;
    float RS_air; //  Get the value of RS via in a clear air
    float R0;  // Get the value of R0 via in H2
    float sensorValue;

    /*--- Get a average data by testing 100 times ---*/
    for(int x = 0 ; x < 100 ; x++)
        sensorValue = sensorValue + analogRead(A0);
    sensorValue = sensorValue/100.0;

    sensor_volt = sensorValue/1024*5.0;
    RS_air = (5.0-sensor_volt)/sensor_volt; // omit *RL
    R0 = RS_air/9.8; // The ratio of RS/R0 is 9.8 in a clear air from Graph (Found using WebPlotDigitizer)

    Serial.print("sensor_volt = ");

    Serial.print("R0 = ");

  • Then, open the serial monitor of Arduino IDE. Write down the value of R0 and this will be used in the next program. Please write down the R0 after the reading stabilizes.Replace the R0 below with value of R0 tested above . Expose the sensor to any one of the gas listed above.
void setup() {

void loop() {

    float sensor_volt;
    float RS_gas; // Get value of RS in a GAS
    float ratio; // Get ratio RS_GAS/RS_air
    int sensorValue = analogRead(A0);
    RS_gas = (5.0-sensor_volt)/sensor_volt; // omit *RL

          /*-Replace the name "R0" with the value of R0 in the demo of First Test -*/
    ratio = RS_gas/R0;  // ratio = RS/R0

    Serial.print("sensor_volt = ");
    Serial.print("RS_ratio = ");
    Serial.print("Rs/R0 = ");




Arduino MQ-2 Smoke Alarm

The circuit we will build is shown below.

Arduino MQ-2 smoke sensor circuit

So to power the smoke sensor, we connect pin 2 of the smoke sensor to the 5V terminal of the arduino and terminal 3 to the GND terminal of the arduino. This gives the smoke sensor the 5 volts it needs to be powered.

The output of the sensor goes into analog pin A0 of the arduino. Through this connection, the arduino can read the analog voltage output from the sensor. The arduino board has a built-in analog-to-digital converter, so it is able to read analog values without any external ADC chip.

Depending on the value that the arduino reads determines the action that will occur with the circuit. We will make it in our code that if the sensor outputs a voltage above a certain threshold, the buzzer will go off, alerting a user that smoke has been detected.

These are all the physical connections in order for our circuit to work.

Code for the Arduino MQ-2 Smoke Sensor Circuit

Being that we’ve just gone over the circuit schematic for the smoke sensor circuit, all we need know is the code necessary to upload to the arduino for this smoke alarm cicrcuit to work.

The code that we need to upload is shown below.

/*Code for MQ-2 Smoke Sensor Circuit Built with an Arduino Board*/

const int sensorPin= 0;
const int buzzerPin= 13;
int smoke_level;

void setup() {
Serial.begin(115200); //sets the baud rate for data transfer in bits/second
pinMode(sensorPin, INPUT);//the smoke sensor will be an input to the arduino
pinMode(buzzerPin, OUTPUT);//the buzzer serves an output in the circuit

void loop() {
smoke_level= analogRead(sensorPin); //arduino reads the value from the smoke sensor
Serial.println(smoke_level);//prints just for debugging purposes, to see what values the sensor is picking up
if(smoke_level > 200){ //if smoke level is greater than 200, the buzzer will go off
digitalWrite(buzzerPin, HIGH);
digitalWrite(buzzerPin, LOW);

The first block of code declares and initializes 3 variables. The sensorPin represents the smoke sensor. It is initialized to 0, because it will be connected to analog pin A0 of the arduino board. The next variable, buzzerPin, represents the pin that the anode of the buzzer will be connected to; it is initialized to 12 because it will be connected to digital pin D12 of the arduino board. And the variable, smoke_level, represents the amount of smoke that the smoke sensor picks up.

The next block of code defines the baud rate and the input and output of the circuit. The sensorPin, which is the smoke sensor pin, serves as the input of the circuit. This sensor is input into the arduino so that the arduino can read and process the value. The buzzerPin serves as the output. If the smoke level is above a certain threshold, the output of the circuit, the buzzer, will go off.

The next block of code uses the analogRead() function to read the value from the sensorPin (the smoke sensor). This will be a numerical value from 0 to 1023. 0 represents no smoke, while 1023 represents smoke at the absolute maximum highest level. So the variable, smoke_level, represents the smoke level that can range from 0 to 1023. We put a line to print this value just for debugging purposes, so that you can see what values are being returned from this function. In our code, we make it so that if the smoke level rises above 200, we will trigger the buzzer to sound by sending the digital pin D12 high. So 200 is our threshold level. If the smoke level is below this value, then the buzzer does not go off.

This last block of code was the loop() function. This is the part of code that repeats over and over in an infinite loop. This means that our code is always checking to see what the smoke_level is, so that it can know whether to trigger the buzzer or not.

And this is how a smoke sensor works with


Arduino Tank Car Kit Lesson 7:Control Robot Tank Car through Wifi and Bluetooth

Robot Tank Car Kit Lesson 7:Control Robot Tank Car through Wifi and Bluetooth

Authorized Amazon Seller

Robot Tank Car Chassis

Buy from US Buy from UK Buy from DE Buy from IT Buy from FR Buy from ES
amazon_com amazon_co_uk amazon_de amazon_it amazon_fr amazon_es

Robot Tank Car Electronic Parts Kit

Buy from US Buy from UK Buy from DE Buy from IT Buy from FR Buy from ES
amazon_es amazon_co_uk amazon_es amazon_es amazon_es amazon_es

I. Objective:

In this lesson, we learn how to control the Robot car mobile APP through WiFi and Bluetooth. , we just use the ESP8266 Wifi board as expansion board and control the tank car via IR receiver in previous lessons. In this lesson, we will learn how to use the phone to connect the hot spot from esp8266 board and control the car movement via phone app. At the same time, you also can put the bluetooth into the esp8266 board and control the car movement via phone bluetooth.

II. How it Work

There is a hot spot called DoitWIFI_Config from ESP8266 board in working time and you could connect the hot spot via phone wifi without password. When turn the switch of ESP8266 board to “ON”, the message from the arduino and esp8266 can be exchanged by serial ports.The control command can be send to ESP8266 via phone app and then send to arduino via serial ports between arduino and ESP8266 board.

When turn the switch of ESP8266 board to “1” and “2” position to disconnect the serial ports between arduino and ESP8266 board. If you put the bluetooth module on esp8266 board and connect it via phone bluetooth, the message from the arduino and esp8266 can be exchanged by serial ports via bluetooth module.


Find more about the ESP8266 Wifi shiled board, please visit here:

III. Software Installation:

Step 1: Install latest Arduino IDE (If you have Arduino IDE version after 1.1.16, please skip this step)
Download Arduino IDE from, then install the software.

Step 2:Download Lesson 7 sample code from, unzip the download zip file, you will see a folder called tank_robot_lesson7.

Step 3: Connect UNO R3 board to PC with USB cable, Open Arduino IDE -> click file -> click Open -> choose code “tank_robot_lesson7.ino” in tank_robot_lesson7 folder, load the code into arduino.


Step 4: Choose corresponding board and port for your project,upload the sketch to the board.

Note: Bluetooth module and Arduino board communicate with each other through UART serial port. Please remove bluetooth module before uploading sketch in Arduino board, or the sketch will be uploaded unsuccessfully.


Step 5: Download the APP and install it on you phone:

Android Phone APP:

iOS Phone APP:  search osoyoo arduino robot car in apple app store

Arduino Robot tank APP
Note: This android app can just support Android phone and we offer the app source code( You could revise and personalize the code as per your needs.

IV. Understand the Code:

This program is used to receive the control command from phone app.

//WiFi / Bluetooth through the serial control
void do_Uart_Tick()

  char Uart_Date=0;
    size_t len = Serial.available();
    uint8_t sbuf[len + 1];
    sbuf[len] = 0x00;
    Serial.readBytes(sbuf, len);
    memcpy(buffUART + buffUARTIndex, sbuf, len);//ensure that the serial port can read the entire frame of data
    buffUARTIndex += len;
    preUARTTick = millis();
    if(buffUARTIndex >= MAX_PACKETSIZE - 1) 
      buffUARTIndex = MAX_PACKETSIZE - 2;
      preUARTTick = preUARTTick - 200;
  if(buffUARTIndex > 0 && (millis() - preUARTTick >= 100))//APP send flag to modify the obstacle avoidance parameters
  { //data ready
    buffUART[buffUARTIndex] = 0x00;
      Serial.println("You have modified the parameters!");//indicates that the obstacle avoidance distance parameter has been modified
    else  Uart_Date=buffUART[0];
    buffUARTIndex = 0;
  switch (Uart_Date)    //serial control instructions
    case '2':
            Drive_Status=MANUAL_DRIVE; Drive_Num=GO_ADVANCE;Serial.println("forward"); break;
    case '4':
            Drive_Status=MANUAL_DRIVE; Drive_Num=GO_LEFT; Serial.println("turn left");break;
    case '6':
            Drive_Status=MANUAL_DRIVE; Drive_Num=GO_RIGHT; Serial.println("turn right");break;
    case '8':
            Drive_Status=MANUAL_DRIVE; Drive_Num=GO_BACK; Serial.println("go back");break;
    case '5':
            Drive_Status=MANUAL_DRIVE; Drive_Num=STOP_STOP;buzz_off();Serial.println("stop");break;
    case '3':
            Drive_Status=AUTO_DRIVE_UO; Serial.println("avoid obstacles...");break;
    case '1':
          Drive_Status=AUTO_DRIVE_LF; Serial.println("line follow...");break;

V. Hardware Installation:

Step 1: Install ESP8266 Expansion Board on UNO R3 board.

Step 2: Bluetooth Connection

 1. Put the bluetooth module into ESP8266 wifi Board as the following picture.


2. If you use bluetooth control car, put switch in “1,2” position.

ESP8266_ON ESP8266_OFF

3. Put two 12865 batteries into battery box and turn the swith of battery box to “ON”.

4.If you control the robot car through Bluetooth, please turn on bluetooth of your Android or iOS phone which you have installed APP and scan bluetooth(different bluetooth module will scan different bluetooth name), Click connect and enter password “1234” or “0000” if no change (You can change wifi or bluetooth settings in Android phone to switch to control car through wifi or bluetooth):


5. Open app>> select bluetooth mode>> then you can controller the robot car through bluetooth.


Step 3:Wifi Connection

 1. Pull the bluetooh out of esp8266 board and turn the switch of esp8266 to “on” position.

 2. If you want to control the robot car through WiFi, please scan WiFi hotspot with your Android or apple phone which you have installed APP and search for wifi named” DoitWIFI_Config”, Click connect(no password needed).


3. Open app>> select WiFi mode>> then you can controller the robot car through wifi


4.Open app>> select wifi mode>> then you can controller the robot car through phone wifi hotspot.



There are three working mode: manual control, obstacle avoidance and tracking. Users can switch freely among three working mode.
1) In manual control mode, you can click buttons (^) (V) (<) (>) to control the Robot car to move forward and backward, turn right and left. Meanwhile, the APP can observe the car real time movement.

2) Click “tracking” button of App to switch the current mode to tracking mode. The Robot car will move forward along the black line in white background. Meanwhile, the APP can observe the car real time movement. Press “||” button to stop moving and click other button to change Robot car working mode. To learn more about this mode, please review our lesson 4.

3) Click “Obstacle” button to switch the current mode to obstacle avoidance mode. The Robot car can be driven forward continuously and stopped and steered away once any obstacle in its way. Press “||” button to stop moving and then click other button to change Robot car working mode. To learn more about this mode, please review our lesson 5.


Smart Home IoT センサー キット

smart home &IOT



ArduinoやRaspberry Pi用の非常に良いセンサーとコンポーネント キットとだと思います。このキットはスマートホーム用のために、専門にデザインしました。16種類のセンサーを含み、 センサーにラベルも貼り済みです。

弊社のSmart Home IoT センサー キットを利用して、ArduinoやRaspberry Piと接続して、何処でも家の設備を制御、監視と保護できます。