Trang 1/32
ĐỒ ÁN 2
ROBOT LAU NHÀ
Trang 2/32
MỤC LỤC
Trang 3/32
DANH MỤC CÁC HÌNH VẼ
Trang 4/32
DANH MỤC CÁC BẢNG BIỂU
Trang 5/32
DANH MỤC CÁC TỪ VIẾT TẮT
PIC
Programmable Interface Controller
LCD
Liquid Crystal Display
PWM
Pulse-width Modulation
CMOS
Complementary Metal-Oxide-Semiconductor
VCC
Voltage Collector Collector
GND
Ground
IC
Integrated Circuit
ENA
Enable A
ENB
Enable B
VEE
Contrast Voltage
RS
Register Select
RW
Read/Write
LED
Light-emitting Diode
CCP
Compare/Capture/PWM
Trang 6/32
CHƯƠNG 1.
-
GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
1.1 Giới thiệu
Quá trình công nghiệp 4.0 đang phát tri ển mạnh mẽ trong n ền công
nghiệp hóa của nước ta. Các mô hình tự động hóa hiện nay đang được đ ầu
tư và phát triển. Trong đó, Robot là một mô hình tự động rất được quan
-
tâm do ưu điểm mang nhiều tính ứng dụng.
Đề tài hướng đến nghiên cứu giải thuật cho một Robot có thể di chuy ển
thực thi đúng nhiệm vụ đề ra.
1.1.1 Yêu cầu đặt ra
Giải thuật cho Robot có thể di chuyển trong phạm vi định s ẵn.
-
1.1.2 Hướng giải quyết
Sử dụng động cơ để Robot có thể di chuyển. Dùng các cảm biến đ ể xác
định các ô gạch và né vật cản.
-
Vẽ lưu đồ giải thuật và lập trình. Dùng trình biên dịch PIC C Compiler và
thi công phần cứng mô tả giải thuật cho Robot
-
1.2 Nguyên lý chung
Robot di chuyển thẳng trong các dãy ô gạch, có th ể tự căn ch ỉnh đ ể không
bị lệch sang dãy ô gạch khác. Khi phát hiện thấy tường là vật cản, Robot
xử lý tránh đụng tường và di chuyển sang dãy khác ti ếp tục th ực thi công
việc.
Hình 1-1: Mô hình di chuyển của Robot.
Trang 7/32
Robot được gắn thêm một LCD nhằm theo dõi các thông s ố khi Robot th ực
-
thi công việc. Điều này giúp ta kiểm tra được các sai sót của Robot trong
quá trình làm việc.
-
Trang 8/32
CHƯƠNG 2.
-
TỔNG QUAN VỀ CÁC LINH KIỆN
2.1 PIC16F877A
Vi điều khiển PIC16F877A là một vi điều khiển được chế tạo v ới công
nghệ CMOS.
Hình 2-1: PIC16F877A.
-
Vi điều khiển PIC16F877A có 40 chân.
Hình 2-2: Sơ đồ chân PIC16F877A.
-
Bảng sau mô tả các đặc tính cơ bản của PIC16F877A:
Trang 9/32
Bảng 2-1: Đặc tính của PIC16F877A.
Tần số hoạt động
Bộ nhớ Flash
EEPROM
Bộ nhớ dữ liệu
Các ports I/O
Timers
PWM
Điện áp hoạt động
20 MHz
8 KB
256 KB
368 KB
5 ports A, B, C, D, E
3 chế độ Timer
2 chân PWM
5 Vdc
2.2 Cảm biến dò line 5 kênh
Cảm biến dò line được dùng để xác định các ô gạch mà Robot đã đi qua.
Hình 2-3: Cảm biến dò line 5 kênh.
-
Sơ đồ chân:
•
•
•
•
•
•
•
•
•
-
VCC: Chân cấp nguồn.
GND: Chân nối đất.
S1: Chân tín hiệu của cảm biến kênh dò line 1.
S2: Chân tín hiệu của cảm biến kênh dò line 2.
S3: Chân tín hiệu của cảm biến kênh dò line 3.
S4: Chân tín hiệu của cảm biến kênh dò line 4.
S5: Chân tín hiệu của cảm biến kênh dò line 5.
CLP: Chân tín hiệu của công tắc hành trình.
NEAR: Chân tín hiệu của cảm biến hồng ngoại.
2.3 Cảm biến siêu âm HC-SR04
Cảm biến siêu âm được dùng để phát hiện vật cản ở phía trước và bên
trái của Robot, nhằm giúp Robot tránh được vật cản.
Trang 10/32
Hình 2-4: Cảm biến siêu âm HC-SR04.
-
-
Sơ đồ chân:
• VCC: Chân cấp nguồn.
• TRIG: Chân ngõ vào phát xung tín hiệu.
• ECHO: Chân ngõ ra nhận xung tín hiệu được trả về.
• GND: Chân nối đất.
2.4 Mạch điều khiển động cơ L298
Mạch có chức năng điều khiển tốc độ động cơ, đáp ứng cho s ự di chuy ển
của Robot. Mạch sử dụng nguồn cấp 12V ở ngõ vào, sau đó qua m ột IC ổn
áp sẽ cấp 5V cho hai động cơ ở ngõ ra của mạch.
Hình 2-5: Mạch điều khiển động cơ L298.
-
Sơ đồ chân:
• IN1 và IN2: Chân điều khiển động cơ thứ nhất.
Trang 11/32
•
•
•
•
•
IN3 và IN4: Chân điều khiển động cơ thứ hai.
ENA: Chân điều chỉnh điện áp cho động cơ thứ nhất.
ENB: Chân điều chỉnh điện áp cho động cơ thứ hai.
OUT 1 và OUT 2: Ngõ ra điện áp dương và âm cho động cơ thứ nhất.
OUT 3 và OUT 4: Ngõ ra điện áp dương và âm cho động cơ thứ hai.
2.5 Các linh kiện khác
Ngoài các linh kiện chính sử dụng cho Robot, bên cạnh đó còn các lo ại
linh kiện khác hỗ trợ cho Robot.
-
2.5.1 Màn hình LCD
Dùng để hiển thị các thông số của Robot nhằm mục đích theo dõi, giảm sai
sót cho Robot trong quá trình hoạt động.
Hình 2-6: Màn hình LCD.
-
Sơ đồ chân:
• VCC: Chân cấp nguồn.
• VSS: Chân nối mass tương tự như GND.
• VEE: Chân điều chỉnh độ tương phản.
• RS: Chân chọn thanh ghi sẽ được ghi dữ liệu.
• RW: Chân chọn chế độ viết hoặc đọc.
• E: Chân cho phép ghi tương tự chân EN.
• D4 đến D7: Chân dữ liệu Data 4 đến Data 7.
• LED+ và LED- : Tắt bật màn hình LED.
2.5.2 Mạch ổn áp LM2596
Trang 12/32
Mạch được sử dụng để ổn áp cho hai động cơ, nhằm giảm sai sót trong
quá trình điều chỉnh tốc độ động cơ.
Hình 2-7: Mạch ổn áp LM2596.
CHƯƠNG 3.
SƠ ĐỒ KHỐI VÀ LƯU ĐỒ GIẢI THUẬT
3.1 Sơ đồ khối
Hình 3-1: Sơ đồ khối.
-
Khối nguồn bao gồm:
• Mạch nguồn ổn áp LM2596.
- Khối cảm biến bao gồm:
• Cảm biến dò line 5 kênh.
• Cảm biến siêu âm HC-SR04.
- Khối điều khiển động cơ bao gồm:
• Mạch điều khiển động cơ L298.
Trang 13/32
3.2 Lưu đồ giải thuật
Hình 3-2: Lưu đồ giải thuật.
-
3.3 Nguyên lý hoạt động
Mạch nguồn LM2596:
Trang 14/32
• Mạch nguồn LM2596 được sử dụng để ổn áp cho ngõ vào của m ạch
điều khiển động cơ L298, nhằm giữ ổn định cho điện áp ở ngõ ra của
hai động cơ không bị nhiều sai lệch.
- Cảm biến dò line 5 kênh:
• Cảm biến dò line 5 kênh cho phép ngõ ra là các giá trị Digital, gắn v ới hai
giá trị là 0 hoặc 1.
• Robot sẽ sử dụng kênh 2 và kênh 4 của cảm biến nhằm mục đích xác
định độ sai lệch, mất cân bằng khi Robot di chuyển. Robot tiếp tục sẽ
dụng kênh 3 để biết số lượng ô đã đi qua.
• LCD sẽ hiển thị hai thông số trên Robot. Hai thông s ố này có đ ược khi
kênh 2 và kênh 4 quét qua vạch line ngăn cách giữa hai ô. Ta xem nh ư hai
thông số từ kênh 2 và kênh 4 tương ứng với khoảng th ời gian “ time” và
“time1” khi cảm biến chuyển từ line trắng sang line đen.
• Ta đặt một biến “delta_t” là sai số so sánh giữa hai khoảng th ời gian
“time” và “time1”. Từ đó “delta_t” được tính theo công thức sau:
delta_t = time – time1
• Ta có delta_t << 0, điều đó nói lên time1 >> time nghĩa là khoảng thời
gian kênh 4 chuyển từ line trắng sang line đen nhanh h ơn kênh 2; đ ồng
nghĩa Robot đang di chuyển lệch về bên trái. Tương tự ngược lại nếu
delta_t >> 0, thì thời gian kênh 2 nhanh hơn kênh; đồng nghĩa Robot
đang di chuyển lệch về bên phải.
• Dựa vào điều kiện và kết quả trên, Robot sẽ tự động đi ều ch ỉnh tốc đ ộ
động cơ để tự cân chỉnh sao cho “ delta_t” có sai lệch nhỏ và gần về 0;
đồng nghĩa Robot đang đi thẳng không bị lệch quá nhi ều v ề bên trái
hoặc bên phải.
- Cảm biến siêu âm HC-SR04:
• Ta bật timer 1 của vi điều khiển ở chế độ ngắt với bộ chia 1. Ta kích
một xung nhỏ vào chân Trig của cảm biến. Khi chân Echo ở mức 0. Ta
xét giá trị timer 1 bằng 0, sau đó khi chân Echo ở mức 1, ta l ấy giá tr ị
timer 1. Giá trị nhận được từ timer 1 ta đặt là một biến “ x”. Từ đó, ta suy
ra công thức tính khoảng cách:
Trang 15/32
• Từ giá trị “kc” được tính như trên, Robot có thể xác định được khoảng
cách từ vị trí của chính nó đến tường. Từ đó Robot có th ể tự đ ộng x ử lý
để tránh va chạm vào tường.
- Mạch điều khiển động cơ L298:
• Ta thiết lập timer 2 của vi điều khiển để tạo một xung và thi ết lập chân
CCP1 và CCP2 như một PWM. Sau đó, ta điều chỉnh độ rộng xung cho
chân ENA và ENB.
• Dựa vào việc điều chỉnh độ rộng xung, tốc độ của hai động cơ sẽ thay
đổi nhằm điều chỉnh cho Robot có thể di chuyển tốt nhất.
- Các giá trị hiển thị trên LCD:
• LCD hiển thị giá trị xung trên các động cơ.
• LCD hiển thị khoảng cách từ cảm biến siêu âm.
• LCD hiển thị các biến giá trị: time, time1, delta_t.
Trang 16/32
CHƯƠNG 4.
THI CÔNG PHẦN CỨNG
4.1 Schematic và layout của mạch vi điều khiển PIC16F877A
Hình 4-1: Schematic mạch cấp nguồn cho PIC16F877A.
Hình 4-2: Schematic vi điều khiển PIC16F877A.
Trang 17/32
Hình 4-3: Layout mạch nguồn và PIC16F877A.
4.2 Mô hình mô phỏng Robot lau nhà
Hình 4-4: Khung Robot được thiết kế bằng phần mềm Corel.
Trang 18/32
Trang 19/32
Hình 4-5: Mô hình mô phỏng Robot lau nhà.
Trang 20/32
CHƯƠNG 5.
ĐÁNH GIÁ VÀ KẾT LUẬN
-
5.1 Thực nghiệm
Như đã nêu ở phần nguyên lý hoạt động, Robot có thể tự điều chỉnh khi
-
mất cân bằng nhằm mục đích không di chuyển lệch sang dãy ô khác.
Dưới đây là bảng đánh giá thực nghiệm: Kết quả thu được là độ lệch
delta_t.
Bảng 5-1: Bảng đánh giá thực nghiệm.
Góc lệch
50
100
150
200
-50
-100
-150
-200
-
Lần 1
-9
-14
-15
-21
16
15
25
29
Lần 2
-9
-13
-16
-23
13
21
23
26
Lần 3
-7
-12
-17
-21
13
16
29
25
Lần 4
-9
-12
-15
-19
12
21
30
32
Lần 5
-5
-9
-16
-17
16
14
26
32
Lần 6
-6
-12
-15
-22
14
18
27
31
5.2 Kết quả
Từ các số liệu trên, ta có thể tính toán thay đổi tốc độ của động cơ đ ể
Robot có thể thích nghi và di chuyển sao cho độ lệch delta_t thấp nhất và
-
gần bằng 0.
Robot có thể di chuyển hoàn thành số ô gạch quy định.
Tuy nhiên, Robot vẫn chưa thể tránh được vật cản và quay lại vị trí định
sẵn như nhiệm vụ ban đầu đề ra.
-
5.3 Đánh giá kết quả
Thời gian tìm hiểu và thực hiện đề tài có gi ới hạn, cùng v ới l ượng ki ến
thức giới hạn nên Robot vẫn chưa thể hoàn thành được hoàn toàn n ội
-
dung đồ án.
Robot vẫn còn nhiều giới hạn, độ ổn định của Robot vẫn chưa cao.
Tuy nhiên dựa vào các số liệu và kết quả đạt được Robot hoàn toàn có
hướng phát triển.
Trang 21/32
-
5.4 Hướng phát triển
Có thể sử dụng encoder cho động cơ giúp Robot có thể nâng cao vi ệc di
-
chuyển.
Tối ưu hóa giải thuật để Robot có thể nhớ được đường đi nhằm tránh vật
-
cản và có thể quay lại vị trí định sẵn ban đầu.
Tối ưu hóa phương pháp lập trình giúp cho Robot có th ể th ực hi ện công
việc lưu loát, ổn định và hiệu quả hơn.
Trang 22/32
TÀI LIỆU THAM KHẢO
Internet:
[1]
[2]
Tiếng Việt:
[3]
Giáo trình vi xử lý: “Vi điều khiển PIC” – Nguyễn Đình Phú, năm 2014.
Trang 23/32
PHỤ LỤC A
#include <16f877a.h>
#define LCD_ENABLE_PIN
#define LCD_RS_PIN
PIN_D2
PIN_D0
#define LCD_RW_PIN
PIN_D1
#define LCD_DATA4
PIN_D4
#define LCD_DATA5
PIN_D5
#define LCD_DATA6
PIN_D6
#define LCD_DATA7
PIN_D7
#define cb1
input(PIN_B0)
#define cb2
input(PIN_B1)
#define cbgi
input(PIN_B2)
#define tri1
#define ech1
PIN_C6
input(PIN_B3)
#fuses hs, noput, nowdt,noprotect, nodebug, nobrownout, nolvp, nocpd, nowrt
#use delay(clock=20M)
#use rs232(uart, baud = 9600, parity = n, bits = 8, stop = 1)
#include <lcd.c>
unsigned int16 time = 0;
Trang 24/32
unsigned int16 time1 = 0;
unsigned int16 dem1 = 0;
unsigned int16 dem = 0;
int16 delta_t = 0;
int en = 0;
unsigned int soline = 0;
int engi = 0;
int en1 = 0;
float d1 = 0;
float kct = 0;
void detect_line()
{
if( cb2 == 1 && en == 0)
{
dem++;
en = 1;
}
if(cb2 == 0);
{
Trang 25/32
en = 0;
}
if( cb1 == 1 && en1 == 0)
{
dem1++;
en1 = 1;
}
if(cb1 == 0);
{
en1 = 0;
}
if(cbgi == 1 && engi == 0)
{
soline++;
engi = 1;
}
if(cbgi == 0)