Praktika 7 Mootor ja kaugusemõõtmise andur

7.1 Katse Mootori kasutamine

Eesmärk

Eelmises projektis kasutasime transistori, et kontrollida mootorit, millega suutsime kontrollida vaid mootori kiirust. Selles projektis võtame kasutusele H-silla, et saaksime kontrollida mootori pöörlemissuunda. Kuna tegemist on suure sammuga robotiehitusele, siis lisame skeemi lüliti, mis paneb mootori tööle, lüliti mis muudab pöörlemissuunda ja muuttakisti mootori kiiruse muutmiseks.

Komponendid:

L293D — 1
Mootor — 1
Arendusplaat — 1
Emaplaat — 1
Nupp — 1
Taikisti — 1 (220 Om)
Juhe — 18
Patarei — 1

https://www.tinkercad.com/things/804v7Rkpc6b-spectacular-vihelmo-curcan

kood

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

 } 

} 

7.2 Katse Kauguse mõõtmise anduri kasutamine

Ultrahelianduri HC-SR04 ühendamine Arduinoga

Komponendid:

HC-SR04 — 1
Juhe — 4

Skeem:

kood

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

}

link

https://www.tinkercad.com/things/bImdy8FIh1A-neat-wolt

7.3 Katse Lihtne parkimissüsteem

Ultraheli andur, Mootor, LED, Buzzer

#define ECHO_PIN 7         // Ultrahelianduri vastuvõtja pin
#define TRIG_PIN 8         // Ultrahelianduri saatja pin
int motorPin1 = 3;         // Mootori juhtimise pin
int distance = 1;          // Kauguse muutuja
int LedPin = 13;           // LEDi pin
int duration;              // Signaali kestuse muutuja
const int buzzerPin = 9;   // Summeri (buzzer) pin

void setup() {
  pinMode(ECHO_PIN, INPUT);       // Vastuvõtja sisendina
  pinMode(TRIG_PIN, OUTPUT);      // Saatja väljundina
  pinMode(motorPin1, OUTPUT);     // Mootori pin väljundina
  pinMode(LedPin, OUTPUT);        // LEDi pin väljundina
  pinMode(buzzerPin, OUTPUT);     // Summeri pin väljundina
  Serial.begin(9600);             // Seriaalühenduse algus
}

void loop() {
  digitalWrite(TRIG_PIN, LOW);    // Lülita saatja välja
  delay(200);                     
  digitalWrite(TRIG_PIN, HIGH);   // Lülita saatja sisse
  delay(200);                     
  digitalWrite(TRIG_PIN, LOW);    // Lülita saatja välja
  duration = pulseIn(ECHO_PIN, HIGH); // Mõõda tagastusaeg
  distance = duration / 58;           // Arvuta kaugus cm-des
  Serial.println(distance);           // Väljasta kaugus

  if (distance > 50) {            // Kui kaugus on üle 50 cm
    analogWrite(motorPin1, 100); // Käivita mootor
    digitalWrite(LedPin, 0);     // LED kustub
    noTone(buzzerPin);           // Summer vaikib
    delay(1000);                 
  } else {                        // Kui objekt on lähemal
    analogWrite(motorPin1, 0);   // Mootor seiskub
    digitalWrite(LedPin, 250);   // LED süttib
    tone(buzzerPin, 1000);       // Summer teeb heli
  }
}

https://www.tinkercad.com/things/jSfTRZ4fM4A-smashing-bombul-migelo

Ülesanne 7.1 Prügikast. Töö paarides.

Uuritud funktsioonid:

lcd.begin() Initsialiseerib LCD-ekraani (16×2).


lcd.setCursor() Määrab, kuhu tekst ekraanil kuvatakse (veerud ja read).

lcd.print() Kuvab teksti LCD-ekraanile.


servo.attach() Seob servomootori kindla digitaalse pinniga.


pulseIn() Mõõdab impulsi kestust (ultrahelianduri tagastusignaal).


pinMode() Määrab pordi sisendi- või väljundirežiimi.


digitalWrite() Seab digitaalse pordi kõrgeks või madalaks (HIGH/LOW).


delay() Paus millisekundites.


Töö kirjeldus:

Projektis valmis nutikas prügikast, mis tuvastab inimese käe või liikumise ultrahelianduri abil ning avab kaane automaatselt servomootori abil. Ekraan kuvab sõnumit selle kohta, kas prügikast on avatud või suletud. Süsteem on loodud praktiliseks kasutuseks — näiteks kööki või vannituppa, kus ei pea kaant käega avama.


Kasutatud komponendid:
 • Arduino UNO
 • Ultraheliandur (3-pin HC-SR04/HC-SR04P)
 • Servomootor SG90
 • LCD-ekraan 16×2 (ilma I2C moodulita)
 • Potentsiomeeter LCD kontrasti jaoks
 • Breadboard ja ühendusjuhtmed
 • LED-RGB


Skeem:


Programm:

#include <LiquidCrystal.h>
#include <Servo.h>

// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Servo servo;

const int sigPin = 10;
const int redPin = 13;
const int greenPin = 8;
const int bluePin = 9;

void setup() {
  lcd.begin(16, 2);
  Serial.begin(9600);

  servo.attach(7);
  servo.write(0);

  // Настройка пинов RGB светодиода
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  lcd.setCursor(0, 0);
  lcd.print("Nastja loh! :)");
  lcd.setCursor(0, 1);
  lcd.print("Valmis kasutamiseks");
  delay(4000);
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Prugikast  ^_^");
  delay(2000);
}

void loop() {
  long duration, distance;

  // Отправка сигнала
  pinMode(sigPin, OUTPUT);
  digitalWrite(sigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(sigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(sigPin, LOW);

  // Получение сигнала
  pinMode(sigPin, INPUT);
  duration = pulseIn(sigPin, HIGH);

  distance = duration * 0.0343 / 2;

  Serial.println(distance);

  if (distance < 50 && distance > 0) {
    servo.write(90);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Kast avatud :)");

    digitalWrite(greenPin, HIGH);  // Зелёный свет
    digitalWrite(redPin, LOW);
    digitalWrite(bluePin, LOW);
  } else {
    servo.write(0);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Kast suletud :(");

    digitalWrite(redPin, HIGH);   // Красный свет
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, LOW);
  }

  delay(500);
}

Video:

Kasutusvõimalused tavaelus:
 • Köögi prügikast, mida saab kasutada ilma kaant puudutamata.
 • Avalikes tualettides hügieenilisemaks prügikäitluseks.
 • Kasutatav ka nutika rahakarbi versioonina (nt annetuste kogumiseks).
 • Võimalik lisada RGB LED, mis annab tagasisidet meeleolu kohta.


Ülesanne 7.2 Parking

kõik katse ülesanned olid lisatud eelmises katses 7.1

Aruanne:

Kasutatud funktsioonid ja kirjeldus:

FunktsioonKirjeldus
getDistance()Arvutab kauguse ultrahelianduri abil
openBarrier()Tõstab tõkkepuu ja muudab LED roheliseks
closeBarrier()Langetab tõkkepuu ja muudab LED siniseks
setRGB(r,g,b)Seab RGB LED värvi
displayStatus()Kuvab LCD-ekraanil vabade kohtade arvu
displayFull()Kuvab täisoleku teate ja punase LED

Töö kirjeldus:
Süsteem jälgib parkla sisse- ja väljasõite kahe ultrahelianduri abil. Kui auto siseneb ja kohti on, tõkkepuu avaneb ja kohtade arv suureneb. Kui auto lahkub, väheneb loendur. Kui parkla on täis, hoiatab süsteem ja ei ava tõkkepuud. RGB LED näitab olekut ning LCD-ekraan kuvab info.


Kasutatud komponendid (riistvara):

  • Arduino Uno
  • 2x Ultraheliandur HC-SR04
  • Servomootor (SG90 vms)
  • RGB LED
  • LCD-ekraan 16×2 (kasutades LiquidCrystal teeki)
  • Takistid ja juhtmed
  • Pappmudel süsteemi paigutamiseks

Ühendamise skeem:
link: 

https://www.tinkercad.com/things/1aF3IYebQu9-super-waasa

Programm:

#include <Servo.h>
#include <LiquidCrystal.h>

// LCD ühendused (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);

// Ultraheliandur 1 - SAABUMINE
const int trigPin1 = A3;
const int echoPin1 = A2;

// Ultraheliandur 2 - LAHKUMINE
const int trigPin2 = A1;
const int echoPin2 = A0;

// RGB LED
const int redPin = 2;
const int greenPin = 0;
const int bluePin = 1;

// Servo
Servo barrierServo;
const int servoPin = 10;

// Parkimiskohtade arvestus
const int maxSpots = 5;
int occupiedSpots = 0;

// Kauguse lävi (cm)
const int detectDistance = 20;

void setup() {
  lcd.begin(16, 2);
  lcd.print("Systeem kaivitub");

  // Ultraheli pinid
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);

  // RGB LED
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  // Servo
  barrierServo.attach(servoPin);
  barrierServo.write(0); // Tõkkepuu suletud

  delay(2000);
  lcd.clear();
}

void loop() {
  long distance1 = getDistance(trigPin1, echoPin1);
  long distance2 = getDistance(trigPin2, echoPin2);

  // SAABUMINE
  if (distance1 < detectDistance) {
    if (occupiedSpots < maxSpots) {
      openBarrier();
      occupiedSpots++;
      delay(3000); // aeg autol sisenemiseks
      closeBarrier();
    } else {
      displayFull();
    }
  }

  // LAHKUMINE
   if (distance2 < detectDistance && occupiedSpots > 0) {
    occupiedSpots--;
    delay(3000); // aeg autol väljumiseks
  }

  displayStatus();
  delay(1000);
}

// --- Funktsioonid ---

long getDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration * 0.034 / 2;
}

void openBarrier() {
  barrierServo.write(90); // üles
  setRGB(0, 255, 0);       // roheline
}

void closeBarrier() {
  barrierServo.write(0);  // alla
  setRGB(0, 0, 255);       // sinine
}

void setRGB(int r, int g, int b) {
  analogWrite(redPin, r);
  analogWrite(greenPin, g);
  analogWrite(bluePin, b);
}

void displayStatus() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Vabu kohti: ");
  lcd.print(maxSpots - occupiedSpots);

  if (occupiedSpots == maxSpots) {
    setRGB(255, 0, 0); // punane - täis
  }
}

void displayFull() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Parkla on tais!");
  setRGB(255, 0, 0);
  delay(3000);
}

Video:


Kasutusvõimalused tavaelus:

  • Kortermajade või kontorite parkimissüsteemid
  • Eravalduste sissepääsud
  • Väikeste parklate automatiseerimine
  • Koolide ja haiglate territooriumid

7.3 Katse «Lihtne parkimissüsteem»

Komponendid:

Mootor — 1
LED — 1
Emaplaat — 1
Buzzer — 1
Juhe — 10
Taikisti — 2 (220 Om)

Skeem:

Kood:

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