DIY ELECTRONICSEN

← Tüm projeler

Alev Algılayan Yangın Alarmı

Başlangıç30 dk

Alevi yaydığı kızılötesi ışıktan tanıyan bir yangın alarmı: alev sensörü bir çakmak ya da mum alevi görünce buzzer yükselen bir siren çalar, kırmızı ve mavi LED itfaiye ışıkları gibi sırayla yanıp söner. Boştayken mavi LED 2 saniyede bir kısa yanarak alarmın nöbette olduğunu gösterir. Alev yarım saniye sürmeden alarm çalmaz, böylece tek bir kıvılcım ya da parlama alarmı çaldırmaz; alev söndükten sonra alarm 3 saniye daha öter. Titreyen bir alevin açılıp kapanan dijital sinyalini yumuşatmayı, kısa parlamaları süre şartıyla elemeyi ve millis() ile sensörü okurken aynı anda siren çalmayı öğretir. Ek kütüphane gerekmez. Bu bir öğrenme projesidir; evdeki onaylı duman dedektörünün yerini tutmaz.

Uygulamada adım adım yap

Gerekli malzemeler

Bağlantı adımları

  1. 1

    Güç sıralarını bağla (5V ve GND)

    Güç sıralarını bağla (5V ve GND)

    Bu projede bütün parçalar breadboard'un üst yarısında (F–J sıraları) ve üstteki güç sıralarında. Arduino'nun güç başlığı alt tarafta kaldığı için güç önce alttaki sıralara, oradan üsttekilere gider. Siyah erkek-erkek kabloyla Arduino'nun güç başlığındaki GND pinlerinden birini breadboard'un alttaki mavi çizgili (−) sırasına, kırmızı kabloyla aynı başlıktaki 5V pinini alttaki kırmızı çizgili (+) sıraya bağla. Breadboard'un sağ ucunda kırmızı bir kabloyla alttaki (+) sırayı üstteki (+) sıraya, siyah bir kabloyla alttaki (−) sırayı üstteki (−) sıraya bağla: breadboard'un üstteki ve alttaki sıraları kendi aralarında bağlı değildir.

    • Arduino GND → alttaki mavi çizgili (−) sıra (siyah kablo)
    • Arduino 5V → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
    • alttaki kırmızı çizgili (+) sıra → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
    • alttaki mavi çizgili (−) sıra → üstteki mavi çizgili (−) sıra (siyah kablo)
  2. 2

    Buzzer'ı tak ve bağla

    Buzzer'ı tak ve bağla

    Pasif buzzer'ın + bacağını breadboard'un üst yarısında F sırasında 12. sütuna, öbür bacağını 13. sütuna tak; + bacak genelde daha uzundur ve gövdesinde + işareti vardır. Turuncu erkek-erkek kabloyla Arduino'nun 8 numaralı pinini 12. sütuna bağla (BUZZER_PIN 8). Kısa siyah bir kabloyla 13. sütunu üstteki mavi çizgili (−) sıraya bağla.

    • buzzer + bacak → 12. sütun, üst yarı
    • buzzer − bacak → 13. sütun, üst yarı
    • Arduino pin 8 → 12. sütun, üst yarı (turuncu kablo)
    • 13. sütun, üst yarı → üstteki mavi çizgili (−) sıra (siyah kablo)
  3. 3

    Mavi LED'i direnciyle tak

    Mavi LED'i direnciyle tak

    Mavi LED'in uzun bacağını (+) üst yarıda F sırasında 18. sütuna, kısa bacağını (−) 19. sütuna tak. Bir 220 Ω direncin bir ucunu 19. sütunda J sırasına, öbür ucunu üstteki mavi çizgili (−) sıraya tak. Mavi kabloyla Arduino'nun 9 numaralı pinini 18. sütuna bağla (BLUE_LED 9). Direnç LED'den geçen akımı sınırlar. Mavi LED alarmın nöbet ışığıdır: boştayken 2 saniyede bir kısa yanar, sensör alev görürken sürekli yanar.

    • mavi LED uzun bacak (+) → 18. sütun, üst yarı
    • mavi LED kısa bacak (−) → 19. sütun, üst yarı
    • mavi LED'in direnci (1. bacak) → 19. sütun, üst yarı
    • mavi LED'in direnci (2. bacak) → üstteki mavi çizgili (−) sıra
    • Arduino pin 9 → 18. sütun, üst yarı (mavi kablo)
  4. 4

    Kırmızı LED'i direnciyle tak

    Kırmızı LED'i direnciyle tak

    Kırmızı LED'i aynı şekilde tak: uzun bacak (+) F sırasında 24. sütuna, kısa bacak (−) 25. sütuna. İkinci 220 Ω direnci 25. sütunda J sırasından üstteki (−) sıraya tak. Sarı kabloyla Arduino'nun 10 numaralı pinini 24. sütuna bağla (RED_LED 10). Alarm çalarken kırmızı ve mavi LED itfaiye ışıkları gibi sırayla yanıp söner.

    • kırmızı LED uzun bacak (+) → 24. sütun, üst yarı
    • kırmızı LED kısa bacak (−) → 25. sütun, üst yarı
    • kırmızı LED'in direnci (1. bacak) → 25. sütun, üst yarı
    • kırmızı LED'in direnci (2. bacak) → üstteki mavi çizgili (−) sıra
    • Arduino pin 10 → 24. sütun, üst yarı (sarı kablo)
  5. 5

    Alev sensörünü bağla ve eşiğini ayarla

    Alev sensörünü bağla ve eşiğini ayarla

    Alev sensörünün pinlerine erkek-dişi kabloların dişi uçlarını tak; pin adları kartın üzerinde yazar. DO'yu yeşil kabloyla doğrudan Arduino'nun 11 numaralı pinine (FLAME_PIN 11), GND'yi siyah kabloyla üstteki mavi çizgili (−) sıraya, VCC'yi kırmızı kabloyla üstteki kırmızı çizgili (+) sıraya bağla. Sensörün ucundaki siyah alıcıyı alevin olacağı yöne çevir; alıcı yaklaşık 60°'lik bir açıyı görür. Kodu yükledikten sonra eşiği ayarla: kartta iki küçük ışık vardır, biri güç ışığıdır, öbürü (DO ışığı) alev görünce yanar. Ortamda alev yokken DO ışığı yanıyorsa mavi trimpotun vidasını küçük bir tornavidayla ışık sönene kadar çevir, sonra biraz daha çevir. Güneş ışığı ve akkor ampuller de kızılötesi ışık yayar: sensörü pencereye ve lambaya doğru çevirme.

    • Arduino pin 11 → alev sensörü DO (yeşil kablo)
    • alev sensörü GND → üstteki mavi çizgili (−) sıra (siyah kablo)
    • alev sensörü VCC → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)

Arduino kodu

// Alev sensörünün DO çıkışı: alev
// görünce LOW olur
const int FLAME_PIN = 11;
// Buzzer ve iki LED'in pinleri
const int BUZZER_PIN = 8;
const int BLUE_LED = 9;
const int RED_LED = 10;

// Alev titrer, DO da açılıp kapanır:
// bu kadar içinde yine görülürse sürüyor
const unsigned long FLICKER_HOLD = 300;
// Alev bu kadar sürerse alarm çalar
// (tek kıvılcım ya da parlama çalmaz)
const unsigned long CONFIRM_TIME = 500;
// Alev söndükten sonra bu kadar daha öter
const unsigned long CLEAR_TIME = 3000;
// Sirenin en alçak ve en tiz tonu (Hz)
const int SIREN_LOW = 800;
const int SIREN_HIGH = 2000;

unsigned long lastFlame = 0;
unsigned long flameSince = 0;
bool flameSeen = false;
bool alarmOn = false;
unsigned long alarmStart = 0;
int playing = 0;

void setup() {
  // Kablo çıkarsa HIGH okur: alarm yok
  pinMode(FLAME_PIN, INPUT_PULLUP);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  Serial.begin(9600);

  // 2 sn dinle: hep alev görüyorsa eşik
  // çok hassas olabilir
  Serial.println("Sensör kontrol ediliyor...");
  int seen = 0;
  for (int i = 0; i < 100; i++) {
    if (digitalRead(FLAME_PIN) == LOW) seen++;
    digitalWrite(BLUE_LED, (i / 10) % 2 ? HIGH : LOW);
    delay(20);
  }
  digitalWrite(BLUE_LED, LOW);
  if (seen > 90) {
    Serial.println("Sensör sürekli alev görüyor.");
    Serial.println("Ortamda alev yoksa karttaki vidayı");
    Serial.println("DO ışığı sönene kadar çevir.");
  }
  Serial.println("Alarm kuruldu. Denemek için çakmağı");
  Serial.println("sensörden 30-50 cm uzakta yak.");
}

// Siren: her saniye pesten tize çıkar,
// LED'ler itfaiye gibi sırayla yanar
void updateOutputs(unsigned long now) {
  int hz = 0;
  if (alarmOn) {
    unsigned long t = (now - alarmStart) % 1000;
    hz = SIREN_LOW + (long)(SIREN_HIGH - SIREN_LOW) * t / 1000;
    // 20 Hz'lik adım: tone() az çağrılır
    hz = hz / 20 * 20;
    bool redTurn = (now - alarmStart) / 150 % 2 == 0;
    digitalWrite(RED_LED, redTurn ? HIGH : LOW);
    digitalWrite(BLUE_LED, redTurn ? LOW : HIGH);
  } else {
    digitalWrite(RED_LED, LOW);
    // Nöbette: mavi 2 sn'de bir yanıp
    // söner, alev görürken hep yanar
    bool blink = now % 2000 < 100;
    digitalWrite(BLUE_LED, flameSeen || blink ? HIGH : LOW);
  }
  if (hz != playing) {
    playing = hz;
    if (hz > 0) {
      tone(BUZZER_PIN, hz);
    } else {
      noTone(BUZZER_PIN);
    }
  }
}

void loop() {
  unsigned long now = millis();
  if (digitalRead(FLAME_PIN) == LOW) lastFlame = now;
  bool flame = lastFlame > 0 && now - lastFlame < FLICKER_HOLD;

  if (flame && !flameSeen) {
    flameSince = now;
    if (!alarmOn) Serial.println("Alev görüldü...");
  }
  if (!flame && flameSeen && !alarmOn) {
    Serial.println("Kısa sürdü, alarm yok.");
  }
  flameSeen = flame;

  // Süre, alevin son görüldüğü ana kadar
  if (!alarmOn && flame && lastFlame - flameSince >= CONFIRM_TIME) {
    alarmOn = true;
    alarmStart = now;
    Serial.println("YANGIN ALARMI! Alev algılandı.");
  }
  if (alarmOn && now - lastFlame >= CLEAR_TIME) {
    alarmOn = false;
    Serial.print("Alev söndü, alarm sustu (");
    Serial.print((now - alarmStart) / 1000);
    Serial.println(" sn sürdü).");
  }
  updateOutputs(now);
}

Seri Monitörde göreceğin

SERIAL MONITOR · 9600 BAUD
Sensör kontrol ediliyor...
Alarm kuruldu. Denemek için çakmağı
sensörden 30-50 cm uzakta yak.
Alev görüldü...
Kısa sürdü, alarm yok.
Alev görüldü...
YANGIN ALARMI! Alev algılandı.
Alev söndü, alarm sustu (7 sn sürdü).

Bir kablo yerinde değilse

SERIAL MONITOR · 9600 BAUD
Sensör kontrol ediliyor...
Sensör sürekli alev görüyor.
Ortamda alev yoksa karttaki vidayı
DO ışığı sönene kadar çevir.
Alarm kuruldu. Denemek için çakmağı
sensörden 30-50 cm uzakta yak.
Alev görüldü...
YANGIN ALARMI! Alev algılandı.

Sonuç

Açılışta mavi LED 2 saniye yanıp söner: bu sürede Arduino sensörü dinler. Sonra Seri Monitöre "Alarm kuruldu" yazılır ve mavi LED 2 saniyede bir kısa yanmaya başlar. Denemek için bir çakmağı sensörden 30-50 cm uzakta yak: sensör alevi görünce mavi LED sürekli yanar, alev yarım saniye sürerse buzzer pesten tize yükselen bir siren çalar, kırmızı ve mavi LED sırayla yanıp söner. Çakmağı söndürünce alarm 3 saniye daha öter ve susar; Seri Monitöre ne kadar sürdüğü yazılır. Çakmağı çok kısa yakıp söndürürsen "Kısa sürdü, alarm yok" yazılır. Alarm hiç çalmıyorsa kartın DO ışığına bak: alev varken yanmıyorsa trimpotu öbür yöne çevir ya da çakmağı yaklaştır; ışık yanıyor ama alarm çalmıyorsa yeşil kablonun 11. pinde olduğuna bak. Alarm kendiliğinden çalıyorsa ya da açılışta "Sensör sürekli alev görüyor" yazıyorsa sensör güneşi ya da bir lambayı görüyordur veya eşik çok hassastır: sensörü başka yöne çevir, trimpotu DO ışığı sönene kadar çevir. Güvenlik: çakmağı ve mumu yanıcı şeylerden uzakta, bir yetişkinle birlikte kullan, alevi başında durmadan bırakma; bu proje evdeki onaylı duman dedektörünün yerini tutmaz.

Uygulamada her bağlantıyı tek tek işaretle, envanterindeki parçalarla eşleştir ve kaldığın yerden devam et.

Uygulamada adım adım yap