Töö protsess:
See kood juhib mootorit (H-mootori sild), kasutades Arduino ja L293D draiverit. See määrab ka mootori pöörlemissuuna: kui lüliti on sisse lülitatud, siis mootor pöörleb.
Kasutatud:
1x Arduino UNO
1x Mootor
1x L293D
1x taksis 220 om
1x nupp
1x Patarei
18x Juhtmed
Kood:
int switchPin = 7; // lüliti 1
int motor1Pin1 = 11; // viik 2 (L293D)
int motor1Pin2 = 12; // viik 7 (L293D)
int enablePin = 13; // 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
}
}
Foto:

Töö protsess:
See kood juhib mootorit kahe lüliti ja potentsiomeetri abil. Üks lüliti käivitab mootori ja reguleerib selle kiirust, teine lüliti seab pöörlemissuuna. Potentsiomeeter võimaldab muuta kiirust.
Kasutatud:
1x Arduino UNO
1x Potentsiomeetr
2x Nupp
1x L293D
1x Patarei
1x Mootor
2x taksis 220om
23x Juhtmed
Kood:
int switchPin = 4; // lüliti 1
int switchPin2 = 3; // lüliti 2
int potPin = A0; // potentsiomeeter
int motor1Pin1 = 7; // viik 2 (L293D)
int motor1Pin2 = 12; // viik 7 (L293D)
int enablePin = 13; // viik 1(L293D)
void setup() {
// sisendid
pinMode(switchPin, INPUT);
pinMode(switchPin2, INPUT);
//väljundid
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
}
void loop() {
//mootori kiirus
int motorSpeed = analogRead(potPin);
//aktiveeri mootor
if (digitalRead(switchPin2) == HIGH)
{
analogWrite(enablePin, motorSpeed);
}
else
{ analogWrite(enablePin, 0); }
// 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
}
}
Foto:

Töö protsess:
Seda koodi kasutatakse kauguse mõõtmiseks ultrahelianduri abil.
Kasutatud:
1x Arduino UNO
1x Ultrahelianduri
4x Juhtmed
Kood:
#define ECHO_PIN 9
#define TRIG_PIN 10
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
Serial.begin(960);
}
void loop() {
Serial.println(measure());
}
int measure()
{
digitalWrite(TRIG_PIN,HIGH);
digitalWrite(TRIG_PIN,LOW);
int distance=pulseIn(ECHO_PIN, HIGH,15000)/50;
return constrain(distance,1,300);
}
Foto:

Töö protsess:
See kood juhib mootorit, LED-i ja helisignaali, kasutades ultraheli kaugusandurit. Sumisti kõlab ja LED lamp süttib, kui objekt on lähemal kui 50 cm.
Kasutatud:
1x Arduino Uno
1x LED lamp
1x Buzzer
1x Ultrahelianduri
1x Mootor
2x 220 om taksi
10x Juhtmed
Kood:
#define ECHO_PIN 4
#define TRIG_PIN 5
int motorPin1=12;
int distance=1;
int LedPin=13;
int duration;
const int buzzerPin = 11;
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);
}
}
Foto:

7.4 Katse Mootiri käivitamine L298N draiveriga.
Töö protsess:
L298N mootorijuhi abil saab juhtida kahte mootorit või ühte samm-mootorit. Maksimaalne voolutarve ei tohiks ületada 2 amprit.
Seda juhitakse sisendite IN1, IN2, IN3 ja IN4 kaudu, kus signaalide vaheldumine määrab mootori pöörlemissuuna. ENA ja ENB viike kasutatakse eraldi kanalite juhtimiseks ja neid saab kasutada kahes režiimis:
Aktiivne režiim – võimaldab pöörlemiskiirust juhtida PWM-signaali abil.
Passiivne režiim – mootor töötab täisvõimsusel, kuid säästab kontrolleri viike.
Kasutatud:
2x Arduino UNO
1x L298 draiveriga
2x Mootor
12x Juhtmed
Foto:

Ülesanne 7.1 Rahakarp või Prügikast.
Töö protsess:
Pärast koodi käivitamist tervitab see teid ja seejärel käivitab loenduri, mis on väga kerge algoritm. Kui teie käsi on selle lähedal, avaneb kaas ja RGB LED-lamp süttib siniselt (passiivses ajas süttib see roheliselt) ning lisab ekraanil olevale loendurile +1. Seejärel sulgub see ja ootab, kuni te matenka uuesti sisse panete.
Kasutatud:
1x Arduino UNO
1x Ultrahelianduri
1x RGB LED lamp
4x 220om takist
1x LCD 16×2
1x Potentsiomeeter
1x Servo mootor
25x Juhtmed
Kood:
#include <Servo.h>
#include <LiquidCrystal.h>
const int trigPin = 1;
const int echoPin = 2;
const int servoPin = 13;
const int redPin = 5;
const int greenPin = 4;
const int bluePin = 3;
const int openAngle = 90;
const int closeAngle = 0;
const int detectionDist = 15;
const long sadTimeout = 10000;
Servo servo;
LiquidCrystal lcd(6, 7, 9, 10, 11, 12);
int coinCount = 0;
unsigned long lastDetectionTime = 0;
bool lidOpen = false;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
servo.attach(servoPin);
servo.write(closeAngle);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Tere tulemast!");
lcd.setCursor(0, 1);
lcd.print("Sastuspanka!");
setColor(0, 0, 255);
delay(1000);
}
void loop() {
long distance = measureDistance();
if (distance > 0 && distance < detectionDist) {
handleDetection();
}
else {
if (lidOpen) {
if (millis() - lastDetectionTime > 500) {
closeLid();
}
}
else {
checkSadState();
}
}
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() {
lastDetectionTime = millis();
if (!lidOpen) {
openLid();
coinCount++;
setColor(0, 255, 0);
delay(1000);
}
}
void openLid() {
servo.write(openAngle);
lidOpen = true;
}
void closeLid() {
servo.write(closeAngle);
lidOpen = false;
setColor(0, 0, 255);
}
void checkSadState() {
if (millis() - lastDetectionTime > sadTimeout) {
setColor(255, 0, 0);
}
}
void updateDisplay() {
lcd.clear();
if (lidOpen) {
lcd.setCursor(0, 0);
lcd.print("Aitah mundi eest!");
lcd.setCursor(0, 1);
lcd.print("Mundid: ");
lcd.print(coinCount);
} else {
lcd.setCursor(0, 0);
lcd.print("Mundid kokku: ");
lcd.print(coinCount);
lcd.setCursor(0, 1);
if (millis() - lastDetectionTime > sadTimeout) {
lcd.print("Ootan juba kaua:(");
} else if (coinCount > 0) {
lcd.print("Lahe, sa sastad!$");
} else {
lcd.print("Pane esimene munt!");
}
}
delay(200);
}
void setColor(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
Foto:

Video:
7.2 Parking
Töö protsess:
Kui kood käivitatakse, ilmub ekraanile vabade kohtade arv ja tervituskiri. Kui auto saabub ja on liiga lähedal, avaneb ja sulgub tõkkepuu 1 sekundi pikkuse viivitusega ning kood saab uuesti käivitada. Kui vabu kohti enam ei ole, ilmub ekraanile teade, et kohti enam ei ole.
Kasutatud:
1x Arduino UNO
1x Ultrahelianduri
1x RGB LED lamp
4x 220om takist
1x LCD 16×2
1x Potentsiomeeter
1x Servo mootor
25x Juhtmed
Kood:
#include <Servo.h>
#include <LiquidCrystal.h>
const int trigPin = 2;
const int echoPin = 3;
const int servoPin = 13;
const int redPin = 8;
const int greenPin = 5;
const int bluePin = 4;
const int openAngle = 90;
const int closeAngle = 0;
const int detectionDist = 15;
const long sadTimeout = 10000;
const long debounceDelay = 1000;
Servo servo;
LiquidCrystal lcd(6, 7, 9, 10, 11, 12);
int parkingSpots = 5;
int currentCars = 0;
bool isBarrierOpen = false;
unsigned long lastCarTime = 0;
bool isParkingFull = false;
bool carDetected = false;
unsigned long lastActivationTime = 0;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
servo.attach(servoPin);
servo.write(closeAngle);
lcd.begin(16, 2);
lcd.print("Parkimissusteem");
delay(2000);
updateDisplay();
setRGBColor(0, 255, 0);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance <= detectionDist && distance > 0) {
if (!carDetected && (millis() - lastActivationTime > debounceDelay)) {
carDetected = true;
lastActivationTime = millis();
if (!isBarrierOpen && !isParkingFull) {
openBarrier();
currentCars++;
if (currentCars >= parkingSpots) {
isParkingFull = true;
}
updateDisplay();
}
}
lastCarTime = millis();
} else {
carDetected = false;
}
if (isBarrierOpen && (millis() - lastCarTime > sadTimeout)) {
closeBarrier();
}
delay(100);
}
void openBarrier() {
servo.write(openAngle);
isBarrierOpen = true;
setRGBColor(0, 0, 255);
delay(1000);
setRGBColor(0, 255, 0);
}
void closeBarrier() {
servo.write(closeAngle);
isBarrierOpen = false;
setRGBColor(255, 0, 0);
delay(1000);
if (isParkingFull) {
setRGBColor(255, 255, 0);
} else {
setRGBColor(0, 255, 0);
}
}
void setRGBColor(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
void updateDisplay() {
lcd.clear();
lcd.print("Vabu kohti: ");
lcd.print(parkingSpots - currentCars);
lcd.print("/");
lcd.print(parkingSpots);
lcd.setCursor(0, 1);
if (isParkingFull) {
lcd.print("TÄIS!");
} else {
lcd.print("Tere tulemast!");
}
}
Foto:

Video:

