Xe dò line tránh vật cản arduino ( tự lắp)

Thương hiệu : Khác

Giá

:

520,000đ


Share:

Đang cập nhật

Miễn phí vận chuyển với đơn hàng lớn hơn 1.000.000 đ

Giao hàng ngay sau khi đặt hàng (áp dụng với TP. HCM)

Đổi trả trong 3 ngày, thủ tục đơn giản

Nhà cung cấp xuất hóa đơn cho sản phẩm này

 

Bộ xe dò line tránh vật cản arduino bao gồm các linh kiện như sau :

Xe-do-line-tranh-vat-can-arduino-tu-lap-_z7078623722296_d8293fe23367d94207d7d634417b10d1.jpg

-

  • Mạch chủ arduino
  • Module l298N 
  • 2 viên pin + kèm đế pin 18650 có nắp kèm công tắc đóng mở ( mua thêm bộ sạc pin Tại Đây )
  • Bộ khung xe 2 bánh 
  • 3 module dò line đơn 
  • cảm biến siêu âm + đế gắn
  • servo sg90
  • dây cắm jumper kết nối 

Hướng dẫn đi dây :

Bảng nối dây tóm tắt

Thiết bịChân ArduinoNguồn
TCRT Left ( chân digital)D2 ( nằm ở vòng tròn xanh lá trong hình)5V, GND
TCRT Mid ( chân digital)D7 ( nằm ở vòng tròn xanh lá trong hình)5V, GND
TCRT Right ( chân digital)D8 ( nằm ở vòng tròn xanh lá trong hình)5V, GND
HC-SR04 TRIG D3 ( nằm ở vòng tròn xanh lá trong hình)5V, GND
HC-SR04 ECHOD4 ( nằm ở vòng tròn xanh lá trong hình)5V, GND
Servo SG90D11 ( nằm ở vòng tròn xanh lá trong hình)5V, GND
L298N IN1D5 ( nằm ở vòng tròn xanh lá trong hình)-
L298N IN2D6 ( nằm ở vòng tròn xanh lá trong hình)-
L298N IN3D9 ( nằm ở vòng tròn xanh lá trong hình)-
L298N IN4D10 ( nằm ở vòng tròn xanh lá trong hình)-
ENA / ENB5V hoặc PWM-
Arduino Vcc5V (L298N/UBEC)-
Arduino GNDGND chung-

 

Xe-do-line-tranh-vat-can-arduino-tu-lap-_Bo-xe-do-line-arduino_Ảnh màn hình 2025-09-27 lúc 15.24.29.png
Xe-do-line-tranh-vat-can-arduino-tu-lap-_z7054292726447_87bdb73fd6f4b84a7f81d4a16b4e328a-2.jpg

Cách nối dây nguồn pin vào L298 , arduino, cảm biến dò line đơn ,động cơ vàng, động cơ servo

Nối cực dương của nguồn pin vào +12V của L298N

Nối tất cả cực âm của nguồn pin ,GND của Arduino , GND của 3 cảm biến đơn dò line,GND của Servo,GND của cảm biến siêu âm vào GND của L298N.

Nối chung Vin arduino,VCC của 3 cảm biến dò line, VCC của cảm biến siêu âm,VCC của servo vào +5V của module L298N.

Nối các chân digital của cảm biến dò line giống như bảng ở trên.

nối các chân trigger và chân echo của cảm biến siêu âm như bảng ở trên.

 

Ghi chú quan trọng

Cảm biến TCRT5000 thường xuất LOW khi gặp line đen → code này đã set theo nguyên tắc đó.

Nếu cảm biến của  bạn ra tín hiệu ngược (HIGH khi gặp line) → chỉ cần đảo lại logic LOWHIGH.( nếu không biết đảo thì yên tâm, mình đã làm sẵn code số 2 cho bạn .)

Lưu ý chỉ nạp 1 đoạn code…số 1 hoặc số 2….không nạp cả 2 đoạn .

Code số 1 :

#include <Servo.h>

// ==== Cảm biến line ====
#define S_LEFT   2
#define S_MID    7
#define S_RIGHT  8

// ==== HC-SR04 ====
#define TRIG 3
#define ECHO 4

// ==== Servo ====
#define SERVO_PIN 11
Servo myServo;

// ==== Động cơ (L298N) ====
#define IN1 5   // Motor trái
#define IN2 6
#define IN3 9   // Motor phải
#define IN4 10

// ==== Hàm điều khiển động cơ ====
void motorStop() {
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, LOW);
}

void motorForward() {
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, HIGH);
 digitalWrite(IN4, LOW);
}

void motorBackward() {
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, HIGH);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, HIGH);
}

void motorLeft() {
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, HIGH);
 digitalWrite(IN3, HIGH);
 digitalWrite(IN4, LOW);
}

void motorRight() {
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, HIGH);
}

// ==== Đo khoảng cách ====
long getDistance() {
 digitalWrite(TRIG, LOW);
 delayMicroseconds(2);
 digitalWrite(TRIG, HIGH);
 delayMicroseconds(10);
 digitalWrite(TRIG, LOW);

 long duration = pulseIn(ECHO, HIGH, 20000); // timeout 20ms
 long distance = duration * 0.034 / 2;       // cm
 return distance;
}

void setup() {
 // Motor
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);

 // Line sensor
 pinMode(S_LEFT, INPUT);
 pinMode(S_MID, INPUT);
 pinMode(S_RIGHT, INPUT);

 // HC-SR04
 pinMode(TRIG, OUTPUT);
 pinMode(ECHO, INPUT);

 // Servo
 myServo.attach(SERVO_PIN);
 myServo.write(90); // nhìn thẳng khi khởi động

 Serial.begin(9600);
}

void loop() {
 // Đọc cảm biến line
 int left  = digitalRead(S_LEFT);
 int mid   = digitalRead(S_MID);
 int right = digitalRead(S_RIGHT);

 // Đọc khoảng cách phía trước
 long dist = getDistance();
 Serial.print("Khoang cach: ");
 Serial.println(dist);

 // ==== Tránh vật cản ====
 if (dist > 0 && dist < 15) {  // Nếu có vật cản gần
   motorStop();
   delay(300);

   // Quét bên trái
   myServo.write(150);
   delay(500);
   long distLeft = getDistance();

   // Quét bên phải
   myServo.write(30);
   delay(500);
   long distRight = getDistance();

   // Trả servo về giữa
   myServo.write(90);

   // Chọn hướng trống hơn
   if (distLeft > distRight) {
     motorLeft();
     delay(600);
   } else {
     motorRight();
     delay(600);
   }
 }
 // ==== Dò line ====
 else {
   if (mid == LOW && left == HIGH && right == HIGH) {
     motorForward(); // vạch ở giữa -> đi thẳng
   } 
   else if (left == LOW) {
     motorLeft(); // lệch trái
     delay(100);
   } 
   else if (right == LOW) {
     motorRight(); // lệch phải
     delay(100);
   } 
   else {
     motorStop(); // mất line -> dừng lại
   }
 }
}
 

Code số 2:

#include <Servo.h>

// ==== Cảm biến line ====
#define S_LEFT   2
#define S_MID    7
#define S_RIGHT  8

// ==== HC-SR04 ====
#define TRIG 3
#define ECHO 4

// ==== Servo ====
#define SERVO_PIN 11
Servo myServo;

// ==== Động cơ (L298N) ====
#define IN1 5   // Motor trái
#define IN2 6
#define IN3 9   // Motor phải
#define IN4 10

// ==== Hàm điều khiển động cơ ====
void motorStop() {
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, LOW);
}

void motorForward() {
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, HIGH);
 digitalWrite(IN4, LOW);
}

void motorBackward() {
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, HIGH);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, HIGH);
}

void motorLeft() {
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, HIGH);
 digitalWrite(IN3, HIGH);
 digitalWrite(IN4, LOW);
}

void motorRight() {
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, HIGH);
}

// ==== Đo khoảng cách ====
long getDistance() {
 digitalWrite(TRIG, LOW);
 delayMicroseconds(2);
 digitalWrite(TRIG, HIGH);
 delayMicroseconds(10);
 digitalWrite(TRIG, LOW);

 long duration = pulseIn(ECHO, HIGH, 20000); // timeout 20ms
 long distance = duration * 0.034 / 2;       // cm
 return distance;
}

void setup() {
 // Motor
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);

 // Line sensor
 pinMode(S_LEFT, INPUT);
 pinMode(S_MID, INPUT);
 pinMode(S_RIGHT, INPUT);

 // HC-SR04
 pinMode(TRIG, OUTPUT);
 pinMode(ECHO, INPUT);

 // Servo
 myServo.attach(SERVO_PIN);
 myServo.write(90); // nhìn thẳng khi khởi động

 Serial.begin(9600);
}

void loop() {
 // Đọc cảm biến line
 int left  = digitalRead(S_LEFT);
 int mid   = digitalRead(S_MID);
 int right = digitalRead(S_RIGHT);

 // Đọc khoảng cách phía trước
 long dist = getDistance();
 Serial.print("Khoang cach: ");
 Serial.println(dist);

 // ==== Tránh vật cản ====
 if (dist > 0 && dist < 15) {  // Nếu có vật cản gần
   motorStop();
   delay(300);

   // Quét bên trái
   myServo.write(150);
   delay(500);
   long distLeft = getDistance();

   // Quét bên phải
   myServo.write(30);
   delay(500);
   long distRight = getDistance();

   // Trả servo về giữa
   myServo.write(90);

   // Chọn hướng trống hơn
   if (distLeft > distRight) {
     motorLeft();
     delay(600);
   } else {
     motorRight();
     delay(600);
   }
 }
 // ==== Dò line (LOW = trắng, HIGH = đen) ====
 else {
   if (mid == HIGH && left == LOW && right == LOW) {
     motorForward(); // vạch đen ở giữa -> đi thẳng
   } 
   else if (left == HIGH) {
     motorLeft(); // vạch đen bên trái
     delay(100);
   } 
   else if (right == HIGH) {
     motorRight(); // vạch đen bên phải
     delay(100);
   } 
   else {
     motorStop(); // không thấy line -> dừng
   }
 }
}
 

 

 

 

 

 

Chưa có mô tả cho sản phẩm này
Product category