Akıllı otopark projesi, her park yerine konan kızılötesi (IR) engel sensörleriyle dolu ve boş yerleri algılar, girişteki servo bariyeri yalnızca boş yer varsa açar ve boş yer sayısını 16x2 LCD ekranda gösterir. Arduino Uno ile 3 park yeri, bir giriş ve bir çıkış sensörü kullanılır.
Alışveriş merkezlerinin otoparklarında girişteki tabelada kaç boş yer kaldığı yazar ve otopark dolunca bariyer açılmaz. Bu projede aynı sistemi bir maket üzerinde kuruyoruz: her park yerinin altında bir IR sensör var, Arduino boş yerleri sayıyor, LCD ekran sonucu gösteriyor ve servo motor bariyeri açıp kapatıyor. Proje ortaokul ve lise teknoloji tasarım dersleri, TÜBİTAK 4006 bilim fuarları ve meslek lisesi bitirme ödevleri için uygundur.
Akıllı otopark sistemi nedir?
Akıllı otopark sistemi, park yerlerinin dolu ya da boş olduğunu sensörlerle algılayan, boş yer sayısını sürücülere gösteren ve girişi buna göre yöneten bir otomasyon sistemidir. Gerçek otoparklarda bu iş için tavana takılan ultrasonik sensörler, zemine gömülü manyetik sensörler ya da kameralar kullanılır.
Maketimizde sensörlerin yerini KY-032 kızılötesi engel sensörleri, bariyerin yerini SG90 servo motor, tabelanın yerini 16x2 I2C LCD ekran alır. Arduino Uno hepsini yönetir.
Hangi malzemeler gerekir?
Akıllı otopark için Arduino Uno, 5 adet IR engel sensörü, bir SG90 servo, I2C arayüzlü 16x2 LCD, breadboard ve jumper kablolar yeterlidir. Maket için bir mukavva ya da köpük levha, oyuncak arabalar ve bir dondurma çubuğu (bariyer kolu) gerekir.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino Uno R3 (CH340, USB kablolu) | 1 | Sensörleri okur, bariyeri ve ekranı yönetir |
| KY-032 IR engel sensörü | 5 | 3 park yeri + giriş + çıkış |
| Tower Pro SG90 servo motor | 1 | Bariyer kolunu 0° ile 90° arasında çevirir |
| 16x2 I2C LCD ekran | 1 | Boş yer sayısını gösterir |
| Terminalli 830 pin breadboard | 1 | 5V ve GND dağıtımı |
| 140 parça kutulu jumper kablo seti | 1 | Sensör ve modül bağlantıları |
KY-032 sensörü 3-5V ile çalışır, 2-40 cm arasındaki engeli algılar ve engel gördüğünde çıkışını LOW yapar. Modül üzerindeki iki trimpotla algılama mesafesi ayarlanır.
Devre nasıl bağlanır?
Park yeri sensörleri D4, D5 ve D6'ya, giriş sensörü D2'ye, çıkış sensörü D3'e, servo D9'a, LCD ise A4 (SDA) ve A5 (SCL) pinlerine bağlanır. Tüm modüller 5V ve GND hattından beslenir.
- Arduino'nun 5V pinini breadboard'un artı hattına, GND pinini eksi hattına bağlayın.
- Her KY-032 sensörünün + ucunu artı hattına, GND ucunu eksi hattına bağlayın. Modüldeki EN atlama teli (jumper) takılı kalmalı, EN ucu boş bırakılır.
- Çıkış (OUT) uçları: P1 → D4, P2 → D5, P3 → D6, giriş sensörü → D2, çıkış sensörü → D3.
- Servo: kahverengi → GND, kırmızı → 5V, turuncu (sinyal) → D9.
- LCD: GND → GND, VCC → 5V, SDA → A4, SCL → A5.
- Park sensörlerini her park yerinin arka duvarına, arabaya bakacak şekilde yerleştirin; giriş ve çıkış sensörlerini bariyerin iki yanına koyun.
- Bir arabayı sensörün önüne koyup modüldeki LED'in yandığı mesafeyi trimpotla 3-5 cm'ye ayarlayın.
Sensörün maket duvarlarını görmemesi için algılama mesafesini kısa tutun. LCD'nin bağlantısı ve I2C adres bulma yöntemi 16x2 LCD ekran Arduino bağlantısı yazısında anlatılıyor.
Akıllı otopark kodu nasıl çalışır?
Kod her 100 ms'de üç park sensörünü okuyup boş yerleri sayar, sonucu LCD'ye yazar; girişte araç varsa ve boş yer kaldıysa ya da çıkışta araç varsa bariyeri açar, araç geçtikten 2 saniye sonra kapatır.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
const byte YER[3] = {4, 5, 6}; // park yeri sensörleri
const byte GIRIS = 2, CIKIS = 3, SERVO_PIN = 9;
const int KAPALI = 0, ACIK = 90; // bariyer açıları
LiquidCrystal_I2C lcd(0x27, 16, 2); // ekran yoksa 0x3F deneyin
Servo bariyer;
bool acik = false;
unsigned long sonArac = 0;
bool dolu(byte pin) { return digitalRead(pin) == LOW; } // engel = LOW
void setup() {
for (byte i = 0; i < 3; i++) pinMode(YER[i], INPUT);
pinMode(GIRIS, INPUT);
pinMode(CIKIS, INPUT);
bariyer.attach(SERVO_PIN);
bariyer.write(KAPALI);
lcd.init();
lcd.backlight();
}
void loop() {
byte bos = 0;
lcd.setCursor(0, 1);
for (byte i = 0; i < 3; i++) {
bool d = dolu(YER[i]);
if (!d) bos++;
lcd.print('P'); lcd.print(i + 1); lcd.print(d ? ":X " : ":- ");
}
lcd.setCursor(0, 0);
if (bos > 0) { lcd.print("Bos yer: "); lcd.print(bos); lcd.print(" "); }
else lcd.print("OTOPARK DOLU ");
bool aracVar = (dolu(GIRIS) && bos > 0) || dolu(CIKIS);
if (aracVar) {
sonArac = millis();
if (!acik) { bariyer.write(ACIK); acik = true; }
} else if (acik && millis() - sonArac > 2000) {
bariyer.write(KAPALI);
acik = false;
}
delay(100);
}
LCD'nin ilk satırında "Bos yer: 2", ikinci satırında "P1:X P2:- P3:X" gibi bir durum görünür; X dolu, tire boş demektir. LCD Türkçe karakter gösteremediği için "Boş" yerine "Bos" yazılır. Bariyerin açılıp kapanma açılarını KAPALI ve ACIK sabitlerinden değiştirebilirsiniz.
Sistem hangi durumda ne yapar?
Sistem, giriş sensörü, çıkış sensörü ve boş yer sayısına bakarak bariyeri açar ya da kapalı tutar. Aşağıdaki tablo bütün durumları özetler.
| Durum | Boş yer | Bariyer | LCD 1. satır |
|---|---|---|---|
| Araç yok | 1-3 | Kapalı | Bos yer: 1-3 |
| Girişte araç | 1-3 | Açılır (90°) | Bos yer: 1-3 |
| Girişte araç | 0 | Kapalı kalır | OTOPARK DOLU |
| Çıkışta araç | Fark etmez | Açılır (90°) | Değişmez |
| Araç geçti | - | 2 s sonra kapanır (0°) | Yeni sayı |
Servo motorun açı tutma mantığını servo motor nedir yazısında anlattık. Benzer bir bariyer mantığı kullanan otomatik kapı projesi de karşılaştırma için faydalıdır.
Maket nasıl hazırlanır?
Maket, 40x30 cm civarında bir mukavva ya da köpük levha üzerine park yerleri çizilip sensörler her yerin arka duvarına yerleştirilerek hazırlanır.
- Park yerlerini oyuncak arabanızdan biraz geniş çizin; her yerin arka duvarına bir sensörü, ileri bakacak şekilde yapıştırın.
- Servoyu girişin yanına sabitleyin ve koluna dondurma çubuğu yapıştırarak bariyer yapın.
- Giriş sensörünü bariyerin dışına, çıkış sensörünü içine koyun.
- LCD'yi girişte, sürücünün göreceği yükseklikte bir tabela gibi yerleştirin.
- Kabloları levhanın altından geçirin; Arduino ve breadboard maketin arkasında kalsın.
Hangi güvenlik kurallarına dikkat edilmeli?
Sistem USB'den 5 V ile çalıştığı için güvenlidir; yine de şu kurallara uyun:
- Devreyi yalnızca bilgisayarın USB çıkışından ya da USB powerbank'tan besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
- Projeyi öğretmen ya da yetişkin gözetiminde kurun; maket kesiminde maket bıçağını yetişkin yardımıyla kullanın.
- Servo dönerken parmaklarınızı bariyer kolundan uzak tutun.
- Arduino servo hareket ederken kendini yeniden başlatıyorsa servoyu 4 kalem pilden (6 V) besleyin ve pilin eksisini Arduino GND'sine bağlayın.
- Bağlantı değiştirmeden önce USB kablosunu çıkarın.
Ödevinizi nasıl sunarsınız?
Ödevinizi, maketteki park yerlerini oyuncak arabalarla tek tek doldurup LCD'deki sayının ve bariyerin nasıl değiştiğini göstererek sunabilirsiniz.
- Problem: "Sürücüler boş yer ararken ne kadar zaman ve yakıt harcar?"
- Gösteri: Üç yeri sırayla doldurun, "OTOPARK DOLU" yazısını ve kapalı kalan bariyeri gösterin; sonra bir arabayı çıkarın.
- Deney: Beyaz, kırmızı ve siyah arabalarla algılama mesafesini ölçüp tabloya yazın.
- Rapor: Devre şemasını, kodun akış şemasını ve durum tablosunu ekleyin.
- Geliştirme: Her yerin üstüne yeşil-kırmızı LED, giriş-çıkış sayacı ya da Wi-Fi ile telefondan izleme önerin.
Sık sorulan sorular
Siyah oyuncak araba neden algılanmıyor?
Siyah ve mat yüzeyler kızılötesi ışığı emdiği için IR sensöre daha az ışık geri döner. Bu yüzden siyah araba, beyaz arabaya göre çok daha yakından algılanır ya da hiç algılanmaz. Sensörün trimpotunu çevirerek hassasiyeti artırın veya arabanın sensöre bakan yüzüne beyaz bir etiket yapıştırın.
LCD ekranda yazı görünmüyorsa ne yapmalıyım?
LCD'de yazı görünmüyorsa önce arkasındaki I2C modülünün mavi trimpotunu çevirerek kontrastı ayarlayın. Arka ışık yanıyor ama yazı yoksa I2C adresi farklı olabilir; koddaki 0x27 değerini 0x3F yapın. LiquidCrystal_I2C kütüphanesinin kurulu olduğunu ve SDA'nın A4'e, SCL'nin A5'e bağlandığını kontrol edin.
IR sensör yerine HC-SR04 kullanılabilir mi?
Evet, HC-SR04 de kullanılabilir ve renkten etkilenmez. Ancak her HC-SR04 iki pin kullanır ve beş sensör için on pin gerekir. Ayrıca yan yana duran HC-SR04'ler birbirinin sesini duyabilir; sırayla ölçüm yapılmalıdır. Üç park yerli bir maket için IR sensörler daha basit ve daha ucuzdur.
Park yeri sayısı artırılabilir mi?
Evet, her yeni park yeri için bir sensör ve bir boş pin eklenerek sayı artırılabilir. Koddaki YER dizisine yeni pin numarasını, döngülerdeki 3 sayısının yerine yeni toplamı yazın. Arduino Uno'da D7, D8, D10-D13 ve A0-A3 pinleri boştur. Çok sayıda yer için LCD'nin ikinci satırı yetmeyeceğinden yalnızca boş yer sayısını gösterin.
Özet
- Akıllı otopark, park yerlerini IR sensörlerle algılayıp boş yer sayısını LCD'de gösteren ve bariyeri yöneten bir sistemdir.
- Bağlantı: park sensörleri D4-D6, giriş D2, çıkış D3, servo D9, LCD A4 (SDA) ve A5 (SCL).
- KY-032 engel gördüğünde LOW verir; algılama mesafesi trimpotla 3-5 cm'ye ayarlanır.
- Bariyer boş yer varsa girişte, her zaman çıkışta açılır ve araç geçtikten 2 saniye sonra kapanır.
- Siyah ve mat arabalar IR ışığı emdiği için daha zor algılanır.
- Devreyi yalnızca USB ile, yetişkin gözetiminde çalıştırın.
