Chế tạo Robot tránh vật cản – Hướng dẫn chi tiết
Trong chuỗi bài viết DIY chúng ta sẽ làm quen với các ứng dụng đầy tính sáng tạo như: Robot tránh vật cản, hệ thống tưới cây tự động, hệ thống tự động đếm người ra vào…Sẽ giúp cho đọc giả hiểu hơn về ngôn ngữ lập trình Arduino, là nền tảng giúp đỡ cộng đồng cùng nhau phát triển.
Xem ngay: Chế tạo gậy thông minh cho người mù sử dụng Arduino
Các linh kiện cần thiết để làm Robot tránh vật cản
Tên linh kiện | Số lượng | Shopee |
Khung Robot | 1 | Mua ngay |
Mạch Arduino UNO R3 | 1 | Mua ngay |
Cáp nạp | 1 | Mua ngay |
Motor Shield LM293D | 1 | Mua ngay |
SG90 Servo | 1 | Mua ngay |
Cảm biến tránh vật cản SRF04 | 1 | Mua ngay |
Công tắc Gạt 3 Chân SS12d00 | 1 | Mua ngay |
Tụ 100nF/104PF (Mua dư ra 1 tý) | 2 | Mua ngay |
Tụ 300uF | 1 | Mua ngay |
Dây nối (Đực – Đực) | 1 | Mua ngay |
Đế Pin 4AA | 1 | Mua ngay |
Lắp ráp Robot tránh vật cản
Hàn thêm tụ 100nF vào đầu của động cơ.
Hoàn thiện quá trình lắp linh kiện vào khung Robot.
Sơ đồ đấu nối
Đấu nối
Đấu nối cảm biến tránh vật cản vào Shield Motor
VCC | 5V |
GND | GND |
TRIG | A4 |
ECHO | A5 |
Đấu nối Servo vào Shield Motor
Dây tín hiệu (màu vàng) | S |
VCC (Màu đỏ) | + |
GND (Màu đen) | – |
Code Robot tránh vật cản
////////////////////////////////////////////// // Arduino ROBOT v0.1 // // // // http://www.educ8s.tv // ///////////////////////////////////////////// #include <AFMotor.h> #include <NewPing.h> #include <Servo.h> #define TRIG_PIN A4 #define ECHO_PIN A5 #define MAX_DISTANCE 200 #define MAX_SPEED 190 // sets speed of DC motors #define MAX_SPEED_OFFSET 20 NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(3, MOTOR12_1KHZ); Servo myservo; boolean goesForward=false; int distance = 100; int speedSet = 0; void setup() { myservo.attach(9); myservo.write(115); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop() { int distanceR = 0; int distanceL = 0; delay(40); if(distance<=15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if(distanceR>=distanceL) { turnRight(); moveStop(); }else { turnLeft(); moveStop(); } }else { moveForward(); } distance = readPing(); } int lookRight() { myservo.write(50); delay(500); int distance = readPing(); delay(100); myservo.write(115); return distance; } int lookLeft() { myservo.write(170); delay(500); int distance = readPing(); delay(100); myservo.write(115); return distance; delay(100); } int readPing() { delay(70); int cm = sonar.ping_cm(); if(cm==0) { cm = 250; } return cm; } void moveStop() { motor1.run(RELEASE); motor2.run(RELEASE); } void moveForward() { if(!goesForward) { goesForward=true; motor1.run(FORWARD); motor2.run(FORWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet+MAX_SPEED_OFFSET); delay(5); } } } void moveBackward() { goesForward=false; motor1.run(BACKWARD); motor2.run(BACKWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet+MAX_SPEED_OFFSET); delay(5); } } void turnRight() { motor1.run(FORWARD); motor2.run(BACKWARD); delay(300); motor1.run(FORWARD); motor2.run(FORWARD); } void turnLeft() { motor1.run(BACKWARD); motor2.run(FORWARD); delay(300); motor1.run(FORWARD); motor2.run(FORWARD); }
Giải thích Code
Để chương trình hoạt động và không báo lỗi khi nạp chương trình. Bước đầu tiên chúng ta cần tải thư viện và Add thư viện vào Arduino IDE.
- Hướng dẫn Thêm thư viện trên Arduino IDE: https://arduinokit.vn/huong-dan-them-moi-thu-vien-trong-arduino-ide
- Thư viện Motor Shield: Tải ngay
- Thư viện NewPing: Tải ngay
////////////////////////////////////////////// // Arduino ROBOT v0.1 // // // // http://www.educ8s.tv // ///////////////////////////////////////////// #include <AFMotor.h> #include <NewPing.h> #include <Servo.h>
Tiếp theo, chúng ta khai báo chân kết nối cho cảm biến tránh vật cản và hiệu chỉnh tốc độ của động cơ, các bạn có thể thay đổi thông số tốc độ động cơ đến 255.
#define TRIG_PIN A4 #define ECHO_PIN A5 #define MAX_DISTANCE 200 #define MAX_SPEED 190 // sets speed of DC motors #define MAX_SPEED_OFFSET 20
Khai báo biến cho hàm Servo và khởi tạo kết nối động cơ trên thư viện AFMotor.
AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(3, MOTOR12_1KHZ); Servo myservo;
Tiếp theo trong hàm setup(), chúng ta khai báo kết nối cho chân servo, ở đây chúng ta kết nối servo vào chân 9 của board mạch, góc xoay servo đặt là 115 độ. Các bạn có thể tự thử nghiệm ra góc quay phù hợp cho robot tránh vật cản của mình.
void setup() { myservo.attach(9); myservo.write(115); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); }
Trong hàm loop() đưa các giá trị đo về 0 và thực hiện chương trình sau 40ms. Nếu khoảng cách cảm biến đo được nhỏ hơn hoặc bằng 15cm thì Robot tránh vật cản sẽ dừng lại trong khoảng thời gian 100ms và lùi lại phía sau 300ms, dừng lại trong 200ms. Robot quay đầu nhìn sang trái, sang phải và đo khoảng cách. Nếu khoảng cách đo bên nào lớn hơn hoặc bằng thì robot sẽ quay về hướng lớn nhất và di chuyển về phía trước.
void loop() { int distanceR = 0; int distanceL = 0; delay(40); if(distance<=15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if(distanceR>=distanceL) { turnRight(); moveStop(); }else { turnLeft(); moveStop(); } }else { moveForward(); } distance = readPing(); }
Bài viết liên quan
- Mới học Arduino nên chọn board nào?
- GÓC DIY | Chế tạo Robot tránh vật cản – Hướng dẫn chi tiết
- Điều khiển Đèn 220V bằng Realy sử dụng Arduino
- Đo nhiệt độ bằng Cảm biến LM35 sử dụng Arduino
- Báo động chống trộm bằng cảm biến PIR (HC-SR501)
Kết luận
Cảm ơn các bạn đã đọc và theo dõi arduinokit.vn, trong quá trình thực hiện có gì thắc mắc các bạn comment bên dưới để được mình hỗ trợ tốt nhất. Nếu thấy bài viết hay và bổ ích thì đừng ngần ngại cho mình 1 Like và Share bài viết để nhiều người cùng tham gia chế tạo.
Chúc các bạn thành công!
Trân trọng.
bài viết bổ ích
Thanh you gig
Bài viết hay quá Thầy ơi, nhưng sao khi mình verify báo nhiều lỗi quá, cụ thể:
Mình lớn tuổi và mới nguyên cứu và không rành tiếng anh nên hạn chế nhiều mong Thầy giúp đỡ
a kiểm tra lại thư viện đã thêm vào đúng chưa nhé