Professional Documents
Culture Documents
Dự án cuối kì ROBOT do line
Dự án cuối kì ROBOT do line
KHOA ĐIỆN-ĐIỆN TỬ
---*** ***---
DỰ ÁN CUỐI KÌ
TÌM HIỂU, THIẾT KẾ, LẮP ĐẶT
VÀ LẬP TRÌNH CHO ROBOT DÒ LINE
Nhóm : Dove
Thành viên : Trương Ngọc Minh MSSV: 22161286
Nguyễn Viết Đức MSSV: 22161245
Đỗ Quốc Bình MSSV: 22161225
Trang Đặng Vĩ Thắng MSSV: 22161320
Năm : 2022
Ngành : Kĩ thuật điện tử- viễn thông
GV Hướng dẫn : Bùi Thị Tuyết Đan
NHIỆM VỤ ĐỀ TÀI
Nhóm: Dove
I. DỰ ÁN
Tìm hiểu, thiết kế, lắp đặt và lập trình cho robot dò line.
II. NHIỆM VỤ
3. Lập trình
Hồ Chí Minh, Tháng 11 năm 2022 Hồ Chí Minh, Tháng 11 năm 2022
GV HƯỚNG DẪN TRƯỞNG BỘ PHẬN
ii
1. Nội dung :
- .
2. Ưu điểm:
- .
3. Nhược điểm:
iii
- .
5. Xếp loại:
- .
LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn đến Bộ môn Điện tử viễn thông Khoa Điện- Điện
Tử đã tạo điều kiện để chúng em thực hiện dự án này.
Để hoàn thành bài tập lớn này, chúng em xin gửi lời cảm ơn đến giảng viên Bùi
Thị Tuyết Đan đã tận tình giảng dạy, hướng dẫn chúng em trong suốt quá trình học
tập, nghiên cứu và rèn luyện để có thể thực hiện tốt dự án này.
Chúng em cũng xin chân thành cảm ơn đến các thành viên trong nhóm đã cùng
nhau thảo luận, thu thập tài liệu và cùng nhau giúp đỡ, giải quyết các vấn đề nảy sinh
trong quá trình thực hiện bài tập lớn này.
Mặc dù đã cố gắng để thực hiện dự án một cách tốt nhất. Song do có sự hạn chế
về kiến thức chuyên môn cũng như kinh nghiệm thực tế nên không thể tránh khỏi
những thiếu sót. Vì vậy chúng em rất mong được sự góp ý của thầy cô và các bạn để
đề tài này được hoàn chỉnh hơn.
Chúng em xin chân thành cảm ơn!
iv
ABSTRACT
Line detection robot is a type of robot that can follow the available line
drawing so that the robot can recognize and move for the purpose of going to the
original proposed position.
The basic operating principle of this robot is to use a photoelectric sensor
(photoresistor or infrared diode) to compare the light intensity and then adjust
the appropriate direction. The robot's sensor is located near the road surface and
the light source for comparison will now be generated by the robot itself. The
reason there is a deviation in light intensity lies in the line drawn, this line will
have different properties than the surrounding plane, usually it is black to absorb
light. When the robot deviates into the drawn area, the light emitted by the robot
does not reflect back as usual, but is partially absorbed by the line, distorting the
brightness between the two sensors.
Therefore, we have to design and program for the robot to have the
behavior to overcome that deviation and we have a robot that follows the drawn
line at a fast speed to conduct the competition.
vi
vii
2.2.4. Khối điều khiển
2.2.5. Khối so sánh
CHƯƠNG 3: PHƯƠNG THỨC DI CHUYỂN
3.1. Đường line
3.2. Biểu đồ điều khiển
CHƯƠNG 4: VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN
4.1. Chương trình khởi tạo
4.2. Chương trình cho xe chạy theo line
4.3. Chương trình cho xe né vật cản
4.4. Chương trình cho xe di chuyển
CHƯƠNG 5: KẾT QUẢ THỰC HIỆN
5.1. Human detection training
5.1.1. Collecting dataset
5.1.2. Dataset labelling
5.1.3. Training task
5.3. Detection and tracking
5.3.1. Detection
5.3.2. Tracking
5.3.3. Combining detecting and tracking
5.4. Experiments of autonomous human-following quadcopter
CHAPTER 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
6.1. Conclusion
6.2. Future works
REFERENCES
APPENDICES
viii
DANH MỤC CÁC TỪ VIẾT TẮT
ix
DANH MỤC BẢNG
x
DANH MỤC HÌNH
xi
CHƯƠNG 1: TỔNG QUAN
1.1. Vật liệu- linh kiện
1 Arduino UNO R3 SMD
1 Mạch điều khiển động cơ L298N
2 Pin và 1 đế pin
1 Công tắc
3 Cảm biến hồng ngoại dò line
1 Cảm biến siêu âm HC-SR04
4 Động cơ giảm tốc V1
4 Bánh xe
1 Khung xe mica
1.2. Phương án thiết kế
Xe vận hành bằng 4 bánh, dẫn động bằng 4 động cơ giảm tốc.
Xe có hiển thị trạng thái LED (báo nguồn, động cơ…) tương ứng với
trạng thái xe.
Phần điều khiển chuyển động chọn 2 mạch cầu H được tích hợp sẵn trong
L298.
Phần dò đường dùng 3 cảm biến hồng ngoại dò line
xii
CHƯƠNG 2: XÂY DỰNG PHẦN CỨNG
2.1. Thiết kế tổng quan
Khối nguồn: cung cấp điện áp 12V cho động cơ và 5V cho khối vi điều
khiển
Khối vi điều khiển
Khối cảm biến: nhận tín hiệu đường đi
Khối so sánh
Khối điều khiển động cơ
2.2. Chi tiết thiết kế
2.2.1. Khối nguồn
Dùng nguồn 12V để cấp điện áp vào, sau đó thông qua khối lọc, hạ áp
dùng 7805 ta lấy ra điện áp 5V ổn định để cung cấp cho các khối còn lại.
Ngoài ra còn có một số biện pháp bảo vệ như dùng cầu chi 2A, dùng
diode chống ngược nguồn.
xiii
Hình 1: Sơ đồ khối nguồn
xiv
Khi Led phát tín hiệu khi có tín phản lại thì quang trở sẽ thay đổi điện trở
nó phát tín hiệu vào để so sánh rồi đưa vào vi điều khiển để vi điều khiển
xử lý rồi đưa ra tín hiệu để phát lệnh điều khiển động cơ.
xv
Điện áp hoạt động: 3~12V DC
Dòng điện tiêu thụ: 110-200 mAh
Tỉ số truyền: 1:48
125 vòng / 1 phút tại 3VDC
208 vòng / 1 phút tại 5VDC
Moment: 0.8 kg.cm
Tiếng ồn: <65dB
Trọng lượng: ~50g
Mạch điều khiển động cơ L298N: Điều khiển động cơ với 2 mạch cầu H
đã tích hợp sẵn ở bên trong. Trong mỗi IC L298 được tích hợp 2 cầu H, mỗi cầu
H chịu được 2 dòng Ampe. Khi nối các chân có cùng chức năng của 2 cầu H
trên IC với nhau thì IC có thể cung cấp được dòng 4 Ampe đủ để cho động cơ
hoạt động hết công suất.
Điện áp đầu vào: 5~30VDC
Công suất tối đa: 25W 1 cầu (lưu ý công suất = dòng điện x điện áp nên
áp cấp vào càng cao, dòng càng nhỏ, công suất có định 25W).
Dòng tối đa cho mỗi cầu H là: 2A
Mức điện áp logic: Low -0.3V~1.5V, High: 2.3V~Vss
xvi
Kích thước: 43x43x27mm
xvii
Bộ nhớ chương trình (FLASH): 32KB
Bộ nhớ EEPROM: 1KB
Bộ nhớ RAM: 2KB
Điện áp hoạt động rộng: 1.8V – 5.5V
Số timer: 3 timer gồm 2 timer 8-bit và 1 timer 16-bit
Số kênh xung PWM: 6 kênh (1timer 2 kênh)
xviii
Hình 7: Sơ đồ khối bên trong của ATmega328
KHỞI TẠO
GIỚI THIỆU
DÒ ĐƯỜNG
YES
NO
LỆCH
QUAY TRÁI
ĐI THẲNG HOẶC PHẢI
NO
VẠCH
YES
xx
CHƯƠNG 4: VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN
4.1. Chương trình khởi tạo
int stop_distance = 12;// Khoảng cách phát hiện vật cản
//Kết nối SRF 05 OR 04
const int trigPin = 11; // kết nối chân trig với chân 11 arduino
const int echoPin = 12; // kết nối chân echo với chân 12 arduino
int left_sensor_state;// biến lưu cảm biến hồng ngoại line trái
int s_sensor_state; // biến lưu cảm biến hồng ngoại line giữa
int right_sensor_state;// biến lưu cảm biến hồng ngoại line phải
long duration; //
int distance; // biến khoảng cách
void setup() {
pinMode(L_S, INPUT); // chân cảm biến khai báo là đầu vào
pinMode(R_S, INPUT);
pinMode(S_S, INPUT);
xxi
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(motorAspeed, OUTPUT);
pinMode(motorBspeed, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
analogWrite(motorAspeed, 110); // tốc độ động cơ a ban đầu 120 ( 0 - 255)
analogWrite(motorBspeed, 110);// tốc độ động cơ b ban đầu 120 ( 0 - 255)
delay(2000);
}
4.2. Chương trình cho xe chạy theo line
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
left_sensor_state = digitalRead(L_S);
s_sensor_state = digitalRead(S_S);
right_sensor_state = digitalRead(R_S);
xxii
forword(); // đi tiến
}
xxiii
digitalWrite (motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite (motorB1, LOW);
digitalWrite(motorB2, LOW);
delay(300);
xxiv
digitalWrite(motorB2, LOW);
delay(550);
digitalWrite (motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite (motorB1, LOW);
digitalWrite(motorB2, LOW);
delay(200);
///////////////////
digitalWrite (motorA1, LOW); //cho xe robot đi thẳng 1 đoạn
digitalWrite(motorA2, HIGH);
digitalWrite (motorB1, HIGH);
digitalWrite(motorB2, LOW);
delay(600);
digitalWrite (motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite (motorB1, LOW);
digitalWrite(motorB2, LOW);
delay(200);
////////////////////////
digitalWrite (motorA1, LOW); //cho xe robot xoay phải 1 đoạn
digitalWrite(motorA2, HIGH);
digitalWrite (motorB1, LOW);
digitalWrite(motorB2, LOW);
delay(500);
digitalWrite (motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite (motorB1, LOW);
digitalWrite(motorB2, LOW);
delay(200);
xxv
digitalWrite (motorA1, LOW); //cho xe robot đi thẳng 1
digitalWrite(motorA2, HIGH);
digitalWrite (motorB1, HIGH);
digitalWrite(motorB2, LOW);
left_sensor_state = digitalRead(L_S);
s_sensor_state = digitalRead(S_S);
right_sensor_state = digitalRead(R_S);
Serial.println("in the first while");
}
}
}
4.4. Chương trình cho xe di chuyển
void forword() { // chương trình con xe robot đi tiến
xxvii
CHƯƠNG 5: KẾT QUẢ THỰC HIỆN
xxviii