Датчик пламени позволяет определить наличие открытого пламени в зоне его видимости. Результатом работы датчика является аналоговый сигнал. В зависимости от расстояния до пламени и/или его мощности, пропорционально будет изменяться и уровень выходного сигнала. Максимальное значение ~1023 - означает, что датчик находится рядом с пламенем и/или его сила велика. В свою очередь минимальное значение ~0 - означает большую удаленность от пламени и/или его маленькую силу.
При использовании не подносите датчик вплотную к открытому пламени - это приведет к его расплавлению и выходу из строя.
Инфракрасный датчик улавливает диапазон волны от 760 до 1100 нм. При использовании датчика стоит быть осторожным, так как датчик улавливает и солнечный свет, и даже свет от ламп, что может привести к ложным выводам об обнаружении пламени. Пламя имеет особенность - интенсивность изменения длины волны очень высокая (от 15 до 20 Гц), что позволяет программно отсеивать свет от посторонних источников. Один из вариантов программной фильтрации можно увидеть в примере 2.
Пример 1. В примере демонстрируется получение значений с цифрового и аналогового выводов. Вывод полученных значений в монитор Serial-порта. (Примеры тестировались на контроллерах Smart UNO)
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Sensor shield | 1 |
Датчик пламени | 1 |
Шлейф х3 | 1 |
Схема подключения:
Скетч для загрузки:
const int flameSensor = A0; //пин подключения датчика пламени
int flame = 0; //переменная для хранения количества света
void setup() {
Serial.begin(9600); //инициализация Serial порта
}
void loop() {
flame = analogRead(flameSensor); // чтение данных с датчика
//вывод сообщения
Serial.print("The flame value is ");
Serial.println(flame);
delay(100); //задержка 100 мс
}
Пример 2. В примере демонстрируется программная обработка аналогового сигнала для принятия решения о наличии пламени. Так как датчик довольно чувствителен к свету, чтобы повысить вероятность определения пламени, необходимо измерить как часто меняется длина волны. Если она меняется часто, сделать вывод о том что обнаружено пламя. (Примеры тестировались на контроллерах Smart UNO)
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Sensor shield | 1 |
Датчик пламени | 1 |
Шлейф х3 | 1 |
Схема подключения:
Скетч для загрузки:
const int analogSignal = A0; //подключение аналогового сигнального пина
const int digitalSignal = 8; //подключение цифрового сигнального пина
boolean noFlame; //переменная для хранения значения об отсутствии света
int flame = 0; //переменная для хранения количества света
int newFlame = 0; //переменная для хранения количества света (новое измерение)
void setup() {
pinMode(digitalSignal, INPUT); //установка режима пина
Serial.begin(9600); //инициализация Serial порта
}
void loop() {
noFlame = digitalRead(digitalSignal); //считываем значение об отсутствии света
flame = analogRead(analogSignal); // и о его количестве
if (!noFlame) { //если цифровой датчик сообщает о том что есть сигнал
int count = 0; //счетчик количества смены интенсивности
for (int i = 1; i <= 10; i++ ){ //сделаем замер 10 раз подряд
delay(10); //задержка 10 мс
newFlame = analogRead(analogSignal); //получение данных о количестве света спустя 10 мс
if (flame != newFlame) count++; //посчитать изменение количества света
flame = newFlame; //присвоить переменной flame значение newFlame
}
if (count > 5) Serial.println("Fire alarm! There is flame!!!"); //сделать вывод о присутствии огня
}
delay(1000); //задержка 1 сек
}