Katse 7 Mootor ja kaugusemõõtmise andur

7.1 Katse Mootori kasutamine
Skeem

Kood:

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 

 } 

}

Koodi töö:
Kood juhib mootorit kahe lüliti ja potentsiomeetri abil. Üks lüliti määrab mootoripöörlemise suuna, teine lüliti lülitab mootori sisse või välja. Potentsiomeeter reguleerib mootori kiirust. Kui teine lüliti on sees, töötab mootor määratud kiirusega. Kui lüliti on väljas, mootor peatub. Esimene lüliti määrab, millises suunas mootor pöörleb: kui lüliti on sees, pöörleb mootor ühes suunas, kui väljas — teises suunas.

Kasutamine elus:
Konveieritel või transportööridel — liikuva riba suuna ja kiiruse muutmiseks.
Ventilatsioonisüsteemides — labade pöörlemise sujuvaks sisselülitamiseks, väljalülitamiseks ja suuna muutmiseks.
Automaatsetes kardinates või ruloodes — nende avamiseks ja sulgemiseks reguleeritava kiiruse ja suunaga

Katse 7.2 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);

}

Koodi töö:
Kood käivitab ultrahelianduri. See saadab lühikese signaali, ootab, kuni see objektilt tagasi peegeldub, mõõdab ooteaja, arvutab sellest kauguse ja kuvab tulemuse ekraanil. See protsess kordub pidevalt.

Uued funktsioonid:
pulseIn(pin, value) — mõõdab määratud loogikataseme (HIGH või LOW) impulsi kestust tihvtil.
Serial.println(data) — saadab andmed jadaliidesesse ja lisab reavahetuse.

Kuidas elus kasutada:
Turvasüsteem – Ultrasensor paigaldatakse valvealasse — kui keegi siseneb anduri tööpiirkonda, tuvastab süsteem liikumise ja annab häiresignaali.

7.3 Katse Lihtne parkimissüsteem

Kasutatud komponendid:
LED
Kaugusemõõtmise andur
Mootor
Piezo

SKEEM

Kood:

#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);
  }
}

Kasutamine elus:
Parkimisabi – Aitab juhil teada saada, kui auto on liiga lähedal takistusele, lülitades sisse valguse ja heli hoiatusena

Ülesanne 7.1 Rahakarp

Töö kirjeldus:

Intelligentne säästupank, mis tunneb keskkonna liikumist ja avab automaatselt kaane servomootori abil, et võimaldada münte lisada. LCD-ekraan kuvab sisestatud müntide arvu ning annab teate iga lisatud mündi kohta.


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)

Skeem

#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);
}

Uued funktsioonid:
measureDistance() — saadab ultraheliimpulsi ja mõõdab objekti kaugust.
handleDetection() — töötleb objekti tuvastamise sündmust: avab kaane ja suurendab müntide arvu.
openLid() — avab kaane, juhtides servomootorit.
closeLid() — sulgeb kaane, juhtides servomootorit.
updateDisplay() — uuendab LCD-ekraani sisu vastavalt kaane olekule ja müntide arvule.

VIDEO:https://drive.google.com/file/d/11631FRXWcMkmkO9ek7SAZtg7zTgg2Sfl/view

Katse 7.2 Parking

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


Uued funktsioonid:
servo.attach(pin) — ühendab servomootori määratud pinniga.
servo.write(nurk) — seab servomootori pöördenurga.
lcd.begin(veerud, read) — initsialiseerib LCD-ekraani antud veergude ja ridade arvuga.
lcd.setCursor(veerg, rida) — seab kursoriekraani määratud kohta.
lcd.print(andmed) — kuvab teksti või arvu ekraanil.
lcd.clear() — puhastab ekraani.

Koodi töö:
Kood käivitab seadme. Määratakse pin-id, ühendatakse servomootor ja ekraan. Alguses on kaas kinni. Ekraanile ilmub tekst “Tere tulemast! Rahakarp”.Tsüklis mõõdetakse pidevalt kaugust objektini. Kui midagi tuleb lähemale kui 15 cm, avaneb kaas, münt loetakse ja loendur suureneb. Sekundi pärast jääb kaas veel korraks avatuks, siis sulgub.
Ekraanil kuvatakse, mitu münti on lisatud. Kui kaas on lahti — kuvatakse “Mundi eest!”. Kui kaas on kinni — näidatakse müntide koguarv ja oodatakse uut. Kui keegi kaua ei tule, kuvatakse “Ma ootan(“.

Video:
https://drive.google.com/file/d/11631FRXWcMkmkO9ek7SAZtg7zTgg2Sfl/view