Combo tự làm xe 3 bánh tránh vật cản Arduino

Bạn có đam mê với robot và muốn tạo ra một chiếc xe tự chạy độc đáo? Combo tự làm xe 3 bánh tránh vật cản Arduino chính là giải pháp hoàn hảo cho bạn. Với những linh kiện chất lượng và sự sáng tạo của bạn, bạn có thể tự tay tạo nên một chiếc xe robot thông minh và độc đáo. Hãy cùng khám phá chi tiết combo này và bắt đầu hành trình sáng tạo của bạn.

Những linh kiện trong Combo tự làm xe 3 bánh tránh vật cản Arduino

  • Khung xe robot 3 bánh
  • Arduino UNO R3 SMD chip dán (kèm cáp)
  • Mạch Điều Khiển Động Cơ DC L298N
  • Cảm Biến Siêu Âm HC-SR04
  • Đế module cảm biến siêu âm HC-SR04
  • Động cơ servo SG90 180 độ
  • Hộp Pin 18650 2 cell có nắp và công tắc
  • Pin cell 18650 2000mAh x2
  • Jack DC đực có dây
  • Dây Cắm Test Board Đực Đực 30cm ( 10 sợi )
  • Dây Cắm Test Board Đực Cái 30cm ( 20 sợi )

Thông số kỹ thuật của Combo tự làm xe 3 bánh tránh vật cản Arduino

  • Dòng tiêu thụ trung bình: 0.5A
  • Dòng chờ: 0.06A
  • Số giờ hoạt động: liên tục 3h trong điều kiện pin được sạc đầy
  • Trọng lượng: 500g

Lưu ý: Combo này là tự ráp, bạn chỉ cần đấu nối và nạp code theo đúng sơ đồ là chạy, bạn cũng có thể chỉnh sửa lại code để tối ưu hơn.

Sơ đồ đấu nối của Combo tự làm xe 3 bánh tránh vật cản Arduino

Cấp nguồn

  • Arduino + L298N sẽ lấy nguồn từ bộ 2 pin 18650
  • Servo + SR04 sẽ lấy nguồn từ L298N
  • 2 động cơ sẽ lấy nguồn từ L298N

Sơ đồ đấu nối của Combo tự làm xe 3 bánh tránh vật cản Arduino

Đấu dây tín hiệu

  • Chân trig của SR-04 = 7
  • Chân echo của SR-04 = 4
  • Chân IN1 Module L298 = 13 // để điều chỉnh hướng
  • Chân IN2 Module L298 = 12
  • Chân IN3 Module L298 = 11
  • Chân IN4 Module L298 = 10
  • Chân ENA Module L298 = 6 // để điều chỉnh tốc độ
  • Chân ENB Module L298 = 5

Sơ đồ đấu nối của Combo tự làm xe 3 bánh tránh vật cản Arduino

Video test

Code mẫu

#include  //Thư viện điều khiển Servo motor. Đây là thư viện tiêu chuẩn
#include  //Thư viện chức năng cảm biến siêu âm. Bạn phải cài đặt thư viện này

//Các chân điều khiển L298N của chúng ta
const int LeftMotorForward = 13; // Bánh bên trái tiến
const int LeftMotorBackward = 12; // Bánh bên trái lui
const int RightMotorForward = 11; // Bánh bên phải tiến
const int RightMotorBackward = 10; // Bánh bên phải lui
const int ena = 6;
const int enb = 5;

//Các chân cảm biến SR04
#define trig_pin 7
#define echo_pin 4
#define maximum_distance 200

boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance);
Servo servo_motor; //Tên của dịch vụ servo

void setup(){
  Serial.begin(9600);
  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  pinMode(ena, OUTPUT);
  pinMode(enb, OUTPUT);
  servo_motor.attach(9); //Chân servo của chúng ta
  servo_motor.write(90);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  analogWrite(ena, 200);
  analogWrite(enb, 200);
}

void loop(){
  int distanceRight = 0;
  int distanceLeft = 0;
  delay(50);

  if (distance <= 20){
    moveStop(); // Dừng lại
    delay(300);
    moveBackward(); // Lùi về sau
    delay(400);
    moveStop(); // Dừng lại
    delay(300);
    distanceRight = lookRight(); // Lấy khoảng cách bên trái
    delay(300);
    distanceLeft = lookLeft(); // Lấy khoảng cách bên phải
    delay(300);

    if (distance >= distanceLeft){ // Nếu khoảng cách tối đa >= khoảng cách bên trái
      turnRight(); // Rẽ phải
      moveStop();
    } else{
      turnLeft(); // Rẽ trái
      moveStop();
    }
  } else{
    moveForward(); // Không phải 2 trường hợp trên thì chạy thẳng
  }

  distance = readPing();
}

int lookRight(){ // Nhìn phải và lấy khoảng cách
  servo_motor.write(10);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(90);
  return distance;
}

int lookLeft(){ // Nhìn trái và lấy khoảng cách
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(90);
  return distance;
  delay(100);
}

int readPing(){
  delay(70);
  int cm = sonar.ping_cm();
  if (cm==0){
    cm=250;
  }
  return cm;
}

void moveStop(){ // Dừng lại
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
}

void moveForward(){ // Đi thẳng
  if(!goesForward){
    goesForward=true;
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(RightMotorForward, HIGH);
    digitalWrite(LeftMotorBackward, LOW);
    digitalWrite(RightMotorBackward, LOW);
  }
}

void moveBackward(){ // Lùi lại
  goesForward=false;
  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorForward, LOW);
}

void turnRight(){ // Quẹo phải
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorForward, LOW);
  delay(300);
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
}

void turnLeft(){ // Quẹo trái
  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  delay(300);
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
}

Đừng quên chia sẻ những thành quả của bạn với chiếc xe tự làm này. Chúc bạn thành công và tiếp tục khám phá thế giới đầy màu sắc của robot!

FEATURED TOPIC

hihi