В этой статье мы рассмотрим подключение датчика огня (Flame Sensor) к плате Arduino Uno и создание на его основе системы пожарной сигнализации. Датчик огня имеет в своем составе фотодиод для обнаружения света (огня) и операционный усилитель для управления его чувствительностью. Он используется для обнаружения огня (пламени) и при его обнаружении он формирует на своем выходе сигнал высокого уровня (HIGH). Этот сигнал считывается платой Arduino, которая выдает сигнал тревоги на зуммер и светодиод.
Применение датчика огня на нашем сайте мы также рассматривали в составе робота для борьбы с огнем.
Датчик огня
Датчик огня представляет собой устройство, предназначенное для обнаружения огня или пламени. При обнаружении огня затем могут выполняться различные действия: включение звуковой сигнализации, деактивация линии с топливом, включение системы тушения огня и т.д.
Существуют различные датчики обнаружения огня (пламени), например, ультрафиолетовый детектор, инфракрасный детектор, инфракрасные термические камеры, комбинированный инфракрасный-ультрафиолетовый детектор и т.д.
Во время горения огня выделяется небольшое количество инфракрасного света, который может быть принят (обнаружен) с помощью фотодиода (инфракрасного приемника). Затем мы будем использовать операционный усилитель чтобы проверить изменения напряжения на выходе инфракрасного приемника (IR receiver). При обнаружении огня на выходном контакте датчика (DO) будет формироваться напряжение низкого уровня (0V), а при отсутствии огня на его выходном контакте будет напряжение высокого уровня (5V).
В этом проекте мы использовали инфракрасный датчик огня. В нем используется датчик YG1006, который имеет в своем составе высокоскоростной и высокочувствительный NPN кремниевый фототранзистор. Он может обнаруживать инфракрасный свет с длиной волны от 700 до 1000 нм, а его угол обнаружения приблизительно составляет 60°. Модуль датчика огня состоит из фотодиода (инфракрасного приемника), резистора, конденсатора, потенциометра и компаратора LM393 в виде одной интегральной схемы. Чувствительность регулируется имеющимся на плате потенциометром. Рабочее напряжение составляет от 3.3v до 5v DC (постоянного тока), с цифровым выходом.
Назначение контактов датчика огня приведено в следующей таблице.
Контакт | Описание |
Vcc | питающее напряжение 3.3 – 5V |
GND | земля |
Dout | цифровой выход |
Возможные применения датчика огня:
- водородные станции;
- нефтепроводы и газопроводы;
- самоходное оборудование;
- оборудование в ядерной энергетике;
- ангары для самолетов;
- помещения для турбин.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress) (или любая другая версия платы Arduino).
- Датчик огня (Flame sensor) (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Зуммер (Buzzer) (купить на AliExpress).
- Резистор 220 Ом (купить на AliExpress).
- Соединительные провода.
Работа схемы
Схема подключения датчика огня к плате Arduino Uno представлена на следующем рисунке.
Плата Arduino Uno
Arduino Uno представляет собой плату с открытым исходным кодом, построенную на основу микроконтроллера ATmega328p. Она имеет 14 цифровых контактов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых контактов, регуляторы напряжения и другие элементы. Arduino Uno имеет 32 кБ флэш памяти, 2 кБ SRAM (статическое ОЗУ) и 1 кБ EEPROM (энергонезависимая память). Плата работает на тактовой частоте 16 МГц. Arduino Uno обеспечивает связь по последовательного каналу связи, а также поддерживает протоколы связи I2C и SPI. В следующей таблице представлены технические характеристики платы Arduino Uno.
Микроконтроллер | ATmega328p |
Рабочее напряжение | 5 В |
Входное напряжение | 7-12V (рекомендовано) |
Количество цифровых контактов ввода/вывода | 14 |
Количество аналоговых контактов | 6 |
Flash memory (память программ) | 32 Кб |
SRAM (оперативная память) | 2 Кб |
EEPROM (энергонезависимая память) | 1 Кб |
Рабочая частота микроконтроллера | 16 МГц |
Датчик огня (пламени) обнаруживает присутствие огня или пламени основываясь на инфракрасных волнах, испускаемых пламенем. Если огонь обнаруживается, то на его выходе формируется логическая 1, иначе на выходе присутствует логический 0. Плата Arduino Uno проверяет логический уровень на выходе датчика огня и в зависимости от его состояния выполняет различные задачи: включение зуммера и светодиода, передача сообщений тревоги и т.д.
Внешний вид собранной конструкции на макетной плате показан на следующем рисунке.
Объяснение кода программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы обсудим его наиболее важные фрагменты.
Вначале программы нам необходимо инициализировать контакты Arduino, к которым подключены датчик огня, светодиод и зуммер. Датчик огня подключен к контакту 4 платы Arduino, зуммер – к контакту 8, а светодиод – к контакту 7.
Переменная “flame_detected” используется для хранения цифрового значения, считываемого с выхода датчика огня, в зависимости от ее значения мы будем принимать решение есть огонь или нет.
1 2 3 4 |
int buzzer = 8 ; int LED = 7 ; int flame_sensor = 4 ; int flame_detected ; |
Далее нам необходимо установить режимы работы используемых контактов и инициализировать последовательный порт связи.
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600) ; pinMode(buzzer, OUTPUT) ; pinMode(LED, OUTPUT) ; pinMode(flame_sensor, INPUT) ; } |
Следующая команда считывает значение с цифрового выхода датчика огня и сохраняет его в переменной “flame_detected”.
1 |
flame_detected = digitalRead(flame_sensor) ; |
Далее в программе мы сравниваем значение переменной “flame_detected” с 0 и 1.
Если ее значение равно 1 – это сигнализирует о том, что был обнаружен огонь. Поэтому мы должны включить зуммер и светодиод, а также передать сигнал тревоги в окно монитора последовательной связи (Serial monitor) среды Arduino IDE.
Если ее значение равно 0 – это сигнализирует о том, что огонь не был обнаружен, поэтому мы должны выключить зуммер и светодиод. Все эти процессы повторяются каждую секунду.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if (flame_detected == 1) { Serial.println("Flame detected...! take action immediately."); //обнаружен огонь, срочно примите меры digitalWrite(buzzer, HIGH); digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } else { Serial.println("No flame detected. stay cool"); //огня нет, будьте спокойны digitalWrite(buzzer, LOW); digitalWrite(LED, LOW); } delay(1000); |
Исходный код программы (скетча)
Если у вас возникнут вопросы по приведенному коду программы, вы можете задать их в комментариях к данной статье.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
int buzzer = 8; int LED = 7; int flame_sensor = 4; int flame_detected; void setup() { Serial.begin(9600); pinMode(buzzer, OUTPUT); pinMode(LED, OUTPUT); pinMode(flame_sensor, INPUT); } void loop() { flame_detected = digitalRead(flame_sensor); if (flame_detected == 1) { Serial.println("Flame detected...! take action immediately."); digitalWrite(buzzer, HIGH); digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } else { Serial.println("No flame detected. stay cool"); digitalWrite(buzzer, LOW); digitalWrite(LED, LOW); } delay(1000); } |