Ülesanne 7.1 “Rahakarp”
Töö kirjeldus:
Mündipõrsas.
Töö protsess:
Kui tood mündi anduri juurde, avaneb mündipõrsa kaas ja mõne aja pärast sulgub uuesti. Samal ajal kuvatakse ekraanil teade “Aitäh mündi eest”. Tavaliselt kuvatakse ekraanil mündipõrsas olevate müntide arv. Kui mündipõrsast pikalt ei kasutata, kuvatakse ekraanil teade, et juba ammu pole tegevust olnud. Samuti on olemas LED-tuli, mis põleb punaselt, kui pikka aega pole tegevust olnud, roheliselt mündi sisestamise ajal ja siniselt tavarežiimis.
Kasutatud komponeendid:
Servo mootor — 1
Emaplaat — 1
LED rgb — 1
Taikisti — 4 (220 Om)
Juhe — 23
Arendusplaat — 1
LCD ekraan — 1
Potentsiomeeter — 1
HC-SR04 — 1
Skeem:

Programm:
#include <Servo.h>
#include <LiquidCrystal.h>
#define TRIG_PIN 10
#define ECHO_PIN 9
const int RED_LED = 6;
const int GREEN_LED = 7;
const int BLUE_LED = 8;
Servo servo;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int coinCount = 0;
unsigned long lastCoinTime = 0;
unsigned long waitThreshold = 15000;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
servo.attach(13);
servo.write(0);
lcd.begin(16, 2);
lcd.print("Tere tulemast!");
delay(2000);
lcd.clear();
updateLCD();
}
long readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void openLid() {
servo.write(90);
delay(5000);
servo.write(0);
}
void setColor(bool r, bool g, bool b) {
digitalWrite(RED_LED, !r);
digitalWrite(GREEN_LED, !g);
digitalWrite(BLUE_LED, !b);
}
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mundid: ");
lcd.print(coinCount);
}
void loop() {
long distance = readDistance();
if (distance > 3 && distance < 15) {
openLid();
coinCount++;
lastCoinTime = millis();
setColor(false, true, false);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aitah! :)");
lcd.setCursor(0, 1);
lcd.print("Mundid: ");
lcd.print(coinCount);
delay(3000);
updateLCD();
}
if (millis() - lastCoinTime > waitThreshold) {
setColor(true, false, false);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ootan kaua... :(");
lcd.setCursor(0, 1);
lcd.print("Mundid: ");
lcd.print(coinCount);
delay(3000);
updateLCD();
lastCoinTime = millis();
} else {
setColor(false, false, true);
}
delay(300);
}
Video:
https://drive.google.com/file/d/1eSoRrDjELfPdg0pmHUEu6ENvB7ZPX0Ax/view?usp=sharing
Uued funktsioonid:
digitalMicroseconds () — aja määramine mikrosekundites digitaalsete sündmuste vahel.
Rakendamine:
- Automaatuksed
- Turvasüsteemid
- Parkimissüsteem
- Kohaloleku kontroll
- Objektide mõõtmete mõõtmine

