====== Модуль датчика пламени ======
===== Описание =====
Аналого-цифровой датчик пламени. Инфракрасный датчик улавливает диапазон волны от 760 до 1100 нм. При использовании датчика стоит быть осторожным, так как датчик улавливает и солнечный свет, и даже свет от ламп, что может привести к ложным выводам об обнаружении пламени. Пламя имеет особенность - интенсивность изменения длины волны очень высокая (от 15 до 20 Гц), что позволяет программно отсеивать свет от посторонних источников. Один из вариантов программной фильтрации можно увидеть в примере 2.

==== Технические характеристики ====
  * Напряжение питания 3,3 - 5 В
  * Потребляемый ток 15 мА
  * Длина волны 760 - 1100 нм
  * Угол обзора 60°
  * Имеет и аналоговый и цифровой выводы

==== Физические размеры ====
  * Модуль (Д х Ш х В): 47 х 14 х 8 мм

==== Плюсы использования данного датчика ====
  * Недорогое практичное решение
  * Имеет как аналоговой так и цифровой выводы
  * Просты в использовании

==== Минусы использования данных датчиков ====
  * Улавливают свет солнца и ламп, что может привести к ложному срабатыванию (для решения данной проблемы необходима программная обработка данных)

===== Примеры использования =====
**Пример 1.** В примере демонстрируется получение значений с цифрового и аналогового выводов. Вывод полученных значений в монитор Serial-порта. (Примеры тестировались на контроллерах Smart UNO)

^ Что нужно                                                                                                                          ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                                       | 1           |
| [[http://smartelements.ru/collection/datchiki-i-sensory/product/modul-datchika-plameni|Модуль датчика пламени]]  | 1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]             | 4           |

**Схема подключения:**
{{ главная:датчики:flame_sensor.jpg |}}

**Скетч для загрузки:**
<file Arduino>
const int analogSignal = A0; //подключение аналогового сигналоьного пина
const int digitalSignal = 8; //подключение цифрового сигнального пина
boolean noFlame; //переменная для хранения значения о присутствии света
int flame = 0; //переменная для хранения количества света

void setup() {
  pinMode(digitalSignal, INPUT); //установка режима пина
  Serial.begin(9600); //инициализация Serial порта

}

void loop() {
  noFlame = digitalRead(digitalSignal); //считываем значение о присутствии света
  flame = analogRead(analogSignal); // и о его количестве

  //вывод сообщения
  Serial.print("There is ");
  if (noFlame) Serial.print("no flame");
  else Serial.print("flame");
  Serial.print(", the flame value is ");
  Serial.println(flame);
  
  delay(100); //задержка 100 мс
}
</file>

**Пример 2.** В примере демонстрируется программная обработка аналогового сигнала для принятия решения о наличии пламени. Так как датчик довольно чувствителен к свету, чтобы повысить вероятность определения пламени, необходимо измерить как часто меняется длина волны. Если она меняется часто, сделать вывод о том что обнаружено пламя. (Примеры тестировались на контроллерах Smart UNO)

^ Что нужно                                                                                                                          ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                                       | 1           |
| [[http://smartelements.ru/collection/datchiki-i-sensory/product/modul-datchika-plameni|Модуль датчика пламени]]  | 1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]             | 4           |

**Схема подключения:**
{{ главная:датчики:flame_sensor.jpg |}}

**Скетч для загрузки:**
<file Arduino>
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 сек
}
</file>