Arduino ile Akıllı (Bluetooth) Trafik Işığı Simülasyonu: Buton ve Bluetooth Kontrollü
Arduino ile Akıllı (Bluetooth) Trafik Işığı Simülasyonu: Buton ve Bluetooth Kontrollü
Herkese merhaba Arduino severler! Bu yazımızda, günlük hayatta karşılaştığımız trafik ışıklarının daha akıllı bir versiyonunu Arduino ile nasıl simüle edebileceğimizi inceleyeceğiz. Bu projede, trafik ışıklarını kontrol etmek için hem bir buton kullanacağız, hem de Bluetooth üzerinden bir telefonun varlığını algılayarak ışık sürelerini değiştireceğiz. Yani, diyelim ki yakınınızda Bluetooth'u açık bir telefonunuz var, trafik ışığı daha uzun süre sizin için yanacak! Eğlenceli değil mi?
Neden Bu Proje?
Bu proje hem Arduino'ya yeni başlayanlar, hem de biraz daha deneyimli kullanıcılar için harika bir öğrenme fırsatı sunuyor. Temel elektronik bilgilerinizi pekiştirirken, sensör kullanımı, Bluetooth iletişimi ve programlama mantığını da öğrenmiş olacaksınız. Ayrıca, bu projeyi geliştirerek daha karmaşık akıllı şehir projelerine de adım atabilirsiniz.
Gerekli Malzemeler
Bu projeyi gerçekleştirmek için aşağıdaki malzemelere ihtiyacınız olacak:
- Arduino Uno (veya benzeri bir Arduino kartı)
- 3 adet LED (Kırmızı, Sarı, Yeşil)
- 3 adet 220 Ohm direnç
- 1 adet Buton
- 1 adet HC-05 veya HC-06 Bluetooth Modülü
- Jumper kablolar
- Breadboard (Prototip geliştirme kartı)
Devre Şeması
Devremizi aşağıdaki şekilde kuracağız:
- Kırmızı LED: Arduino'nun 13. pinine 220 Ohm direnç üzerinden bağlanır.
- Sarı LED: Arduino'nun 12. pinine 220 Ohm direnç üzerinden bağlanır.
- Yeşil LED: Arduino'nun 11. pinine 220 Ohm direnç üzerinden bağlanır.
- Buton: Bir bacağı Arduino'nun 2. pinine, diğer bacağı ise 10K Ohm direnç ile GND'ye (Toprak) bağlanır. Butonun diğer bacağına Arduino VCC (5V) bağlanır.
- HC-05/HC-06 Bluetooth Modülü:
- VCC pini Arduino'nun 5V pinine bağlanır.
- GND pini Arduino'nun GND pinine bağlanır.
- TXD pini Arduino'nun RXD (0) pinine bağlanır (Dikkat: Program yüklerken bağlantıyı kesin veya devreden çıkarın, aksi takdirde yükleme başarısız olabilir!). Yükleme bittikten sonra tekrar bağlayın. Modülün RXD pinine voltaj bölücü kullanarak (örneğin 1K ve 2K dirençlerle) Arduino'dan gelen 5V sinyalini 3.3V'a düşürmek daha güvenlidir.
- RXD pini Arduino'nun TXD (1) pinine bağlanır.
Arduino Kodu
Şimdi de projemizin beyni olan Arduino koduna geçelim. Aşağıdaki kodu Arduino IDE'sine kopyalayıp, kartınıza yükleyebilirsiniz:
// LED pinleri
const int redLedPin = 13;
const int yellowLedPin = 12;
const int greenLedPin = 11;
// Buton pini
const int buttonPin = 2;
// Bluetooth bağlantı durumu
bool bluetoothConnected = false;
// Normal ve uzun süreler (milisaniye cinsinden)
const unsigned long normalRedDuration = 5000; //5 saniye
const unsigned long normalYellowDuration = 2000; //2 saniye
const unsigned long normalGreenDuration = 5000; //5 saniye
const unsigned long longRedDuration = 15000; //15 saniye
const unsigned long longYellowDuration = 6000; //6 saniye
const unsigned long longGreenDuration = 15000; //15 saniye
unsigned long redDuration = normalRedDuration;
unsigned long yellowDuration = normalYellowDuration;
unsigned long greenDuration = normalGreenDuration;
void setup() {
// Pinleri çıkış olarak ayarla
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
// Buton pinini giriş olarak ayarla ve dahili pull-up direnci aktif et
pinMode(buttonPin, INPUT_PULLUP);
// Seri iletişimi başlat (Bluetooth için)
Serial.begin(9600);
}
void loop() {
// Bluetooth bağlantı durumunu kontrol et
if (Serial.available() > 0) {
char data = Serial.read();
if (data == '1') {
bluetoothConnected = true;
redDuration = longRedDuration;
yellowDuration = longYellowDuration;
greenDuration = longGreenDuration;
} else if (data == '0') {
bluetoothConnected = false;
redDuration = normalRedDuration;
yellowDuration = normalYellowDuration;
greenDuration = normalGreenDuration;
}
}
// Butona basıldıysa trafik ışıklarını çalıştır
if (digitalRead(buttonPin) == LOW) {
runTrafficLights();
delay(50); // Debouncing için kısa bir gecikme
}
}
void runTrafficLights() {
// Kırmızı ışık
digitalWrite(redLedPin, HIGH);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
delay(redDuration);
// Sarı ışık (Kırmızı ile birlikte)
digitalWrite(yellowLedPin, HIGH);
delay(yellowDuration);
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
// Yeşil ışık
digitalWrite(greenLedPin, HIGH);
delay(greenDuration);
// Sarı ışık
digitalWrite(greenLedPin, LOW);
digitalWrite(yellowLedPin, HIGH);
delay(yellowDuration);
digitalWrite(yellowLedPin, LOW);
}
Kodun Açıklaması
- Pin Tanımları: LED'ler ve buton için pin numaralarını tanımlıyoruz.
- Değişkenler: Bluetooth bağlantı durumunu ve ışık sürelerini saklamak için değişkenler tanımlıyoruz.
- `setup()` Fonksiyonu: Pinleri giriş/çıkış olarak ayarlıyor ve seri iletişimi başlatıyoruz.
- `loop()` Fonksiyonu: Sürekli olarak butona basılıp basılmadığını ve Bluetooth'tan veri gelip gelmediğini kontrol ediyoruz.
- Bluetooth Kontrolü: Bluetooth modülünden '1' gelirse `bluetoothConnected` değişkenini `true`, '0' gelirse `false` olarak ayarlıyoruz. Bluetooth bağlıysa ışık süreleri uzuyor.
- `runTrafficLights()` Fonksiyonu: Trafik ışıklarını sırasıyla yakıp söndürüyor.
Bluetooth Kontrolü için Ek Bilgiler
Bluetooth ile kontrol için telefonunuza bir Bluetooth terminal uygulaması (örneğin, "Serial Bluetooth Terminal") indirmeniz gerekiyor. Bu uygulama üzerinden Arduino'ya '1' göndererek Bluetooth bağlantısını aktif edebilir, '0' göndererek pasif hale getirebilirsiniz. Uygulamayı indirdikten sonra HC-05 veya HC-06 modülünüze bağlanıp Arduino'ya veri gönderebilirsiniz.
Projenin Geliştirilmesi
Bu proje geliştirilmeye açık! Örneğin:
- Daha fazla sensör ekleyerek (örneğin, araç sensörü) trafik yoğunluğunu algılayabilirsiniz.
- Farklı Bluetooth komutları ile farklı trafik senaryoları oluşturabilirsiniz.
- Trafik ışıklarının sırasını ve sürelerini dinamik olarak değiştirebilirsiniz.
Umarım bu proje size Arduino dünyasına güzel bir giriş yapmanızda yardımcı olur. İyi eğlenceler!
Etiketler: Arduino, Trafik Işığı, Bluetooth, Akıllı Şehir, Proje, Elektronik, Kodlama, HC-05, HC-06
```
0 yorum: