Arduino ile Yaya Butonlu Trafik Lambası Yapımı

Proje ne yapıyor?

Gerçek kavşaklardaki gibi çalışan bir trafik lambası yapıyoruz. Araçlar için kırmızı–sarı–yeşil, yayalar için kırmızı–yeşil ışık var. Yaya butona bastığında araç ışığı sarıya, sonra kırmızıya döner ve yayaya geçiş izni verilir. Kimse butona basmasa da ışıklar belli aralıklarla kendiliğinden değişir.

  • Yaş grubu: 9 yaş ve üzeri
  • Seviye: Başlangıç
  • Süre: Yaklaşık 40 dakika
  • Bu projede öğrenecekleriniz: LED yakıp söndürmek, buton okumak, millis() ile zaman ölçmek, fonksiyon yazmak

Malzeme listesi

MalzemeAdet
Arduino Uno 1
LED (2 kırmızı, 1 sarı, 2 yeşil)5
220 Ω direnç5
Push buton1
Breadboard1
Erkek-erkek jumper kablo~12
USB kablo1

Devre bağlantıları

Arduino ile Yaya Butonlu Trafik Lambası Yapımı Devre Şeması
BileşenBağlantıArduino pini
Araç kırmızı LEDUzun bacak (220 Ω üzerinden)D8
Araç sarı LEDUzun bacak (220 Ω üzerinden)D9
Araç yeşil LEDUzun bacak (220 Ω üzerinden)D10
Yaya kırmızı LEDUzun bacak (220 Ω üzerinden)D11
Yaya yeşil LEDUzun bacak (220 Ω üzerinden)D12
Tüm LED’lerKısa bacaklarGND
ButonBir bacağıD2
ButonÇapraz karşı bacağıGND

Butonda harici direnç kullanmıyoruz; Arduino’nun dahili direncini (INPUT_PULLUP) açıyoruz.

Kodlar

// Arduino Yaya Butonlu Trafik Lambası - ozandamci.com
const int aracKirmizi = 8;
const int aracSari = 9;
const int aracYesil = 10;
const int yayaKirmizi = 11;
const int yayaYesil = 12;
const int butonPin = 2;
const unsigned long yesilSuresi = 10000; // butona basılmazsa araç yeşili 10 sn
void setup() {
pinMode(aracKirmizi, OUTPUT);
pinMode(aracSari, OUTPUT);
pinMode(aracYesil, OUTPUT);
pinMode(yayaKirmizi, OUTPUT);
pinMode(yayaYesil, OUTPUT);
pinMode(butonPin, INPUT_PULLUP);
}
void isiklar(bool ak, bool as, bool ay, bool yk, bool yy) {
digitalWrite(aracKirmizi, ak);
digitalWrite(aracSari, as);
digitalWrite(aracYesil, ay);
digitalWrite(yayaKirmizi, yk);
digitalWrite(yayaYesil, yy);
}
void loop() {
// 1) Araçlara yeşil, yayalara kırmızı
isiklar(LOW, LOW, HIGH, HIGH, LOW);
unsigned long baslangic = millis();
while (millis() - baslangic < yesilSuresi) {
if (digitalRead(butonPin) == LOW) {
delay(1000); // yaya bastıktan sonra kısa bekleme
break;
}
}
// 2) Araçlara sarı
isiklar(LOW, HIGH, LOW, HIGH, LOW);
delay(2000);
// 3) Araçlara kırmızı, yayalara yeşil
isiklar(HIGH, LOW, LOW, LOW, HIGH);
delay(5000);
// 4) Yaya yeşili yanıp sönerek uyarır
for (int i = 0; i < 4; i++) {
digitalWrite(yayaYesil, LOW);
delay(300);
digitalWrite(yayaYesil, HIGH);
delay(300);
}
// 5) Yayalara kırmızı, araçlara kırmızı + sarı (hazırlan)
isiklar(HIGH, HIGH, LOW, HIGH, LOW);
delay(1500);
}

Adım adım yapılışı

  1. Güç hatlarını hazırlayın. Arduino’nun GND pinini breadboard’un – hattına bağlayın.
  2. Araç ışıklarını takın. Kırmızı, sarı ve yeşil LED’i alt alta yerleştirin. Her birinin uzun bacağına 220 Ω direnç bağlayıp sırasıyla D8, D9 ve D10’a götürün.
  3. Yaya ışıklarını takın. Kırmızı ve yeşil LED’i biraz ileriye yerleştirip dirençler üzerinden D11 ve D12’ye bağlayın.
  4. LED’lerin kısa bacaklarını – hattına bağlayın.
  5. Butonu takın. Butonu breadboard’un ortasındaki boşluğun üzerine yerleştirin. Bir bacağını D2’ye, çapraz karşısındaki bacağını – hattına bağlayın.
  6. Kodu yükleyin. Arduino IDE’de Araçlar → Kart menüsünden Arduino Uno‘yu ve doğru portu seçip Yükle‘ye basın.
  7. Test edin. Araç yeşili yanarken butona basın. Bir saniye sonra sarı ışık yanmalı ve yayalara yeşil yanmalı.

Sorun giderme

  • Butona basınca hiçbir şey olmuyor: Buton bacaklarının çapraz olduğundan emin olun. Yan yana bacaklar her zaman bağlı olabilir.
  • Bir LED hiç yanmıyor: LED ters takılmış olabilir; uzun bacak Arduino pinine gitmeli.

Kendiniz deneyin

  • Süreleri değiştirerek gece modu ekleyin: gece sadece sarı ışık yanıp sönsün.
  • Yaya yeşili yanarken buzzer ile görme engelliler için sesli uyarı ekleyin.

Daha fazla proje için: Bu ve benzeri projeleri adım adım anlattığım Arduino Projeleri kitabıma göz atabilirsiniz.

Bir Cevap Yazın