Tải bản đầy đủ - 0 (trang)
3 Thiết kế phần mềm

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

Tải bản đầy đủ - 0trang

ĐỒ Á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]



http://hqdt.vn/bai-viet/thong-tin-linh-kien-dien-tu/



[3]



http://bachkhoadientu.com/



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

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



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

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

Tải bản đầy đủ ngay(0 tr)

×