Projelerinizde kullandığınız MQ-5 gibi gaz sensörleri, içlerinde bulunan dahili ısıtıcı (heater) elemanı nedeniyle sürekli olarak yüksek akım tüketirler. Bu durum, taşınabilir sistemlerde pillerin hızla tükenmesine neden olur. Bir önceki yağmur sensörü mimarimizde uyguladığımız ardışık pin dizilimi (A0, A1, A2) ve akıllı güç yönetimi felsefesini MQ-5 gaz sensörünüze de uyarlayabiliriz. Ancak unutulmamalıdır ki MQ serisi gaz sensörlerinin havayı kararlı analiz edebilmesi için ısıtıcısının birkaç saniye enerjili kalması gerekir.

Aşağıdaki kod kurgusu, paylaştığınız LED ve Buzzer mantığını korurken donanımsal pin yerleşimini analog blokta (A0, A1, A2) toplar. Sensörü korumak ve doğru ölçüm almak için okumadan hemen önce ısıtma süresi tanır, ardından elektriği keserek sistemi uykuya hazırlar:
/**
* @file MQ5_Gaz_Sensoru_Gelismiş.ino
* @brief Dinamik Güç Yönetimli ve Sıralı Pin Mimarili Gaz Alarm Sistemi
*
* Pin Eşleşmeleri:
* - Arduino A0 -> Transistör Tetikleme Pini (Sensör VCC Kontrolü)
* - Arduino A1 -> Sensör DO (Dijital Eşik Çıkışı - Opsiyonel Takip)
* - Arduino A2 -> Sensör AO (Analog Gaz Veri Okuma)
* - Arduino D9 -> Kırmızı LED Çıkışı
* - Arduino D8 -> Yeşil LED Çıkışı
* - Arduino D7 -> Buzzer Çıkışı
*/
// Donanımsal Pin Tanımlamaları
const int SENSOR_GUC_KONTROL = A0; // Transistör üzerinden sensör enerjisini açıp kapatan pin
const int SENSOR_DO_PIN = A1; // MQ-5 kartı üzerindeki dijital çıkış (DO) pini
const int SENSOR_AO_PIN = A2; // MQ-5 kartı üzerindeki analog çıkış (AO) pini
const int kirmiziLed = 9;
const int yesilLed = 8;
const int buzzer = 7;
// Sistemsel Değişkenler ve Eşikler
int durum;
const int sensordegeri = 600; // Kullanıcının belirlediği gaz sınır değeri
void setup() {
Serial.begin(9600);
// Çıkış ve Giriş Pinlerinin Ayarlanması
pinMode(kirmiziLed, OUTPUT);
pinMode(yesilLed, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(SENSOR_GUC_KONTROL, OUTPUT);
pinMode(SENSOR_DO_PIN, INPUT);
// Başlangıçta enerji tasarrufu ve güvenlik için sensör elektriğini kapalı tutuyoruz
digitalWrite(SENSOR_GUC_KONTROL, LOW);
Serial.println(F("[SISTEM] MQ-5 Gaz Algılama Kontrol Sistemi Hazır."));
}
void loop() {
// -------------------------------------------------------------------------
// 1. AŞAMA: SENSÖRÜ UYANDIRMA VE DAHİLİ ISITMA (PRE-HEATING) SÜRECİ
// -------------------------------------------------------------------------
// Transistörü tetikleyerek MQ-5 sensörünün VCC hattına 5V akışını başlatıyoruz
digitalWrite(SENSOR_GUC_KONTROL, HIGH);
// MQ sensörlerinin kararlı çalışması için içindeki odacığın ısınması gerekir.
// Güç tasarrufu döngüsünde bu süre en az 1500-2000 ms olmalıdır (İlk açılışta daha uzun gerekebilir)
delay(1500);
// -------------------------------------------------------------------------
// 2. AŞAMA: ANALOG VERİ EDİNİMİ
// -------------------------------------------------------------------------
// A2 pinine yönlendirdiğimiz AO hattından gaz yoğunluk verisini kararlıca okuyoruz
durum = analogRead(SENSOR_AO_PIN);
int dijitalDurum = digitalRead(SENSOR_DO_PIN);
// -------------------------------------------------------------------------
// 3. AŞAMA: ENERJİ TASARRUFU İÇİN SENSÖRÜ UYUTMA
// -------------------------------------------------------------------------
// Okuma tamamlandığı an transistör tetiklemesini keserek sensörün yüksek akım
// çeken ısıtıcısını kapatıyoruz. Böylece sistem boşta enerji tüketmiyor.
digitalWrite(SENSOR_GUC_KONTROL, LOW);
// Telemetri verilerini seri terminale yazdırıyoruz
Serial.print(F("Gaz Konsantrasyonu (A2): "));
Serial.print(durum);
Serial.print(F(" | Komparatör Eşiği (A1): "));
Serial.println(dijitalDurum);
// -------------------------------------------------------------------------
// 4. AŞAMA: ALARM VE LOJİK DEĞERLENDİRME
// -------------------------------------------------------------------------
if (durum > sensordegeri) {
// Gaz sınırı aşıldığında: Kırmızı LED ve Buzzer flash yaparak uyarı verir
Serial.println(F("[TEHLİKE] Yüksek Gaz Seviyesi Algılandı! Alarm Modu."));
digitalWrite(yesilLed, LOW);
digitalWrite(kirmiziLed, HIGH);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(kirmiziLed, LOW);
digitalWrite(buzzer, LOW);
delay(300);
}
else {
// Gaz seviyesi güvenli sınırlardaysa: Yeşil LED sürekli aktif kalır
Serial.println(F("[DURUM] Gaz Seviyesi Normal. Hava Temiz."));
digitalWrite(kirmiziLed, LOW);
digitalWrite(yesilLed, HIGH);
digitalWrite(buzzer, LOW);
}
Serial.println(F("---------------------------------------------------------"));
// Bir sonraki kontrol periyoduna kadar sistemi bekletiyoruz (Örn: 3 Saniye)
delay(3000);
}
Bu kod yapısının fiziksel dünyada sorunsuz çalışabilmesi için kurmanız gereken bağlantı stratejisi şu şekildedir:
A0 Kontrol ve Transistör Düzeni: Sensör doğrudan Arduino'dan beslenemeyeceği için, harici güç kaynağının (veya Arduino 5V pininin) artı kutbu sensörün VCC pinine bir transistör (örn. BC547) aracılığıyla anahtarlanır. Arduino'nun A0 pini, bu transistörün Base bacağına 1KΩ'luk bir direnç üzerinden bağlanır. A0 pini HIGH olduğunda transistör iletime geçer ve sensör çalışır.
A1 Dijital Takip (DO): MQ-5 kartı üzerindeki dijital çıkış pinidir. Kart üzerindeki dahili potansiyometre yardımıyla el yordamıyla bir sınır belirlendiyse, o sınır aşıldığında bu pin lojik sinyal üretir. Kodumuzda bu pini A1'e bağlayarak ek kontrol mekanizması sağladık.
A2 Analog Okuma (AO): Gazın ortamdaki bağıl yoğunluğuna göre 0V ile 5V arasında lineer değişen voltaj üretir. Havada LPG, bütan veya metan gazı yoğunlaştıkça sensörün iç direnci düşer ve A2 (AO) pinine gelen voltaj yükselir. Okunan 10-bitlik değer belirlediğiniz 600 sınırını geçtiğinde alarm senaryosu tetiklenir.
Henüz yorum yapılmamış. İlk yorumu siz yapın!