7. Teema: Mootor ja kaugusemõõtmise andur
7.1 Katse Mootori kasutamine

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
}
}

int switchPin = 2; // lüliti 1
int switchPin2 = 1; // lüliti 2
int potPin = A0; // potentsiomeeter
int motor1Pin1 = 3; // viik 2 (L293D)
int motor1Pin2 = 4; // viik 7 (L293D)
int enablePin = 9; // 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
}
}
7.2 Katse Kauguse mõõtmise anduri kasutamine

#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);
}
7.3 Katse Lihtne parkimissüsteem

#define ECHO_PIN 7
#define TRIG_PIN 8
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);
}
}
Ülesanne 7.1 Rahakarp või Prügikast. Töö paarides.
Töö kirjeldus
Meie töö on rahakarp, mis avab ise kaane, kui inimene käe lähedale paneb. See loeb, mitu münti on sisse pandud, teeb heli, näitab infot ekraanil ja kasutab LED-tulesid, et näidata erinevaid olekuid (nt roheline – OK, punane – ootab).

Kasutatud komponenid
- Arduino UNO
- HC-SR04 andur
- Servo mootor
- LCD ekraan (16×2)
- LED-id (punane, sinine, roheline)
- Pieso buzzer
- Potentsiomeeter
- Takistid ja juhtmed
- Pistikplaat (breadboard)
Töö protsess:
- Ühendasime kõik juhtmed vastavalt skeemile: andur, servo, LCD, LED-id ja buzzer.
- Kirjutasime programmi Arduino IDE-s. Programm teeb järgmist:
- Kui käsi on lähedal (kuni 30 cm), avaneb kaas.
- Kui käsi eemaldatakse, loeme seda kui mündi lisamist.
- Ekraanil tuleb tekst “Aitäh!” ja müntide arv suureneb.
- LEDid ja buzzer reageerivad.
- Kui 5 sekundi jooksul ei lisata uut münti, ekraanil on tekst “Kurb vaikus…” ja punane LED süttib.
- Ekraanil näitame ka erimärke – nagu süda, naerunägu ja tähed.
Kasutamisvõimalused tavaelus
- Rahakarbina – näiteks annetuste kogumiseks või laste mänguasjana.
- Prügikastina – kaas avaneb, kui käsi läheneb. Puhtam ja mugavam.
- Õppimiseks – hea viis õppida, kuidas andurid ja Arduino töötavad.
- Näitusel või poes – saab teha huvitava automaatse karbi, mis reageerib inimesele.
Skeem:

Programm:
#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// LED-id
const int redPin = 10;
const int bluePin = 9;
const int greenPin = 8;
// Kauguse mõõtmise andur
#define ECHO_PIN A1
#define TRIG_PIN A0
int myndid = 0;
bool kasiLahedal = false;
bool ootanRingi = false;
long timer = 0;
// Servo mootor
Servo mootor;
// Pieso helisignaali pin
const int buzzerPin = 7;
// LCD jaoks erimärgid
byte smile[8] = {
0b00000,
0b01010,
0b01010,
0b00000,
0b10001,
0b01110,
0b00000,
0b00000
};
byte smile2[8] = {
0b00000,
0b01010,
0b01010,
0b00000,
0b11111,
0b10001,
0b01110,
0b00000
};
byte tahtU[8] = {
0b01010,
0b00000,
0b10001,
0b10001,
0b10001,
0b10011,
0b01101,
0b00000
};
byte tahtO[8] = {
0b01110,
0b00000,
0b01110,
0b10001,
0b10001,
0b10001,
0b01110,
0b00000
};
byte tahtA[8] = {
0b01010,
0b00000,
0b01110,
0b00001,
0b01111,
0b10001,
0b01111,
0b00000
};
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
byte sad[8] = {
0b00000,
0b01010,
0b01010,
0b00000,
0b01110,
0b10001,
0b00000,
0b00000
};
void setup() {
// LED-id ja Buzzer
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Servo mootor
mootor.attach(13);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
Serial.begin(9600);
//LCD ekraan
lcd.begin(16, 2);
lcd.createChar(1, smile);
lcd.createChar(2, tahtU);
lcd.createChar(3, tahtO);
lcd.createChar(4, tahtA);
lcd.createChar(5, heart);
lcd.createChar(6, smile2);
lcd.createChar(7, sad);
// Tervitustekst ja animatsioon
lcd.setCursor(3, 0);
lcd.print("Pane m");
lcd.write(byte(2));
lcd.print("nt! ");
lcd.setCursor(0, 1);
lcd.print("Saa r");
lcd.write(byte(3));
lcd.write(byte(3));
lcd.print("mu! ");
// süda - paremale
for (int koht = 11; koht <= 15; koht++) {
lcd.setCursor(koht, 1);
lcd.write(byte(5));
delay(300);
lcd.setCursor(koht, 1);
lcd.print(" ");
}
// süda - vasakule
for (int koht = 14; koht >= 11; koht--) {
lcd.setCursor(koht, 1);
lcd.write(byte(5));
delay(300);
lcd.setCursor(koht, 1);
lcd.print(" ");
}
lcd.setCursor(11, 1);
lcd.write(byte(5));
delay(1000);
lcd.clear();
}
// Lühike meloodia (Super Mario Bros)
void Sound() {
tone(buzzerPin, 784, 200); delay(200);
tone(buzzerPin, 880, 200); delay(200);
tone(buzzerPin, 988, 200); delay(200);
tone(buzzerPin, 1047, 400); delay(400);
noTone(buzzerPin);
}
void loop() {
// Mõõdame kaugust
digitalWrite(TRIG_PIN,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN,LOW);
delayMicroseconds(5);
int distance=pulseIn(ECHO_PIN, HIGH, 15000)/57.5;
Serial.println(distance);
if (distance == 0 || distance > 400) {
return;
}
if (distance > 0 && distance <= 30) {
// Käsi lähedal - avame kaane
mootor.write(180);
kasiLahedal = true;
lcd.setCursor(0, 0);
lcd.print("Tuvastatud! ");
lcd.setCursor(0, 1);
lcd.print("Avan...");
delay(400);
digitalWrite(greenPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(redPin, LOW);
}
if (kasiLahedal && distance > 30) {
// Käsi eemaldatud — lisame mündi
delay(2000);
mootor.write(90);
kasiLahedal = false;
myndid++;
Sound(); // Esita heli
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Ait");
lcd.write(byte(4)); // täht Ä
lcd.print("h! ");
lcd.write(byte(1)); // smile
lcd.setCursor(0, 1);
lcd.print("M");
lcd.write(byte(2)); // täht Ü
lcd.print("ndid kokku: ");
lcd.print(myndid);
delay(3000);
lcd.clear();
// Küsib - kas veel üks?
lcd.setCursor(0, 0);
lcd.print("Veel ");
lcd.write(byte(2));
lcd.print("ks? ");
lcd.write(byte(6)); // smile2
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(redPin, LOW);
// Käivitame taimeri
timer = millis();
ootanRingi = true;
}
// Kui möödub 5 sekundit ja keegi ei lähenenud
if (ootanRingi && millis() - timer >= 5000 && distance > 30) {
/* See tingimus kontrollib, kas ootame uut münti, on möödunud vähemalt 5 sekundit
ja kedagi pole läheduses. Kui kõik need tingimused on täidetud, siis kuvatakse sõnum ekraanil */
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kurb vaikus... ");
lcd.write(byte(7));
lcd.setCursor(4, 1);
lcd.print("Zzz...");
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(redPin, HIGH);
ootanRingi = false;
}
// Kui keegi lähenes enne 5 sekundit — katkestame ootamise
if (ootanRingi && distance <= 30) {
kasiLahedal = true;
ootanRingi = false;
lcd.clear();
}
}