Hello guys. I'm doing a simple prototype for a scholar project with Arduino. Detects fire by the ambient light sensor DFR0026 (I'm testing it with a lighter flame at 5cm aprox.). Now I want to use a IR Bandpass Filter to make just the lighter flame increase the value from the DFR0026, ignoring all the environment but the flame. Better if the IR filter must be smaller as possible, but there are specific filter specifications better for this?
DFRobot doesn't seem to provide information about what components are used in that sensor, but my guess is that it is some sort of phototransistor.
In any case, a filter will not increase the sensor output value, rather it will narrow the sensor response to the transmitted wavelengths.
The value increases when detects the flame, I want the filter to only detect the flame emissions, because the environment light varies the value. Example: Normally the value is in ~100, and when the flame is close ~200. Now if I move it to a room with higher light, the average value will change, imagine more than 200, so the condition that value>200 to determine if there is the fire is invalid, having 200 as base, when the flame is there the value could be ~400. And I’m mean specifications for the IR filter.
With optical sensors, the threshold value you choose for "fire detection" will depend on the lighting conditions, no matter what else you do.
The usual way to get around that is to use multiple sensors and a more complex test for positive detection.
For example one sensor might measure the ambient light level and use that information to set the detection level for the output of the filtered-light sensor.
Just a thought, what do you do if there is smoke and no flame? Smoke usually comes first.
Here is some information that will help:
What is a flame detector and how does it work | Instrumentation and Control Engineering
Commercial and domestic fire detectors are usually one or more of three types. This assumes your project is some sort of warning device?
Optical for smoke particles.
Thermal for heat.
Ionisation for the products of combustion.
I guess you are looking at the flame which is probably not the best approach if you want a warning when the flame is somewhere else.
I remember some instrumentation, flame photometric detectors, that looked at changes in the colour of the flame, where either sulphur or phosphorous was present. Other devices are mainly for flame failure.
Why not try several sensors? You can get visible and IR photodiodes with built in IR filtering and an op amp as well. I think Sharp used to do them as well as Texas.
The op amp makes them very easy to use with a voltage analog output.
Or visible light filter..?
Obviously, in a serious project, the priority is the detection of factors that produce fire, to prevent it before got flames. But why I’m interested in the flame detection? Because there is a project for a school exhibition (That is in a month, neither we have so many time and resources to make something so more complex), the fact it detects the flame “magically“ (Viewing it as spectator) works at least to call the public attention. When it is detected, the movement of our “turret” will be activated, and maybe a buzzer if can be not so loudly, at least to say that do something when the flame is detected, I don’t know if we’ll got something to spray the fire in the prototype.
I once detected a flame with an IR photo diode, some fourty years ago.
From memory, detecting the sound a flickering flame makes proved the easiest way. So try coding to detect the variation of the A/D output, not it's absolute (static) value.
Leo..
How do you know the light sensor will detect IR?
Google;
arduinio ir sensor
Tom....
![]()
A common 5mm black IR LED might be sensitive enough for a flame at 5cm.
Leo..
A "homemade" IR filter is made from any old floppy disk (who still uses them?): you open it, take the disk, and cut it. But it's generally used on video cameras to be able to detect the position of IR leds (a few years ago, a head tracker for Flight Simulator worked that way). But I don't know if a normal light sensor would be sensitive enough to IR frequencies (I don't think so).
So I agree with @Wawa, but there still needs to be some testing to verify it can detect a flame.
If you specifically want to detect an open flame, like a candle, you look at what makes it visible.
Obviously, it gives off heat above it, compared to sideways, and mainly, it's going to be yellow if it's rich in carbon. Carbon based flames also give off carbon dioxide.
It would be straightforward if you were in a dark room, but not in a room full of other light sources.
If it's an exhibition and you know where the flame is going to appear, it's easier. Use a focused optical sensor against a dark background.
Here's a challenge for you.
There's a move going on to substitute hydrogen for natural gas in boilers etc.
Have you ever seen a hydrogen flame? Probably not as it's invisible. The carbon that gives "normal" flames their colour, isn't there. It's just water vapour. How would you detect a hydrogen flame?
A clue, it's hot and the water vapour condenses. Think cold mirrors.
Well, actually I need, is a way to decrease the value is from the sensor, I don’t know if the DFR0026 has a limit, but above 1000 is like doesn’t increase more. The problem really is if there is a limit, and know the “base“ value to determine when the flame is increasing it. But days before the exhibition we will make tests in the room will be in, always with lights on. I think with the tests and monitoring will be fine, adapting it if is necessary, is just change in the code the constant that represent in what range is the flame is present.
The Arduino (Uno, Classic Nano, etc.) analog input is limited to 1023 maximum.
Since this is a demonstration, I recommend you not to set a fixed limit in the code, but to provide a manual "calibration". I.e. by pressing a button Arduino reads the current values ​​from the sensor (averaging them over a period of 3-4 seconds) and uses this as a reference value: the threshold value will then be an increased percentage of the detected value (e.g. if 150% is ok, put "int thresh=avg*1.5;").