Combo xe 3 bánh tránh vật cản Arduino
Thương hiệu : Khác
450,000đ
Combo xe tránh vật cản 3 bánh tự động tránh vật khi bị cản trở, thường được sử dụng trong dạy học STEM, thi đấu, giải trí, mạch khả năng hoạt động lên tới 3h, khi không còn sử dụng vào mục đích chính người dùng có thể thay đổi sang combo khác như: kết hợp với module bluetooth làm xe điều khiển từ xa, kết hợp với module dò line làm xe dò line, dò line tránh vật cản
Danh sách sản phẩm sử dụng trong combo
- 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, quý khách chỉ cần đấu nối và nạp code theo đúng sơ đồ là chạy, quý khách 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
Code mẫu
#include <Servo.h> //Servo motor library. This is standard library
#include <NewPing.h> //Ultrasonic sensor function library. You must install this library
//our L298N control pins
const int LeftMotorForward = 13; // banh ben trai tien
const int LeftMotorBackward = 12; // banh ben trai lui
const int RightMotorForward = 11; // banh ben phai tien
const int RightMotorBackward = 10; // banh ben phai lui
const int ena = 6;
const int enb = 5;
//sensor pins 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); //sensor function
Servo servo_motor; //our servo name
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); //our servo pin
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); // chinh toc do dong co ben trai
analogWrite(enb, 200); // chinh toc do dong co ben trai
}
void loop(){
int distanceRight = 0;
int distanceLeft = 0;
delay(50);
if (distance <= 20){
moveStop(); // dung lai
delay(300);
moveBackward(); // lui ve sau
delay(400);
moveStop();// dung lai
delay(300);
distanceRight = lookRight(); // lay khoang cach ben trai
delay(300);
distanceLeft = lookLeft(); // lay khoang cach ben phai
delay(300);
if (distance >= distanceLeft){ // neu khoang cach toi da >= khoang cach ben trai
turnRight(); //re phai
moveStop();
}
else{ // ko thi
turnLeft(); // re trai
moveStop();
}
}
else{
moveForward(); // ko phai 2 truong hop tren thi chay thang
}
distance = readPing();
}
int lookRight(){ // nhin phai lay khoang cach
servo_motor.write(10);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(90);
return distance;
}
int lookLeft(){ // nhin trai lai khoang cach
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(){ // dung lai
digitalWrite(RightMotorForward, LOW);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
digitalWrite(LeftMotorBackward, LOW);
}
void moveForward(){ // di thang
if(!goesForward){
goesForward=true;
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}
}
void moveBackward(){
goesForward=false;
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorForward, LOW);
}
void turnRight(){
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(){
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);
}