Search Code

Bài 24/31: Xe thông minh Phần 2: Tiến, lùi, trái và phải cũng như điều khiển tốc độ của xe

Bài 24/31: Xe thông minh Phần 2: Tiến, lùi, trái và phải cũng như điều khiển tốc độ của xe

24-SunFounder-Car-Speed trên vỉa hè

Bài học này tập trung vào giai đoạn thứ hai của việc chế tạo chiếc xe thông minh của bạn: điều khiển chuyển động của nó bằng mã Arduino. Trong khi dự án đầu tiên có thể đã làm cho chiếc xe di chuyển theo một cách cơ bản, hướng dẫn này sẽ dạy bạn cách ra lệnh cho xe tiến, lùi, rẽ trái, rẽ phải và dừng lại một cách chính xác. Bạn cũng sẽ học cách điều khiển tốc độ của nó, cho phép tăng tốc và giảm tốc mượt mà. Đây là một bước cơ bản cho bất kỳ dự án robot nào, vì nó cung cấp cho bạn logic nền tảng để tạo ra các hành vi tự động phức tạp hơn.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

Việc thành thạo các điều khiển chuyển động này mở ra một thế giới khả năng. Dưới đây là một vài ứng dụng thực tế cho kiến thức này:

  • Robot dò đường: Sử dụng các chức năng rẽ trái và rẽ phải để giữ robot đi đúng đường ray.
  • Xe tránh chướng ngại vật: Lập trình cho xe tiến về phía trước, dừng lại và rẽ khi phát hiện vật cản trên đường đi.
  • Thám hiểm điều khiển từ xa: Kết hợp các lệnh này với một mô-đun không dây để lái xe quanh nhà hoặc sân của bạn.
  • Hệ thống giao hàng tự động: Tạo một robot quy mô nhỏ có thể di chuyển giữa các điểm đã đặt, dừng và khởi động khi cần thiết.

Phần cứng và Linh kiện

Dự án này được xây dựng dựa trên bộ kit Arduino 3-trong-1 SunFounder. Không cần thêm linh kiện nào ngoài bộ kit cơ bản, nhưng bạn sẽ cần kết nối thêm bốn dây vào Arduino để điều khiển bộ điều khiển động cơ. Các linh kiện thiết yếu bao gồm:

  • Arduino Uno (hoặc bo mạch tương thích)
  • Khung xe thông minh SunFounder với động cơ
  • Bo mạch điều khiển động cơ (có trong bộ kit)
  • Dây jumper
  • Bộ pin cho xe
  • Cáp USB để lập trình
smarcar_turning_right  trên
smartcar_turning_left trên

Hướng dẫn Đấu dây

Việc đấu dây cho dự án này rất quan trọng để điều khiển hướng của từng động cơ. Video giải thích rằng bốn dây điều khiển động cơ từ bo mạch điều khiển được kết nối với các chân 5, 6, 9 và 10 của Arduino. Các chân này đặc biệt vì chúng hỗ trợ Điều chế Độ rộng Xung (PWM), điều này rất cần thiết cho việc điều khiển tốc độ.

Trong video, người hướng dẫn kết nối chúng theo một thứ tự cụ thể bằng dây màu vàng và màu xanh dương, như được hiển thị trong sơ đồ dưới đây.

Một lưu ý an toàn quan trọng được đề cập trong video là ngắt kết nối nguồn pin của xe (dây đỏ vào 5V và dây đen vào GND) trong khi lập trình Arduino qua USB. Điều này ngăn cổng USB bị quá tải và có thể bị tắt.

Giải thích Mã

Mã cho bài học này được cấu trúc để dễ dàng sửa đổi và hiểu. Chìa khóa để điều khiển xe nằm ở các định nghĩa chân ở đầu sketch. Bạn có thể thay đổi chúng nếu bạn quyết định sử dụng các chân khác trên Arduino của mình.

const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

Các dòng này định nghĩa các chân Arduino được kết nối với đầu vào của bộ điều khiển động cơ. in1in2 điều khiển một động cơ, trong khi in3in4 điều khiển động cơ kia. Bằng cách đặt các chân này ở mức CAO hoặc THẤP, bạn điều khiển hướng quay của từng động cơ.

Để điều khiển tốc độ của xe, mã sử dụng hai hàm tùy chỉnh: moveForward(int speed)moveBackwards(int speed). Các hàm này nhận một giá trị số nguyên từ 0 đến 255 làm đối số. Giá trị 0 dừng động cơ, trong khi 255 là tốc độ tối đa. Ví dụ, để di chuyển xe về phía trước ở tốc độ tối đa, bạn sẽ gọi moveForward(255). Để di chuyển lùi chậm, bạn sẽ sử dụng moveBackwards(100).

Video cũng trình bày một chuỗi "tăng tốc" và "giảm tốc" bằng cách sử dụng vòng lặp for. Đây là một kỹ thuật mạnh mẽ để tăng tốc mượt mà.

for(int i=0;i<=255;i+=5){
  moveForward(i);
  delay(100);
}

Vòng lặp này bắt đầu với i ở 0 và tăng nó lên 5 mỗi lần lặp cho đến khi đạt 255. Mỗi lần, nó gọi moveForward(i), dần dần tăng tốc độ của xe. delay(100) cung cấp một khoảng dừng 100 mili-giây ở mỗi bước tốc độ, làm cho quá trình tăng tốc có thể nhìn thấy được. Một vòng lặp tương tự với giá trị i giảm dần được sử dụng để giảm tốc xe.

Trình diễn Dự án Trực tiếp

Trong video, người hướng dẫn trình bày dự án qua hai giai đoạn chính. Đầu tiên, anh ấy cho thấy các chuyển động cơ bản của xe. Bằng cách tải mã "move", xe thực hiện một chuỗi được lập trình sẵn: tiến về phía trước trong hai giây, dừng lại, lùi trong hai giây, dừng lại, rẽ trái, và sau đó rẽ phải. Điều này xác nhận trực quan rằng việc đấu dây và logic là chính xác.

Buổi trình diễn thứ hai tập trung vào việc điều khiển tốc độ. Người hướng dẫn nạp mã "tăng tốc", mã này dần dần tăng tốc xe về phía trước cho đến khi đạt tốc độ tối đa, sau đó giảm tốc độ một cách mượt mà để dừng lại. Anh ấy sau đó trình bày một phiên bản với tốc độ cố định, trong đó xe di chuyển về phía trước ở mức 255, dừng lại, rồi lùi lại với tốc độ chậm hơn là 100, với các giá trị được in ra Serial Monitor để kiểm tra.

Các chương

  • [00:00] Giới thiệu về điều khiển chuyển động của xe
  • [01:44] Thiết lập hệ thống dây điện để điều khiển bằng mã
  • [02:07] Trình diễn chuyển động tiến và lùi
  • [03:18] Trình diễn rẽ trái và rẽ phải
  • [05:05] Kết nối dây điện vào các chân Arduino
  • [07:00] Giải thích mã điều khiển hướng
  • [11:44] Giới thiệu về điều khiển tốc độ
  • [12:16] Giải thích mã tăng tốc độ
  • [14:45] Sử dụng Serial Monitor để gỡ lỗi
  • [17:10] Trình diễn trực tiếp điều khiển tốc độ
  • [19:45] Kiểm tra ngoài trời cuối cùng và kết luận

Hình ảnh

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000
26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000
smartcar_turning_left
smartcar_turning_left
smarcar_turning_right
smarcar_turning_right
24-SunFounder-Car-Speed on the pavement
24-SunFounder-Car-Speed on the pavement
900-Lesson 24/31: Smart code speeds up
Ngôn ngữ: C++
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
    
    moveForward(255);
    Serial.print("Forward at: ");
    Serial.println(255);
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds
    
    moveBackwards(100);
    Serial.print("Reverse at: ");    
    Serial.println(100);    
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds   
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

void moveBackwards(int speed) {
  analogWrite(in1, speed);
  analogWrite(in2, 0);
  
  analogWrite(in3, 0);
  analogWrite(in4, speed);
}
901-Lesson 24/31: Smart code speeds up (Custome code)
Ngôn ngữ: C++
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
  Serial.println("Loop 1: Speeding Up"); 
  for(int i=0;i<=255;i+=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);
    delay(100);
  }
    Serial.println("Loop 2: Slowing down "); 
  for(int i=255;i>=0;i-=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);    
    delay(100);
  }
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

Tài nguyên & tài liệu tham khảo

Tập tin📁

Thư viện Arduino (tệp nén)