СОДЕРЖАНИЕ ►
Датчик огня KY-026 (flame sensor Arduino) позволяет определить наличие открытого пламени с помощью инфракрасного приемника. На основе датчика можно создать пожарную сигнализацию в доме и много других полезных устройств. Рассмотрим устройство данного сенсора, как его правильно подключить к микроконтроллеру Arduino Uno и разберем работу модуля на примере двух простых программ.
Устройство датчика пламени для Ардуино
Производится flame sensor для Arduino в двух вариантах — с тремя или с четырьмя контактами, распиновка датчика пламени размещена на картинке ниже. Оба варианта имеют цифровой выход. На датчике включается индикатор, а на выходе появляется сигнал истина (логическая единица), если обнаружено пламя, и ложь (логический нуль) при отсутствии пламени в пределах видимости инфракрасного приемника.

Датчик огня с четырьмя ножками имеет дополнительно аналоговый выход, который сообщает не только о наличии сигнала, но и сообщает его характеристику. Таким образом, с помощью сенсора можно определять не только наличие открытого огня, но и его масштаб. ИК датчик реагирует излучение в диапазоне 750 — 1100 нм, на практике сенсор реагирует не только на огонь, но и на солнце или лампы накаливания.
Кроме ИК приемника на модуле размещен подстроечный резистор для калибровки чувствительности датчика и другие радиоэлементы с обозначением. Схема подключения датчика к плате Arduino размещена на картинке ниже. В примерах мы используем порт A1 в качестве цифрового и аналогового входа, в скетче можно изменить порт и использовать для обработки сигнала любой микроконтроллер.
Подключение датчика пламени к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- модуль датчика пламени;
- беспаечная макетная плата;
- светодиод и резистор;
- провода «папа-мама», «папа-папа».

На плате датчика есть подписи у контактов для подключения к Arduino Nano или Uno. Датчик питается от 5V и выдает цифровой или аналоговый сигнал, в зависимости от модификации. В примерах мы покажем, как подключить датчик огня к Ардуино, используя аналоговый и цифровой выход сенсора ky-026, чтобы включать/выключать светодиод от платы. Соберите схему, как на картинке и загрузите следующий скетч.
Скетч для цифрового датчика пламени (KY-026)
#define flamePin A1 // задаем имя для порта A1 #define ledPin 13 // задаем имя для порта 13 int flame; void setup() { Serial.begin(9600); pinMode(flamePin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { flame = digitalRead(flamePin); // считываем данные с датчика Serial.print("Flame Sensor - "); // выводим данные на монитор Serial.println(flame); if (flame == HIGH) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW); }
Пояснения к коду:
- для приема цифрового сигнала с датчика KY-026 используется порт A1, который можно поменять в скетче на любой порт общего назначения;
- данный датчик имеет на цифровом выходе сигнал «логическая единица» при появлении открытого огня на расстоянии до 1 метра от ИК приемника.
Скетч для аналогового датчика пламени (KY-026)
#define flamePin A1 // задаем имя для порта A1 #define ledPin 13 // задаем имя для порта 13 int flame; void setup() { Serial.begin(9600); pinMode(flamePin, INPUT); pinMode(ledPin, OUTPUT); analogWrite(flamePin, LOW); } void loop() { flame = analogRead(flamePin); // считываем данные с датчика Serial.print("Flame Sensor - "); // выводим данные на монитор Serial.println(flame); if (flame >= 100) digitalWrite(ledPin, HIGH); if (flame < 100) digitalWrite(ledPin, LOW); }
Пояснения к коду:
- для приема сигнала используется аналоговый порт, который можно поменять. Данные с датчика выводятся на мониторе порта Arduino IDE
- в условии значение
flameпри котором будет включаться и выключаться светодиод следует поставить свои.










А как сделать два соединения от резистора и от датчика к GND на плате???
На Ардуино Уно целых три разъема GND.
Почему нигде нет программного фильтра, чтоб реагировал только на пламя? То есть нужно как то выделять только хаотическую составляющую сигнала от пламени, убирая постоянный сигнал от солнца или стабильно периодический от источников освещения. В заводских сигнализаторах вероятно так и сделано, но кто же прошивкой поделится то…
потому как в промышленных всё гораздо сложнее, чем просто ИК-светодиод!!!
Тот же код только с пьезозумером на 10 пине:
zumer — D10
#define flamePin 8
#define zumer 10
int flame;
void setup() {
Serial.begin(9600);
pinMode(flamePin, INPUT);
pinMode(zumer, OUTPUT);
}
void loop() {
flame = digitalRead(flamePin);
Serial.print(«Flame Sensor — «);
Serial.println(flame);
if (flame == HIGH)
noTone (10);
else
tone (10, 2000);
}
а почему вы не проверили горелкой? Вдруг не работает