Kod Ara

Arduino Kodu ve Video: L293D DC Motor Kontrolcüsü (hız kontrolü olmadan)

Arduino Kodu ve Video: L293D DC Motor Kontrolcüsü (hız kontrolü olmadan)

Bu eğitim, L293D motor kontrol cihazının bir Arduino ile DC motoru kontrol etmek için nasıl kullanılacağını kapsar. L293D, motoru hem saat yönünde hem de saat yönünün tersine döndürmenizi sağlar. Bu kılavuzu takip ederek, bileşenleri nasıl bağlayacağınızı ve Arduino'yu istenen motor kontrolünü elde etmek için nasıl programlayacağınızı öğreneceksiniz.

Bu projede, tek bir DC motoru kontrol etmek için L293D motor sürücüsünü kullanacağız. Motor, Arduino kodunda verilen komutlara göre yön değiştirebilecektir. Kurulum ve kod hakkında daha net bir anlayış için, ilgili videoyu (videoda 00:00'da) izlemek faydalıdır.

 

Donanım Açıklaması

L293D, motorları sürmek için tasarlanmış entegre bir devredir. Aynı anda iki DC motoru veya bir step motoru kontrol edebilir. Çip, motora uygulanan voltajın polaritesini değiştirerek yön kontrolüne izin veren bir H-köprü konfigürasyonu kullanır. Bu esneklik, onu robotik ve otomasyon projeleri için mükemmel bir seçim haline getirir.

L293D'ye ek olarak, motor sürücüsüne kontrol sinyalleri göndermek için bir Arduino kartı kullanacağız. Arduino, motoru etkinleştirmek ve dönüş yönünü belirlemek için gerekli mantık seviyelerini üretecektir. Kurulum ayrıca bir DC motor ve motorun voltaj gereksinimleriyle uyumlu bir güç kaynağı gerektirecektir.

Veri Sayfası Detayları

Üretici Texas Instruments
Parça numarası L293D
Mantık/GÇ voltajı 5 V
Besleme voltajı 4.5 - 36 V
Çıkış akımı (kanal başına) 600 mA
Tepe akımı (kanal başına) 1.2 A
PWM frekansı yönergesi 20 kHz
Giriş mantık eşikleri 2.5 V (tipik)
Voltaj düşümü / RDS(on) / doyum 1.5 V (maks)
Termal limitler 150 °C (maks)
Paket 16-DIP
Notlar / varyantlar İki motoru kontrol edebilir

 

  • Besleme voltajının 36 V'u aşmadığından emin olun.
  • Maksimum akıma yakın çalışırken uygun ısı emici kullanın.
  • Arduino ve motor sürücüsünün toprağını her zaman bağlayın.
  • Ters polarite bağlantılarını önlemek için kablolamayı kontrol edin.
  • Gelecekteki projelerde hızı kontrol etmek için PWM sinyalleri kullanın.

Kablolama Talimatları

Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver

L293D motor kontrol cihazını Arduino'ya bağlamak için güç ve toprağı bağlayarak başlayın. L293D'nin pin 4 ve pin 5'ini toprağa bağlayın. Ardından, pin 1'i (Vcc1) Arduino'nun 5 V çıkışına bağlayın. Vcc2 (pin 8) için, motor voltaj spesifikasyonuyla eşleştiğinden emin olarak harici bir güç kaynağına bağlayın.

Ardından, motorun gücünü kontrol etmek için enable pinini (pin 1) Arduino'daki pin 8'e bağlayın. Motor kontrol girişleri için, L293D'nin pin 2'sini (1A) Arduino'daki pin 2'ye ve pin 7'yi (2A) Arduino'daki pin 7'ye bağlayın. Son olarak, motor terminallerini L293D üzerindeki pin 3'e (1Y) ve pin 6'ya (2Y) bağlayın.

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb

Kod Örnekleri & Açıklama

Aşağıdaki kod pinleri başlatır ve motor kontrolünü ayarlar. Kullanılan tanımlayıcılar, ilk motor kontrol pini için P1A ve enable pini için EN12 içerir. Setup fonksiyonu pinleri çıkış olarak yapılandırır.

void setup() {
  Serial.begin(9600); // bilgi görüntülemek için Seri Monitörü kur
  pinMode(P1A, OUTPUT); // P1A için pini ÇIKIŞ olarak tanımla
  pinMode(P2A, OUTPUT); // P2A için pini ÇIKIŞ olarak tanımla
  pinMode(EN12, OUTPUT); // 1,2EN enable için pini ÇIKIŞ olarak tanımla
}

Döngüde, motor arada gecikmelerle her iki yönde döndürülmesi için komut verilir. Motorun durumu, Serial.println kullanılarak seri monitöre yazdırılır.

void loop() {
  Serial.println("Saat yönünde döndürülüyor");
  digitalWrite(EN12, HIGH); // 1A ve 2A'yı etkinleştir 
  digitalWrite(P1A, HIGH); // P1A'ya YÜKSEK sinyal gönder
  digitalWrite(P2A, LOW); // P2A'ya DÜŞÜK sinyal gönder
  delay(3000); // motor 3 saniye çalışır
  digitalWrite(EN12, LOW); // 1A ve 2A'yı devre dışı bırak
}

Bu alıntı, P1A ve P2A'ya gönderilen mantık seviyelerini değiştirerek motorun dönüş yönünün nasıl kontrol edileceğini gösterir. Motor, durmadan ve yön değiştirmeden önce 3 saniye çalışır.

L293D yarım köprü sürücülerinin nasıl kullanıldığı aşağıda açıklanmıştır:

L293D as halft bridge CW
L293D yarım köprü olarak CW
L293D as halft bridge CCW
L293D yarım köprü olarak CCW

Gösterim / Ne Beklemeli

Kurulum tamamlandığında ve kod yüklendiğinde, motorun 3 saniye boyunca bir yönde döndüğünü, 2 saniye durduğunu ve ardından 3 saniye boyunca ters yönde döndüğünü gözlemlemelisiniz. Motorun durumu seri monitörde yazdırılacak ve bu işlemleri doğrulayacaktır (videoda 12:00'de).

Yaygın hatalar arasında motora doğru voltajın sağlandığından emin olmak ve motor bağlantılarının doğru olduğunu kontrol etmek yer alır. Motor tepki vermezse, kablolamayı ve güç kaynağı bağlantılarını tekrar kontrol edin.

Video Zaman Damgaları

  • 00:00 - Giriş
  • 02:30 - Kablo bağlantısı açıklaması
  • 05:00 - Kod incelemesi
  • 10:00 - Motor kontrolü gösterimi

Görseller

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb
L293D_breadboard_wiring_bb
L293D as halft bridge CCW
L293D as halft bridge CCW
L293D as halft bridge CW
L293D as halft bridge CW
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver
79-Arduino code L293 DC motor driver (Advanced).
Dil: C++
++
/*
 * 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 
}
80-Arduino code: L293 DC motor driver (Advanced)
Dil: C++
/*


 * 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

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Veri Sayfası (pdf)