Yağmur Uyarısı ve Otomatik Pencere
Başlangıç40 dkYağmur başlayınca öten ve pencereyi kendisi kapatan bir düzenek: yağmur sensörünün plakasına su damlayınca buzzer üç kez ding-dong çalar, ardından servo pencereyi yavaşça kapatır. Plaka kuruduktan bir süre sonra pencere yeniden açılır. Sensör kartı Arduino'nun bir pininden beslenir ve yalnızca ölçüm yaparken açılır; böylece plaka elektrolizle paslanmaz. Analog bir değeri yüzdeye çevirmeyi, yağmur ve kuru için iki ayrı eşik kullanmayı, bir süre ölçmeyi (plaka yeniden ıslanırsa sayaç baştan başlar) ve servoyu adım adım yavaşça döndürmeyi öğretir. Servo kütüphanesi Arduino IDE ile gelir, ayrıca kitaplık kurulmaz.
Uygulamada adım adım yapGerekli malzemeler
1 × Arduino Uno R3
1 × Breadboard 830 Pin (MB-102)
1 × Yağmur Sensörü (FC-37 + LM393)
1 × SG90 Mikro Servo Motor
1 × Pasif Buzzer (Piezo)
12 × Jumper Kablo - Erkek/Erkek
Bağlantı adımları
- 1
Güç sıralarını bağla (5V ve GND)

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. Servo ve buzzer üstteki sıraları kullanacak.
- 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
Yağmur sensörünü tak ve bağla

Yağmur sensörünün kartını (üzerinde trimpot ve LM393 olan küçük kart) dört pini breadboard'un alt yarısında E sırasına gelecek şekilde tak: VCC 54., GND 55., DO 56., AO 57. sütuna gelsin. Plakayı sensörle gelen iki telli kabloyla kartın öbür ucundaki iki pine bağla; bu kablonun yönü fark etmez. Kırmızı kabloyla Arduino'nun A1 pinini 54. sütuna (VCC), sarı kabloyla A0 pinini 57. sütuna (AO, analog çıkış) bağla (RAIN_POWER A1, RAIN_PIN A0). Kısa siyah bir kabloyla 55. sütunu alttaki (−) sıraya bağla. DO pini boş kalır; eşiği kod belirlediği için trimpotu ayarlaman gerekmez. Kart beslemesini 5V'tan değil A1'den alır: kod onu yalnızca ölçerken, saniyede bir kısa an açar. Plakadan sürekli akım geçerse izleri elektrolizle birkaç haftada paslanır. Plakayı yağmur alacak yere, hafif eğik koy ki su üstünde birikmesin.
- yağmur sensörü kartı VCC → 54. sütun, alt yarı
- yağmur sensörü kartı GND → 55. sütun, alt yarı
- yağmur sensörü kartı DO → 56. sütun, alt yarı
- yağmur sensörü kartı AO → 57. sütun, alt yarı
- Arduino A1 → 54. sütun, alt yarı (kırmızı kablo)
- Arduino A0 → 57. sütun, alt yarı (sarı kablo)
- 55. sütun, alt yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
- 3
Buzzer'ı tak ve bağla

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

Servonun üç telli fişine üç erkek-erkek kablo tak. Turuncu (sinyal) teli Arduino'nun 9 numaralı pinine (SERVO_PIN 9), kırmızı (+) teli üstteki kırmızı çizgili (+) sıraya, kahverengi (−) teli üstteki mavi çizgili (−) sıraya bağla. Pencere için kartondan bir maket yapabilirsin: kanadı bir bantla menteşe gibi çerçeveye tut, servo kolunu kanada bir tel ya da çubukla bağla. Kod açılışta servoyu açık açıya (OPEN_ANGLE 90) getirir; kolu bu konumda pencere açıkken takman yeter. Pencere ters yöne kapanıyorsa koddaki OPEN_ANGLE ile CLOSED_ANGLE'ın değerlerini yer değiştir. Tek bir yüksüz servo Arduino'nun 5V'u ile çalışır; ağır gerçek bir pencere için daha güçlü bir servo ve ayrı bir güç kaynağı gerekir.
- Arduino pin 9 → servo sinyal ucu (turuncu kablo)
- servo + ucu → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
- servo − ucu → üstteki mavi çizgili (−) sıra (kahverengi kablo)
Arduino kodu
// Servo kütüphanesi Arduino IDE ile gelir
#include <Servo.h>
// Yağmur kartının AO (analog) çıkışı
const int RAIN_PIN = A0;
// Kartın VCC'si bu pinden: yalnızca
// ölçerken açılır, plaka paslanmaz
// (analog pinler dijital çıkış da olur)
const int RAIN_POWER = A1;
const int BUZZER_PIN = 8;
// Servonun turuncu (sinyal) kablosu
const int SERVO_PIN = 9;
// Pencerenin açık ve kapalı açısı: kol
// ters takılıysa ikisini yer değiştir
const int OPEN_ANGLE = 90;
const int CLOSED_ANGLE = 0;
// Islaklık bu yüzdeyi geçince yağmur
const int RAIN_ON = 30;
// Bu yüzdenin altı kuru sayılır
const int DRY_BELOW = 10;
// Kuru kalınca pencere bu kadar sonra
// açılır (gerçekte 10-15 dk yap)
const unsigned long REOPEN_AFTER = 60000;
// Ölçümler arası süre (ms)
const unsigned long MEASURE_EVERY = 1000;
// Servo 1 derece döner, bu kadar bekler:
// pencere yavaşça kapanır (ms)
const unsigned long STEP_TIME = 15;
Servo window;
int angle = OPEN_ANGLE;
int target = OPEN_ANGLE;
bool raining = false;
unsigned long dryStart = 0;
unsigned long lastMeasure = 0;
unsigned long lastStep = 0;
// Plakanın ıslaklığı (yüzde): 0 kuru,
// 100 sırılsıklam
int readWetness() {
digitalWrite(RAIN_POWER, HIGH);
delay(10);
int value = analogRead(RAIN_PIN);
digitalWrite(RAIN_POWER, LOW);
// Kuru plaka 1023'e yakın okur
return (1023L - value) * 100 / 1023;
}
// Yağmur uyarısı: üç kez ding-dong
void rainChime() {
for (int i = 0; i < 3; i++) {
tone(BUZZER_PIN, 1200, 150);
delay(200);
tone(BUZZER_PIN, 900, 250);
delay(450);
}
}
void setup() {
pinMode(RAIN_POWER, OUTPUT);
Serial.begin(9600);
// Açılışta yağıyorsa pencere kapalı
// başlar
if (readWetness() >= RAIN_ON) {
raining = true;
angle = CLOSED_ANGLE;
target = CLOSED_ANGLE;
}
window.attach(SERVO_PIN);
window.write(angle);
Serial.println(raining ? "Yağıyor: pencere kapalı." : "Hazır: pencere açık.");
}
void loop() {
unsigned long now = millis();
if (now - lastMeasure >= MEASURE_EVERY) {
lastMeasure = now;
int wet = readWetness();
Serial.print("Islaklık: %");
Serial.print(wet);
if (!raining && wet >= RAIN_ON) {
raining = true;
dryStart = 0;
Serial.println(" | Yağmur başladı! Pencere kapanıyor.");
rainChime();
target = CLOSED_ANGLE;
} else if (raining && wet < DRY_BELOW) {
// Kuruma süresi: yeniden ıslanırsa
// baştan başlar
if (dryStart == 0) dryStart = now;
unsigned long dry = now - dryStart;
if (dry >= REOPEN_AFTER) {
raining = false;
Serial.println(" | Hava kurudu, pencere açılıyor.");
tone(BUZZER_PIN, 1500, 100);
target = OPEN_ANGLE;
} else {
Serial.print(" | Pencere ");
Serial.print((REOPEN_AFTER - dry) / 1000);
Serial.println(" sn sonra açılır.");
}
} else {
if (raining) dryStart = 0;
Serial.println(raining ? " | Yağıyor, pencere kapalı." : " | Yağmur yok, pencere açık.");
}
}
// Pencere hedef açıya adım adım gider
if (angle != target && now - lastStep >= STEP_TIME) {
lastStep = now;
angle += angle < target ? 1 : -1;
window.write(angle);
}
}
Seri Monitörde göreceğin
Hazır: pencere açık. Islaklık: %1 | Yağmur yok, pencere açık. Islaklık: %41 | Yağmur başladı! Pencere kapanıyor. Islaklık: %45 | Yağıyor, pencere kapalı. Islaklık: %3 | Pencere 60 sn sonra açılır. Islaklık: %2 | Pencere 59 sn sonra açılır. Islaklık: %2 | Pencere 1 sn sonra açılır. Islaklık: %2 | Hava kurudu, pencere açılıyor.
Bir kablo yerinde değilse
Yağıyor: pencere kapalı. Islaklık: %100 | Yağıyor, pencere kapalı. Islaklık: %100 | Yağıyor, pencere kapalı.
Sonuç
Kodu yükleyince servo pencereyi açar ve Seri Monitöre her saniye plakanın ıslaklığı yüzde olarak yazılır; kuru plaka %0-5 civarında okur. Plakaya parmağınla birkaç damla su serp: ıslaklık %30'u geçince buzzer üç kez ding-dong çalar, ardından servo pencereyi yavaşça kapatır. Plakayı bir peçeteyle kurula: ıslaklık %10'un altına inince Seri Monitörde geri sayım başlar ve 60 saniye kuru kalırsa kısa bir bip'le pencere yeniden açılır. Bu sürede plaka yeniden ıslanırsa sayım baştan başlar. Gerçek bir pencerede yağmur bir dakika ara verebileceği için koddaki REOPEN_AFTER'ı 10-15 dakikaya çıkar. Kuru plakada ıslaklık %100 görünüyorsa kartın beslemesi gelmiyordur: kırmızı kablonun A1'de ve 54. sütunda, siyah kablonun (−) sırada olduğuna bak. Islak plakada değer değişmiyorsa sarı kablonun A0'da olduğuna ve plakanın kartla bağlı olduğuna bak. Servo titriyor ya da Arduino kendiliğinden yeniden başlıyorsa servo fazla yük taşıyordur: pencere maketini hafiflet.
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