Project #40: Dựng và điều khiển một robot xe tăng
Mặc dù việc điều khiển vận tốc của một động cơ có thể rất hữu ích, hãy chuyển sang lĩnh vực khác thú vị hơn bằng cách điều khiển hai động cơ cùng lúc để tác động tốc độ và hướng. Mục tiêu của chúng ta là mô tả cấu trúc của một robot dạng xe tăng cái mà chúng ta sẽ tiếp tục làm việc trên đó trong vài chương tiếp theo. Ở đây chúng ta mô tả cấu trúc và điều khiển cơ bản của xe tăng của chúng ta.
Xe tăng của chúng ta có hai động cơ, mỗi cái điều khiển một bánh xích, cho phép nó có thể trèo qua vật cản nhỏ, quay quanh một vị trí, và không bị mắc và các vật cản trên đường đi. Bạn cũng có thể điều khiển tốc độ và hướng của xe tăng, và bạn cũng sẽ học cách làm thế nào để thêm các chi tiết cho tránh vật cản và điều khiển từ xa. Một khi bạn hoàn thành các dự án trong sách này, bạn sẽ có một có nền tảng vững chắc để tạo các phiên bản của riêng bạn và mang ý tưởng của bạn vào cuộc sống.
Phần cứng
Phần cứng yêu cầu như sau:
- Một bộ khung xe tăng Polol RP5[1]
- Một đĩa khung Pololu RP5
- Sáu viên pin AA
- Một đế ổ cắp cáp pin 9V
- Một bo mạch Arduino điều khiển động cơ DFRobot 2A.
- Arduino và cáp USB
Bộ khung
Nền tảng của bất kì robot nào là bộ khung cứng để chứa các động cơ, dây xích và nguồn điện. Một robot được trang bị Arduino cũng cần có chỗ để gắn Arduino và vài chi tiết mở rộng.
Bạn có thể chọn từ nhiều mô hình khung có sẵn trên thị trường, nhưng chúng tôi sử dụng một bộ khung xe tăng – số hiệu Pololu RP5 như trong hình 12-10, chứa hai động cơ.
[1] Tại Việt Nam, bạn có thể tham khảo các bộ khung xe tăng có sẵn khác hoặc thay thế bằng các bộ khung xe điều khiển từ xa.
Hình 12-10: Bộ khung xe tăng của chúng ta
Hai bộ nguồn
Bộ khung Pololu bao gồm một khung giữ cho 6 pin AA, cái mà chúng ta sẽ sử dụng làm nguồn điện cho các động cơ như hình 12-11. Chỗ để khung pin trong đế của khung giữa 2 động cơ và cho robot một trọng tâm thấp.
Hình 12-11: Khung giữ pin với 6 pin AA
Mặc dù nguồn điện như trong hình 12-11 lớn, chúng ta cần sử dụng một nguồn điện riêng cho mạch Arduino, bởi vì nguồn này sẽ cho phép sketch giữ hoạt động mặc dù các động cơ hỏng. Nguồn cho Arduino tnog dự án này từ pin 9V, có thể được kết nối từ đế nguồn của bảng mạch Arduino bằng cách sử dụng cáp như trong hình 12-12.
Hình 12-12: Cáp pin được dùng để kết nối pin tới Arduino
Mặt lắp ghép
Chi tiết cuối cùng của bộ khung của chúng ta là mặt lắp ghép (mounting plate), như trong hình 12-13.
Hình 12-13: Mặt lắp ráp
Mặt lắp ráp phủ lên trên bộ khung và cho phép bạn cài các bộ phận trân đỉnh bằng cách sử dụng các chân chêm và khớp với đinh vít M3 (bu lông, các chân chêm và các vòng đệm có sẵn từ các nhà cung cấp các chi tiết robotics hoặc các cửa hàng phần cứng lớn). Trong hình 12-14, bạn có thể thấy các chân chêm của mặt lắp ráp sẵn sàng vừa vặn để giữ bo mạch Arduino của chúng ta.
Hình 12-14: Arduino được gắn lên mặt
Sơ đồ mạch điện
Yêu cầu cuối cùng là tạo một mạch để điều khiển hai động cơ trong bộ khung. Mặc dù chúng ta có thể sử dụng mạch điện như trong hình 12-9 cho mỗi động cơ, điều này sẽ không cho phép chúng ta điều khiển hướng của động cơ và có thể hơi bất tiện khi đi dây. Thay vào đó, chúng ta sử dụng một Motor Shield[1]. Một Motor Shield chứa mạch điện chúng ta cần để kiểm soát dòng điện cao hơn được vẽ bởi động cơ và cũng chấp nhận lệnh điều khiển từ Arduino để điều khiển tốc độ và hướng của cả hai động cơ. Với xe tăng của chúng ta, chúng ta sẽ sử dụng Motor Shield 2A cho Arduino, như hình 12-15.
Hình 12-15: Bo mạch điều khiển động cơ DFRobot
Kết nối với Motor Shield
Thực hiện các kết nối với motor shield rất đơn giản: Kết nối các dây từ khay pin tới khối đầu cuối tại phía dưới bên trái của bo mạch, như trong hình 12-16. Dây đen (âm) phải ở bên phải và dây đỏ ở bên trái.
Tiếp theo nối hai cặp dây từ động cơ. Chắc chắn rằng các màu dây khớp với các kết nối, như trong hình 12-17.
Nối các chân nối
Nhiệm vụ cuối cùng để thiết lập mạch là nối các chân nối tương ứng nhau. Nhìn vào giữa kết nối nguồn DC và hàng dưới cùng của ổ cắm trên mạch, và bạn thấy 6 chân với hai chân nối màu đen. Đặt chúng theo hàng ngang sao cho chúng phủ lên 4 chân bên trái, như trong hình 12-18. Cuối cùng, chắc chắn rằng 4 chân nối đợc kết nối với nhau theo chiều dọc qua các chân nối PWM, như trong hình 12-19.
Nếu các dây động cơ của bạn không có mã màu, bạn có thể phải đảo chúng sau lần chạy đầu tiên để xem xét hướng chạy nào là tiến, lùi.
Sau khi bạn đã nối các dây và các chân nối, chèn khối pin vào, khớp Arduino và mạch lên mặt lắp ráp, và kẹp chặt nó trong bộ khung, xe tăng của bạn sẽ trông như trong hình 12-20.
Hình 12-20: Robot xe tăng đã sẵn sàng hoạt động
Sketch
Bây giờ chúng ta sẽ cho xe tăng di chuyển. Để bắt đầu, hãy tạo vài hàm để đơn giản các chuyển động. Vì bao gồm 2 động cơ, chúng ta sẽ cần 4 chuyển động:
- Chuyển động tiến
- Chuyển động lùi
- Quay chiều kim đồng hồ
- Quay ngược kim đồng hồ
Motor sheild của chúng ta điều khiển mỗi động cơ với hai chân tín hiệu: 1 chân là điều khiển tốc độ sử dụng PWM (như được chứng minh trong project 39), và một chân khác xác định hướng của động cơ sẽ quay.
4 hàm của sketch chúng ta phù hợp với 4 chuyển động: goForward(), goBackward(), rolateLeft(), và rotateRight(). Mỗi hàm chấp nhận một giá trị trong mi li giây, là chiều dài của thời gian yêu cầu để thực hiện chuyển động, và một giá trị tốc độ trong khoảng 0 và 255. Ví dụ, để chuyển động tiến trong 2 giây tốc độ tối đa, chúng ta sử dụng goforward(2000,255).
Nhập và lưu sketch (nhưng đừng nạp nó ngay bây giờ):
// Project 40 – Building and Controlling a Tank Robot
int m1speed=6; // digital pins for speed control
int m2speed=5;
int m1direction=7; // digital pins for direction control
int m2direction=4;
void setup()
{
pinMode(m1direction, OUTPUT);
pinMode(m2direction, OUTPUT);
delay(5000);
}
void goForward(int duration, int pwm)
{
(1) digitalWrite(m1direction,HIGH); // forward
digitalWrite(m2direction,HIGH); // forward
analogWrite(m1speed, pwm); // speed
analogWrite(m2speed, pwm);
delay(duration);
analogWrite(m1speed, 0); // speed
analogWrite(m2speed, 0);
}
void goBackward(int duration, int pwm)
{
digitalWrite(m1direction,LOW); // backward
(2) digitalWrite(m2direction,LOW); // backward
analogWrite(m1speed, pwm); // speed
analogWrite(m2speed, pwm);
delay(duration);
analogWrite(m1speed, 0); // speed
analogWrite(m2speed, 0);
}
void rotateRight(int duration, int pwm)
{
(3) digitalWrite(m1direction,HIGH); // forward
digitalWrite(m2direction,LOW); // backward
analogWrite(m1speed, pwm); // speed
analogWrite(m2speed, pwm);
delay(duration);
analogWrite(m1speed, 0); // speed
analogWrite(m2speed, 0);
}
void rotateLeft(int duration, int pwm)
{
(4) digitalWrite(m1direction,LOW); // backward
digitalWrite(m2direction,HIGH); // forward
analogWrite(m1speed, pwm); // speed
analogWrite(m2speed, pwm);
delay(duration);
analogWrite(m1speed, 0); // speed
analogWrite(m2speed, 0);
}
void loop()
{
goForward(1000, 255);
rotateLeft(1000, 255);
goForward(1000, 255);
rotateRight(1000, 255);
goForward(1000, 255);
goBackward(2000, 255);
delay(2000);
}
Trong sketch, chúng ta thiết lập hướng của hành trình cho mỗi động cơ bằng cách sử dụng
digitalWrite(m1direction, direction);
Giá trị cho direction là HIGH cho chuyển động tiến và LOW cho chuyển động lùi. Do đó, để làm xe tăng chuyển động tiến, chúng ta thiết lập cả hai động cơ chạy cùng hướng, đã thực hiện ở (1) và (2). Tiếp theo, chúng ta thiết lập tốc độ của động cơ sử dụng hàm sau:
analogWrite(m1speed, pwm);
Giá trị cho pwm là tốc độ, khoảng giữa 0 và 255. Để làm cho xe tăng quay trái hoặc phải, các động cơ phải được thiết lập các hướng khác nhau, như trong (3) và (4).
Warning Khi bạn sẵn sàng để nạp sketch, vị trí xe tăng hoặc là giữ nó khỏi mặt làm việc của bạn hoặc dựng nó lên để bánh của nó không tiếp xúc với bề mặt; nếu bạn không làm điều này, khi sketch được nạp thành công, xe tăng sẽ kích hoạt và nhảy ra khỏi bàn làm việc của bạn sau 5 giây!
Nạp sketch, rút cáp USB, và nối cáp pin tới khe nguồn Arduino. Sau đó đặt xe tăng lên tấm thảm hoặc mặt phẳng sạch, và để cho nó lái về. Thí nghiệm với các chức năng chuyển động trong project 40 để điều khiển xe tăng của bạn; điều này sẽ giúp bạn quen hơn với các khoảng thời gian trễ và mối liên quan của chúng tới khoảng cách di chuyển.
Cảm quan va chạm
Bây giờ xe tăng của chúng ta có thể di chuyển, chúng ta có thể bắt đầu thêm các thông minh cơ bản, như là các cảm biến va chạm, cái mà có thể báo cho xe tăng biết khi nó đâm vào vật nào đó hoặc có thể đo khoảng cách giữa xe tăng và một đối tượng trên đường di chuyển của nó do vậy nó có thể tránh va đụng. Chúng ta sẽ sử dụng 3 phương pháp tránh vật cản: công tắc hành trình mini (microswitch), hồng ngoại và siêu âm.
Sản phẩm được quan tâm
Nhận bài viết mới
Các bài viết chia sẻ đến cộng đồng rất chât lượng, mang lại rất nhiều kiến thức mới. Đừng bỏ lỡ bất kỳ bài viết nào của chung tối, hãy đăng ký để nhận bài viết mới qua Mail của bạn
Đăng ký để không bỏ lỡ bài viết nào!
Bài mới
- Giáo trình Robocon
- Giới thiệu các loại board Esp8266 dành cho IoT và thiết lập cơ bản cho người mới học
- Hướng dẫn sử dụng LoraEasyV1
- Tài liệu tự học Python tiếng Việt cho người mới bắt đầu
- Tương lai của kết nối IoT (Internet of Things) tiềm năng và sự đa dạng
- HƯỚNG DẪN LẤP RÁP XE MÔ HÌNH 4 BÁNH
- HƯỚNG DẪN LẮP RÁP XE CHẠY BẰNG NĂNG LƯỢNG MẶT TRỜI
Danh mục