Teema 7: Ülesanne 7.2 Parking

Töö kirjeldus:

Auto parkimine, millel on 3 kohta ja mis avaneb servo, kui auto läheneb liikumisandurile. Näitab, mitu kohta on parklas täidetud ja kas parkla on tühi või täis!

Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (21tk)
Takisti (4tk, 220Om)
LED RGB (1tk)
Potentiometer (1tk)
LCD ekraan 16×2 (1tk)
Servo (1tk)
Ultrasonic Distance Sensor (1tk)

Töö protsess:

Sisse lülitamisel käivitub parkimine ja kirjutab „Parkla alustab…“, seejärel kuvatakse ekraanil parkimiskohad 0/3. Kui auto läheneb liikumisandurile, kirjutab ekraan „Auto sisenes!“ ja parkimiskoht on 1/3 täis! Kui kõik parkimiskohad on täis, kirjutab ekraan 3/3 ja „TAIS!“. See tähendab, et parkimiskohti ei ole enam ja autod ei saa parklasse siseneda!

LED-ide rakendamine:

Nutikas autode parkimine tänaval või siseruumides.

Skeem:

Kood:

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

const int trigPin = 2;
const int echoPin = 3;
const int servoPin = 13;

const int openAngle = 90;
const int closeAngle = 0;
const int detectionDist = 15;
const int maxCars = 3;

Servo servo;
LiquidCrystal lcd(6, 7, 9, 10, 11, 12);
int carCount = 0;
bool lidOpen = false;
unsigned long lastDetectionTime = 0;
bool justEntered = false;
unsigned long enterMessageTime = 0;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  servo.attach(servoPin);
  servo.write(closeAngle);

  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Parkla alustab...");
  lcd.setCursor(0, 1);
  lcd.print("Kohti: 0/3");

  delay(2000);
}

void loop() {
  long distance = measureDistance();

  if (distance > 0 && distance < detectionDist) {
    handleDetection();
  } 
  else {
    if (lidOpen && millis() - lastDetectionTime > 1000) {
      closeGate();
    }
  }

  updateDisplay();
}

long measureDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  return duration * 0.034 / 2;
}

void handleDetection() {
  if (!lidOpen && carCount < maxCars) {
    lastDetectionTime = millis();
    openGate();
    carCount++;
    justEntered = true;
    enterMessageTime = millis();
  }
}

void openGate() {
  servo.write(openAngle);
  lidOpen = true;
}

void closeGate() {
  servo.write(closeAngle);
  lidOpen = false;
}

void updateDisplay() {
  lcd.clear();

  if (justEntered && millis() - enterMessageTime < 1500) {
    lcd.setCursor(0, 0);
    lcd.print("Auto sisenes!");
    lcd.setCursor(0, 1);
    lcd.print("Kohti: ");
    lcd.print(carCount);
    lcd.print("/");
    lcd.print(maxCars);
  } else {
    justEntered = false;
    lcd.setCursor(0, 0);
    lcd.print("Parkimiskohad:");
    lcd.setCursor(0, 1);
    lcd.print(carCount);
    lcd.print("/");
    lcd.print(maxCars);

    if (carCount >= maxCars) {
      lcd.setCursor(10, 1);
      lcd.print("TAIS!");
    }
  }

  delay(200);
}

Video:

https://drive.google.com/file/d/1ZsMV60TbXAkdBh7z_-NXnUiEvcGwhMXN/view?usp=sharing

Uued funktsioonid:

int maxCars = 3; — Määrab maksimaalse autode arvu parkimisalal (nt 3 kohta).
int carCount = 0; — Loendab, mitu autot on hetkel parklas.
bool justEntered = false; — Märgib, kas auto sisenes just – kasutatakse ekraanil teate kuvamiseks.
unsigned long enterMessageTime = 0; — Aeg, millal viimane auto sisenes – et ajaliselt piirata teate näitamist.
if (justEntered && millis() — enterMessageTime < 1500) {
lcd.print(«Auto sisenes!»);
lcd.print(«Kohti: X/3»);
} else {
lcd.print(«Parkimiskohad:»);
lcd.print(«X/3»);
if (täis) lcd.print(«TAIS!»);
}

Kui parkla täis (carCount ≥ maxCars), lisab sõna «TAIS!».
Kui auto just sisenes, näitab lühidalt teadet «Auto sisenes!».


Warning: Undefined array key "sfsi_facebook_display" in /data01/virt140713/domeenid/www.martinrossakov24.thkit.ee/htdocs/wp/wp-content/plugins/ultimate-social-media-icons/libs/controllers/sfsiocns_OnPosts.php on line 450