Park Sensörü
Orta45 dkArabalardaki park sensörünün bir benzeri: HC-SR04 önündeki engele olan mesafeyi ölçer, engel 1 metreden yakına gelince buzzer bip bip ötmeye başlar ve yaklaştıkça bipler sıklaşır; 10 cm'nin altında ses kesintisiz çalar. Yeşil, sarı ve kırmızı LED'ler de uzak, orta ve yakın bölgeyi gösterir, mesafe Seri Monitöre yazılır. delay yerine millis() ile zamanlamayı, yani ölçüm, bip ve ışıkların birbirini beklemeden çalışmasını, değer döndüren bir fonksiyon yazmayı, if / else if ile bölgelere ayırmayı ve map ile mesafeyi bip aralığına çevirmeyi öğretir. Ek kütüphane gerekmez.
Uygulamada adım adım yapGerekli malzemeler
1 × Arduino Uno R3
1 × Breadboard 830 Pin (MB-102)
1 × HC-SR04 Ultrasonik Mesafe Sensörü
1 × Pasif Buzzer (Piezo)
1 × LED - Yeşil (5mm)
1 × LED - Sarı (5mm)
1 × LED - Kırmızı (5mm)
3 × Direnç 220 Ω (1/4W)
14 × Jumper Kablo - Erkek/Erkek
Bağlantı adımları
- 1
Güç sıralarını bağla (5V ve GND)

Kırmızı jumper kabloyu Arduino'nun güç başlığındaki 5V pinine tak, diğer ucunu breadboard'un alttaki kırmızı çizgili (+) güç sırasına bağla. Siyah jumper kabloyu aynı başlıktaki GND pinlerinden birine tak, diğer ucunu alttaki mavi çizgili (−) güç sırasına bağla. Sensör bu iki sıradan beslenecek; buzzer'ın ve LED'lerin toprak kabloları da (−) sıraya gidecek.
- Arduino 5V → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
- Arduino GND → alttaki mavi çizgili (−) sıra (siyah kablo)
- 2
HC-SR04'ü tak ve bağla

HC-SR04'ü breadboard'un alt yarısına dik olarak, "gözleri" ölçeceği yöne bakacak şekilde tak; dört bacağı soldan sağa VCC 6., TRIG 7., ECHO 8., GND 9. sütunda olsun. Kısa kırmızı bir kabloyla 6. sütunu (VCC) alttaki (+) sıraya, kısa siyah bir kabloyla 9. sütunu (GND) alttaki (−) sıraya bağla. Mavi jumper kabloyla Arduino'nun 7 numaralı pinini 7. sütuna (TRIG_PIN 7), sarı jumper kabloyla 8 numaralı pinini 8. sütuna (ECHO_PIN 8) bağla. TRIG'e verilen 10 µs'lik darbe sensöre 40 kHz'lik bir ses dalgası yollatır; ECHO, dalga engele çarpıp dönene kadar HIGH kalır.
- HC-SR04 VCC → 6. sütun, alt yarı
- HC-SR04 TRIG → 7. sütun, alt yarı
- HC-SR04 ECHO → 8. sütun, alt yarı
- HC-SR04 GND → 9. sütun, alt yarı
- 6. sütun, alt yarı → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
- 9. sütun, alt yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
- Arduino pin 7 → 7. sütun, alt yarı (mavi kablo)
- Arduino pin 8 → 8. sütun, alt yarı (sarı kablo)
- 3
Buzzer'ı tak ve bağla

Pasif buzzer'ın − bacağını alt yarıda 24. sütuna, + bacağını 25. sütuna tak; + bacak genelde daha uzundur ve gövdesinde + işareti vardır. Yeşil jumper kabloyla Arduino'nun 9 numaralı pinini 25. sütuna bağla (BUZZER_PIN 9). Kısa siyah bir kabloyla 24. sütunu alttaki (−) sıraya bağla.
- buzzer − bacak → 24. sütun, alt yarı
- buzzer + bacak → 25. sütun, alt yarı
- Arduino pin 9 → 25. sütun, alt yarı (yeşil kablo)
- 24. sütun, alt yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
- 4
Yeşil LED'i ve direncini tak

Yeşil LED'in uzun bacağını (+) üst yarıda 37. sütuna, kısa bacağını (−) 36. sütuna tak. 220 Ω direnci 37. sütunda ortadaki boşluğun üstünden geçecek şekilde üst yarıdan alt yarıya tak. Turuncu jumper kabloyla Arduino'nun 10 numaralı pinini alt yarıda 37. sütuna bağla (GREEN_PIN 10). Kısa siyah bir kabloyla üst yarıda 36. sütunu alttaki (−) sıraya bağla. Direnç pinden gelen akımı LED'e varmadan sınırlar.
- yeşil LED uzun bacak (+) → 37. sütun, üst yarı
- yeşil LED kısa bacak (−) → 36. sütun, üst yarı
- yeşil LED'in direnci (1. bacak) → 37. sütun, üst yarı
- yeşil LED'in direnci (2. bacak) → 37. sütun, alt yarı
- Arduino pin 10 → 37. sütun, alt yarı (turuncu kablo)
- 36. sütun, üst yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
- 5
Sarı LED'i ve direncini tak

Sarı LED'in uzun bacağını (+) üst yarıda 41. sütuna, kısa bacağını (−) 40. sütuna tak. İkinci 220 Ω direnci 41. sütunda boşluğun üstünden geçecek şekilde tak. Kahverengi jumper kabloyla Arduino'nun 11 numaralı pinini alt yarıda 41. sütuna bağla (YELLOW_PIN 11). Kısa siyah bir kabloyla üst yarıda 40. sütunu alttaki (−) sıraya bağla. Pin 11, tone() çalışırken PWM veremez; burada LED yalnızca açılıp kapandığı için bu bir sorun değil.
- sarı LED uzun bacak (+) → 41. sütun, üst yarı
- sarı LED kısa bacak (−) → 40. sütun, üst yarı
- sarı LED'in direnci (1. bacak) → 41. sütun, üst yarı
- sarı LED'in direnci (2. bacak) → 41. sütun, alt yarı
- Arduino pin 11 → 41. sütun, alt yarı (kahverengi kablo)
- 40. sütun, üst yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
- 6
Kırmızı LED'i ve direncini tak

Kırmızı LED'in uzun bacağını (+) üst yarıda 45. sütuna, kısa bacağını (−) 44. sütuna tak. Üçüncü 220 Ω direnci 45. sütunda boşluğun üstünden geçecek şekilde tak. Turkuaz jumper kabloyla Arduino'nun 12 numaralı pinini alt yarıda 45. sütuna bağla (RED_PIN 12). Kısa siyah bir kabloyla üst yarıda 44. sütunu alttaki (−) sıraya bağla. Böylece devre tamamlanır.
- kırmızı LED uzun bacak (+) → 45. sütun, üst yarı
- kırmızı LED kısa bacak (−) → 44. sütun, üst yarı
- kırmızı LED'in direnci (1. bacak) → 45. sütun, üst yarı
- kırmızı LED'in direnci (2. bacak) → 45. sütun, alt yarı
- Arduino pin 12 → 45. sütun, alt yarı (turkuaz kablo)
- 44. sütun, üst yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
Arduino kodu
// HC-SR04, buzzer ve LED'lerin pinleri
const int TRIG_PIN = 7;
const int ECHO_PIN = 8;
const int BUZZER_PIN = 9;
const int GREEN_PIN = 10;
const int YELLOW_PIN = 11;
const int RED_PIN = 12;
// Bölgeler (cm): bip 100'de başlar,
// 30'da kırmızı yanar, 10'da ses kesilmez
const int FAR_CM = 100;
const int NEAR_CM = 30;
const int STOP_CM = 10;
// Bipin sesi (Hz) ve uzunluğu (ms)
const int BEEP_HZ = 2000;
const int BEEP_MS = 50;
// Ölçümler arası süre: en az 60 ms olmalı
const unsigned long MEASURE_EVERY = 100;
unsigned long lastMeasure = 0;
unsigned long lastBeep = 0;
// -1: önünde ölçülecek bir şey yok
int distance = -1;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(RED_PIN, OUTPUT);
Serial.begin(9600);
}
// Mesafe (cm); yankı gelmezse -1
int measureCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// 10 µs'lik darbe bir ölçüm başlatır
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// 30 ms'de yankı yoksa (~5 m) vazgeç
unsigned long echo = pulseIn(ECHO_PIN, HIGH, 30000);
if (echo == 0) {
return -1;
}
// Ses gidip döner: µs / 58 = cm
return echo / 58;
}
// Üç LED'i birlikte ayarlar: HIGH yanık
void lights(int green, int yellow, int red) {
digitalWrite(GREEN_PIN, green);
digitalWrite(YELLOW_PIN, yellow);
digitalWrite(RED_PIN, red);
}
void loop() {
unsigned long now = millis();
// delay yok: ölçüm sırası geldiyse ölç
if (now - lastMeasure >= MEASURE_EVERY) {
lastMeasure = now;
distance = measureCm();
if (distance < 0) {
Serial.println("Mesafe: engel yok");
} else {
Serial.print("Mesafe: ");
Serial.print(distance);
Serial.println(" cm");
}
}
if (distance < 0 || distance > FAR_CM) {
// Engel uzakta: yeşil yanar, ses yok
lights(HIGH, LOW, LOW);
noTone(BUZZER_PIN);
} else if (distance <= STOP_CM) {
// Çok yakın: kırmızı, sürekli ses
lights(LOW, LOW, HIGH);
tone(BUZZER_PIN, BEEP_HZ);
} else {
if (distance <= NEAR_CM) {
lights(LOW, LOW, HIGH);
} else {
lights(LOW, HIGH, LOW);
}
// Bip bittiyse sesi kes
if (now - lastBeep >= BEEP_MS) {
noTone(BUZZER_PIN);
}
// Yaklaştıkça biplerin arası kısalır
unsigned long gap = map(distance, STOP_CM, FAR_CM, 80, 800);
if (now - lastBeep >= gap) {
lastBeep = now;
tone(BUZZER_PIN, BEEP_HZ, BEEP_MS);
}
}
}
Seri Monitörde göreceğin
Mesafe: engel yok Mesafe: 120 cm Mesafe: 85 cm Mesafe: 42 cm Mesafe: 18 cm Mesafe: 7 cm
Sonuç
Önünde 1 metre içinde bir şey yokken yeşil LED yanar ve ses çıkmaz. Elini sensöre doğru yaklaştırınca 100 cm'de sarı LED yanar ve buzzer seyrek seyrek ötmeye başlar; yaklaştıkça bipler sıklaşır, 30 cm'de kırmızı LED yanar, 10 cm'nin altında ses kesintisiz çalar. Seri Monitörde mesafe saniyede on kez yazılır. Mesafe hep "engel yok" ya da 0 çıkıyorsa TRIG ile ECHO kablolarının yer değiştirmediğine (pin 7 → TRIG, pin 8 → ECHO) ve sensörün VCC'sinin (+) sırada olduğuna bak. Mesafe doğru ama ses yoksa buzzer'ın pasif olduğuna ve + bacağının 25. sütunda olduğuna bak. Sensör 2 cm'den yakını ve yumuşak, eğik yüzeyleri iyi ölçemez.
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