DIY ELECTRONICSEN

← Tüm projeler

Duman ve Gaz Alarmı

Orta35 dk

Mutfakta ya da odada duman veya yanıcı gaz (LPG, doğalgaz, metan) belirince öten bir alarm: MQ-2 sensörünün analog çıkışı okunur, açılışta temiz havanın değeri ölçülür ve değer bunun belirgin şekilde üstüne çıkınca buzzer gerçek duman dedektörlerinin üç bip desenini (T3) çalar, kırmızı LED bip'lerle birlikte yanıp söner. Yeşil LED ısınırken yanıp söner, alarm kurulunca sürekli yanar. Analog bir sensörü kendi temiz hava değerine göre okumayı, alarmın sınırda gidip gelmemesi için iki ayrı eşik kullanmayı ve millis() ile ölçüm yaparken aynı anda ses deseni çalmayı öğretir. Ek kütüphane gerekmez. Bu bir öğrenme projesidir; evdeki onaylı duman ve gaz 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 alt yarısında (A–E sıraları) ve alttaki güç sıralarında. Siyah erkek-erkek jumper kabloyu Arduino'nun güç başlığındaki GND pinlerinden birine tak, diğer ucunu breadboard'un alttaki mavi çizgili (−) güç sırasına bağla. Kırmızı kabloyu aynı başlıktaki 5V pinine tak, diğer ucunu alttaki kırmızı çizgili (+) güç sırasına bağla. MQ-2 sensörü bu iki sıradan beslenecek; buzzer ve LED dirençleri de toprağını (−) sıradan alacak. Üstteki güç sıraları alttakilere bağlı değildir, onları kullanma.

    • Arduino 5V → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
    • Arduino GND → alttaki 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 alt yarısında 11. sütuna, öbür bacağını 10. sütuna tak; + bacak genelde daha uzundur ve gövdesinde + işareti vardır. Turuncu jumper kabloyla Arduino'nun 8 numaralı pinini 11. sütuna bağla (BUZZER_PIN 8). Kısa siyah bir kabloyla 10. sütunu alttaki (−) güç sırasına bağla.

    • buzzer − bacak → 10. sütun, alt yarı
    • buzzer + bacak → 11. sütun, alt yarı
    • Arduino pin 8 → 11. sütun, alt yarı (turuncu kablo)
    • 10. sütun, alt yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
  3. 3

    Yeşil ve kırmızı LED'i dirençleriyle tak

    Yeşil ve kırmızı LED'i dirençleriyle tak

    Yeşil LED'in uzun bacağını (+) alt yarıda 19. sütuna, kısa bacağını (−) 18. sütuna tak. Bir 220 Ω direncin bir ucunu 18. sütuna, öbür ucunu alttaki (−) güç sırasına tak. Yeşil jumper kabloyla Arduino'nun 11 numaralı pinini 19. sütuna bağla (GREEN_LED 11). Kırmızı LED'i aynı şekilde tak: uzun bacak 23. sütuna, kısa bacak 22. sütuna; ikinci 220 Ω direnç 22. sütundan (−) sıraya. Mavi kabloyla Arduino'nun 12 numaralı pinini 23. sütuna bağla (RED_LED 12). Dirençler LED'lerden geçen akımı sınırlar.

    • yeşil LED uzun bacak (+) → 19. sütun, alt yarı
    • yeşil LED kısa bacak (−) → 18. sütun, alt yarı
    • kırmızı LED uzun bacak (+) → 23. sütun, alt yarı
    • kırmızı LED kısa bacak (−) → 22. sütun, alt yarı
    • yeşil LED'in direnci (1. bacak) → 18. sütun, alt yarı
    • yeşil LED'in direnci (2. bacak) → alttaki mavi çizgili (−) sıra
    • kırmızı LED'in direnci (1. bacak) → 22. sütun, alt yarı
    • kırmızı LED'in direnci (2. bacak) → alttaki mavi çizgili (−) sıra
    • Arduino pin 11 → 19. sütun, alt yarı (yeşil kablo)
    • Arduino pin 12 → 23. sütun, alt yarı (mavi kablo)
  4. 4

    MQ-2 sensörünü bağla

    MQ-2 sensörünü bağla

    MQ-2 kartının pinlerine erkek-dişi jumper kabloların dişi uçlarını tak; pin adları kartın üzerinde yazar. VCC'yi kırmızı kabloyla alttaki (+) güç sırasına, GND'yi siyah kabloyla alttaki (−) güç sırasına, AO'yu (analog çıkış) sarı kabloyla doğrudan Arduino'nun A0 pinine bağla (GAS_PIN A0). DO pini boş kalır: o, karttaki küçük vidalı ayarın eşiğine göre yalnızca açık/kapalı bilgi verir; bu projede eşiği kod belirliyor. Sensörün içinde bir ısıtıcı vardır, yaklaşık 150 mA çeker ve çalışırken ısınır: bu normaldir, metal kafese dokunma. Yeni bir sensör ilk birkaç kullanımda hafif yanık kokusu verebilir.

    • MQ-2 VCC → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
    • MQ-2 GND → alttaki mavi çizgili (−) sıra (siyah kablo)
    • Arduino A0 → MQ-2 AO (sarı kablo)

Arduino kodu

// MQ-2'nin analog çıkışı (AO)
const int GAS_PIN = A0;
// Buzzer ve iki LED'in pinleri
const int BUZZER_PIN = 8;
const int GREEN_LED = 11;
const int RED_LED = 12;

// Isıtıcının ısınma süresi (ms)
const unsigned long WARM_UP = 30000;
// Temiz hava değerinden bu kadar
// yükselince alarm çalar (0-1023)
const int ALARM_RISE = 150;
// Bu kadara inince alarm susar
const int CLEAR_RISE = 100;
// Ölçümler arası süre (ms)
const unsigned long MEASURE_EVERY = 1000;
// Sirenin tonu (Hz)
const int ALARM_HZ = 3000;

int baseline = 0;
bool alarmOn = false;
bool beeping = false;
unsigned long alarmStart = 0;
unsigned long lastMeasure = 0;

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(GREEN_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  Serial.begin(9600);

  // Isınırken yeşil LED yanıp söner
  Serial.println("Sensör ısınıyor, 30 sn bekle...");
  unsigned long start = millis();
  while (millis() - start < WARM_UP) {
    digitalWrite(GREEN_LED, (millis() / 500) % 2 ? HIGH : LOW);
  }

  // Temiz hava: 10 ölçümün ortalaması
  long total = 0;
  for (int i = 0; i < 10; i++) {
    total += analogRead(GAS_PIN);
    delay(200);
  }
  baseline = total / 10;
  Serial.print("Temiz hava değeri: ");
  Serial.println(baseline);

  // Neredeyse 0: sensöre güç gelmiyor
  if (baseline < 10) {
    Serial.println("Sensör okunamıyor, kabloları kontrol et.");
    digitalWrite(GREEN_LED, LOW);
    while (true) {}
  }
  digitalWrite(GREEN_LED, HIGH);
  Serial.println("Alarm kuruldu.");
}

// Duman dedektörü deseni (T3): üç kez
// yarım sn öt, sonra 1,5 sn sus
void updateAlarm() {
  bool beep = false;
  if (alarmOn) {
    // 4 sn'lik döngünün neresindeyiz
    unsigned long t = (millis() - alarmStart) % 4000;
    beep = t < 2500 && (t / 500) % 2 == 0;
  }
  // tone()'u yalnızca ses değişince çağır
  if (beep != beeping) {
    beeping = beep;
    if (beep) {
      tone(BUZZER_PIN, ALARM_HZ);
    } else {
      noTone(BUZZER_PIN);
    }
  }
  digitalWrite(RED_LED, beep ? HIGH : LOW);
  digitalWrite(GREEN_LED, alarmOn ? LOW : HIGH);
}

void loop() {
  if (millis() - lastMeasure >= MEASURE_EVERY) {
    lastMeasure = millis();
    int gas = analogRead(GAS_PIN);
    int rise = gas - baseline;
    Serial.print("Gaz: ");
    Serial.print(gas);
    Serial.print(" | Artış: ");
    Serial.println(rise);

    // İki ayrı eşik: sınırda gidip gelmez
    if (!alarmOn && rise >= ALARM_RISE) {
      alarmOn = true;
      alarmStart = millis();
      Serial.println("ALARM! Duman ya da gaz var.");
    } else if (alarmOn && rise <= CLEAR_RISE) {
      alarmOn = false;
      Serial.println("Hava temizlendi, alarm sustu.");
    }
  }
  updateAlarm();
}

Seri Monitörde göreceğin

SERIAL MONITOR · 9600 BAUD
Sensör ısınıyor, 30 sn bekle...
Temiz hava değeri: 181
Alarm kuruldu.
Gaz: 183 | Artış: 2
Gaz: 180 | Artış: -1
Gaz: 251 | Artış: 70
Gaz: 393 | Artış: 212
ALARM! Duman ya da gaz var.
Gaz: 534 | Artış: 353
Gaz: 355 | Artış: 174
Gaz: 269 | Artış: 88
Hava temizlendi, alarm sustu.
Gaz: 223 | Artış: 42

Bir kablo yerinde değilse

SERIAL MONITOR · 9600 BAUD
Temiz hava değeri: 0
Sensör okunamıyor, kabloları kontrol et.

Sonuç

Açılışta yeşil LED 30 saniye yanıp söner: bu sürede sensörün ısıtıcısı ısınır, sensör temiz havada olmalı. Sonra Seri Monitöre temiz havanın değeri yazılır, yeşil LED sürekli yanar ve her saniye ölçülen değerle temiz havaya göre artışı yazılır. Denemek için sensöre bir kibriti ya da tütsüyü üfleyip söndürdükten sonra çıkan dumanı yaklaştır; ya da bir çakmağı yakmadan, yalnızca gaz düğmesine 1-2 saniye basıp sensörün yakınına tut. Artış 150'yi geçince buzzer üç kısa bip, ardından kısa bir sessizlik deseniyle öter, kırmızı LED bip'lerle birlikte yanıp söner, yeşil LED söner. Sensörün çevresini havalandırınca artış 100'ün altına iner ve alarm susar. "Sensör okunamıyor" yazıyorsa MQ-2'nin VCC ve GND kablolarına bak. Alarm hiç çalmıyorsa sarı kablonun A0'da olduğuna bak ya da koddaki ALARM_RISE değerini küçült. Alarm kendiliğinden çalıyorsa sensör açılışta temiz havada değildi ya da henüz yeterince ısınmadı: yeni bir sensörü ilk seferde birkaç dakika açık bırakıp Arduino'nun reset düğmesine bas. Güvenlik: deneme yaparken açık alevi gazın yanına getirme; bu proje evdeki onaylı duman ve gaz 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