Your cart is currently empty!
Parking süsteem
Lihtne parkimissüsteem

#define ECHO_PIN 7 // Ultrahelianduri vastuvõtu pin
#define TRIG_PIN 8 // Ultrahelianduri saatmise pin
int motorPin1 = 3; // Mootori juhtimiseks kasutatav pin (PWM)
int distance = 1; // Kauguse väärtus sentimeetrites
int LedPin = 11; // LED pin (valitud PWM pin)
int duration; // Ultraheli impulsi kestus mikrosekundites
const int buzzerPin = 9; // Summeri pin
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(motorPin1, OUTPUT);
pinMode(LedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Saada ultraheli impulss
digitalWrite(TRIG_PIN, LOW);
delay(2);
digitalWrite(TRIG_PIN, HIGH);
delay(10);
digitalWrite(TRIG_PIN, LOW);
// Mõõda vastuvõtusignaali kestus
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration / 58; // Arvuta kaugus cm
Serial.println(distance); // Näita kaugust
if (distance > 50) {
analogWrite(motorPin1, 100); // Käivita mootor (madalal võimsusel)
analogWrite(LedPin, 0); // Lülita LED välja
noTone(buzzerPin); // Keela summer
delay(1000); // Väike paus
} else {
analogWrite(motorPin1, 0); // Peata mootor
analogWrite(LedPin, 250); // Lülita LED eredalt sisse (PWM)
tone(buzzerPin, 1000); // Käivita summer sagedusel 1000 Hz
}
}
Uuritud funktsioonid
pulseIn(ECHO_PIN, HIGH);
Eesmärk: Mõõta aega, kui kaua signaal püsib HIGH (kõrgel tasemel) kindlal pin-il.
Kuidas töötab:
See funktsioon ootab kuni ECHO_PIN muutub HIGH, hakkab ajavõttu, ning lõpetab selle, kui signaal muutub jälle LOW. Tagastab selle aja mikrosekundites.
→ Seda kasutatakse ultraheliandurilt kauguse määramiseks (ehk kui kaua kulub helilainel objekti tabamiseks ja tagasi tulemiseks).
analogWrite(motorPin1, 100);
Eesmärk: Saata PWM-signaal mootorile.
Kuidas töötab:
See saadab impulsslaiusmodulatsiooni (PWM) signaali väärtusega 100 (skaalal 0–255), mis tähendab, et mootor töötab umbes 39% võimsusel.
→ Mootori kiirust saab selle kaudu sujuvalt reguleerida.
tone(buzzerPin, 1000);
Eesmärk: Teha summeriga heli.
Kuidas töötab:
See käivitab piezo kõlari (buzzer) kindlal pin-il, sagedusel 1000 Hz (1 kHz), mis tekitab kuuldava tooni.
→ Kasutatakse hoiatuseks, kui objekt on liiga lähedal.
noTone(buzzerPin);
Eesmärk: Peatada summeri heli.
Kuidas töötab:
See funktsioon peatab eelnevalt tone()
abil alustatud heli määratud pin-il.
→ Kui objekt on piisavalt kaugel, lõpetatakse hoiatusheli.
Servo.attach(servoPin);
Eesmärk:
Ühendab servo-mootori konkreetse digitaalse pin-iga.
Kuidas töötab:
Funktsioon lubab Servo
teegil juhtida füüsilist servo mootorit määratud pin-i kaudu. Ilma selleta Servo.write()
ei tööta.
→ Näide: barrierServo.attach(servoPin);
võimaldab hiljem käsklusi nagu write(90)
.
barrierServo.write(90);
Eesmärk:
Pöörata servo teatud nurka.
Kuidas töötab:
See käsib servomootoril liikuda 90 kraadi nurka.
Arduino servo positsioonivahemik on tavaliselt 0–180 kraadi. Näiteks:
barrierServo.write(0);
– sulgeb barjääribarrierServo.write(90);
– avab barjääri
→ Seda kasutatakse funktsioonides openBarrier()
ja closeBarrier()
visuaalse liikumise juhtimiseks.
readDistance(trigPin, echoPin)
Eesmärk:
Mõõta kaugust ultrahelianduriga.
Kuidas töötab:
See funktsioon saadab lühikese ultrahelipulsi ja mõõdab, kui kaua kulub sellel tagasiandmiseks. Arvutatakse kaugus valemiga:
distance = duration * 0.034 / 2;
Selgitus:
0.034
cm/µs on heli kiirus õhus (~343 m/s)- Jagamine kahel (
/ 2
) arvestab edasi-tagasi teekonda (sensor → objekt → sensor)
Kokkuvõttes: see tagastab kauguse sentimeetrites.
Töö kirjeldus
Luua automaatne parkimistõkkepuu, mis tuvastab sõiduki lähenemise ja avab tõkkepuu automaatselt, kasutades erinevaid sensoreid. Süsteemi eesmärk on muuta parkimine mugavamaks, täpsemaks ja turvalisemaks, jälgides samal ajal ka parkimisala täituvust.
Kasutatud komponeendid
- Ultraheliandur (HC-SR04)
- Juhtmed (13 tk)
- RGB LED
- Takisti (3tk: 2tk 220 ohm)
- Servomootor
- Arduino Uno plaat
- Küüneviil

#include <Servo.h>
// Ultraheli andur
const int trigPin1 = 10;
const int echoPin1 = 9;
// Servo mootor
Servo barrierServo;
const int servoPin = 6;
// RGB LED
const int redPin = 13;
const int greenPin = 11;
const int bluePin = 12;
// Künnise kaugused
const int distanceThresholdOpen = 100; // avab tõkkepuu, kui objekt lähemal
const int distanceThresholdClose = 95; // sulgeb tõkkepuu, kui objekt kaugemal
// Oleku muutujad
bool entryDetected = false; // kas objekt tuvastatud
unsigned long barrierOpenTime = 0; // aeg, millal tõkkepuu avati
const unsigned long openDuration = 3000; // avatud oleku kestus (ms)
bool barrierIsOpen = false; // kas tõkkepuu on avatud
void setup() {
Serial.begin(9600);
pinMode(trigPin1, OUTPUT); // Ultraheli trig pin väljundiks
pinMode(echoPin1, INPUT); // Ultraheli echo pin sisendiks
pinMode(redPin, OUTPUT); // Punane LED väljundiks
pinMode(greenPin, OUTPUT); // Roheline LED väljundiks
pinMode(bluePin, OUTPUT); // Sinine LED väljundiks
digitalWrite(bluePin, LOW); // Alguses sinine LED välja lülitatud
barrierServo.attach(servoPin); // Servo ühendamine
closeBarrier(); // Alguses tõkkepuu suletud olekus
}
void loop() {
int distance1 = readDistance(trigPin1, echoPin1); // Loeb kauguse
Serial.print("Entry: ");
Serial.print(distance1);
Serial.println(" cm");
// Kui objekt on lähemal kui avamise künnis ja pole veel tuvastatud
if (distance1 < distanceThresholdOpen && !entryDetected) {
openBarrier(); // Ava tõkkepuu
entryDetected = true; // Märgi objekt tuvastatuks
barrierOpenTime = millis(); // Salvesta avamise aeg
}
// Kui objekt on kaugemal kui sulgemise künnis ja tõkkepuu on avatud
if (distance1 > distanceThresholdClose && entryDetected && barrierIsOpen) {
closeBarrier(); // Sulge tõkkepuu
entryDetected = false; // Objekt pole enam tuvastatud
}
// Automaatne sulgemine pärast kindlat aega, kui objekti pole
if (barrierIsOpen && millis() - barrierOpenTime > openDuration && distance1 > distanceThresholdClose) {
closeBarrier(); // Sulge tõkkepuu
entryDetected = false; // Objekt pole enam tuvastatud
}
delay(50); // Väike viivitus anduri stabiilsuse tagamiseks
}
// Funktsioon kauguse mõõtmiseks ultraheliga
int readDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 25000); // Maksimaalne ooteaeg 25 ms
return duration * 0.034 / 2; // Arvutab kauguse cm-des
}
// Funktsioon tõkkepuu avamiseks
void openBarrier() {
barrierServo.write(90); // Servo pöörab 90 kraadi (avatud asend)
digitalWrite(redPin, LOW); // Punane LED välja
digitalWrite(greenPin, HIGH); // Roheline LED sisse
digitalWrite(bluePin, LOW); // Sinine LED välja
Serial.println("Barrier opened");
barrierIsOpen = true; // Märgib, et tõkkepuu on avatud
}
// Funktsioon tõkkepuu sulgemiseks
void closeBarrier() {
barrierServo.write(0); // Servo pöörab 0 kraadi (suletud asend)
digitalWrite(redPin, HIGH); // Punane LED sisse
digitalWrite(greenPin, LOW); // Roheline LED välja
digitalWrite(bluePin, HIGH); // Sinine LED sisse
Serial.println("Barrier closed");
barrierIsOpen = false; // Märgib, et tõkkepuu on suletud
}