How to Track Fire With Flame Sensor
by sfeelectronics in Circuits > Sensors
2767 Views, 5 Favorites, 0 Comments
How to Track Fire With Flame Sensor
![IMG_1223.JPG](/proxy/?url=https://content.instructables.com/FV9/9V8E/J6WGSGZ2/FV99V8EJ6WGSGZ2.jpg&filename=IMG_1223.JPG)
How do we track fire using 8 Channel Flame Sensor that will be driven by servo motor?
The workflow of this fire tracking is the reading of 8 Channel Flame Sensor simultaneously, and then searched for the smallest flame value using the MIN function of the Arduino. Why do we use the smallest? Because the closer the source of flame, the smaller the value will be generated.
After searching for the smallest value, it will then look for the position on which the Flame Sensor detects the flame, which will serve as the reference point of movement of the servo motor. If the first flame sensor is read, then the servo movement will go to 180 degrees. If the 8th flame sensor is read, then the servo will move to 0 degrees.
Materials You Need
![IMG_1229.JPG](/proxy/?url=https://content.instructables.com/FZ6/4WWE/J6WGSPCZ/FZ64WWEJ6WGSPCZ.jpg&filename=IMG_1229.JPG)
You will need:
- SFE 8 Channel Flame Sensor
- SFE Minsys Atmega8 with Serial
- Female to Female Jumper Wires
- SG-5010 Servo Motor
- USB Converter to Serial Cable
Setup
![flame sensor.png](/proxy/?url=https://content.instructables.com/FB3/D33B/J6WGSR8Y/FB3D33BJ6WGSR8Y.png&filename=flame sensor.png)
Connect SFE 8 Channel Flame Sensor, SFE Minsys Atmega8 with Serial, and SG-5010 Servo Motor with jumper wires as schematic above or configuration pin below:
- A0 = A Flame Sensor
- A1 = B Flame Sensor
- A2 = C Flame Sensor
- Data Servo = 10
Code
![web-page_1300-265.jpg](/proxy/?url=https://content.instructables.com/F6N/NIZW/J6WGST3D/F6NNIZWJ6WGST3D.jpg&filename=web-page_1300-265.jpg)
First, declaration the pin to use:
#define selectorA A0
#define selectorB A1
#define selectorC A2
And then, port initialization used:
Servo myservo; // create servo object to control a servo
void setup()
{
Serial.begin(9600);
pinMode(selectorA, OUTPUT);
pinMode(selectorB, OUTPUT);
pinMode(selectorC, OUTPUT); myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
Create a function to enable the selector and read the flame sensor:
int valFlame[8];
void activeSelector(int a, int b, int c)
{
digitalWrite(selectorA, a);
digitalWrite(selectorB, b);
digitalWrite(selectorC, c);
}
void readFlame()
{
activeSelector(0,0,0);
valFlame[0] = analogRead(A3);
activeSelector(0,0,1);
valFlame[1] = analogRead(A3);
activeSelector(0,1,0);
valFlame[2] = analogRead(A3);
activeSelector(0,1,1);
valFlame[3] = analogRead(A3);
activeSelector(1,0,0);
valFlame[4] = analogRead(A3);
activeSelector(1,0,1);
valFlame[5] = analogRead(A3);
activeSelector(1,1,0);
valFlame[6] = analogRead(A3);
activeSelector(1,1,1);
valFlame[7] = analogRead(A3);
}
The main program, this program will find the minimum value and then be used as a reference error for servo movement.
int minVal=1024;
int error;
void loop()
{
for(int i=0; i<=7; i++)
{
readFlame();
minVal = min(minVal, valFlame[i]);
if(minVal == valFlame[i])
{
error = i;
}
}
myservo.write(error*23);
}
In the above program, the servo will be given the pulse width according to error * 23. The value of 23 is taken due to the maximum degree of servo 180 and the number of 8 sensors, so that 180/8 = 22.5 will be rounded to 23.
Check the Video to Know More
![Tracking Api Dengan 8 Channel Flame Sensor](/proxy/?url=https://content.instructables.com/F40/J7SI/J6WGTUX1/F40J7SIJ6WGTUX1.jpg&filename=Tracking Api Dengan 8 Channel Flame Sensor)