có sơ đồ nguyên lý, đồ khối và lưu đồ giải thuật và code đầy đủ cho mạch thiết kế ROBOT dò đường ...............................................................................................................................................................
Trang 1DANH MỤC CÁC HÌNH VẼ
Trang 3Vạch màu
CHƯƠNG 1 GIỚI THIỆU
1.1 Giới thiệu đề tài
1.1.1 Mô tả
Robot dò line là một tổng thể các module và arduino được kết hợp với nhau Mỗi thành phần gắn thêm có một vai trò nhất định với mục đích chung là điều khiển robot chạy đúng line định sẵn
1.1.2 Khả năng của thiết bị
• Tự vận hành:
• Robot tự động khi bật nguồn
• Robot dừng khi tắt hoặc hết nguồn
• Di chuyển theo line định sẵn:
• Chuyển hướng khi line chuyển hướng
• Chạy lùi khi di chuyển hết line
1.2 Sơ đồ khối hệ thống
Hình 1: Sơ đồ khối
• KHỐI NGUỒN:
Nguồn cung cấp 9 - 12 DC (sử dụng pin)
• KHỐI CẢM BIẾN DÒ ĐƯỜNG:
Trang 4Module hồng ngoại.
• KHỐI ĐIỀU KHIÊN ĐỘNG CƠ:
Module L298
• KHỐI ARDUINO:
Arduino nano
Trang 5CHƯƠNG 2 LỰA CHỌN LINH KIỆN
1.3 Khối arduino: (arduino nano)
Hình 2: Arduino nano (nguồn arduino.cc)
• Điện áp hoạt động: 5V DC
• Điện áp giới hạn: 20V DC
• Tần số: 16MHz
• Dòng tiêu thụ: 30mA
• Điện áp khuyên dùng: 7V – 12V DC
• Số chận Digital I/O: 14 (6 chân PWM)
• Số chân Analog: 8 (độ phân giải 10bit)
• Dòng mỗi chân: 40mA
• Bộ nhớ: 32KB
1.4 Khối cảm biến dò line:
Trang 6Hình 3: sơ đồ orcad khối cảm biến dò line (tự vẽ)
Hình 4: Sơ nguyên lý cảm biến hồng ngoại (nguồn muabanlinhkien.com)
Trang 7• NGUYÊN LÝ HOẠT ĐỘNG MODULE HỒNG NGOẠI:
Bước 1: LeD phát sẽ phát 1 tín hiệu ánh sáng hồng ngoại
Bước 2: Ánh sáng sẽ phản xạ trên đường mặt sàn
Bước 3: LeD thu sẽ hấp thụ tín hiệu từ ánh sáng hồng ngoại phản xạ
Bước 4: OPAMP so áp sẽ so sánh tín hiệu nhận được với mức điện áp cung cấp Nếu giá trị lớn hơn thì có nghĩa là đang ở nền trắng, nếu giá trị nhỏ hơn thì có nghĩa là đang ở line đen (đen, trắng do line quy ước)
1.5 Khối điều khiển động cơ: (module L298)
Hình 5: Module L298 (nguồn muabanlinhkien.com)
Bản chất của moteur là động cơ điện 1 chiều
Tín hiệu các ngõ ra của L298 cùng là tín hiệu điện áp, giá trị khác nhau
Sự chênh lệch áp của 2 ngõ ra trên cùng 1 động cơ sẽ tạo ra 1 dòng điện kích thích động quay
Ta có công thức:
Ta chỉ có thể thay đổi tốc độ động cơ bằng cách thay đổi I hay cụ thể là thay đổi sự chênh lệch áp giữa 2 đầu ra trên cùng 1 động cơ
Chênh lệch áp càng lớn động cơ quay càng nhanh
1.6 Lưu đồ giải thuật: (nhận tín hiệu từ LeD)Quy ước:
• X, Y, Z, T là giá trị điện áp 0V hoặc 5V được tính theo
mã nhị phân {0;1} từ phải sang trái của module hồng ngoại
• N là giá trị tổng thu được {X; Y; Z; T} {0; 1}
N {0; 1; ….; 15}
Trang 8Hình 6: Lưu đồ giải thuật.
S
N := N + 2
S
S
Đ Đ
N := 1
N := N + 4 Đ
X = 1
N :=0
Y = 1
Z = 1
N := N + 8 S
T = 1
Xuất N
Kết thúc
Đ
Trang 91.7 Bảng sự thật: (điều khiển động cơ bằng L298)
Quy ước: đen = 1, trắng = 0
Hình 7: Bảng sự thật.
Trang 10CHƯƠNG 3 THI CÔNG MẠCH
• Dựa vào các kết quả tính toán trên lý thuyết qua các bước vẽ mạch in ta tiến hành thi công mạch
• Mua linh kiện
• Thiết kế xe chạy
• Line di chuyển
• Lắp ráp
Trang 11CHƯƠNG 4 KẾT LUẬN
1.8 Ý nghĩa thực tế và hạn chế của đề tài
Robot là line là bước đầu tiên trong công cuộc tự động hoá ngành điều khiển tự động Có thể nói, cho dù thuộc ngành nào chăng nữa thì di chuyển là điều không thể thiếu trong công việc của mỗi cá nhân Con người mỗi ngày phải đi qua các tuyến đường lặp đi lặp lại như một nhu cầu tất yếu, và robot dò line ra đời để thay thế cho con người làm chuyện đó
1.9 Hướng phát triển của đề tài
Tương lai không xa, khi công nghệ VANET phát triển mạnh mẽ thì sự ra đời của xe buýt thông minh hay taxi tự động là điều không tránh khỏi Nguyên lý hoạt động của robot dò line lúc này sẽ góp phần không nhỏ vào thành công của các thế hệ sau nó Sắp xếp hàng hoá trong siêu thị, hay chỉ đơn giản để vui chơi giải trí thì robot dò line vẫn có thể đăng tên mình lên vị trí quán quân bảng xếp hạng
Trang 12TÀI LIỆU THAM KHẢO
Tiếng việt:
[1] Nguyễn Văn Nhờ, Giáo trình ĐIỆN TỬ CÔNG SUẤT, Nhà xuất bản Đại học quốc gia Tp.Hồ Chí Minh
[2] Nguyễn Tiến Thường, Giáo trình MẠCH ĐIỆN TỬ 1, Nhà xuất bản Đại học quốc gia Tp.Hồ Chí Minh
[3] Hình ảnhhttps://muabanlinhkien.com
Tiếng Anh:
[4] CCS manual nguồnhttps://www. ccs info.com
[5] Arduino nano nguồn https://www.arduino.cc/
Trang 13PHỤ LỤC A
#define inA1 6 //Định nghĩa chân in1 của động cơ A
#define inA2 7 //Định nghĩa chân in2 của động cơ A
#define inB1 8 //Định nghĩa chân in1 của động cơ B
#define inB2 9 //Định nghĩa chân in2 của động cơ B
#define linesens1 10 //Định nghĩa chân cảm biến line 1
#define linesens2 11 //Định nghĩa chân cảm biến line 2
#define linesens3 12 //Định nghĩa chân cảm biến line 3
#define linesens4 13 //Định nghĩa chân cảm biến line 4
void setup() {
Serial.begin(9600);
pinMode(inA1, OUTPUT);//Set chân in1 của dc A là output
pinMode(inA2, OUTPUT);//Set chân in2 của dc A là output
pinMode(inB1, OUTPUT);//Set chân in1 của dc B là output
pinMode(inB2, OUTPUT);//Set chân in2 của dc B là output
pinMode(linesens1, INPUT);//Set chân cảm biến 1 là input
pinMode(linesens2, INPUT);//Set chân cảm biến 2 là input
pinMode(linesens3, INPUT);//Set chân cảm biến 3 là input
pinMode(linesens4, INPUT);//Set chân cảm biến 4 là input
}
void loop() {
darkLineFollower (inA1, inA2, inB1, inB2, linesens1, linesens2, linesens3, linesens4);
//delayMicroseconds(1);
}
void darkLineFollower (byte inR1, byte inR2, byte inL1, byte inL2, byte sen1, byte sen2, byte sen3, byte sen4)
{
//Hàm điều khiển robot bám line màu tối
//inR1, inR2 và inL1, inL2 là các chân tín hiệu lần lượt điều khiển động cơ di chuyển bên phải và trái
//sen1 đến sen4 là chân nhận tín hiệu từ cảm biến hồng ngoại
switch (deviationDarkLine4Sensor (sen1, sen2, sen3, sen4))
{
case -1:
robotMover( inR1, inR2, inL1, inL2, 6);// rẽ phải
break;
case -2:
robotMover( inR1, inR2, inL1, inL2, 6);
Trang 14break;
case 1:
robotMover( inR1, inR2, inL1, inL2, 5);// rẽ trái
break;
case 2:
robotMover( inR1, inR2, inL1, inL2, 5);
break;
case 0:
robotMover( inR1, inR2, inL1, inL2, 1);// tiến thẳng
break;
case 3:
robotMover( inR1, inR2, inL1, inL2, 2);// lệch vạch thì lùi
break;
}
}
void robotMover (byte inR1, byte inR2, byte inL1, byte inL2, byte action) {
/*
inR1 inR2 là 2 chân tín hiệu động cơ bên phải
inL1 inL2 là 2 chân tín hiệu động cơ bên trái
action= 0 đứng yên
action =1 đi thẳng
action =2 lùi lại
action =3 quay trái
action =4 quay phải
action =5 rẽ trái
action =6 rẽ phải
*/
switch (action)
{
case 0:// không di chuyển
motorControlNoSpeed(inR1, inR2, 0);
motorControlNoSpeed(inL1, inL2, 0);
break;
case 1://đi thẳng
motorControlNoSpeed(inR1, inR2, 1);
Trang 15motorControlNoSpeed(inL1, inL2, 2);
break;
case 3:// quay trái
motorControlNoSpeed(inR1, inR2, 2);
motorControlNoSpeed(inL1, inL2, 1);
break;
case 4:// quay phải
motorControlNoSpeed(inR1, inR2, 1);
motorControlNoSpeed(inL1, inL2, 2);
break;
case 5:// rẽ trái
motorControlNoSpeed(inR1, inR2, 1);
motorControlNoSpeed(inL1, inL2, 0);
break;
case 6:// rẽ phải
motorControlNoSpeed(inR1, inR2, 0);
motorControlNoSpeed(inL1, inL2, 1);
break;
default:
action = 0;
}
}
void motorControlNoSpeed (byte in1, byte in2, byte direct)
{
// in1 and in2 are 2 signal pins to control the motor
// en is the enable pin
// the defauspeed is the highest
// direct includes:
// 0:Stop
// 1:Move on 1 direct
// 2:Move on another direct
switch (direct)
{
case 0:// Dừng không quay
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
break;
case 1:// Quay chiều thứ 1
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
Trang 16break;
case 2:// Quay chiều thứ 2
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
break;
//default:
}
}
boolean IFSensor (byte PinNumb)
{
//0 sáng
//1 tối
return(digitalRead (PinNumb));
}
int deviationDarkLine4Sensor (int PinNumb1, int PinNumb2, int PinNumb3, int PinNumb4)
{
int left = 0; //biến kiểm tra lệch trái
int right = 0; // biến kiểm tra lệch phải
left = IFSensor (PinNumb1)+IFSensor (PinNumb2); //kiểm tra mấy cảm biến trái ở trong màu đen
right= IFSensor (PinNumb3)+IFSensor (PinNumb4); //kiểm tra mấy cảm biến phải
ở trong màu đen
Serial.print("left=");
Serial.println(left);
Serial.print("right=");
Serial.println(right);
if ((left!=0) || (right!=0))return left - right;
else return 3;
/*
Kết quả trả về là 0 là không lệch
Âm là lệch trái
Dương là lệch phải
*/
}
1.2%