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.
2Gerekli Malzemeler
Projeyi gerçekleştirmek için ihtiyacınız olan temel elektronik bileşenler şunlardır:
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 ile 3 LED arasındaki trafik lambası devre bağlantı şeması
Ö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şla4Kodlama 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.
// 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
