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!”.


