Arduino kod i video: L293D DC motor kontroler (bez kontrole brzine)
Ovaj vodič objašnjava kako koristiti L293D kontroler motora s Arduino pločom za upravljanje DC motorom. L293D vam omogućava rotaciju motora u smjeru kazaljke na satu i suprotno od kazaljke na satu. Prateći ovaj vodič, naučit ćete kako povezati komponente i programirati Arduino za postizanje željene kontrole motora.
U ovom projektu koristit ćemo L293D drajver motora za upravljanje jednim DC motorom. Motor će moći mijenjati smjer na osnovu komandi datih u Arduino kodu. Za bolje razumijevanje postavke i koda, korisno je pogledati prateći video (u videu na 00:00).
Objašnjenje hardvera
L293D je integrirani krug dizajniran za pokretanje motora. Može kontrolirati dva DC motora istovremeno ili jedan koračni motor. Čip koristi H-most konfiguraciju koja omogućava kontrolu smjera promjenom polariteta napona primijenjenog na motor. Ova fleksibilnost čini ga odličnim izborom za robotiku i automatizacijske projekte.
Osim L293D-a, koristit ćemo Arduino ploču za slanje kontrolnih signala drajveru motora. Arduino će generirati potrebne logičke nivoe za omogućavanje motora i određivanje smjera njegove rotacije. Postavka će također zahtijevati DC motor i napajanje kompatibilno s naponskim zahtjevima motora.
Detalji iz tehničke dokumentacije
| Proizvođač | Texas Instruments |
|---|---|
| Oznaka dijela | L293D |
| Logički/IO napon | 5 V |
| Napon napajanja | 4.5 - 36 V |
| Izlazna struja (po kanalu) | 600 mA |
| Maksimalna struja (po kanalu) | 1.2 A |
| Smjernice za PWM frekvenciju | 20 kHz |
| Pragovi ulaznog logičkog napona | 2.5 V (tip.) |
| Pad napona / RDS(on) / zasićenje | 1.5 V (maks.) |
| Toplotna ograničenja | 150 °C (maks.) |
| Pakovanje | 16-DIP |
| Napomene / varijante | Može kontrolirati dva motora |
- Osigurajte da napon napajanja ne prelazi 36 V.
- Koristite odgovarajuće hlađenje kada radite blizu maksimalne struje.
- Uvijek povežite uzemljenje Arduina i drajvera motora.
- Provjerite ožičenje kako biste izbjegli obrnuti polaritet spojeva.
- Koristite PWM signale za kontrolu brzine ako je potrebno u budućim projektima.
Upute za ožičenje


Za povezivanje L293D kontrolera motora s Arduinom, počnite spajanjem napajanja i uzemljenja. Spojite pin 4 i pin 5 L293D-a na uzemljenje. Zatim spojite pin 1 (Vcc1) na 5 V izlaz Arduina. Za Vcc2 (pin 8), spojite ga na vanjsko napajanje, osiguravajući da odgovara specifikaciji napona motora.
Zatim spojite enable pin (pin 1) na pin 8 na Arduinu za kontrolu napajanja motora. Za ulaze za kontrolu motora, spojite pin 2 (1A) L293D-a na pin 2 na Arduinu i pin 7 (2A) na pin 7 na Arduinu. Na kraju, spojite terminale motora na pin 3 (1Y) i pin 6 (2Y) na L293D-u.
Primjeri koda i objašnjenje
Sljedeći kod inicijalizira pinove i postavlja kontrolu motora. Korišteni identifikatori uključuju P1A za prvi kontrolni pin motora i EN12 za enable pin. Funkcija setup konfigurira pinove kao izlaze.
void setup() {
Serial.begin(9600); // postavljanje Serial Monitora za prikaz informacija
pinMode(P1A, OUTPUT); // definiranje pina kao IZLAZ za P1A
pinMode(P2A, OUTPUT); // definiranje pina kao IZLAZ za P2A
pinMode(EN12, OUTPUT); // definiranje pina kao IZLAZ za 1,2EN enable
}
U petlji, motoru se naređuje rotacija u oba smjera s pauzama između. Stanje motora se ispisuje na serijski monitor koristeći Serial.println.
void loop() {
Serial.println("Rotiranje u smjeru kazaljke na satu");
digitalWrite(EN12, HIGH); // Omogući 1A i 2A
digitalWrite(P1A, HIGH); // pošalji HIGH signal na P1A
digitalWrite(P2A, LOW); // pošalji LOW signal na P2A
delay(3000); // motor radi 3 sekunde
digitalWrite(EN12, LOW); // Onemogući 1A i 2A
}
Ovaj izvod pokazuje kako kontrolirati smjer rotacije motora promjenom logičkih nivoa poslanih na P1A i P2A. Motor radi 3 sekunde prije zaustavljanja i promjene smjera.
Evo kako se koriste L293D polumostni drajveri:
Demonstracija / Šta očekivati
Kada je podešavanje završeno i kod je uploadovan, trebali biste primijetiti da se motor okreće u jednom smjeru 3 sekunde, staje 2 sekunde, a zatim se okreće u suprotnom smjeru još 3 sekunde. Stanje motora bit će ispisano na serijskom monitoru, potvrđujući radnje (u videu na 12:00).
Uobičajene zamke uključuju osiguravanje ispravnog napona koji se dovodi na motor i provjeru da su priključci motora ispravni. Ako motor ne reagira, provjerite ožičenje i priključke napajanja.
Vremenske oznake videa
- 00:00 - Uvod
- 02:30 - Objašnjenje ožičenja
- 05:00 - Pregled koda
- 10:00 - Demonstracija upravljanja motorom
++
/*
* This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW)
and counter-clockwise (CCW).
* *
// Written by Ahmad S. for Robojax.com on
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
* watch L293 video for details https://youtu.be/jAmDliHcTJ0
* Code is available at http://robojax.com/learn/arduino
*
*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable
// DC motor 2 control
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// L293 Motor Control Code by Robojax.com 2018025
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN
// L293 Motor Control Code by Robojax.com 2018025
}
void loop() {
// L293 Motor Control Code by Robojax.com 2018025
Serial.println("Rotating CW");
digitalWrite(EN12 ,HIGH);// Enable 1A and 2A
digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
digitalWrite(P2A,LOW);// send - or LOW signal to P2A
delay(3000);// motor runs for 3 seconds
digitalWrite(EN12 ,LOW);// Disable 1A and 2A
delay(2000);// motor stop for 3 seconds
Serial.println("Motor Stopped");
// L293 Motor Control Code by Robojax.com 2018025
// now changing the direction of rotation of motor
Serial.println("Rotating CCW");
digitalWrite(EN12 ,HIGH);// Enable 1A and 2A
digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
digitalWrite(P2A,HIGH);// send - or LOW signal to P2A
delay(3000);// motor runs for 3 seconds
digitalWrite(EN12 ,LOW);// Disable 1A and 2A
delay(2000);// motor stop for 3 seconds
Serial.println("Motor Stopped");
Serial.println("=========== Loop done");
delay(500);
// L293 Motor Control Code by Robojax.com 2018025
}
/*
* This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW)
and counter-clockwise (CCW).
* *
// Written by Ahmad S. for Robojax.com on
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
* Watch L293 video for details: https://youtu.be/jAmDliHcTJ0
* Code is available at: http://robojax.com/learn/arduino
*
*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable
// DC motor 2 control
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// L293 Motor Contro Code by Robojax.com 2018025
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN
// L293 Motor Contro Code by Robojax.com 2018025
}
void loop() {
if(value == 45){
rotateMA("CW",HIGH); // start motor in CW
}
delay(3000);
rotateMA("CW",LOW); // stop motor
delay(2000);
rotateMA("CCW",HIGH); // start motor in CCW
delay(3000);
rotateMA("CW",LOW); /// stop motor
delay(2000);
// L293 Motor Contro Code by Robojax.com 2018025
}// loop ends
/**
* function: rotateMA(String di,int action)
* Sends power to motor A
* di is a string and can be "CW" or "CCW"
* to use:
* rotateMA("CW",HIGH);// to rotate motor CW
* rotateMA("CCW",HIGH);// to rotate motor CCW
* to stop the motor:
* rotateMA("CW",LOW);// to stop motor
*/
void rotateMA(String di,int endis)
{
// L293 Motor Contro Code by Robojax.com 2018025
if(di =="CW"){
Serial.println(" Rotating CW");
digitalWrite(EN12 ,endis);// Enable 1A and 2A
digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
digitalWrite(P2A,LOW);// send - or LOW signal to P2A
}else{
// L293 Motor Contro Code by Robojax.com 2018025
// now changing the direction of rotation of motor
Serial.println(" Rotating CCW");
digitalWrite(EN12 ,endis);// Enable 1A and 2A
digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
digitalWrite(P2A,HIGH);// send - or LOW signal to P2A
}
// L293 Motor Contro Code by Robojax.com 2018025
}//rotateMA ends here
Things you might need
-
AmazonPurchase L293D motor driver ICamzn.to
-
AliExpressPurchase L293D motor driver IC from AliExpresss.click.aliexpress.com
Resources & references
No resources yet.
Files📁
Datasheet (pdf)
-
robojax_L293D_motor_shield_manual.pdf
robojax_L293D_motor_shield_manual.pdf0.16 MB -
L293d datasheet
L293d_datasheet.pdf0.34 MB