CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI1.1 Mục tiêu của đề tài Mục tiêu chính của đề tài này là nghiên cứu và phát triển ứng dụng của mạch nano trong lĩnh vực vi điều khiển và tự lái cho xe cánh ta
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
BÁO CÁO
VI ĐIỀU KHIỂN
22IT.EB022 Hoàng Tiến Đạt – 22IT.EB012 Mạc Như Hữu – 22IT.EB037 Phan Bảo Khang – 22IT.EB038
Lê Quốc Hưng – 22IT.EB034
22IT.EB019 Trần Minh Quốc – 22IT.EB066
Hồ Viết Quý – 22IT.EB067 Uông Ngọc Thành – 22IT.EB071 Nguyễn Hữu Thịnh – 22IT.EB074
Giảng viên hướng dẫn: ThS Phan Thị Lan Anh
Trang 2NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 3
MỤC LỤC
LỜI CẢM ƠN i
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ii
MỤC LỤC iii
DANH MỤC HÌNH ẢNH iv
MỞ ĐẦU 1
1 Bố cục báo cáo 1
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 2
1.1 Mục tiêu của đề tài 2
1.2 Lý do và ý nghĩa 2
1.3 Phạm vi nghiên cứu 2
1.4 Giới thiệu các công cụ xây dựng 2
1.4.1 Giới thiệu về Arduino nano 2
1.4.2 Giới thiệu về Arduino IDE 3
CHƯƠNG 2 PHÂN TÍCH VÀ TRIỂN KHAI 5
2.1 Xe dò line (tự hành) 5
2.1.1 Sơ đồ mạch 5
2.1.2 Lưu đồ thuật toán 6
2.1.3 Triển khai code 6
2.2 Xe điều khiển bluetooth 11
2.2.1 Sơ đồ mạch 11
2.2.2 Lưu đồ thuật toán 12
2.2.3 Triển khai code 15
Trang 4DANH MỤC HÌNH ẢNH
Hình 2-1 Ảnh sơ đồ mạch xe dò line (tự hành) 5
Hình 2-2 Lưu đồ thuật toán xe dò line 6
Hình 2-3 Sơ đồ mạch xe điều khiển bluetooth 11
Hình 2-4 Lưu đồ thuật toán xe điều khiển bằng bluetooth 15
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1 Mục tiêu của đề tài
Mục tiêu chính của đề tài này là nghiên cứu và phát triển ứng dụng của mạch nano trong lĩnh vực vi điều khiển và tự lái cho xe cánh tay robot Đề tài sẽ tập trung vào việc xây dựng các hệ thống điều khiển tự động thông qua sự kết hợp giữa các công nghệ vi điều khiển, xe tự hành và sử dụng mạch nano để nâng cao hiệu suất và tính linh hoạt của robot.
1.2 Lý do và ý nghĩa
- Với sự phát triển nhanh chóng của công nghệ, vi điều khiển và xe tự hành đang trở thành xu hướng tiềm năng trong ngành công nghiệp robot hóa Việc sử dụng mạch nano có thể giúp cải thiện hiệu suất và đáng tin cậy của hệ thống điều khiển, đồng thời tối ưu hóa hoạt động của robot và xe tự hành
- Mạch nano có khả năng tích hợp các chức năng phức tạp trong một không gian nhỏ gọn, mang lại lợi ích lớn cho việc phát triển robot và xe tự hành Sự kết hợp giữa công nghệ mạch nano và vi điều khiển giúp tăng cường khả năng xử lý, tương tác và đáp ứng nhanh của hệ thống
- Nghiên cứu này có ý nghĩa quan trọng trong việc ứng dụng robot và xe tự hành vào nhiều lĩnh vực, bao gồm sản xuất công nghiệp, y tế, nông nghiệp, giao thông vận tải và nhiều lĩnh vực khác Việc phát triển các hệ thống điều khiển thông minh và linh hoạt sẽ mang lại hiệu suất cao, tiết kiệm chi phí và tăng cường an toàn trong các ứng dụng thực tế.
1.4 Giới thiệu các công cụ xây dựng
1.4.1 Giới thiệu về Arduino nano
Arduino Nano là một bảng mạch điện tử có kích thước nhỏ chỉ bằng 1 nửa đồng
xu gấp lại, được phát triển dựa trên dựa trên ATmega328P phát hành vào năm 2008 và khá thân thiện với breadboard Arduino Nano cung cấp các kết nối và thông số kỹ thuật tương tự như bảng điện tử Arduino Uno nhưng với kích thước nhỏ gọn hơn rất nhiều Arduino Nano sở hữu chức năng tương tự như Arduino Duemilanove hay
Trang 7Arduino UNO Sự khác biệt điển hình giữa chúng chính là dạng mạch Arduino Nano pinout được tích hợp vi điều khiển ATmega328P giống với Arduino UNO nhưng bảng UNO lại có dạng Plastic Dual-In-line Package PDIP với tổng số chân là 30, trong khi bảng Nano có sẵn trong Plastic Quad Flat Pack với 32 chân Điểm khác biệt tiếp theo
đó là bảng Nano có tới 8 cổng ADC còn bảng UNO có 6 cổng ADC Bên cạnh đó, bảng Nano không có giác nguồn DC như các bo mạch Arduino thông thường khác, thay vào đó chúng được trang bị cổng mini-USB cho phép vừa sử dụng trong lập trình vừa làm bộ giám sát nối tiếp.
Ưu điểm:
- Kích thước nhỏ gọn đến mức tối thiểu hỗ trợ Nano dễ dàng lắp đặt.
- Có thể linh hoạt lựa chọn công suất lớn nhất với hiệu điện thế của nó.
- Dễ dàng kết nối trực tiếp với các thiết bị máy tính.
- Lập trình đơn giản tiện dụng
Nhược điểm:
- Có giá thành hơi cao.
1.4.2 Giới thiệu về Arduino IDE
Arduino IDE là một phần mềm mã nguồn mở chủ yếu được sử dụng để viết và biên dịch mã vào module Arduino Đây là một phần mềm Arduino chính thức, giúp cho việc biên dịch mã trở nên dễ dàng mà ngay cả một người bình thường không có kiến thức kỹ thuật cũng có thể làm được Nó có các phiên bản cho các hệ điều hành như MAC, Windows, Linux và chạy trên nền tảng Java đi kèm với các chức năng và lệnh có sẵn đóng vai trò quan trọng để gỡ lỗi, chỉnh sửa và biên dịch mã trong môi trường Có rất nhiều các module Arduino như Arduino Uno, Arduino Mega, Arduino Leonardo, Arduino Micro và nhiều module khác Mỗi module chứa một bộ vi điều khiển trên bo mạch được lập trình và chấp nhận thông tin dưới dạng mã Mã chính, còn được gọi là sketch, được tạo trên nền tảng IDE sẽ tạo ra một file Hex, sau đó được chuyển và tải lên trong bộ điều khiển trên bo Môi trường IDE chủ yếu chứa hai phần
cơ bản: Trình chỉnh sửa và Trình biên dịch, phần đầu sử dụng để viết mã được yêu cầu
và phần sau được sử dụng để biên dịch và tải mã lên module Arduino Môi trường này
hỗ trợ cả ngôn ngữ C và C ++.
Ưu điểm:
- Phần mềm lập trình mã nguồn mở miễn phí.
- Hỗ trợ đa nền tảng như Windows, MacOS, Linux.
- Giao diện đơn giản, dễ sử dụng.
- Thư viện hỗ trợ phong phú.
- Cộng đồng hỗ trợ cực lớn đến từ cộng đồng Arduino có sẵn từ trước.
Trang 8Nhược điểm:
- Không hỗ trợ nhiều ngôn ngữ lập trình khác nhau.
- Không có tính năng kiểm tra lỗi tốt.
Trang 9CHƯƠNG 2 PHÂN TÍCH VÀ TRIỂN KHAI
2.1 Xe dò line (tự hành)
2.1.1 Sơ đồ mạch
Hình 2-1 Ảnh sơ đồ mạch xe dò line (tự hành)
5
Trang 102.1.2 Lưu đồ thuật toán
Hình 2-2 Lưu đồ thuật toán xe dò line
2.1.3 Triển khai code
// #include <Servo.h>
// Servo quay_truc;
// Servo nang_duoi;
// Servo tay_kep;
//const int motorA1 = 14;
//const int motorA2 = 12;
//const int motorB1 = 26;
//const int motorB2 = 27;
// int Robot_stop_distance = 10;// Khoa+ng cách phát hiện vật ca+n
// //Kế0t nố0i SRF 04
// const int trigPin = 3; // kế0t nố0i chân trig với chân 12 arduino// const int echoPin = 2; // kế0t nố0i chân echo với chân 13 arduino//const int COI = 2;
const int motorA1 = ;3
const int motorA2 = ;5
6
Trang 11const int motorB2 = ;9
//const int Pin_ss1 = 2;
//const int Pin_ss2 = 3;
//const int Pin_ss3 = 16;
//const int Pin_ss4 = 17;
//const int Pin_ss5 = 5;
const int Pin_ss1 = A4;
const int Pin_ss2 = A3;
const int Pin_ss3 = A2;
const int Pin_ss4 = A1;
const int Pin_ss5 = A0;
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(Pin_ss1, INPUT); //Set chân ca+m biế0n 1 là input
pinMode(Pin_ss2, INPUT); //Set chân ca+m biế0n 2 là input
pinMode(Pin_ss3, INPUT); //Set chân ca+m biế0n 3 là input
pinMode(Pin_ss4, INPUT); //Set chân ca+m biế0n 4 là input
pinMode(Pin_ss5, INPUT); //Set chân ca+m biế0n 4 là input
Trang 16// if ((ss1 == 1) && (ss2 == 1) && (ss3 == 1) && (ss4 == 1) && (ss5 == 0)) {
Trang 17// if ((ss1 == 0) && (ss2 == 1) && (ss3 == 1) && (ss4 == 1) && (ss5 == 1)) {
Trang 18if ((ss1 == ) && (ss2 == ) && (ss3 == ) && (ss4 == ) && (ss5 == 0 0 0 0 1)){
Trang 21điế[u chỉ+nh thống số0 này sao cho phù hợp với thực tế0)
// if (((ss1 == 0) && (ss2 == 0) && (ss3 == 0) && (ss4 == 0) && (ss5
== 1)) || ((ss1 == 0) && (ss2 == 0) && (ss3 == 1) && (ss4 == 0) && (ss5
17
Trang 242.2.2 Lưu đồ thuật toán
21
Trang 25Hình 2-4 Lưu đồ thuật toán xe điều khiển bằng bluetooth
2.2.3 Triển khai code
Trang 26const int motorA1 = 3 // Pin 6 of L298.
const int motorA2 = 5 // Pin 7 of L298
const int motorB1 = 6 // Pin 9 of L298
const int motorB2 = 9 // Pin 10 of L298
const int buzzer = 4 ;
const int led = ; 2
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
Serial begin (9600);
25
Trang 27Serial println ("OK");
}
voidloop() {
if(Serial available ())
{
state = Serial.read();
Serial println (state);
Trang 28//else if (state == 'u') {
analogWrite(motorB1, vSpeed);
analogWrite(motorA1, vSpeed);
analogWrite(motorA2, 0);
analogWrite(motorB2, 0);
}
27
Trang 29analogWrite(motorB2, vSpeed);
analogWrite(motorA2, vSpeed);}
Trang 30if(DOF_C==1) {
step_quay_truc++;delay( );5
if(step_quay_truc>120) step_quay_truc=120; quay_truc write (step_quay_truc);
}
else {
analogWrite(motorA1, 0);
analogWrite(motorA2, vSpeed);
analogWrite(motorB1, vSpeed);
Trang 31}
}
30