← До всіх проєктів
Сенсори Початковий

Датчик полум'я з виходами AO і DO: сигналізація із зумером

ІЧ-датчик полум'я бачить вогонь запальнички за метр, але так само «бачить» сонце. Розбираємося з аналоговим і цифровим виходами модуля на компараторі LM393, налаштовуємо поріг і збираємо сигналізацію, яка не верещить від сонячного зайчика.

Складність
Початковий
Час
30 min
Категорія
Сенсори
Оновлено

Про проєкт

Модуль датчика полум'я — це ІЧ-фототранзистор, чутливий до хвиль 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).