7.1 Katse Mootori kasutamine
Eesmärk
Eelmises projektis kasutasime transistori, et kontrollida mootorit, millega suutsime kontrollida vaid mootori kiirust. Selles projektis võtame kasutusele H-silla, et saaksime kontrollida mootori pöörlemissuunda. Kuna tegemist on suure sammuga robotiehitusele, siis lisame skeemi lüliti, mis paneb mootori tööle, lüliti mis muudab pöörlemissuunda ja muuttakisti mootori kiiruse muutmiseks.
Komponendid:
L293D — 1
Mootor — 1
Arendusplaat — 1
Emaplaat — 1
Nupp — 1
Taikisti — 1 (220 Om)
Juhe — 18
Patarei — 1

kood
-------------------------------------------------------------------------------------------------------------
int switchPin = 2; // lüliti 1
int motor1Pin1 = 3; // viik 2 (L293D)
int motor1Pin2 = 4; // viik 7 (L293D)
int enablePin = 9; // viik 1(L293D)
void setup() {
// sisendid
pinMode(switchPin, INPUT);
//väljundid
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// aktiveeri mootor1
digitalWrite(enablePin, HIGH);
}
void loop() {
// kui lüliti on HIGH, siis liiguta mootorit ühes suunas:
if (digitalRead(switchPin) == HIGH)
{
digitalWrite(motor1Pin1, LOW); // viik 2 (L293D) LOW
digitalWrite(motor1Pin2, HIGH); // viik 7 (L293D) HIGH
}
// kui lüliti on LOW, siis liiguta mootorit teises suunas:
else
{ digitalWrite(motor1Pin1, HIGH); // viik 2 (L293D) HIGH
digitalWrite(motor1Pin2, LOW); // viik 7 (L293D) LOW
}
}
7.2 Katse Kauguse mõõtmise anduri kasutamine
Ultrahelianduri HC-SR04 ühendamine Arduinoga
Komponendid:
HC-SR04 — 1
Juhe — 4
Skeem:

kood
#define ECHO_PIN 8
#define TRIG_PIN 7
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG_PIN,HIGH);
digitalWrite(TRIG_PIN,LOW);
int distance=pulseIn(ECHO_PIN, HIGH)/50;
Serial.println(distance);
}
link
https://www.tinkercad.com/things/bImdy8FIh1A-neat-wolt
7.3 Katse Lihtne parkimissüsteem
Ultraheli andur, Mootor, LED, Buzzer

#define ECHO_PIN 7 // Ultrahelianduri vastuvõtja pin
#define TRIG_PIN 8 // Ultrahelianduri saatja pin
int motorPin1 = 3; // Mootori juhtimise pin
int distance = 1; // Kauguse muutuja
int LedPin = 13; // LEDi pin
int duration; // Signaali kestuse muutuja
const int buzzerPin = 9; // Summeri (buzzer) pin
void setup() {
pinMode(ECHO_PIN, INPUT); // Vastuvõtja sisendina
pinMode(TRIG_PIN, OUTPUT); // Saatja väljundina
pinMode(motorPin1, OUTPUT); // Mootori pin väljundina
pinMode(LedPin, OUTPUT); // LEDi pin väljundina
pinMode(buzzerPin, OUTPUT); // Summeri pin väljundina
Serial.begin(9600); // Seriaalühenduse algus
}
void loop() {
digitalWrite(TRIG_PIN, LOW); // Lülita saatja välja
delay(200);
digitalWrite(TRIG_PIN, HIGH); // Lülita saatja sisse
delay(200);
digitalWrite(TRIG_PIN, LOW); // Lülita saatja välja
duration = pulseIn(ECHO_PIN, HIGH); // Mõõda tagastusaeg
distance = duration / 58; // Arvuta kaugus cm-des
Serial.println(distance); // Väljasta kaugus
if (distance > 50) { // Kui kaugus on üle 50 cm
analogWrite(motorPin1, 100); // Käivita mootor
digitalWrite(LedPin, 0); // LED kustub
noTone(buzzerPin); // Summer vaikib
delay(1000);
} else { // Kui objekt on lähemal
analogWrite(motorPin1, 0); // Mootor seiskub
digitalWrite(LedPin, 250); // LED süttib
tone(buzzerPin, 1000); // Summer teeb heli
}
}
Ülesanne 7.1 Prügikast. Töö paarides.
Uuritud funktsioonid:
lcd.begin() Initsialiseerib LCD-ekraani (16×2).
lcd.setCursor() Määrab, kuhu tekst ekraanil kuvatakse (veerud ja read).
lcd.print() Kuvab teksti LCD-ekraanile.
servo.attach() Seob servomootori kindla digitaalse pinniga.
pulseIn() Mõõdab impulsi kestust (ultrahelianduri tagastusignaal).
pinMode() Määrab pordi sisendi- või väljundirežiimi.
digitalWrite() Seab digitaalse pordi kõrgeks või madalaks (HIGH/LOW).
delay() Paus millisekundites.
Töö kirjeldus:
Projektis valmis nutikas prügikast, mis tuvastab inimese käe või liikumise ultrahelianduri abil ning avab kaane automaatselt servomootori abil. Ekraan kuvab sõnumit selle kohta, kas prügikast on avatud või suletud. Süsteem on loodud praktiliseks kasutuseks — näiteks kööki või vannituppa, kus ei pea kaant käega avama.
Kasutatud komponendid:
• Arduino UNO
• Ultraheliandur (3-pin HC-SR04/HC-SR04P)
• Servomootor SG90
• LCD-ekraan 16×2 (ilma I2C moodulita)
• Potentsiomeeter LCD kontrasti jaoks
• Breadboard ja ühendusjuhtmed
• LED-RGB
Skeem:

Programm:
#include <LiquidCrystal.h>
#include <Servo.h>
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Servo servo;
const int sigPin = 10;
const int redPin = 13;
const int greenPin = 8;
const int bluePin = 9;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
servo.attach(7);
servo.write(0);
// Настройка пинов RGB светодиода
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Nastja loh! :)");
lcd.setCursor(0, 1);
lcd.print("Valmis kasutamiseks");
delay(4000);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Prugikast ^_^");
delay(2000);
}
void loop() {
long duration, distance;
// Отправка сигнала
pinMode(sigPin, OUTPUT);
digitalWrite(sigPin, LOW);
delayMicroseconds(2);
digitalWrite(sigPin, HIGH);
delayMicroseconds(10);
digitalWrite(sigPin, LOW);
// Получение сигнала
pinMode(sigPin, INPUT);
duration = pulseIn(sigPin, HIGH);
distance = duration * 0.0343 / 2;
Serial.println(distance);
if (distance < 50 && distance > 0) {
servo.write(90);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kast avatud :)");
digitalWrite(greenPin, HIGH); // Зелёный свет
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
} else {
servo.write(0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kast suletud :(");
digitalWrite(redPin, HIGH); // Красный свет
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
delay(500);
}
Video:
Kasutusvõimalused tavaelus:
• Köögi prügikast, mida saab kasutada ilma kaant puudutamata.
• Avalikes tualettides hügieenilisemaks prügikäitluseks.
• Kasutatav ka nutika rahakarbi versioonina (nt annetuste kogumiseks).
• Võimalik lisada RGB LED, mis annab tagasisidet meeleolu kohta.
Ülesanne 7.2 Parking
kõik katse ülesanned olid lisatud eelmises katses 7.1
Aruanne:
Kasutatud funktsioonid ja kirjeldus:
| Funktsioon | Kirjeldus |
|---|---|
getDistance() | Arvutab kauguse ultrahelianduri abil |
openBarrier() | Tõstab tõkkepuu ja muudab LED roheliseks |
closeBarrier() | Langetab tõkkepuu ja muudab LED siniseks |
setRGB(r,g,b) | Seab RGB LED värvi |
displayStatus() | Kuvab LCD-ekraanil vabade kohtade arvu |
displayFull() | Kuvab täisoleku teate ja punase LED |
Töö kirjeldus:
Süsteem jälgib parkla sisse- ja väljasõite kahe ultrahelianduri abil. Kui auto siseneb ja kohti on, tõkkepuu avaneb ja kohtade arv suureneb. Kui auto lahkub, väheneb loendur. Kui parkla on täis, hoiatab süsteem ja ei ava tõkkepuud. RGB LED näitab olekut ning LCD-ekraan kuvab info.
Kasutatud komponendid (riistvara):
- Arduino Uno
- 2x Ultraheliandur HC-SR04
- Servomootor (SG90 vms)
- RGB LED
- LCD-ekraan 16×2 (kasutades LiquidCrystal teeki)
- Takistid ja juhtmed
- Pappmudel süsteemi paigutamiseks
Ühendamise skeem:
link:

Programm:
#include <Servo.h>
#include <LiquidCrystal.h>
// LCD ühendused (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
// Ultraheliandur 1 - SAABUMINE
const int trigPin1 = A3;
const int echoPin1 = A2;
// Ultraheliandur 2 - LAHKUMINE
const int trigPin2 = A1;
const int echoPin2 = A0;
// RGB LED
const int redPin = 2;
const int greenPin = 0;
const int bluePin = 1;
// Servo
Servo barrierServo;
const int servoPin = 10;
// Parkimiskohtade arvestus
const int maxSpots = 5;
int occupiedSpots = 0;
// Kauguse lävi (cm)
const int detectDistance = 20;
void setup() {
lcd.begin(16, 2);
lcd.print("Systeem kaivitub");
// Ultraheli pinid
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
// RGB LED
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
// Servo
barrierServo.attach(servoPin);
barrierServo.write(0); // Tõkkepuu suletud
delay(2000);
lcd.clear();
}
void loop() {
long distance1 = getDistance(trigPin1, echoPin1);
long distance2 = getDistance(trigPin2, echoPin2);
// SAABUMINE
if (distance1 < detectDistance) {
if (occupiedSpots < maxSpots) {
openBarrier();
occupiedSpots++;
delay(3000); // aeg autol sisenemiseks
closeBarrier();
} else {
displayFull();
}
}
// LAHKUMINE
if (distance2 < detectDistance && occupiedSpots > 0) {
occupiedSpots--;
delay(3000); // aeg autol väljumiseks
}
displayStatus();
delay(1000);
}
// --- Funktsioonid ---
long getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
void openBarrier() {
barrierServo.write(90); // üles
setRGB(0, 255, 0); // roheline
}
void closeBarrier() {
barrierServo.write(0); // alla
setRGB(0, 0, 255); // sinine
}
void setRGB(int r, int g, int b) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
void displayStatus() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Vabu kohti: ");
lcd.print(maxSpots - occupiedSpots);
if (occupiedSpots == maxSpots) {
setRGB(255, 0, 0); // punane - täis
}
}
void displayFull() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Parkla on tais!");
setRGB(255, 0, 0);
delay(3000);
}
Video:
Kasutusvõimalused tavaelus:
- Kortermajade või kontorite parkimissüsteemid
- Eravalduste sissepääsud
- Väikeste parklate automatiseerimine
- Koolide ja haiglate territooriumid
7.3 Katse «Lihtne parkimissüsteem»
Komponendid:
Mootor — 1
LED — 1
Emaplaat — 1
Buzzer — 1
Juhe — 10
Taikisti — 2 (220 Om)
Skeem:

Kood:
int motorPin1=3;
int distance=1;
int LedPin=13;
int duration;
const int buzzerPin = 9;
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(motorPin1,OUTPUT);
pinMode(LedPin,OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG_PIN,LOW);
delay(200);
digitalWrite(TRIG_PIN,HIGH);
delay(200);
digitalWrite(TRIG_PIN,LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance=duration/58;
Serial.println(distance);
if (distance>50)
{
analogWrite(motorPin1,100);
digitalWrite(LedPin,0);
noTone(buzzerPin);
delay(1000);}
else
{
analogWrite(motorPin1,0);
digitalWrite(LedPin,250);
tone(buzzerPin, 1000);
}
}

