Làm dự án xe với module điều khiển động cơ L293D

Chắc hẳn từ lúc mới đầu nghiên cứu Arduino đến nay bạn đã từng có suy nghĩ muốn làm một dự án nho nhỏ nào đó để thỏa lòng đam mê hay tò mò của mình và dự án được đa số bạn thích thú hướng đến có lẽ là xe, xe điều khiển, xe dò đường... hay là một dự án to bự như kBot của admin Ngô Huỳnh Ngọc Khánh (ksp) ^^. Vậy làm thế nào để có thể điều khiển được các bánh xe, servo, động cơ bước cho "chiến xa" trong khi board arduino chỉ cho phép bạn xuất các tín hiệu điện HIGH, LOW! Ở bài này mình xin giới thiệu đến các bạn một công cụ cực chất đó là shield điều khiển động cơ l293d, giúp bạn dễ dàng trong việc xử lý các thao tác điều khiển độc lập các motor của mình, nào ta bắt đầu thôi devil   

Hình 1: Motor Shield Driver L293D mặt trên và mặt dưới

CHUẨN BỊ 

  1. 1x board Arduino UNO R3.
  2. 1x motor driver shield L293D
  3. 1x pin 9v và rắc nguồn nối với UNO
  4. x4 hộp số motor DC
  5. 1x Micro Servo
  6. Dây cắm breadboard

GIỚI THIỆU VỀ MOTOR DRIVER SHIELD L293D

Motor Driver Shield L293D là shield mở rộng dành cho Arduino

Motor Driver Shield L293D tương thích tốt với board Arduino Uno R3, Arduino Leonado, Arduino Mega 2560.

Motor Driver Shield L293D sử dụng 2 IC cầu H L293D và 1 IC logic 74HC595 điều khiển. Do đó, shield này có thể điều khiển nhiều loại motor khác nhau với mức áp lên đến 36V, dòng tối đa 600mA mỗi kênh điều khiển.

L293D là một IC cầu H tương tự như IC SN754410. Các bạn có thể tham khảo thêm về cách hoạt động của cầu H tại bài viết Mạch cầu H và điều khiển động cơ với SN754410Motor Driver Shield L293D tích hợp sẵn 2 IC L293D giúp bạn có thể dễ dàng thao tác với IC hơn.

Các thành phần Motor Driver Shield L293D có thể điều khiển

  • 2 servo.
  • 4 motor điện DC (M1, M2, M3, M4) theo các hướng khác nhau (mỗi motor có thể chạy với 1 hướng tới/lùi bất kì) thông qua 4 cầu H của L293D dòng 600mA (cực đại 1.2A).
  • 2 stepper motor loại đơn cực (unipolar) hoặc lưỡng cực (bipolar).

Motor driver shield L293D có sẵn các điện trở nối GND nhằm tránh các motor tự quay lúc khởi động và nút RESET để khởi động lại board Arduino mà nó đang gắn vào.

Các chân trên Shield được kết nối với board Arduino như sau

  • 2 dây điều khiển 2 servo kết nối với chân số 9 và 10. Nguồn nuôi lấy trực tiếp từ board Arduino (nguồn 5V).
  • Motor 1 nối với chân 11
  • Motor 2 nối với chân 3
  • Motor 3 nối với chân 5
  • Motor 4 nối với chân 6

Chân 4, 7, 8, 12 dùng điều khiển motor thông qua IC 74HC595

Các chân chưa sử dụng: 2, 13, A0, A1, A2, A3, A4, A5

Trên shield có 1 jumper màu vàng PWR được sử dụng: nếu kết nối nguồn ngoài cho board Arduino thông qua jack DC (dùng pin 9V chẳng hạn) thì nguồn nuôi motor được lấy luôn từ jack này, không cần nối nguồn với EXT_PWR. Nếu ngắt jumper, bạn cần nối 1 nguồn riêng vào terminal EXT_PWR để nuôi motor.

Cảnh báo !

Khi chạy thử, bạn không nên để motor bì ì vì lúc này cường độ dòng điện sẽ tăng cao, dễ làm cháy nguồn nuôi. Nếu cần, hãy cấp nguồn ngoài có công suất cao cho nó (hãy quên pin tiểu và pin vuông 9V đi).

ĐIỀU KHIỂN MOTOR DC

KẾT NỐI

Trước tiên, bạn sẽ ghép board Arduino UNO R3 và Motor Shield Driver L293D lại với nhau như hình 2.

 

Hình 2: Ráp nối mạch Arduino UNO R3 và Motor Shield Driver L293D

Sau để kết nối với một động cơ, chỉ cần hàn hai dây để các thiết bị đầu cuối và sau đó kết nối chúng vào một trong hai M1, M2, M3,hoặc M4, ở đây mình test thử với chân M2.

Hình 3: Lắp động cơ vào shield.

LẬP TRÌNH

Đầu tiên, các bạn cần tải và cài đặt thư viện AFMotor trước. Link download tại đây

#include <AFMotor.h>

AF_DCMotor motor(2, MOTOR12_64KHZ); // tạo động cơ #2, 64KHz pwm  

void setup() {  
    
    Serial.begin(9600);           // mở cổng Serial monitor 9600 bps 
    
    Serial.println("Hello my racing");     
    
    motor.setSpeed(255);     // chọn tốc độ maximum 255`/255

}  

void loop() {  

    Serial.print("tien");     
    
    motor.run(FORWARD);      // động cơ tiến 
    
    delay(1000);    
    
    Serial.print("lui");  
    
    motor.run(BACKWARD);     // động cơ lùi  
    
    delay(1000);     
    
    Serial.print("tack");  
    
    motor.run(RELEASE);      //   dừng động cơ
    
    delay(1000);

}

ĐIỀU KHIỂN SERVO

KẾT NỐI

Trên shield có 2 vị trí để nối tương ứng với 2 servo, bạn chỉ việc cắm theo đúng thứ tự các chân Vcc (+), GND (-), Signal (S)

LẬP TRÌNH

#include <AFMotor.h>

#include <Servo.h> 

int i;

Servo servo1;

void setup() {  

    Serial.begin(9600);           // mở cổng monitor 9600 bps  
    
    Serial.println("Test servo!");     
    
    servo1.attach(9);    // Khai báo chân servo

}

void loop() {

    for (i=0; i<255; i++) {   // chạy từ 0 đến 255 giá trị     

        servo1.write(i);    
        
        delay(3); // đợi 3 mili dây
    }    

    for (i=255; i!=0; i--) {
        servo1.write(i-255); 
        delay(3);  
    }   

}

KẾT LUẬN

Bạn chỉ việc kết hợp 2 đoạn code nho nhỏ ở trên thì có thể tạo ra một dự án xe cho riêng mình rồi. Bài này mình chỉ giới thiệu về mạch điều khiển động cơ này, bài sau chúng ta cùng làm một dự án thật sự: Robot dò đường bằng cảm biên siêu âm nhé. Chúc bạn thành công và có một project pro cho riêng mình !!

lên
66 thành viên đã đánh giá bài viết này hữu ích.
Hướng dẫn sử dụng các loại module

Nếu bạn đang muốn thực hiện hóa ý tưởng của mình mà không biết dùng loại module nào? Hãy tham khảo các module trong danh sách sau

Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Shortcut01 – Truyền thông số giữa hai module RF 315Mhz

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley.

Mục đích bài viết: Hướng dẫn cách truyền các truyền và nhận giá trị từ cảm biến hoặc một biến số thay đổi giữa hai mạch 315Mhz (433Mhz) cool

lên
16 thành viên đã đánh giá bài viết này hữu ích.

Shortcut03 - Điều khiển Servo từ xa thông qua Button - INPUT_PULLUP

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley

Mục đích bài viết: Hướng dẫn điều khiển một Servo trong các dự án robot từ xa thông qua module NRF24 bằng Button (sử dụng INPUT_PULLUPcool

Bài này cho phép bạn thay đổi góc của 1 servo từ xa nhờ 2 button, nhấn giữ để tăng giảm góc một cách dễ dàng devil

lên
11 thành viên đã đánh giá bài viết này hữu ích.