Датчик полум'я з виходами AO і DO: сигналізація із зумером
ІЧ-датчик полум'я бачить вогонь запальнички за метр, але так само «бачить» сонце. Розбираємося з аналоговим і цифровим виходами модуля на компараторі LM393, налаштовуємо поріг і збираємо сигналізацію, яка не верещить від сонячного зайчика.
Про проєкт
Модуль датчика полум'я — це ІЧ-фототранзистор, чутливий до хвиль 760–1100 нм, і компаратор LM393. Відкрите полум'я випромінює саме в цьому діапазоні, тож модуль помічає запальничку чи свічку на відстані до метра. Це навчальний датчик, а не протипожежна система: для дому потрібні сертифіковані димові сповіщувачі. Але для 3D-принтера, паяльної станції чи мангалу — чудовий додатковий «сторож».
Що потрібно
- ESP32 DevKit
- Модуль датчика полум'я (4 виводи: AO, GND, VCC, DO)
- Активний або пасивний зумер
Схема
| Модуль | ESP32 |
|---|---|
| AO | GPIO34 (ADC1) |
| GND | GND |
| VCC (+) | 3V3 |
| DO | GPIO27 |
| Зумер «+» | GPIO25 |
| Зумер «−» | GND |
Два виходи
- AO — аналоговий сигнал з фототранзистора. Що більше ІЧ, то нижча напруга: без полум'я ~VCC, вогонь впритул — майже 0.
- DO — вихід компаратора: LOW, коли полум'я є (сигнал сильніший за поріг). Поріг задають синім підстроювальним резистором; зелений світлодіод на платі світиться в момент спрацювання.
DO зручний для переривання чи простої логіки, AO — щоб бачити, наскільки близько вогонь, і ставити поріг у коді.
Код
// Пожежна сигналізація: датчик полум'я (AO + DO) і зумер
const int FLAME_AO = 34; // аналоговий: менше = більше ІЧ
const int FLAME_DO = 27; // цифровий: LOW = полум'я (поріг — підстроювальним резистором)
const int BUZZER = 25;
void setup() {
Serial.begin(115200);
pinMode(FLAME_DO, INPUT);
}
void loop() {
int raw = analogRead(FLAME_AO);
int level = map(raw, 4095, 0, 0, 100); // 0 % — нічого, 100 % — вогонь біля самого датчика
bool flame = digitalRead(FLAME_DO) == LOW;
if (flame) tone(BUZZER, 2000);
else noTone(BUZZER);
static unsigned long lastPrint = 0;
if (millis() - lastPrint > 500) {
lastPrint = millis();
Serial.printf("ІЧ %3d %% %s\n", level, flame ? "ВОГОНЬ!" : "норма");
}
delay(20);
}
У симуляторі збільшуйте «Полум'я» у властивостях датчика — десь після 50 % спрацює DO і загуде зумер. Спробуйте ввімкнути «Пряме сонце»: сигналізація спрацює без жодного вогню.
Як не злякатися сонця
- Корпус-трубка. Обмежте поле зору датчика чорною трубкою — сонце з вікна перестане потрапляти в нього.
- Мерехтіння. Полум'я мерехтить з частотою 1–15 Гц, а сонце і лампи розжарювання світять рівно. Робіть 50 вимірів AO за секунду і рахуйте розкид: вогонь дає помітні коливання.
- Підтвердження іншим датчиком. Поруч з датчиком полум'я поставте термістор або MQ-2 (дим/газ) і вмикайте тривогу, лише коли згодні обидва.
- Пасивний зумер гуде з
tone(), активний — просто від HIGH. Для активного замінітьtone()наdigitalWrite(BUZZER, HIGH).