NDT gửi vào
- 219699 lượt xem
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
Hình 1: Motor Shield Driver L293D mặt trên và mặt dưới
CHUẨN BỊ
- 1x board Arduino UNO R3.
- 1x motor driver shield L293D
- 1x pin 9v và rắc nguồn nối với UNO
- x4 hộp số motor DC
- 1x Micro Servo
- 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 SN754410. Motor 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 !!