Keyword: Autonomous vehicle, ultrasonic sensor, microcontroller Title: Design of an autonomous vehicle with obstacle avoidance using ultrasonic sensors TÓM TẮT Đề tài "Thiết kế xe tự
Trang 1TRƯỜNG ĐẠI HỌC CẦN THƠ
DÙNG CẢM BIẾN SIÊU ÂM
Giảng viên hướng dẫn : Thầy………
Sinh viên thực hiện : Lê Nhật Em
Cần thơ: 10/2024
Trang 2LỜI CẢM ƠN
“Để hoàn thành Bài báo cáo học phần này, nhóm em xin gửi lời cảm ơn chân thành đến:
Do thời gian làm báo cáo có hạn cũng như những hạn chế về kiến thức, trong bài chắc chắn sẽ không tránh khỏi những thiếu sót Rất mong nhận được sự nhận xét, đóng góp ý kiến từ phía Thầy để bài làm của nhóm em được hoàn thiện hơn
Lời cuối cùng, em xin kính chúc thầy nhiều sức khỏe, thành công và hạnh phúc!”
Em xin chân thành cảm ơn!
Sinh viên thực hiện
Lê Nhật Em
Trang 3MỤC LỤC
Đồ án thiết kế hệ thống cơ điện tử_KC331
THIẾT KẾ XE TỰ HÀNH TRÁNH VẬT CẢN DÙNG CẢM BIẾN SIÊU ÂM 5
I GIỚI THIỆU 6
II PHƯƠNG PHÁP THỰC HIỆN 6
1 Tổng quan về hệ thống 6
2 Tổng quan về thiết bị sử dụng 7
2.1 Vi xử lý Arduino Uno 7
2.2 Cảm biến siêu âm HCSR04 8
2.3 Mạch cầu H (L298N) 10
2.4 Động cơ (DC motor 12V) 11
2.5 Mạch hạ áp DC - DC 12
3 Thiết kế hệ thống 13
3.1 Thiết kế phần cứng 13
3.2 Thiết kế phần mềm 15
3.3 Thiết kế mô hình 20
III KẾT QUẢ VÀ THẢO LUẬN 21
IV KẾT LUẬN VÀ ĐỀ NGHỊ 21
Trang 4
DANH MỤC BẢNG VÀ HÌNH
Hình 1: Hình 1: Vi xử lý Arduino Uno Bảng 1: Các thống số kỹ thuật của arduino:
Hình 2: Sơ đồ chi tiết của Arduino Uno Bảng 2: Các thống số kỹ thuật của cảm biến:
Hình 4: Các chân kết nối của cảm biến Bảng 4: Các thống số kỹ thuật của động cơ bơm 12V -
Hình 10: Sơ đồ khối của hệ thống
Hình 11: Sơ đồ nguyên lí của hệ thống
Hình 12: Lưu đồ của hệ thống
Hình 13: Mô hình thực tế của hệ thống
Trang 5on applying sensors and control systems to build autonomous vehicles, aiming to minimize human intervention and increase safety in complex environments The project's outcomes will pave the way for applications in various fields, such as mobile robotics, transportation technology, and smart devices
Keyword: Autonomous vehicle, ultrasonic sensor, microcontroller
Title: Design of an autonomous vehicle with obstacle avoidance using ultrasonic sensors
TÓM TẮT
Đề tài "Thiết kế xe tự hành tránh vật cản dùng cảm biến siêu âm" nhằm nghiên cứu và phát triển một hệ thống xe tự hành có khả năng phát hiện và né tránh vật cản, thích hợp cho các ứng dụng trong môi trường tự động hóa và robot Xe sử dụng cảm biến siêu âm HCSR04 để
đo khoảng cách đến vật cản, kết hợp với mạch driver L298N để điều khiển động cơ DC motor được điều khiển bởi vi điều khiển Arduino Xe có khả năng tự động di chuyển và tránh vật cản được phát hiện bởi cảm biến siêu âm, việc điều hướng di chuyển của xe nhờ thay đổi tốc độ quay của các bánh xe để thực hiện rẽ Dự án này muốn hướng đến trong việc ứng dụng các cảm biến và hệ thống điều khiển để xây dựng các phương tiện tự động, góp phần giảm thiểu sự can thiệp của con người và tăng tính an toàn khi vận hành trong môi trường phức tạp Kết quả của dự án sẽ mở ra khả năng ứng dụng trong nhiều lĩnh vực như robot di động, công nghệ vận tải, và thiết bị thông minh
Từ khóa: Xe tự hành, cảm biến siêu âm, vi điều khiển
Tiêu đề: Thiết kế xe tự hành tránh vật cản dùng cảm biến siêu âm
1 Sinh viên lớp TN20S3A2, Mã số SV:B2012496, Số ĐT: 0XXX XXX XXX , email: emb2012496@student.ctu.edu.vn
Trang 6I GIỚI THIỆU
Cách mạng công nghiệp 4.0 mang lại sự thay đổi mạnh mẽ cho lĩnh vực điều khiển
tự động Đề tài “Thiết kế xe tự hành tránh vật cản dùng cảm biến siêu âm” là một
phần quan trọng trong sự phát triển của công nghệ điều khiển và tự động hóa Sử dụng cảm biến siêu âm HCSR04 để phát hiện vật cản và điều khiển động cơ thông qua mạch driver L298N, đề tài mang đến nhiều lợi ích rõ rệt Trước hết, hệ thống giúp tự động hóa việc tránh vật cản một cách linh hoạt, giúp xe có thể di chuyển hiệu quả và an toàn trong nhiều tình huống Thứ hai, việc sử dụng các linh kiện phần cứng
mã nguồn mở như Arduino giúp giảm chi phí phát triển và cài đặt, đồng thời tăng tính ứng dụng trong giáo dục và nghiên cứu Đề tài này không chỉ có tiềm năng áp dụng rộng rãi trong lĩnh vực robot di động mà còn đóng góp tích cực vào quá trình phát triển các hệ thống điều khiển tự động
Đề tài lấy cảm hứng từ nhu cầu thực tiễn trong phát triển các hệ thống xe tự hành hiện đại Mục tiêu của đề tài là phát triển một hệ thống tự động hóa để xe có thể tự điều hướng và tránh vật cản bằng cách thu thập dữ liệu từ cảm biến siêu âm và điều khiển các động cơ một cách chính xác và đáng tin cậy
1 Tổng quan về hệ thống
Về mục tiêu chính: Xây dựng hệ thống xe tự hành có khả năng di chuyển tự động
và tránh vật cản Hệ thống này hướng tới ứng dụng trong các lĩnh vực tự động hóa,
robot di động Về các thành phần chính: Vi điều khiển (Arduino): Là trung tâm xử
lý, nhận dữ liệu từ các cảm biến và điều khiển động cơ Cảm biến siêu âm (HCSR04):
Đo khoảng cách giữa xe và vật cản, giúp xe nhận biết chướng ngại vật phía trước và
gửi dữ liệu về vi điều khiển để xử lý Mạch driver (L298N): Điều khiển động cơ của
xe, giúp xe tiến, lùi và thực hiện các thao tác rẽ khi cần Động cơ (DC motor): Giúp
xe di chuyển, thay đổi hướng thông qua điều chỉnh tốc độ quay của các bánh xe.Về
khả năng điều khiển: Xe có thể tự động di chuyển tiến về phía trước Khi gặp vật
cản trong khoảng cách 5 cm, xe sẽ lùi lại và rẽ phải Nếu vẫn gặp vật cản, xe tiếp tục
rẽ trái để tìm đường mới Về lợi ích: Hệ thống giúp xe di chuyển một cách tự động
và tránh va chạm, tăng cường tính an toàn khi hoạt động trong các môi trường phức tạp Việc ứng dụng cảm biến và hệ thống điều khiển tự động này mở ra tiềm năng lớn
trong các lĩnh vực giao thông thông minh và robot.Về công nghệ và mô hình: Sử
dụng cảm biến siêu âm HCSR04 cùng với mạch điều khiển động cơ L298N, hệ thống đảm bảo độ chính xác và tin cậy trong vận hành Mô hình do cá nhân nghiên cứu, thiết kế và triển khai
Trang 72 Tổng quan về thiết bị sử dụng
2.1 Vi xử lý Arduino Uno
Arduino [1] là một bo mạch vi điều khiển do một nhóm
giáo sư và sinh viên nước Ý thiết kế và đưa ra đầu tiên
vào năm 2005 Mạch Arduino được sử dụng để cảm nhận
và điều khiển nhiều đối tượng khác nhau Nó có thể thực
hiện nhiều nhiệm vụ lấy tín hiệu từ cảm biến đến điều
khiển đèn, động cơ, và nhiều đối tượng khác Ngoài ra
mạch còn có khả năng liên kết với nhiều module khác
nhau như: module đọc thẻ từ, ethernet shield, sim900A,
v.v…để tăng khả ứng dụng của mạch.Phần cứng bao gồm
một board mạch nguồn mở được thiết kế trên nền tảng vi
xử lý AVR Atmel 8bit, hoặc ARM, Atmel 32-bit, Hiện
phần cứng của Arduino có tất cả 6 phiên bản, Tuy nhiên,
phiên bản thường được sử dụng nhiều nhất là Arduino
Uno và Arduino Mega Phần mềm để lập trình cho mạch
Hình 2: Sơ đồ chi tiết của Arduino Uno
Trang 8Bảng 1: Các thông số kỹ thuật của Arduino Uno:
2.2 Cảm biến siêu âm HCSR04
HC-SR04 [2] là cảm biến siêu âm chủ yếu được dùng để xác định khoảng cách của
đối tượng mục tiêu Nó đo khoảng cách chính xác bằng công nghệ không tiếp xúc
(không tiếp xúc giữa cảm biến và vật thể) Với các module cảm biến siêu âm
HC-SR04 được ứng dụng nhiều nhất trong các bài toán đo khoảng cách vật từ xa Phạm
vi đo ngắn, trong khoảng 2-400cm Một số ứng dụng hay dùng module cảm biến siêu
âm HCSR04 mà chúng ta thường thấy như: Dùng đo mực chất lỏng trong chai, hộp
vàd phát hiện vật cản trên đường đi của robot…
Cảm biến bao gồm: Bộ phát (Trig) và bộ thu (Echo)
là hai bộ phận chính thực hiện công việc thu và phát
tín hiệu của cảm biến Bộ phát chuyển đổi tín hiệu
điện thành sóng siêu âm, còn bộ thu chuyển đổi tín
hiệu siêu âm đó trở lại thành tín hiệu điện
Khi hoạt động, mô-đun phát sẽ phát ra một xung siêu
âm ngắn Xung này sẽ lan truyền qua không khí và
phản xạ lại khi gặp một vật cản Mô-đun nhận sẽ
nhận được xung phản xạ dựa vào thời gian này (thời
gian phát cho đến khi nhận lại từ phản xạ) kết hợp
với tốc độ truyền của âm thanh trong không khí
(khoảng 340m/s), cảm biến có thể tính toán được
Chân I/O digital 14 ( có 6 chân xuất xung PWM)
Dòng điện mỗi chân I/O 20 mA
Trang 9Bảng 2: Các thông số kỹ thuật của cảm biến siêu âm
Tín hiệu đầu ra Xung mức cao 5V, mức thấp 0V
Hình 4: Các chân kết nối của cảm biến
Trang 102.3 Mạch cầu H (L298N)
Mạch L298N [3] là một loại mạch điều khiển động cơ hai chiều được sử dụng phổ biến trong các ứng dụng điều khiển động cơ trong robot, máy móc tự động và các dự
án điện tử khác Mạch này cho phép điều khiển động cơ DC hai chiều hoặc một động
cơ step (bước) bằng cách cung cấp dòng điện lớn và chính xác từ nguồn cung cấp
ngoại vi
Mạch L298N thường đi kèm với hai cầu H (H-bridge)
độc lập, cho phép điều khiển động cơ theo cả hai hướng
(tiến và lùi) cũng như điều khiển tốc độ quay của động
cơ Nó cũng có khả năng chống ngược điện và chịu được
dòng điện cao, làm cho nó trở thành lựa chọn lý tưởng
cho việc điều khiển các động cơ có dòng điện lớn
Mạch L298N thường được điều khiển bằng cách sử dụng
tín hiệu từ một vi điều khiển Điều này cho phép người
dùng linh hoạt trong việc lập trình và điều khiển các động
Hình 5: Mạch L298N
Hình 6: Cấu tạo của mạch L298N
Trang 112.4 Động cơ (DC motor 12V)
Động cơ bơm DC servo giảm tốc 12V [4] Động cơ DC
servo giảm tốc loại 6 dây là một loại động cơ DC tích
hợp bộ giảm tốc nhằm tăng cường mô-men xoắn và cải
thiện khả năng điều khiển tốc độ, thường được sử dụng
trong các ứng dụng yêu cầu độ chính xác cao và lực
đẩy mạnh mẽ
Đặc điểm nổi bật của loại động cơ này là có 6 dây,
trong đó 2 dây dùng để cấp nguồn cho động cơ, và 4
dây còn lại dành cho bộ mã hóa encoder, giúp đo lường
chính xác vị trí và tốc độ quay của động cơ Nhờ có bộ
giảm tốc, động cơ có thể hoạt động ở tốc độ thấp nhưng
tạo ra lực mô-men lớn, giúp xe hoặc hệ thống di
chuyển một cách ổn định và mạnh mẽ ngay cả khi tải
nặng
Động cơ DC servo giảm tốc loại 6 dây thường được sử dụng trong các robot di động,
hệ thống tự động hóa và các thiết bị yêu cầu khả năng điều khiển vị trí, tốc độ chính
xác
Bảng 4: Các thống số kỹ thuật của động cơ bơm 12V - R385:
Trang 122.5 Mạch hạ áp DC - DC
Mạch hạ áp DC-DC [5] là một thành phần điện
tử quan trọng, được sử dụng để chuyển đổi điện
áp DC từ một mức cao xuống mức thấp hơn mà
vẫn duy trì hiệu suất cao và tính ổn định Mạch
này hoạt động dựa trên nguyên lý chuyển đổi
năng lượng điện từ, thường sử dụng các linh
kiện như transistor, diode, và cuộn cảm để điều
chỉnh điện áp đầu ra
Một số ứng dụng phổ biến của mạch hạ áp DC-DC bao gồm: Cung cấp nguồn cho các vi điều khiển, cảm biến, động cơ và các thiết bị điện tử khác cần nguồn điện ổn định với điện áp thấp hơn Mạch hạ áp DC-DC có thể hoạt động theo nhiều phương pháp khác nhau như buck converter, sử dụng cuộn cảm để giảm điện áp, hoặc linear regulator, dùng transistor để điều chỉnh điện áp ra
Bảng 5: Các thống số kỹ thuật của mạch hạ áp DC - DC
Điện áp đầu vào 3V đến 30V /DC
Điện áp đầu ra Điều chỉnh trong khoảng 1.5 đến 30V
Trang 133 Thiết kế hệ thống
3.1 Thiết kế phần cứng
3.1.1 Sơ đồ khối của hệ thống
❖ Mô tả sơ đồ khối:
- Bộ nguồn: Bộ nguồn cung cấp năng lượng vi xử lí trung tâm là Arduino đồng
thời cung cấp cho các thiết bị khác như: Cảm biến, động cơ, mạch điều khiển L298N…
- Bộ xử lí trung tâm: Arduino Uno có nhiệm vụ xử lí tín hiệu từ cảm biến siêu âm
xử lí các dữ liệu khoảng cách mà cảm biến thu thập được Qua đó để điều khiển hiển mạch cầu L298N
- Bộ đo lường: Cảm biến siêu âm có nhiệm vụ phát hiện vật cảm phía trước thông
qua hai chân phát (Trig) và chân thu (Echo) để thu thập số liệu và gửi về cho bộ
xử lí trung tâm (Arduino)
- Bộ điều khiển: L298N có nhiệm vụ điều khiển động cơ (xe tiến lên) và đảo chiều
động cơ (xe lùi lại) Hơn nữa, thông qua đó nó có thể điều chỉnh độ rộng xung để
điều khiển tốc độ khác nhau giữa hai động cơ trái và phải để giúp xe rẽ hướng dễ dàng
Hình 10: Sơ đồ khối của hệ thống
Mạch hạ áp
( L2596)
Trang 14
3.1.2 Sơ đồ nguyên lý
Hình 11: Sơ đồ nguyên lí của hệ thống
Trang 153.2 Thiết kế phần mềm
3.2.1 Lưu đồ của hệ thống
Giải thích lưu đồ:
Bắt đầu chương trình sẽ khởi tạo và thiết lập các chân (Đặt chế độ cho các chân
trigPin, echoPin, in1, in2, in3, in4, enA, enB) Khi cấp nguồn xe sẽ chạy thẳng và
cảm biến bắt đầu đo khoảng cách từ cảm biến siêu âm và kiểm tra khoảng cách > 10
cm? Nếu có (True) thì sẽ gọi hàm moveForward() để xe tiến tới và ngược lại nếu
không (False) thì gọi hàm moveBackward() để xe lùi trong 500 ms" và tiếp sau đó
gọi hàm turnRight() để xe rẽ phải trong 500 ms" Sau khi rẽ phải sẽ kiểm tra khoảng
Khoảng cách > 10cm?
Xe lùi lại trong 500ms và rẽ phải trong 500ms
Rẽ trái trong 500ms
Hình 12: Lưu đồ của hệ thống
Xe chạy thẳng về phía trước
Khoảng cách sau khi rẽ phải <= 10cm?
Xe di chuyển thẳng
Trang 16cách sau khi rẽ phải <= 10 cm? Nếu có (True) sẽ gọi hàm turnLeft() để xe rẽ trái
trong 500 ms Và ngược lại nếu không (False) xe sẽ tiếp tục di chuyển thẳng và sẽ bắt đầu lại vòng lặp
3.2.2 Đoạn code chương trình
// Khai báo các chân sử dụng cho cảm biến siêu âm
const int trigPin = 9; // Chân trig của cảm biến siêu âm HCSR04, phát xung siêu âm
const int echoPin = 10; // Chân echo của cảm biến siêu âm HCSR04, nhận phản xạ
từ vật cản
// Khai báo các chân điều khiển động cơ và mạch driver L298N
const int in1 = 5; // Điều khiển động cơ bên trái (IN1), dùng để quy định chiều quay const int in2 = 4; // Điều khiển động cơ bên trái (IN2), điều khiển cùng với in1 const int in3 = 3; // Điều khiển động cơ bên phải (IN3), dùng để quy định chiều quayconst int in4 = 2; // Điều khiển động cơ bên phải (IN4), điều khiển cùng với in3
const int enA = 6; // Chân ENA trên L298N, dùng để điều chỉnh tốc độ động cơ bên trái
const int enB = 7; // Chân ENB trên L298N, dùng để điều chỉnh tốc độ động cơ bên phải
long duration; // Biến lưu trữ thời gian xung siêu âm phản hồi
int distance; // Biến lưu trữ khoảng cách tính toán từ cảm biến siêu âm
void setup() {
pinMode(trigPin, OUTPUT); // Chân phát tín hiệu siêu âm
pinMode(echoPin, INPUT); // Chân nhận tín hiệu phản hồi từ siêu âm
// Thiết lập các chân điều khiển động cơ là OUTPUT
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
Trang 17Serial.println(distance); // Hiển thị khoảng cách đo được lên Serial Monitor
if (distance > 10) {
moveForward(); // Nếu không có vật cản, xe tiến
} else {
moveBackward(); // Nếu gặp vật cản, xe lùi lại
delay(500); // Lùi trong 500ms
turnRight(); // Sau đó rẽ phải
delay(500); // Rẽ phải trong 500ms
// Kiểm tra lại khoảng cách sau khi rẽ phải
distance = getDistance();
if (distance <= 10) {
turnLeft(); // Nếu vẫn gặp vật cản, rẽ trái
delay(500); // Rẽ trái trong 500ms
Trang 18digitalWrite(trigPin, LOW); // Đảm bảo tín hiệu trig bắt đầu ở mức thấp
delayMicroseconds(2); // Đợi 2 micro giây
digitalWrite(trigPin, HIGH); // Phát xung siêu âm
delayMicroseconds(10); // Giữ tín hiệu trong 10 micro giây
digitalWrite(trigPin, LOW); // Dừng tín hiệu siêu âm
duration = pulseIn(echoPin, HIGH); // Đo thời gian xung từ lúc phát đến lúc nhận phản xạ
return duration * 0.034 / 2; // Tính khoảng cách dựa trên thời gian phản hồi và tốc
analogWrite(enA, 255); // Tốc độ tối đa động cơ trái
// Động cơ bên phải quay theo chiều tiến
digitalWrite(in3, HIGH);