Katse Mootori kasutamine
Опыт с мотором/Mootorid ja H-sild L293D
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.
Vajalikud komponendid
- L293D või SN754410 mootori draiver;
- lülitid 1tk;
- 10kOhm takistid 1tk;
- potentsiomeeter;
- 18 Juhtmed;
- 9V Battery;
- 1 Breadboard Small ;
- 1 Arduino Uno R3.
H-sild
Et mootorit juhtida ühte ja teist pidi, oleks vaja muuta mootori klemmide polaarsust. Siinkohal aitab meid välja mootori draiver L293D (või SN754410). Tegemist on nelja kanalise mootori draiveriga, mis on mõeldud mootorite, releede või muude induktiivsete elektriseadmete juhtimiseks. Ehk selle abil on võimalik kontrollida kohte mootorit. Kiipi on sisse ehitatud kaitsedioodid, mis kaitsevad induktiivsusest tuleneva elektrilise tagasilöögi eest.
Kui lihtsustada L293D tööpõhimõtet, siis on tegemist nelja lülitiga, mis meenutab H-tähte ja sealt see nimi tulebki.
L293D
Mootori draiver L293D on kiip 16-jalaga.

Kiibi jalad on tavaliselt nummerdatud. Iga kiibi on ülemises osas lohk ja võta see ette nii, et lohk jääb üles. Number 1 jalg jääb üles vasakule ja jooksevad U-kujuliselt.

- Vss – kiibi toide +5V
- Vs – väline toide kuni +36V
- ENABLE1 ja ENABLE2 – aktiveerivad mootor1 ja mootor2
- INPUT1 ja INPUT2 – mootor1 juhtimiseks
- OUTPUT1 ja OUTPUT2 – mootor1 ühendamiseks
- INPUT3 ja INPUT4 – mootor2 juhtimiseks
- OUTPUT3 ja OUTPUT4 – mootor2 ühendamiseks
- GND – maandus
L293D ühendamine Arduinoga
Paneme siis mootorid praktilised mootori draiveri abiga tööle. Skeemi lisame kaks nuppu ja potentsiomeetri moodoti juhtumiseks.
Ühendame kõigepealt L293D kiibi, lüliti ja patarei juhtmed arendusplaadiga. Ära veel patareid kinnita. Seejärel ühendame arendusplaadi pluss ja miinus pikiribad omavahel. Edasi ühendame mootori draiveri järgmised viigud numbrite järgi. Jälgi, kuhu poole jääb kiibi lohk!
- 1. viik – ühendame Arduino pesasse 9
- 2. viik – ühendame Arduino pesasse 4
- 3. ja 6. viik – ühendame mootoriga
- 4., 5., 12. ja 13. viik – ühendame maandusega
- 7. viik – ühendame Arduino pesasse 3
- 8. ja 16. viik – ühendame patareid toitega
Ühendamise skeem:

https://www.tinkercad.com/things/6yWsabHeDS1-swanky-snicket
Selline ühendus vastutab meil siis ühe mootori eest. Skeemis oleva lüliti ühendame aga Arduino pessa 2. Lisame koodijupi mootori juhtimiseks.
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
}
}
Kui skeem laaditakse, töötab mootor ühes suunas ja kui nuppu vajutatakse, siis teises suunas. Me täiendame seda veel ühe lülitusega, mis käivitab mootori ja potentsiomeetri, mis muudab mootori kiirust.
Vajalikud komponendid
- L293D või SN754410 mootori draiver;
- lülitid 2tk;
- 10kOhm takistid 2tk;
- potentsiomeeter;
- 9V Battery;
- 23 Juhtmed;
- 1 Breadboard Small ;
- 1 Arduino Uno R3.
Ühendamise skeem:

https://www.tinkercad.com/things/llp7NNXKvHz-epic-jaiks
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
}
}
Katse Kauguse mõõtmise anduri kasutamine
Ultraheli andur,mis mõõdab kaugust takistuseni
Ultrahelianduri HC-SR04 ühendamine Arduinoga
Komponendid:
- Ultrasonic Distance Sensor (4-pin);
- 4 Juhtmed;
- 1 Breadboard Small ;
- 1 Arduino Uno R3.
Ühendamise skeem:

https://www.tinkercad.com/things/jgGmcVVnzaB-incredible-lahdi-trug
Kood:
#define ECHO_PIN 8
#define TRIG_PIN 7
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
Serial.begin(960);
}
void loop() {
digitalWrite(TRIG_PIN,HIGH);
digitalWrite(TRIG_PIN,LOW);
int distance=pulseIn(ECHO_PIN, HIGH)/50;
Serial.println(distance);
}
------------------------------------------------------------------------------------------
#define ECHO_PIN 8
#define TRIG_PIN 7
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
Serial.begin(960);
}
void loop() {
Serial.println(measure());
}
int measure()
{
digitalWrite(TRIG_PIN,HIGH);
digitalWrite(TRIG_PIN,LOW);
int distance=pulseIn(ECHO_PIN, HIGH,15000)/50;
return constrain(distance,1,300);
}
Katse Lihtne parkimissüsteem
Ultraheli andur, Mootor, LED, Buzzer
Projekt mõõdab takistuse kaugust ultrahelianduri abil. Kui kaugus on väiksem kui 50, süttib punane LED, buzzer annab helisignaali ja mootori kiirus on 0.
Komponeendid:
- Kaugusemõõtmise andur;
- Mootor;
- Piezo;
- LED;
- 10 Juhtmed;
- 1 Breadboard Small ;
- 1 Arduino Uno R3.
Ühendamise 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);
}
}
Rahakarp
Komponeendid:
- 3 – resistor ;
- 2 – LED ;
- 1 – Ultraheli sensor ;
- 1 – Servo mootor (Micro Servo) ;
- 1 – 1602 LCD ekraan ;
- 1 – potentsiomeeter ;
- 23 – juhtmed ;
- 1 – Breadboard Small ;
- 1 – Arduino Uno R3
Tööpõhimõte:
- Kui kaugus Ultraheli sensorist on väiksem kui kümme, ilmub ekraanile fraas – “Distance < 10″; ” +1 coin” ja coin pilt, samuti põleb roheline LED;
- Kui kaugus Ultraheli sensorist on üle kahekümne, ilmuvad ekraanile laused – “Distance > 20”; “Far away”; “No coins” ja cross pilt, samuti põleb punane LED;
- Potentsiomeeter lülitab LCD sisse ja välja;
- LCD ekraanil on tekst ja joonised;
- Mikro servo abil muutub tegevus ja avaneb aken
- Koostas skeemi ja salvestas koodi keskkonda “tinkercad.com”;
- Koostas skeemi Arduino;
Ühendamise skeem:

Kood:
#include <LiquidCrystal.h>
#include <Servo.h>
#define ECHO_PIN 8
#define TRIG_PIN 7
Servo servo1;
int numRows = 2;
int numCols = 16;
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
int GREEN = 10;
int RED = 13;
byte coin[8] = {
0b00000,
0b01110,
0b11011,
0b10101,
0b11011,
0b01110,
0b00000,
0b00000
};
byte nocoin[8] = {
0b10001,
0b01010,
0b00100,
0b01010,
0b10001,
0b00000,
0b00000,
0b00000
};
byte road[8] = {
0b00110,
0b01100,
0b01100,
0b00110,
0b00110,
0b01100,
0b01100,
0b00110
};
byte small_road[8] = {
0b01100,
0b01100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
servo1.attach(9);
Serial.begin(9600);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
lcd.begin(numCols, numRows);
lcd.createChar(1, coin);
lcd.createChar(2, nocoin);
lcd.createChar(3, road);
lcd.createChar(4, small_road);
}
void loop()
{
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long duration = pulseIn(ECHO_PIN, HIGH);
int distance = duration * 0.034 / 2;
Serial.println(distance);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
if (distance < 10)
{
servo1.write(180);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
lcd.setCursor(0, 1);
lcd.write(4);
lcd.setCursor(2, 0);
lcd.print("Distance < 10");
lcd.setCursor(4, 2);
lcd.print("Close");
delay(800);
lcd.setCursor(2, 1);
lcd.write(1);
lcd.setCursor(4, 2);
lcd.print(" +1 coin");
lcd.clear();
}
else if (distance > 20)
{
servo1.write(0);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
lcd.setCursor(0, 1);
lcd.write(3);
lcd.setCursor(2, 0);
lcd.print("Distance > 20");
lcd.setCursor(4, 2);
lcd.print("Far away");
delay(800);
lcd.setCursor(2, 1);
lcd.write(2);
lcd.setCursor(4, 2);
lcd.print("No coins");
lcd.clear();
}
}
void texts(char *text)
{
int length = strlen(text);
if (length < numCols)
lcd.print(text);
else
{
int pos;
for (pos = 0; pos < numCols; pos++)
lcd.print(text[pos]);
delay(800);
while (pos < length)
{
lcd.scrollDisplayLeft();
lcd.print(text[pos]);
pos = pos + 1;
delay(500);
}
}
}
FOTO



Video
https://drive.google.com/file/d/1Nn8hhQeM3jWpIARAJP1_75hq-lKpax4l/view?usp=drivesdk
Kommentaatorid (uued võimalused):
#define ECHO_PIN 8
#define ECHO_PIN 8 määrab pinna numbri, mida kasutatakse ultrahelisensori peegeldatud signaalide vastuvõtmiseks Arduino platvormil.
#define TRIG_PIN 7
#define TRIG_PIN 7 määrab pinna numbri, mida kasutatakse ultrahelisignaali saatmiseks ultrahelisensorist Arduino platvormil.
int distance=pulseIn(ECHO_PIN, HIGH)/50;
int distance = pulseIn(ECHO_PIN, HIGH) / 50; mõõdab ultrahelilainete saatmise ja vastuvõtmise vahelist aega ultraheliandurist Arduino platvormil. Seejärel jagatakse see aeg 50-ga, et saada kaugus sentimeetrites.
Serial.println(measure());
int duration; – see koodirida defineerib uue muutuja nimega “duration”, mis on tüübiks täisarv (integer). See muutuja kasutatakse tõenäoliselt mingi ajalise kestvuse või perioodi mõõtmiseks või salvestamiseks programmis.
H-silla
H-silla — saaksime kontrollida mootori pöörlemissuunda. lisame skeemi lüliti, mis paneb mootori tööle, lüliti mis muudab pöörlemissuunda ja muuttakisti mootori kiiruse muutmiseks.
if (digitalRead(switchPin) == HIGH)
if (digitalRead(switchPin) == HIGH) — kui lüliti on HIGH, liigutage mootorit ühes suunas.
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor1Pin2, LOW); — kui lüliti on LOW, liigutage mootorit teises suunas
Kasutamisvõimalused tavaelus:
Raha kogumine võib muutuda ka prügikastiks.