2 Bánh xeKhối điều khiển động cơ Khối điều khiển động cơ Khối Arduino Khối Arduino Khối Nguồn Khối cảm biến dò đường Khối cảm biến dò đường Vạch màu CHƯƠNG 2.. GIỚI THIỆU 1.1 Giới thiệ
Trang 1DANH MỤC CÁC HÌNH VẼ
Hình 1: Sơ đồ khối 2
Hình 2: Arduino nano (nguồn arduino.cc) 4
Hình 3: sơ đồ orcad khối cảm biến dò line (tự vẽ) 5
Hình 4: Sơ nguyên lý cảm biến hồng ngoại (nguồn muabanlinhkien.com) 5
Hình 5: Module L298 (nguồn muabanlinhkien.com) 6
Hình 6: Lưu đồ giải thuật 7
Hình 7: Bảng sự thật 8
Trang 2DANH MỤC CÁC TỪ VIẾT TẮTMỤC LỤC IV
CHƯƠNG 1 GIỚI THIỆU 2
1.1 GIỚI THIỆU ĐỀ TÀI 2
1.1.1 Mô tả 2
1.1.2 Khả năng của thiết bị 2
1.2 SƠ ĐỒ KHỐI HỆ THỐNG 2
CHƯƠNG 2 LỰA CHỌN LINH KIỆN 3
2.1 KHỐI ARDUINO: ( ARDUINO NANO ) 3
2.2 KHỐI CẢM BIẾN DÒ LINE: 4
2.3 KHỐI ĐIỀU KHIỂN ĐỘNG CƠ: ( MODULE L298) 5
2.4 LƯU ĐỒ GIẢI THUẬT: 6
2.5 BẢNG SỰ THẬT: 7
CHƯƠNG 3 THI CÔNG MẠCH 7
CHƯƠNG 4 KẾT LUẬN 8
4.1 Ý NGHĨA THỰC TẾ VÀ HẠN CHẾ CỦA ĐỀ TÀI 8
4.2 HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 8
TÀI LIỆU THAM KHẢO 9 PHỤ LỤC A 10
Trang 3CHƯƠNG 1.
Trang 42 Bánh xe
Khối điều khiển động cơ
Khối điều khiển động cơ
Khối Arduino
Khối Arduino
Khối Nguồn
Khối cảm
biến
dò đường
Khối cảm
biến
dò đường
Vạch màu
CHƯƠNG 2 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
Nguồn cung cấp 9 - 12 DC (sử dụng pin)
Module hồng ngoại
Trang 5 KHỐI ĐIỀU KHIÊN ĐỘNG CƠ:
Module L298
Arduino mega
Trang 6CHƯƠNG 3 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 7Hì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 8 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 9Hì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 101.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 11CHƯƠNG 4 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 12CHƯƠNG 5 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 13TÀ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 14PHỤ 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 15break;
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);
motorControlNoSpeed(inL1, inL2, 1);
break;
Trang 16motorControlNoSpeed(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 17break;
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%