Ülesanne 7.2 “Parking”

Töö kirjeldus:

Autode parkla, mis loendab vabu kohti.

Töö protsess:

Kui auto läheneb tõkkepuule, loeb andur ja tõstab tõkkepuu üles, ning ekraanil kuvatakse, et üks koht on hõivatud. Ekraanil kuvatakse alati vabade kohtade arv. Kui auto lahkub parklast, loeb teine andur ja tõstab tõkkepuu üles. Samuti on olemas lamp, mis põleb alati, kui vabu kohti on veel saadaval.

Kasutatud komponeendid:

Servo mootor — 1
Emaplaat — 1
LED — 1
Taikisti — 2 (220 Om)
Juhe — 20
Arendusplaat — 1
LCD ekraan — 1
Potentsiomeeter — 1
HC-SR04 — 2

Skeem:

Programm:

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

#define ECHO_PIN1 10
#define TRIG_PIN1 9
#define ECHO_PIN 8
#define TRIG_PIN 7

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int LED = 6;
Servo servo;
const int total = 5;
int car = 0;

void setup() {
  servo.attach(13);
  Serial.begin(9600);
  servo.write(0);
  pinMode(LED, OUTPUT);

  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Tere tulemast!");
  delay(2000);
  updateLCD();

  pinMode(ECHO_PIN1, INPUT);
  pinMode(TRIG_PIN1, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(TRIG_PIN, OUTPUT);
}

long readDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  long distance = duration * 0.034 / 2;
  Serial.print("Distance from pins ");
  Serial.print(trigPin);
  Serial.print(",");
  Serial.print(echoPin);
  Serial.print(": ");
  Serial.println(distance);
  return distance;
}

void led() {
  if (car < total) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

void servo_mootor() {
  servo.write(90);
  delay(3000);
  servo.write(0);
}

void updateLCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Vabad kohad: ");
  lcd.print(total - car);
}

void loop() {
  long entry = readDistance(TRIG_PIN, ECHO_PIN);
  long exit_ = readDistance(TRIG_PIN1, ECHO_PIN1);

  if (entry > 0 && entry < 20 && car < total) {
    car++;
    servo_mootor();
    led();

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Uks koht hoivatud");
    lcd.setCursor(0, 1);
    lcd.print("Alles: ");
    lcd.print(car);
    delay(5000);
    updateLCD();
  }

  if (exit_ > 0 && exit_ < 20 && car > 0) {
    car--;
    servo_mootor();
    led();

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Koht vabanes");
    lcd.setCursor(0, 1);
    lcd.print("Hoivatud: ");
    lcd.print(car);
    delay(5000);
    updateLCD();
  }

  delay(300);
}

    

Video:

https://drive.google.com/file/d/1f7Uwt1wCSTsxnaC5q0co6oJzlHBTbySX/view?usp=sharing

Uued funktsioonid:

digitalMicroseconds () – aja määramine mikrosekundites digitaalsete sündmuste vahel.

Rakendamine:

  • Automaatuksed
  • Turvasüsteemid
  • Parkimissüsteem
  • Kohaloleku kontroll
  • Objektide mõõtmete mõõtmine