Arduino Projeleri

Arduino ile Gerçekçi Trafik Lambası Simülasyonu Yapımı

Arduino Uno ve üç LED kullanarak, gerçek kavşaklardaki trafik sinyalizasyon protokolünü birebir yansıtan bir trafik lambası simülasyonu kurun; dijital çıkışları ve delay() zamanlamasını uygulamalı olarak öğrenin.

1Projenin Amacı ve Akış Mantığı

Bu projenin temel amacı, Arduino'nun dijital pinlerini kullanarak üç farklı renkteki LED'i belirli bir sıra ve zamanlama dahilinde kontrol etmektir. Kontrol edilen döngü, araçlar için geçerli olan gerçek trafik lambası protokolünü birebir yansıtır ve beş adımdan oluşur.

1. KırmızıDur, uzun süre
2. Kırmızı+SarıKalkışa hazırlık
3. YeşilGeç, uzun süre
4. SarıDurmaya hazırlık
5. KırmızıDöngü başa döner
Dijital Çıkış MantığıHIGH ve LOW sinyalleriyle üç LED'in ayrı ayrı kontrolünü öğrenin.
Hassas Zamanlamadelay() fonksiyonuyla her aşamanın süresini milisaniye hassasiyetinde ayarlayın.
Gerçekçi ProtokolKırmızı+sarı geçiş adımıyla gerçek kavşak sinyalizasyonunu birebir taklit edin.

2Gerekli Malzemeler

Projeyi gerçekleştirmek için ihtiyacınız olan temel elektronik bileşenler şunlardır:

Arduino UnoProjenin beyni.
3 Adet LED1 kırmızı, 1 sarı/turuncu, 1 yeşil.
3 Adet 220 Ohm DirençHer LED'e seri bağlanarak ömrünü korur.
Breadboard ve Jumper KablolarLehimsiz bağlantı için.

3Devre Kurulumu (Donanım Bağlantısı)

LED'ler polarize bileşenlerdir; akımın akış yönü önemlidir. Uzun bacak (anot) pozitif uca (Arduino dijital pini), kısa bacak (katot) ise negatif uca (Arduino GND) bağlanmalıdır. Direnç, daima anot tarafına yani pozitif akım yoluna seri bağlanmalıdır.

Arduino Pin 10 Pin 9 Pin 8 GND Kırmızı LED 220Ω → Sarı LED 220Ω → Yeşil LED Ortak GND hattı (kesikli çizgi)

Arduino ile 3 LED arasındaki trafik lambası devre bağlantı şeması

10
Kırmızı LEDUzun bacak → 220Ω → Pin 10
9
Sarı LEDUzun bacak → 220Ω → Pin 9
8
Yeşil LEDUzun bacak → 220Ω → Pin 8
G
Ortak GNDTüm kısa bacaklar → Arduino GND

Önemli Not

Direnç, daima LED'in anot (uzun bacak) tarafına seri bağlanmalıdır. Direnç olmadan LED'e doğrudan akım vermek, LED'in anlık olarak yanmasına yol açabilir.

Robotik dünyasına adım atmak için ilk adımı atın!

Eğitim materyallerimizi ve projelerimizi keşfederek hemen öğrenmeye başlayın. Blok tabanlı kodlamaya başlayın.

Başla

4Kodlama ve Sıralı Otomasyon Algoritması

Kod, öncelikle pinleri tanımlar, setup() kısmında bunları çıkış olarak ayarlar ve ardından loop() döngüsünde beş adımlı trafik akışını sırasıyla yürütür.

trafik_lambasi.ino
// gerçekçi trafik lambası simülasyonu kodu

// pin tanımlamaları (okunabilirlik için)
const int redled = 10;
const int yellowled = 9;
const int greenled = 8;

// durum süreleri (milisaniye cinsinden)
const int redtime = 5000;       // kırmızı 5 saniye
const int yellowtime = 2000;    // sarı 2 saniye
const int greentime = 5000;     // yeşil 5 saniye
const int redyellowtime = 1500; // kırmızı+sarı 1.5 saniye

void setup() {
  // üç pini de elektrik sinyali gönderecek (çıkış) olarak ayarla
  pinMode(redled, OUTPUT);
  pinMode(yellowled, OUTPUT);
  pinMode(greenled, OUTPUT);

  // program başlamadan önce tüm ışıkları söndürerek güvenli bir başlangıç yap
  digitalWrite(redled, LOW);
  digitalWrite(yellowled, LOW);
  digitalWrite(greenled, LOW);
}

void loop() {
  // adım 1: kırmızı durumu (dur)
  // kırmızı yanar, diğerleri söner
  digitalWrite(redled, HIGH);    // kırmızı ledi yak
  digitalWrite(yellowled, LOW);  // sarı ledi söndür
  digitalWrite(greenled, LOW);   // yeşil ledi söndür
  delay(redtime);                // 5 saniye bekle

  // adım 2: kırmızı + sarı durumu (hazırlan)
  // sarı, kırmızının yanına eklenir
  digitalWrite(yellowled, HIGH); // sarı ledi yak
  delay(redyellowtime);          // 1.5 saniye bekle

  // adım 3: yeşil durumu (geç)
  // kırmızıyı ve sarıyı söndürüp yeşili yak
  digitalWrite(redled, LOW);     // kırmızı ledi söndür
  digitalWrite(yellowled, LOW);  // sarı ledi söndür
  digitalWrite(greenled, HIGH);  // yeşil ledi yak
  delay(greentime);              // 5 saniye bekle

  // adım 4: sarı durumu (durmaya hazırlan)
  // yeşili söndürüp sarıyı yak
  digitalWrite(greenled, LOW);   // yeşil ledi söndür
  digitalWrite(yellowled, HIGH); // sarı ledi yak
  delay(yellowtime);             // 2 saniye bekle

  // adım 5: kırmızı durumu (döngü başa döner)
  // sarı söner; loop() döngüsü otomatik olarak başa döndüğünde
  // kod adım 1'den (kırmızı yak) çalışmaya devam edecektir
  digitalWrite(yellowled, LOW);  // sarı ledi söndür
}

Kodun Satır Satır Açıklaması

  • const int redled = 10; Pin numaralarını anlaşılır değişken isimleriyle tanımlamak, kodun yönetimini ve ilerideki değişiklikleri kolaylaştırır.
  • void setup() Bu kısım Arduino'ya ilgili pinlerin elektrik sinyali göndermek için kullanılacağını (OUTPUT) bildirir. Başlangıçta tüm ışıkların kapalı olması iyi bir programlama pratiğidir.
  • digitalWrite(redled, HIGH) Pinden +5V göndererek LED'in yanmasını sağlar; LOW parametresi ise 0V göndererek LED'i söndürür.
  • delay(redtime) Arduino'yu belirtilen süre boyunca (burada 5000 milisaniye = 5 saniye) duraklatır; bu, her trafik durumunun süresini belirleyen temel mekanizmadır.

Kodu Arduino kartınıza yükledikten sonra breadboard üzerindeki LED'lerin sırasıyla kırmızı, kırmızı+sarı, yeşil ve sarı renklerinde yanıp söndüğünü gözlemleyebilirsiniz. Süreleri değiştirmek için yalnızca redtime, yellowtime, greentime ve redyellowtime değişkenlerini güncellemeniz yeterlidir.

5İleri Geliştirme Fikirleri

Temel simülasyonu tamamladıktan sonra projeyi bir adım öteye taşıyabilirsiniz:

  • Yaya Butonu Ekleme: Bir push-button ile yaya geçişini simüle eden dördüncü bir durum ekleyebilirsiniz.
  • Çoklu Kavşak Senkronizasyonu: İkinci bir LED grubu ekleyerek karşılıklı iki yönün senkronize çalışmasını sağlayabilirsiniz.
  • Sayaç Ekranı: 7 segment ekran veya LCD ile her rengin kaç saniye kaldığını gösterebilirsiniz.

Bu temel proje, dijital çıkış kontrolü ve zamanlama mantığını uygulamalı olarak öğretir; gömülü sistemler ve otomasyon projelerine geçiş için sağlam bir başlangıç noktasıdır.

?Sıkça Sorulan Sorular

LED'lere neden direnç bağlanmalıdır?

Arduino'nun dijital pinlerinden gelen akım, direnç olmadan LED'in kaldırabileceği sınırın üzerine çıkarak LED'i anında yakabilir. 220 Ohm'luk bir direnç, akımı güvenli bir seviyeye düşürerek LED'in ömrünü korur.

Trafik lambasında kırmızı ve sarının birlikte yanması neden gereklidir?

Kırmızı ve sarının birlikte yanması, sürücüleri yeşil ışığın hemen geleceği konusunda uyararak kalkışa hazırlanmalarını sağlar. Bu adım gerçek trafik sinyalizasyon protokolünün bir parçasıdır ve simülasyonu daha gerçekçi kılar.

Arduino'da delay() fonksiyonu ne işe yarar?

delay() fonksiyonu, parametre olarak verilen milisaniye süresi boyunca programın bir sonraki satıra geçmesini durdurur. Trafik lambası projesinde her rengin ne kadar süre yanık kalacağını bu fonksiyon belirler.

Robotik dünyasına adım atmak için ilk adımı atın!

Eğitim materyallerimizi ve projelerimizi keşfederek hemen öğrenmeye başlayın. Blok tabanlı kodlamaya başlayın.

Başla