Tải bản đầy đủ (.doc) (25 trang)

XE tự HÀNH bám TƯỜNG TRÁI DÙNG PIC (có code và layout)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (437.02 KB, 25 trang )

ĐỒ ÁN 2

XE TỰ HÀNH BÁM TƯỜNG TRÁI


MỤC LỤC
DANH MỤC CÁC HÌNH VẼ...........................................................................................III
DANH MỤC CÁC BẢNG BIỂU......................................................................................IV
DANH MỤC CÁC TỪ VIẾT TẮT....................................................................................V
CHƯƠNG 1. TỔNG QUAN VỀ XE TỰ HÀNH BÁM TƯỜNG....................................1
1.1 GIỚI THIỆU

1

1.2 HƯỚNG NGHIÊN CỨU

1

CHƯƠNG 2. TÌM HIỂU LINH KIỆN...............................................................................2
2.1 PIC 16F877A

2

2.2 CẢM BIẾN SIÊU ÂM SRF 05

5

2.3 MẠCH CẦU H DÙNG IC L298N

6


2.4 LCD

7

2.5 ĐỘNG CƠ DC

9

CHƯƠNG 3. TIẾN TRÌNH THỰC HIỆN.......................................................................10
3.1 THIẾT KẾ PHẦN CỨNG VI ĐIỀU KHIỂN PIC 16F877A

10
11

3.2 THI CÔNG, LẮP RÁP XE TỰ HÀNH

11

3.3 THIẾT KẾ PHẦN MỀM

12

CHƯƠNG 4. NHẬN XÉT...................................................................................................14
4.1 ƯU ĐIỂM

14

4.2 KHUYẾT ĐIỂM

14


4.3 HƯỚNG PHÁT TRIỂN

14

TÀI LIỆU THAM KHẢO.................................................................................................15
PHỤ LỤC A.........................................................................................................................16


DANH MỤC CÁC HÌNH VẼ
HÌNH 2-1: SƠ ĐỒ CHÂN VI ĐIỀU KHIỂN 16F877A....................................................2
HÌNH 2-2: SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC 16F877A.............................................4
HÌNH 2-3: CẢM BIẾN SIÊU ÂM SRF 05.........................................................................5
HÌNH 2-4: IC L298N.............................................................................................................6
HÌNH 2-5: LCD 1602............................................................................................................7
..................................................................................................................................................7
HÌNH 2-6: SƠ ĐỒ CHÂN LCD 1602.................................................................................7
HÌNH 2-7: ĐỘNG CƠ DC....................................................................................................9
HÌNH 2-8: CẤU TẠO ĐỘNG CƠ DC................................................................................9
HÌNH 3-1: MẠCH NGUYÊN LÍ VI ĐIỀU KHIỂN PIC 16F877A..............................10
HÌNH 3-2: MẠCH IN VI ĐIỀU KHIỂN PIC 16F877A.................................................11
HÌNH 3-3: SƠ ĐỒ CẤU TRÚC CƠ BẢN CỦA XE TỰ HÀNH...................................12
HÌNH 3-4: SƠ ĐỒ GIẢI THUẬT CỦA XE BÁM TƯỜNG TRÁI.............................13


DANH MỤC CÁC BẢNG BIỂU
..................................................................................................................................................3
BẢNG 2-1: SO SÁNH CÁC TIMER..................................................................................4



DANH MỤC CÁC TỪ VIẾT TẮT

PIC

Programable Intelligent Computer

LCD

Liquid Crystal Display

DC

Direct Current


ĐỒ ÁN 2
Trang 1/20

CHƯƠNG 1. TỔNG QUAN VỀ XE TỰ HÀNH BÁM TƯỜNG
1.1 Giới thiệu
Di chuyển theo tường (wall following) là một tác vụ thường thấy ở xe tự hành,
trong các môi trường biết trước hoạc không biết trước. Tác vụ này được dùng với
các nhiệm vụ: tránh chướng ngại vật, bám theo tường,...
1.2 Hướng nghiên cứu
- Nghiên cứu các bộ điều khiển cho xe bám tường
- Thiết kế đế di chuyển
- Thiết kế cảm biến gắn lên xe tự hành để đo khoảng cách với tường
- Lập trình cho xe tự hành
- Nhận xét kết quả và kết luận


Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 2/20

CHƯƠNG 2.

TÌM HIỂU LINH KIỆN

2.1 PIC 16F877A
- PIC viết tắt của từ “Programable Intelligent Computer”, tạm dịch là máy tính
thông minh khả trình.
- PIC 16F877A là vi điều khiển với tập lệnh gồm 35 lệnh có đọ dài 14 bit. Mỗi
lệnh đều được thực thi trong một chu kỳ xung clock. Tốc độ hoạt động tối đa cho
phép là 20 MHz với một chu kỳ lệnh là 200 ns. Bộ nhớ chương trình 8Kx14 bit, bộ
nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256x8
byte. Số PORT I/O là 5 với 33 pin I/O. [1]

Hình 2-1 : Sơ đồ chân vi điều khiển 16F877A

- Vi điều khiển PIC 16F877A có 5 cổng xuất nhập bao gồm PORTA, PORTB,
PORTC, PORTD, PORTE.
• PORTA bao gồm 6 I/O pin. Đây là các chân có thể vừa xuất và nhập, được
điều khiển bởi thanh ghi TRISA.
• PORTB bao gồm 8 I/O pin, thanh ghi điều khiển xuất nhập tương ứng là
TRISB. Bên cạnh đó một số chân của PORT B còn được sử dụng trong quá
trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau.
• PORTC bao gồm 8 I/O pin, thanh ghi điều khiển xuất nhập tương ứng là
TRISC. Bên cạnh đó, PORTC còn chứa các chức năng của bộ so sánh, bộ

timer 1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART.

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 3/20

• PORTD bao gồm 8 I/O pin, thanh ghi điều khiển xuất nhập tương ứng là
TRISD. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel
Slave Port).
• PORTE bao gồm 3 I/O pin, thanh ghi điều khiển xuất nhập tương ứng là
TRISE. Các chân của PORTE có ngõ vào analog. Bên cạnh đó, PORTE còn là
các chân điều khiển của chuẩn giao tiếp PSP (Parallel Slave Port).
- Cấu trúc bộ nhớ của vi điều khiển 16F877A gồm bọ nhớ chương trình (Program
Memory) và bộ nhớ dữ liệu (Data Memory).
• Bộ nhớ chương trình của vi điều khiển PIC 16F877A là bộ nhớ flash, dung
lượng bộ nhớ 8K word (1 word= bit) và được phân thành nhiều trang.
• Bộ nhớ dữ liệu của vi điều khiển PIC 16F877A là bộ nhớ EEPROM được
chia ra làm 4 bank. Mỗi bank có dung lượng 128 bit, bao gồm các thanh ghi có
chức năng đặc biệt nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích
chung nằm ở vùng địa chỉ còn lại trong bank.
- Bộ định thời:
• TIMER 0: Là bộ đếm 8 bit được kết nối với bộ chia tần só 8 bit. Cấu trúc
của Timer 0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của
xung clock. Ngắt Timer 0 sẽ xuất hiện khi Timer 0 bị tràn. Bit TMR0IE là bit
điều khiển Timer 0. TMR0IE=1 cho phép ngắt Timer 0 tác động, TMR0IF=0
không cho phép ngắt Timer 0 tác động.
• TIMER 1: Là bộ định thời 16 bit, giá trị của Timer 1 sẽ được lưu trong 2
thanh ghi (TMRH1:TMR1L). Cờ ngắt của Timer 1 là bit TMR1IF, bit điều

khiển của Timer 1 sẽ là TMR1IE. Tương tự như Timer 0, Timer 1 cũng có 2
chế độ hoạt động: chế độ định thời và chế độ đếm.
• TIMER 2: Là bộ định thời 8 bit và được hỗ trọ bởi 2 bộ chia tần số
prescaler và postscaler. Thanh ghi chứa giá trị đếm của Timer 2 là TMR2. Bit
cho phép ngắt Timer 2 tác động là TMR2ON. Cờ ngắt của Timer 2 là bit
TMR2IF.


Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 4/20

Bảng 2-1: So sánh các Timer

Kích thước thanh ghi
Nguồn CLOCK bên

TIMER0
8 bits
Fosc/4

TIMER1
16 bits
Fosc/4

TIMER2
8 bits
Fosc/4


trong
Nguồn CLOCK bên

T0CKI oin

T1CKI pin hoặc

None

Không

Timer 1 oscillator


Không

ngoài
Đánh thức PIC từ
SLEEP

Hình 2-2: Sơ đồ khối vi điều khiển PIC 16F877A

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 5/20

2.2 Cảm biến siêu âm SRF 05


Hình 2-3: Cảm biến siêu âm SRF 05

Module cảm biến siêu âm SRF05 dùng để đo khoảng cách đến vật chắn bằng sóng
siêu âm. Module có 2 đầu thu và phát sóng, khoảng cách được xác định bằng cách
đo khoảng thời gian mà sóng siêu âm được phát ra từ module truyền đến vật chắn
rồi phản hồi về.
Sử dụng bằng cách truyền 1 xung vào chân trigger của module, sau đó chờ 1 xung
trả về trên chân echo, độ dài của xung phản hồi tương ứng với thời gian của sóng
siêu âm truyền trong không khí, từ đó tính ra được khoảng cách đến vật thể chắn.
Thông tin cơ bản: [2]
-

Điện áp hoạt động: 5 V

-

Dòng cấp: 30 mA

-

Tần số: 40 KHz

-

Khoảng cách đo được xa nhất: 3 m

-

Phát hiện vật cản trong khoảng: 3 cm đến 3 m


Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 6/20

2.3 Mạch cầu H dùng IC L298N
L298 là IC kết hợp 2 mạch cầu H bên trong, thích hợp ứng dụng công suất nhỏ như
động cơ DC loại vừa.

Hình 2-4: IC L298N

Chức năng các chân của L298:
- 4 chân input: IN1, IN2, IN3, IN4 được nối với các chân 5, 7, 10, 12 của
L298. Đây là các chân nhận tín hiệu điều khiển.
- 4 chân output: OUT1, OUT2, OUT3, OUT4 được nối với các chân 2, 3, 13,
14 của L298. Các chân này được nối với động cơ.
- 2 chân ENA và ENB là hai chân điều khiển các mạch cầu H trong L298. Nếu
chân điều khiển ở mức “1” thì cho phép mạch cầu hoạt động và ngược lại.
Điều khiển chiều quay với L298:
- Khi ENA=0: Động cơ không quay.
- Khi ENA=1:
+ INT1=1 và INT2=0: Động cơ quay thuận.
+ INT1=0 và INT2=1: Động cơ quay nghịch.
+ INT1=INT2: Động cơ dừng lại.

Xe tự hành bám tường trái



ĐỒ ÁN 2
Trang 7/20

2.4 LCD

Hình 2-5: LCD 1602

Thông số kỹ thuật:
- Điện áp MAX: 7V
- Điện áp MIN: -0.3 V
- Hoạt động ổn định: 2.7-5.5 V
- Điện áp ra mức cao: >2.4 V
- Điện áp ra mức thấp: <0.4 V
- Dòng điện cấp nguồn: 350 uA-600 uA

Hình 2-6: Sơ đồ chân LCD 1602

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 8/20

 Chân số 1 - VSS: Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
GND của mạch điều khiển.
 Chân số 2 - VDD: Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này
với VCC=5V của mạch điều khiển.
 Chân số 3 - VE: Điều chỉnh độ tương phản của LCD.
 Chân số 4 - RS: Chân chọn thanh ghi . Nối chân RS với logic "0" hoặc logic "1"
để chọn thanh ghi:

• Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ
“ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read).
• Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.
 Chân số 5 - R/W: Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ
đọc.
 Chân số 6 - E: Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.
• Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi
bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân
E.
• Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên
(low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E
xuống mức thấp.
 Chân số 7 đến Chân số 14 - D0 đến D7: Tám đường của bus dữ liệu dùng để trao
đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này :
• Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
• Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là
DB7.
 Chân số 15 - A: Nguồn dương cho đèn nền.
 Chân số 16 - K: Nguồn âm cho đèn nên. [3]

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 9/20

2.5 Động cơ DC


Hình 2-7: Động cơ DC

Động cơ DC là động cơ điện hoạt động với dòng một chiều, chuyển đổi năng lượng
điện thành năng lượng cơ.

Hình 2-8: Cấu tạo động cơ DC

Khi cấp một dòng điện, động cơ sẽ xoay dựa theo hiệu ứng điện từ của nam châm.

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 10/20

CHƯƠNG 3. TIẾN TRÌNH THỰC HIỆN
3.1 Thiết kế phần cứng vi điều khiển PIC 16F877A
Thi công phần cứng mạch kit PIC 16F877A
Yêu cầu: Thi công mạch đúng với mạch nguyên lí, mối hàn chắc chắn, thẩm mĩ.

Hình 3-1: Mạch nguyên lí vi điều khiển PIC 16F877A

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 11/20

Hình 3-2: Mạch in vi điều khiển PIC 16F877A


3.2 Thi công, lắp ráp xe tự hành
Lắp ráp động cơ và bánh xe vào khung xe, sắp xếp các linh kiện hợp lí để xe di
chuyển dễ dàng.

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 12/20

3.3 Thiết kế phần mềm

Khối Sensor

Khối

Khối điều

Khối

nguồn

khiển

hiển thị

Khối điều khiển
động cơ
Hình 3-3: Sơ đồ cấu trúc cơ bản của xe tự hành


Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 13/20

Bắt đầu

Xét cảm biến bên trái

Đ
Rẽ trái

khoảng cách lớn hơn
5cm

S
Đi thẳng

Xét cảm biến phía trước
khoảng cách lớn lớn

Đ

Rẽ phải

10cm
S
Đi thẳng
Hình 3-4: Sơ đồ giải thuật của xe bám tường trái


Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 14/20

CHƯƠNG 4. NHẬN XÉT
4.1 Ưu điểm
Cảm biến chính xác khoảng cách đến tường để bám vào.
4.2 Khuyết điểm
-

Xe chạy chưa ổn định, khung và bánh xe chưa chắc chắn.

-

Nguồn năng lượng có giới hạn nên không thể vận hành khoảng thời gian quá
lâu.

4.3 Hướng phát triển
Phát triển thành các robot tự hành, ứng dụng vào thực tế để giúp ích con người, phát
triển đời sống xã hội.

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 15/20


TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1]

Giáo trình vi điều khiển PIC 16F877- Nguyễn Đình Phú.

[2]

/>
[3]

/>
Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 16/20

PHỤ LỤC A
#include <16F877A.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(crystal=20000000)
#use STANDARD_IO( A,C,D,E )
#use pwm(CCP1,TIMER=2,FREQUENCY=5000,DUTY=0)
#use pwm(CCP2,TIMER=2,FREQUENCY=5000,DUTY=0)
#DEFINE LCD_RS_PIN PIN_B3
#DEFINE LCD_RW_PIN PIN_B4
#DEFINE LCD_ENABLE_PIN PIN_B5

#DEFINE LCD_D4_PIN PIN_D4
#DEFINE LCD_D5_PIN PIN_D5
#DEFINE LCD_D6_PIN PIN_D6
#DEFINE LCD_D7_PIN PIN_D7
#DEFINE SRF05_TRIGGER1 PIN_B1
#DEFINE SRF05_ECHO PIN_B0
#include <lcd.c>
int1 range_ok=0;
int32 temp = 0;
void SRF05_Range();
#INT_EXT
Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 17/20

void EXT_isr(void)
{
disable_interrupts(GLOBAL);
temp=get_timer0();
range_ok=1;
enable_interrupts(GLOBAL);
}
#INT_TIMER10
void TIMER0_isr(void)
{
disable_interrupts(GLOBAL);
temp = 0xffff;
enable_interrupts(GLOBAL);

}
void SRF05_Range()
{
while(!range_ok)
{
output_low(SRF05_TRIGGER1);
delay_ms(10);
output_high(SRF05_TRIGGER1);
while(!(input(SRF05_ECHO
set_timer1(10);
enable_interrupts(GLOBAL);
delay_ms(100);

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 18/20

}
}
float32 SRF05_GetDistance()
{
float32 time_us=0,dis=0;
SRF05_Range();
disable_interrupts(GLOBAL);
time_us=temp/10;
dis=time_us/57;
temp=0;
range_ok=0;

return dis;
}
void tien()
{
output_high(IN2);
output_low(IN1);
output_high(ENB);
set_pwm1_duty(10);
output_low(IN4);
output_high(IN3);
output_high(ENA);
set_pwm2_duty(10);
}

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 19/20

void stop()
{
output_low(ENA);
output_low(ENB);
}
void re_trai()
{
output_high(IN2);
output_low(IN1);
output_high(ENB);

set_pwm1_duty(10);
output_high(IN3);
output_low(IN2);
output_high(ENA);
set_pwm2_duty(5);
}
void main()
{
float32 range;
ext_int_edge(H_TO_L);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(1);//note
set_pwm2_duty(1);//note
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER1);

Xe tự hành bám tường trái


ĐỒ ÁN 2
Trang 20/20

disable_interrupts(GLOBAL);
output_low(ENB);
output_low(ENA);
if(range>=20)
{
tien();

}
else
{
stop();
delay_ms(500);
re_phai();
delay_ms(1000);
}
}
}

Xe tự hành bám tường trái


×