Arduino Nano ESP32 - Flame Sensor

The flame sensor can detect and measure the infrared light coming from a flame. It's useful for spotting fires and is also known as an infrared flame sensor or fire sensor. This sensor provides two types of information: one is like a simple switch (either on or off), and the other is analog signal showing the strength of the flame.

In this tutorial, we'll learn how to use an Arduino Nano ESP32 with a flame sensor to detect flames. Specifically, we'll cover these steps:

esp32 flame sensor

Afterward, you can modify the code to activate a warning horn when the fire is detected.

Hardware Preparation

1×Arduino Nano ESP32
1×USB Cable Type-C
1×Flame Sensor
1×Breadboard
1×Jumper Wires
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano
1×(Recommended) Breakout Expansion Board for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables.

Overview of Flame Sensor

The infrared flame sensor can detect a flame or check how much infrared light the flame gives off. So, it helps us spot fires. This sensor offers two choices using a digital output pin and an analog output pin.

These sensors are designed to catch a certain types of infrared light emitted by flames while ignoring other types, like the heat from people or indoor lights. But like any sensor, they have their limits, and sometimes they might make mistakes, either saying there's a fire when there isn't (false positive) or missing a fire when it's there (false negative).

Pinout

The flame sensor includes four pins:

  • VCC pin: It needs to be connected to VCC (3.3V to 5V).
  • GND pin: It needs to be connected to GND (0V).
  • DO pin: It is a digital output pin. It is HIGH if the flame is not detected and LOW if detected. The threshold value for flame detection can be adjusted using a built-in potentiometer.
  • AO pin: It is an analog output pin. The output value decreases as the infraed level is decreased, and it increases as infraed level is increased.
Flame Sensor Pinout
image source: diyables.io

Furthermore, it has two LED indicators:

  • One PWR-LED indicator for power.
  • One DO-LED indicator for the flame state on the DO pin: it is on when flame is present.

How It Works

For the DO pin:

  • The module has a built-in potentiometer for setting the infrared threshold (sensitivity).
  • When the infrared intensity is above the threshold value, the flame is detected, the output pin of the sensor is LOW, and the DO-LED is on.
  • When the infrared intensity is below the threshold value, the flame is NOT detected, the output pin of the sensor is HIGH, and the DO-LED is off.

For the AO pin:

  • The higher the infrared intensity in the surrounding environment, the higher the value read from the AO pin.
  • The lower the infrared intensity in the surrounding environment, the lower the value read from the AO pin.

Note that the potentiometer does not affect the value on the AO pin.

Wiring Diagram

Since the flame sensor module has two outputs, you can choose to use one or both of them, depending on what you need.

  • The wiring diagram between Arduino Nano ESP32 and the flame sensor when using DO only.
The wiring diagram between Arduino Nano ESP32 and Flame Sensor

This image is created using Fritzing. Click to enlarge image

  • The wiring diagram between Arduino Nano ESP32 and the flame sensor when using AO only.
The wiring diagram between Arduino Nano ESP32 and fire sensor

This image is created using Fritzing. Click to enlarge image

  • The wiring diagram between Arduino Nano ESP32 and the flame sensor when using both AO an DO.
The wiring diagram between Arduino Nano ESP32 and infrared flame sensor

This image is created using Fritzing. Click to enlarge image

Arduino Nano ESP32 Code - Read value from DO pin

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-flame-sensor */ #define DO_PIN D2 // The Arduino Nano ESP3 connected to DO pin of the flame sensor void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // initialize the ESP32's pin as an input pinMode(DO_PIN, INPUT); } void loop() { int flame_state = digitalRead(DO_PIN); if (flame_state == HIGH) Serial.println("No flame dected => The fire is NOT detected"); else Serial.println("Flame dected => The fire is detected"); }

Detailed Instructions

  • If this is the first time you use Arduino Nano ESP32, see how to setup environment for Arduino Nano ESP32 on Arduino IDE.
  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino Nano ESP32
  • Direct the flame sensor to a flame.
  • Check out the result on the Serial Monitor.
COM6
Send
No flame dected => The fire is NOT detected No flame dected => The fire is NOT detected Flame dected => The fire is detected Flame dected => The fire is detected Flame dected => The fire is detected No flame dected => The fire is NOT detected No flame dected => The fire is NOT detected No flame dected => The fire is NOT detected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Please keep in mind that if you notice the LED status remaining on constantly or off even when the sensor faces to a flame, you can adjust the potentiometer to fine-tune the sensitivity of the sensor.

Arduino Nano ESP32 Code - Read value from AO pin

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-flame-sensor */ #define AO_PIN A4 // The Arduino Nano ESP3 connected to AO pin of the flame sensor void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } void loop() { int infrared_value = analogRead(AO_PIN); Serial.print("The AO value: "); Serial.println(infrared_value); }

Detailed Instructions

  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino Nano ESP32
  • Direct the flame sensor to a flame.
  • Check out the result on the Serial Monitor.
COM6
Send
245 246 246 573 677 949 955 1004 1007 1013 1018 641 543 340 179
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

This tutorial uses the analogRead() function to read values from an ADC (Analog-to-Digital Converter) connected to a sensor or component. The Arduino Nano ESP32's ADC is suitable for projects that do not require high accuracy. However, for projects needing precise measurements, keep the following in mind:

  • The Arduino Nano ESP32's ADC is not perfectly accurate and might require calibration for correct results. Each Arduino Nano ESP32 board can vary slightly, so calibration is necessary for each individual board.
  • Calibration can be challenging, especially for beginners, and might not always yield the exact results you want.

For projects requiring high precision, consider using an external ADC (e.g ADS1115) with the Arduino Nano ESP32 or using another Arduino, such as the Arduino Uno R4 WiFi, which has a more reliable ADC. If you still want to calibrate the Arduino Nano ESP32's ADC, refer to the ESP32 ADC Calibration Driver.

Video Tutorial

Learn More

※ OUR MESSAGES

  • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!