Датчик пламени на Arduino: KY-026 и сигнализация
Датчик пламени — самый дешёвый способ дать самодельной сигнализации «зрение» на огонь: модуль KY-026 (в наборах встречается под марками flame sensor, датчик огня) стоит копейки и видит инфракрасное излучение пламени дальше, чем человеческий нос дым. Логика предельно простая: аналоговый выход растёт с приближением огня, скетч сравнивает его с порогом и включает сирену. Но именно вокруг порога новичок ловит два сюрприза: ложные срабатывания от солнца и ламп накаливания (они тоже светят в ИК) и молчание датчика на большом расстоянии.
В нашем симуляторе — карточка «Датчик пламени» из палитры «Макетка»: ползунок двигает показания от «чисто» до «пламя у самого сенсора», analogRead видит это значение как настоящий аналоговый вход. Сирена через tone() и светодиод исполняются рантаймом, так что сигнализацию целиком — порог, сирена, сброс — можно обкатать в браузере и не чиркать спичками даже в отладке. Ниже — распиновка, проверенный скетч и грабли ИК-фона.
Распиновка и физика: что модуль видит на самом деле
Сердце модуля — ИК-фототранзистор, замыкающийся от излучения пламени в ближнем ИК-диапазоне. На платке — компаратор LM393 с подстроечником, который превращает аналоговый сигнал в цифровой выход D0: перекрутили винт — сменился порог. Схема на четырёх проводах: VCC и GND на питание 5 В, A0 — аналоговое значение на любой аналоговый вход, D0 — цифровой «есть/нет» по настройке компаратора. Открытое пламя спички уверенно ловится с полуметра-метра, свеча с 30-50 сантиметров; дальше — зависит от яркости и фона.
- A0 даёт полный диапазон 0-1023: у спокойной комнаты — единицы-десятки, лампа накаливания в прямой видимости — сотни, пламя — резкий скачок к 800-1023.
- D0 — готовое «да/нет» с подстроечником: удобно для простых скетчей, но порог спрятан в винте и плавает от температуры платы.
- Угол обзора у фототранзистора узкий, порядка 60 градусов: датчик направляют на защищаемую зону, как камеру.
- Модуль не отличает огонь от другого сильного ИК: солнце в окно, обогреватель и лампа накаливания дают те же сотни на A0 — фильтр и гистерезис обязательны.
Скетч: порог, сирена и индикация
Сигнализация собирается из трёх частей: чтение аналогового входа, сравнение с порогом, тревога на tone(). Сирена — переменная частота 1500/2000 Гц, она слышнее ровного писка; светодиод на плате дублирует тревогу светом. Порог 400 подобран под карточку симулятора: у «чистой» комнаты там единицы, у пламени — под тысячу.
const int PIN_FLAME = A0;const int PIN_LED = 13;const int PIN_SIRENA = 8;const int POROG = 400; void setup() { pinMode(PIN_LED, OUTPUT); pinMode(PIN_SIRENA, OUTPUT); Serial.begin(9600); Serial.println("alarm start");} void loop() { int znachenie = analogRead(PIN_FLAME); Serial.println(znachenie); // видно в мониторе порта if (znachenie > POROG) { digitalWrite(PIN_LED, HIGH); tone(PIN_SIRENA, 1500); // тревога: рваный тон delay(200); noTone(PIN_SIRENA); tone(PIN_SIRENA, 2000); delay(200); noTone(PIN_SIRENA); } else { digitalWrite(PIN_LED, LOW); noTone(PIN_SIRENA); delay(400); // спокойный опрос }}Прогон в симуляторе: без огня на A0 нули и тишина; тянете ползунок карточки «Датчик пламени» за порог — Serial сыплет значения под 800-1000, светодиод горит, сирена рвёт тон между 1500 и 2000 Гц. Никакого огня для проверки не нужно: ползунок — это и есть «спичка». На живой плате то же самое значение снимают горящей спичкой на полметра — и до, и после этого скетч не меняется.
Честная граница: что исполняет симулятор
| Проверка | Симулятор | Только железо |
|---|---|---|
| analogRead с ползунка карточки | исполняется, 0-1023 честно | то же самое |
| Порог, гистерезис, счётчик тревог | исполняется | то же самое |
| Сирена tone/noTone и светодиод | исполняется | то же самое |
| Цифровой выход D0 с подстроечником | нет: карточка только аналоговая | да — винтом задаётся порог |
| ИК-физика: ветер, дистанция, фон | нет: ползунок вместо огня | да — подбирается по месту |
| Ложные тревоги от солнца и ламп | не моделируются | да — тестируют живьём |
Грабли: солнце, гистерезис и надоевшая сирена
- Одна граница на гребне дрожи — трещотка: значение прыгает через порог, сирена рычит урывками. Разнесите пороги включения и выключения на 50-80 единиц.
- Солнце в окне и лампа накаливания — легальные ИК-источники: ставьте датчик подальше от окна или добавьте подтверждение — тревога только если значение держится выше порога полсекунды.
- Сирена без тишины заедает мозги и соседей: тридцать секунд тревоги, потом пауза и повтор; сброс — кнопкой на INPUT_PULLUP.
- Питание модуля строго 5 В: при 3,3 В фототранзистор теряет чувствительность, и дальность падает вдвое.