——————————————————————————————

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 2tk
  • 10kOhm takistid 2tk
  • potentsiomeeter

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
mootor1

Selline ühendus vastutab meil siis ühe mootori eest. Skeemis oleva lüliti ühendame aga Arduino pessa 2. Lisame koodijupi mootori juhtimiseks.

Programm:

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 

 } 

} 

Nüüd kui skeemi üles laed, siis töötab mootor ühtepidi ja kui nupule vajutad, siis teistpidi. Täiendame seda veel ühe lülitusega, mis käivitab mootori ja potentsiomeetriga, mis muudab mootori kiirust.

motor pote

Programm:

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 

 } 

}

——————————————————————————————

7.2 Katse Kauguse mõõtmise anduri kasutamine

——————————————————————————————

Ultrahelianduri HC-SR04 ühendamine Arduinoga

Ultraheli sensor on andur (sonar), mis mõõdab heliimpulsi abil kaugust eesoleva takistuseni. Nimelt mõõdetakse heliimpulsi saatmisest vastuvõtmiseni (kaja) kuluv aeg. Arvesse tuleb võtta veel heli levimise kiirus 340m/s  ning tulemus jagada kahega.

Abiks: abiks: 1cm läbimiseks kulub 29μs. Signaali mõõtmiseks kasuta Arduino pulseIn() funktsiooni 

Antud andur töötab 5V peal, mõõtenurk on kuni 15° ja mõõdetav distants 2-450cm. Tegemist on suhteliselt odava anduriga ning selle täpsus on 0,3cm.

Ühendamiseks Arduinoga ühendame Echo pesaga 8 ja Trig pesaga 7.

Kasutatud komponenid:

Skeem:

Programm:

#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

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

}


——————————————————————————————

7.3 Lihtne parkimissüsteem

——————————————————————————————

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.

Kasutatud komponenid:

  • Kaugusemõõtmise andur
  • Mootor
  • Piezo
  • LED

Skeem:

Programm:

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

Ülesanne 7.1 Rahakarp või Prügikast. Töö paarides.

Skeem:

Kasutatud komponenid:

Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Kaugusemõõtmise andur (1tk)
1602 LCD ekraan (1tk)
Servo(1tk)

LED (Punane 1tk ja Roheline 1tk)
Juhtmed (25tk)

Potentsiomeeter (1tk)
220 Ω takisti (3tk)

Video:

Foto:

Tööprotsess:

Elektrooniline prügikoguja töötab sõltuvalt potentsiomeetrist, selleks, et prügikoguja töötaks, tuleb panna potentsiomeeter õigesse asendisse, prügikoguja töötab (Kaugusemõõtmise andur) abil. Kui anduri lähedal on näha objekt, saadetakse signaal servomootorile ja prügimägi avaneb, ekraanil kuvatakse Open ja led süttib roheliselt, vastasel juhul, kui objekt on väljaspool anduri vaatevälja, kuvatakse ekraanil Close ja led süttib punaselt.

Rakendamine:

Prügikasti projektis kasutatakse erinevaid komponente, neid saab kasutada ka teistes projektides.
Kaugusemõõtmise andur saab kasutada nutikate uste (mis avanevad ise) ja liikumisandurite jaoks,
LCD-ekraan on multifunktsionaalne ja seda kasutatakse tänapäeval sageli (telefonid, televiisorid, monitorid, reklaamipuldid).
Servomootor täidab talle antud toimingut, nutikad prügikastid, nutikad postkastid, automaatsed uksed)

Programm:

#include <LiquidCrystal.h> 
#include <Servo.h>
Servo servo1; // Вызов для управления сервоприводом

int red = 13; // Пины для светодиодов
int green = 10; 

int echoPin = 6; // Для приема сигнала от датчика расстояния
int trigPin = 7; // Для отправки сигнала на датчик расстояния

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Для управления LCD

void setup() {
servo1.attach(8); // Подключение серво

pinMode(red, OUTPUT);
pinMode(green, OUTPUT);

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT); 

lcd.begin(16, 2); // LCD с указанием числа символов и строк

Serial.begin(9600); 
}

void loop() {
digitalWrite(trigPin, HIGH);
digitalWrite(trigPin, LOW); 
int distance = pulseIn(echoPin, HIGH) / 57.5; // Измерение расстояния в см

Serial.println(distance); // Вывод измеренного расстояния
if (distance <= 100) { 
servo1.write(90); // Поворот сервопривода на 90 градусов 

digitalWrite(red, LOW); 
digitalWrite(green, HIGH);

lcd.setCursor(4, 0); // Установка курсора  
lcd.print("OPEN"); // Вывод сообщения 
delay(400); 
lcd.clear(); 
} 
else if (distance > 101) {
servo1.write(0); // Поворот сервопривода на 0 градусов
digitalWrite(red, HIGH); 
digitalWrite(green, LOW); 
lcd.setCursor(4, 0); // Установка курсора 
lcd.print("CLOSE"); // Вывод сообщения 
delay(400); 
lcd.clear(); 
}
}

if (distance <= 100) { 
servo1.write(90); // Поворот сервопривода на 90 градусов 
digitalWrite(red, LOW); 
digitalWrite(green, HIGH);
lcd.setCursor(4, 0); // Установка курсора
lcd.print("OPEN"); // Вывод сообщения 
delay(400); 
lcd.clear();
} 
else if (distance > 101) {
servo1.write(0); // Поворот сервопривода на 0 градусов
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
lcd.setCursor(4, 0); // Установка курсора
lcd.print("CLOSE"); // Вывод сообщения
delay(400); 
lcd.clear(); 
}
}

Uued funktsioonid:

pulseIn(echoPin, HIGH): Эта функция pulseIn() используется для измерения длительности импульса на пине echoPin, который генерирует датчик расстояния в ответ на отправленный импульс от пина trigPin