Katse 7.1.

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 — Muutuja switchPin määrab, et lüliti on ühendatud Arduino digitaalse pin’iga 2.
int motor1Pin1 = 3; // viik 2 (L293D) — Määrab, et pin 3 on üks L293D mootori juhtimispin’e.
int motor1Pin2 = 4; // viik 7 (L293D) — Määrab, et pin 4 on teine juhtimispin L293D jaoks.
int enablePin = 9; // viik 1 (L293D) — Pin 9 on L293D mootori kanali lubamiseks (aktiveerimiseks).
pinMode(switchPin, INPUT); — Määrab, et pin 2 (lüliti) töötab sisendina.
pinMode(motor1Pin1, OUTPUT); — Määrab pin 3 kui väljundi mootori suuna juhtimiseks.
pinMode(enablePin, OUTPUT) — Pin 9 määratakse väljundiks, et lubada mootor.
digitalWrite(enablePin, HIGH); — Lülitab mootori sisse (võimaldab toite läbi L293D).
if (digitalRead(switchPin) == HIGH) — Kui lüliti on sisse lülitatud (HIGH), käivitatakse esimene plokk.
digitalWrite(motor1Pin1, LOW); — Seab mootori ühe pin’i LOW seisundisse (mõjutab pöörlemissuunda).
digitalWrite(motor1Pin2, HIGH); — Teine pin seatakse HIGH — mootor pöörleb ühes suunas.

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
}
}
Katse 7.2.

#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);
}
define ECHO_PIN 8 — Määrab 8. pordi ECHO-pordiks (ultrahelianduri signaali vastuvõtmiseks).
define TRIG_PIN 7 — Määrab 7. pordi TRIG-pordiks (ultraheli impulsi saatmiseks).
Serial.begin(9600); — Käivitab jadaliidese kiirusel 9600 bitti sekundis.
digitalWrite(TRIG_PIN,HIGH); — Seab TRIG-pordi kõrgele tasemele (alustab impulssi).
digitalWrite(TRIG_PIN,LOW); — Kohe seab TRIG-pordi madalale tasemele (lõpetab impulsi).
int distance=pulseIn(ECHO_PIN, HIGH)/50; — Mõõdab ECHO-pordi signaali kestuse (mikrosekundites), jagab selle 50-ga, et saada ligikaudne kaugus (sentimeetrites).
Serial.println(distance); — Kuvab mõõdetud kauguse serial monitoris.
Katse 7.3.

#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);
}
}
define ECHO_PIN 7 — Määrab 7. pordi ECHO-pordiks (ultrahelianduri signaali vastuvõtmiseks).
define TRIG_PIN 8 — Määrab 8. pordi TRIG-pordiks (ultraheli impulsi saatmiseks).
int motorPin1=3; — Määrab 3. pordi mootori juhtimiseks.
int distance=1; — Muutuja kauguse salvestamiseks, algväärtus — 1.
int LedPin=13; — Määrab 13. pordi LED-tule juhtimiseks.
int duration; — Muutuja anduri signaali kestuse salvestamiseks.
const int buzzerPin = 9; — Määrab 9. pordi summeri jaoks.
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(motorPin1,OUTPUT); — Seab pordid: ECHO sisendiks, teised väljunditeks.
pinMode(LedPin,OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(TRIG_PIN,LOW);
delay(200);
digitalWrite(TRIG_PIN,HIGH); — Saadab ultraheli impulsi: madal, siis kõrge, siis jälle madal signaal.
delay(200);
digitalWrite(TRIG_PIN,LOW);
duration = pulseIn(ECHO_PIN, HIGH); — Mõõdab aja, mil signaal ECHO-pordis on kõrge.
distance=duration/58; — Teisendab aja kauguseks sentimeetrites.
{
analogWrite(motorPin1,100); — käivitab mootori aeglaselt, lülitab LED-i välja, peatab summeri, ootab 1 sekundi.
digitalWrite(LedPin,0);
noTone(buzzerPin);
delay(1000);
}
else
{
analogWrite(motorPin1,0);
digitalWrite(LedPin,250); — muidu mootor on väljas, LED töötab, summer töötab sagedusel 1000 Hz.
tone(buzzerPin, 1000);
}
——————————————Ülesanne 7.1 Rahakarp———————————————————
Töö kirjeldus:
Nutikas säästupank, mis reageerib keskkonna liikumistele, avab kaane automaatselt servomootori abil, et koguda münte! See näitab LCD-ekraanil, kui palju münte on juba sees ja kui lisate mündi, siis annab see teile sellest teada!
Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (21tk)
Takisti (4tk, 220Om)
LED RGB (1tk)
Potentiometer (1tk)
LCD ekraan 16×2 (1tk)
Servo (1tk)
Ultrasonic Distance Sensor (1tk)
Töö protsess:
Keskkonna liikumisele (meie puhul käe liikumisele) reageeriv säästupank kasutab servomootorit kaane automaatseks avamiseks, loeb kõik mündid ja kuvab LCD-ekraanil, et münt on lisatud. Ekraanil tervitab teid alguses sigade pank ise. Kui te ei pane pikka aega ühtegi münti säästupanka, teatab see teile, et see ootab teid! Samuti ilmub ekraani alguses teade „Pane esimene münt sisse!“.
LED-ide rakendamine:
Nutikas säästupank kodudesse, kontoritesse, kaubanduskeskustesse ja muudesse ruumidesse
Skeem:

Kood:
#include <Servo.h>
#include <LiquidCrystal.h>
const int trigPin = 2;
const int echoPin = 3;
const int servoPin = 13;
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);
servo.attach(servoPin);
servo.write(closeAngle);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Tere tulemast!");
lcd.setCursor(0, 1);
lcd.print("Rahakarp ");
delay(1000);
}
void loop() {
long distance = measureDistance();
if (distance > 0 && distance < detectionDist) {
handleDetection();
}
else {
if (lidOpen) {
if (millis() - lastDetectionTime > 500) {
closeLid();
}
}
else {
// Sad state LED removed
}
}
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++;
delay(1000);
}
}
void openLid() {
servo.write(openAngle);
lidOpen = true;
}
void closeLid() {
servo.write(closeAngle);
lidOpen = false;
}
void updateDisplay() {
lcd.clear();
if (lidOpen) {
lcd.setCursor(0, 0);
lcd.print("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("Ma ootan(");
} else if (coinCount > 0) {
lcd.print("-----");
} else {
lcd.print("Pane esimene munt!");
}
}
delay(200);
}
Video:
https://drive.google.com/file/d/1Jfi2c0ALtfOnebXjmc1qjF5bFftDrAAx/view?usp=sharing
Uued funktsioonid:
const int openAngle = 90 — Kaane avamise nurk
const int detectionDist = 15 — Lähedustuvastuse piir (sentimeetrites)
int coinCount = 0; — Müntide loendur
unsigned long lastDetectionTime = 0; — Aeg, millal viimati midagi tuvastati
bool lidOpen = false; — Kas kaas on avatud ( True or False ; 1 or 0 )
lcd.begin(16, 2); — LCD-ekraani suurus: 16×2


