• 13 Aralık 2025 18:40

Sait ORHAN

Öğretmek için Öğrenin- Öğrenmek için Öğretin

Arduino İle Otopark Sistemi

BySait ORHAN

Kas 16, 2025

Uzun aradan sonra küçük de olsa bir Arduino denemesi yapayım dedim.

Devrede yer alan dirençlerin değerleri aşağıdaki gibidir.

  • Butonları GND’ye bağlayan direçler 10kohm
  • LED’lere bağlı olanlar 330ohm

#include <Arduino.h>
#include <Servo.h>
#include <LiquidCrystal.h>

void KapasiteGuncelle();
void aracGirisCisikLedKontrol();

int servoSonrakiAci = 90;
const int aracCikisPin = 22; // Araç çıkış sensörü pini
const int aracGirisPin = 23; // Araç giriş sensörü pini 
const int kirmiziLedPin = 24; // Kırmızı LED pini
const int sariLedPin = 25; // Sarı LED pini
const int yesilLedPin = 26; // Yeşil LED pini
const int servoPin = 44; // Servo motor pini
const int buzzerPin = 28; // Buzzer pini


LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // RS, E, D4, D5, D6, D7
Servo myServo;


const int toplamArac = 5; // Toplam araç kapasitesi
int doluArac = 0;

bool aracGiris = false;
bool aracCikis = false;

void setup()
{
  pinMode(aracCikisPin, INPUT);
  pinMode(aracGirisPin, INPUT);
  pinMode(kirmiziLedPin, OUTPUT);
  pinMode(sariLedPin, OUTPUT);
  pinMode(yesilLedPin, OUTPUT);
  pinMode(servoPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);

  lcd.begin(16, 2);
  myServo.attach(servoPin);
  myServo.write(0);
  servoSonrakiAci = 90;
  Serial.begin(9600);
  Serial.println("Park Yeri Sistemi Basladi");
  KapasiteGuncelle();
  digitalWrite(buzzerPin, HIGH);
}

void loop()
{
  aracGiris = digitalRead(aracGirisPin);
  aracCikis = digitalRead(aracCikisPin);

  

  if (aracGiris == HIGH && doluArac < toplamArac)
  {    
    digitalWrite(buzzerPin, LOW);
    delay(200);
    digitalWrite(buzzerPin, HIGH);
    aracGirisCisikLedKontrol();
    doluArac++;
    Serial.println("Arac Girdi. Dolu Arac Sayisi: " + String(doluArac));
    myServo.write(90);
    delay(1000); 
    myServo.write(0); 
    KapasiteGuncelle();
    while (digitalRead(aracGirisPin) == HIGH); 
  }

  if (aracCikis == HIGH && doluArac > 0)
  {
    digitalWrite(buzzerPin, LOW);
    delay(200);
    digitalWrite(buzzerPin, HIGH);
    aracGirisCisikLedKontrol();
    doluArac--;
    Serial.println("Arac Cikti. Dolu Arac Sayisi: " + String(doluArac));
    myServo.write(90);
    delay(1000); 
    myServo.write(0); 
    KapasiteGuncelle();
    while (digitalRead(aracCikisPin) == HIGH); 
  }
}

void KapasiteGuncelle()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Omer&Faruk Park");
  lcd.setCursor(0, 1);
  lcd.print("Dolu: ");
  lcd.print(doluArac);
  lcd.setCursor(9, 1);
  lcd.print("Bos: ");
  lcd.print(toplamArac - doluArac);
  

  if (doluArac < toplamArac)
  {
    digitalWrite(kirmiziLedPin, LOW);
    digitalWrite(sariLedPin, LOW);
    digitalWrite(yesilLedPin, HIGH);
  }
  else
  {
    digitalWrite(kirmiziLedPin, HIGH);
    digitalWrite(sariLedPin, LOW);
    digitalWrite(yesilLedPin, LOW);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("PARK YERI DOLU");
    lcd.setCursor(0, 1);
    lcd.print("Lutfen Bekleyin");
  }
}

void aracGirisCisikLedKontrol() {
  digitalWrite(yesilLedPin, LOW);
  digitalWrite(sariLedPin, HIGH); 
  digitalWrite(kirmiziLedPin, LOW);
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.