Mikrodenetleyici tabanlı projelerde kablolama karmaşasını azaltmak, donanımsal yerleşimi optimize etmek ve modülerliği artırmak için sensör bağlantıları esnek bir şekilde yapılandırılabilir. Bu çalışmada, FC-37 / YL-83 yağmur algılama sensörünün tüm kontrol ve veri hatları sırasıyla Arduino'nun A0, A1 ve A2 analog pin gruplarına atanmıştır. Bu mimari, sensör kablolarının tek bir hat üzerinde düzenli bir şekilde mikrodenetleyiciye taşınmasına olanak tanırken, yazılımsal esnekliği de maksimuma çıkarır.

A0-A5 arasındaki analog pinler, ihtiyaç duyulduğunda pinMode() fonksiyonu ile tamamen dijital giriş veya dijital çıkış (I/O) pini olarak konfigüre edilebilir. Bu projede korozyon önleme protokolünü devreye almak adına A0 pini dijital çıkış moduna, eşik değerini takip etmek adına ise A1 pini dijital giriş moduna programlanmıştır. Böylece analog port bloğu kesintisiz olarak verimli bir şekilde kullanılmış olur.
Aşağıda paylaşılan gömülü yazılım mimarisi, sensörün VCC beslemesini A0 pininden dijital olarak sürer, dijital eşik çıkışını (DO) A1 pininden lojik olarak yakalar ve anlık ıslaklık gerilimini (AO) A2 pininden analog sinyal olarak işler. Oksitlenmeyi engellemek amacıyla sadece örnekleme periyodunda enerji aktarımı gerçekleştirilir:
/**
* @file Yagmur_Sensoru_A0A1A2.ino
* @brief Gelişmiş Pin Blok Konfigürasyonlu Yağmur Algılama Algoritması
*
* Pin Eşleşmeleri:
* - Arduino A0 -> Sensör VCC (Dijital Güç Kaynağı)
* - Arduino A1 -> Sensör DO (Dijital Eşik Girişi)
* - Arduino A2 -> Sensör AO (Analog Gerilim Okuma)
* - Arduino GND-> Sensör GND (Ortak Şase)
*/
// Donanımsal Pin Tanımlamaları
const int SENSOR_VCC_PIN = A0; // Sensöre dinamik güç sağlayan çıkış pini
const int SENSOR_DO_PIN = A1; // Karşılaştırıcı entegreden gelen dijital veri pini
const int SENSOR_AO_PIN = A2; // Panel yüzeyinden gelen analog sinyal pini
const int ALARM_LED_PIN = 13; // Kart üzerindeki dahili durum LED'i
// Sistemsel Eşik Değerleri
const int SAGANAK_ESIS = 300; // Şiddetli yağış analog alt sınırı
const int CISELEME_ESIS = 700; // Hafif yağış analog üst sınırı
const unsigned long DELAY_MS = 2500; // İki örnekleme arasındaki bekleme süresi (ms)
void setup() {
// Veri takibi için donanımsal USART (Seri Port) hattı başlatılıyor
Serial.begin(9600);
// Analog pinlerin Giriş / Çıkış yönelimleri kararlı hale getiriliyor
pinMode(SENSOR_VCC_PIN, OUTPUT);
pinMode(SENSOR_DO_PIN, INPUT);
pinMode(ALARM_LED_PIN, OUTPUT);
// Başlangıç durumunda korozyonu engellemek için sensör beslemesi tamamen kesilir
digitalWrite(SENSOR_VCC_PIN, LOW);
Serial.println(F("[SISTEM] A0-A1-A2 Konfigürasyonu Aktif Edildi."));
}
void loop() {
// -------------------------------------------------------------------------
// 1. AŞAMA: SENSÖR ENERJİLENDİRME VE KARARLILIK SÜRESİ
// -------------------------------------------------------------------------
// Sensörün VCC bacağına bağlı olan A0 pinini HIGH (5V) seviyesine çekiyoruz
digitalWrite(SENSOR_VCC_PIN, HIGH);
// Panel yüzeyindeki kapasitif etkinin sönümlenmesi ve LM393 entegresinin
// voltaj kararlılığına ulaşması için 20 milisaniye bekleniyor
delay(20);
// -------------------------------------------------------------------------
// 2. AŞAMA: VERİ EDİNİMİ (DATA ACQUISITION)
// -------------------------------------------------------------------------
// A2 pininden 10-bitlik analog-dijital dönüşüm (ADC) verisi okunuyor (0 - 1023)
int analogVeri = analogRead(SENSOR_AO_PIN);
// A1 pininden lojik durum (0 veya 1) okunuyor
int dijitalVeri = digitalRead(SENSOR_DO_PIN);
// -------------------------------------------------------------------------
// 3. AŞAMA: ENERJİ KORUMA VE KOROZYON ENGELLEME PROTOKOLÜ
// -------------------------------------------------------------------------
// Okuma işlemi tamamlandığı an, yüzeyde elektroliz tetiklenmesini önlemek
// amacıyla A0 pinindeki gerilim derhal kesilir (0V)
digitalWrite(SENSOR_VCC_PIN, LOW);
// -------------------------------------------------------------------------
// 4. AŞAMA: TELEMETRİ VE LOJİK DEĞERLENDİRME
// -------------------------------------------------------------------------
// Okunan ham veriler seri porta biçimlendirilmiş olarak aktarılıyor
Serial.print(F("Metrikler -> Analog (A2): "));
Serial.print(analogVeri);
Serial.print(F(" | Dijital Durum (A1): "));
Serial.println(dijitalVeri);
// LM393 sürücü kartının operasyonel mantığı:
// Islaklık algılandığında trimpot eşiği aşılır ve DO (A1) pini LOW (0) seviyesine düşer.
if (dijitalVeri == LOW) {
Serial.println(F("[ALARM] Islaklık Teşhis Edildi! Kritik Durum Aktif."));
digitalWrite(ALARM_LED_PIN, HIGH); // Durum indikatörünü aktifleştir
} else {
Serial.println(F("[DURUM] Panel Kuru. Kritik Durum Pasif."));
digitalWrite(ALARM_LED_PIN, LOW); // Durum indikatörünü pasifleştir
}
// Analog voltaj eğrisine göre yağışın bağıl kütle analizi (Şiddet Tayini)
if (analogVeri < SAGANAK_ESIS) {
Serial.println(F("Meteoroloji Sınıfı: Sağanak Yağış / Yüksek Yoğunluk"));
}
else if (analogVeri >= SAGANAK_ESIS && analogVeri < CISELEME_ESIS) {
Serial.println(F("Meteoroloji Sınıfı: Hafif Yağış / Çiseleme / Nemlenme"));
}
else {
Serial.println(F("Meteoroloji Sınıfı: Yağış Yok / Stabil Atmosfer"));
}
Serial.println(F("========================================================="));
// Sensör ömrünü optimize etmek için periyodik örnekleme gecikmesi
delay(DELAY_MS);
}
Belirtilen bu özel pin yapısı kurulurken dikkat edilmesi gereken elektriksel karakteristikler ve sinyal yolları şu şekildedir:
Arduino A0 Pin İşlevi (Sensör VCC): Bu pin dijital çıkış moduna alınarak sensörün ana güç kaynağı haline getirilmiştir. Atmega328P mikrokontrolcüsünün bir I/O pininden güvenli olarak çekilebilecek akım sınırı 20mA düzeyindedir. FC-37 sürücü kartı üzerindeki LM393 entegresi ve LED'ler toplamda yaklaşık 4-8mA civarında akım tükettiğinden, A0 pini bu modülü ek bir transistör anahtarlama elemanına ihtiyaç duymadan doğrudan besleyebilmektedir.
Arduino A1 Pin İşlevi (Sensör DO): Sensör kartının üzerindeki karşılaştırıcı (komparatör) katından gelen kare dalga sinyali okur. Trimpot ile belirlenen referans voltajı aşıldığında hat sıfıra çekilir. A1 pini dijital modda çalışarak gelen bu kararlı sinyali anlık kesme (interrupt) mantığına yakın bir hızda işler.
Arduino A2 Pin İşlevi (Sensör AO): Yağmur panelindeki sıvı yoğunluğuna bağlı olarak 0V ile 5V arasında değişen kararsız analog voltaj sinyalini alır. Arduino'nun dahili 10-bitlik SAR ADC (Ardışık Yaklaşımlı Dijital Dönüştürücü) birimi, bu pindeki voltajı 0 ila 1023 arasında sayısal bir veriye dönüştürerek yazılıma teslim eder.
GND Bağlantısı: Referans geriliminin kaymaması ve ölçümlerin salınım yapmaması için sensör kartının üzerindeki GND pini, Arduino kartının üzerindeki regüleli ana GND hattına kesintisiz olarak bağlanmalıdır.
Henüz yorum yapılmamış. İlk yorumu siz yapın!