Tải bản đầy đủ - 0 (trang)
3 Đánh giá kết quả

3 Đánh giá kết quả

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

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 lốt, ổn định và hiệu quả hơn.



Trang 22/32



TÀI LIỆU THAM KHẢO

Internet:

[1]



http://alldatasheet.com



[2]



http://microchip.com



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

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)



Trang 26/32



{

engi = 0;

}

}



void distance1()

{

output_high(tri1);

delay_us(20);

output_low(tri1);

while(ech1 == 0); set_timer1(0);

while(ech1 == 1); d1 = get_timer1();

kct = (float)(d1*0.2/58);

}



void dithang(unsigned int x, unsigned int y )

{

set_pwm1_duty(x);

set_pwm2_duty(y);



Trang 27/32



output_high(pin_C0);

output_low(pin_C3);

output_high(pin_C4);

output_low(pin_C5);

lcd_gotoxy(5,1);

printf(lcd_putc," ");

lcd_gotoxy(5,1);

printf(lcd_putc, "%u", x);

lcd_gotoxy(5,2);

printf(lcd_putc, "%u", y);

}

void main()

{

lcd_init();

lcd_putc('\f');

setup_ccp1(CCP_PWM); // su dung chan cpp1 nhu PWM RC2

setup_ccp2(CCP_PWM); // su dung chan cpp2 nhu PWM RC1

setup_timer_2(T2_DIV_BY_1,255,1);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);

while(true)



Trang 28/32



{

dithang(220, 213);

detect_line();

if(cb1 == 0)

{

time1 = dem1;

}

if(cb2 == 0)

{

time = dem;

}



lcd_gotoxy(1,1);

printf(lcd_putc,"%d %d",cb1,cb2);

lcd_gotoxy(1,2);

printf(lcd_putc,"%lu",time);

lcd_gotoxy(9,2);

delta_t = time1 - time;

printf(lcd_putc,"%lu",time1);

lcd_gotoxy(9,1);



Trang 29/32



printf(lcd_putc,"



");



lcd_gotoxy(9,1);

printf(lcd_putc,"%ld",delta_t);

if( delta_t < 0)

if(delta_t >= -4 && delta_t <= -1) // sai lech nho hon 5 do

{

dithang(220,213);

delta_t = 0;

}

else if( delta_t >= -10 && delta_t < -4)// sai lech 5 do

{

dithang(223,213);

delta_t = 0;

}

else if( delta_t >= -16 && delta_t < -10)// sai lech 10 do

{

dithang(225,213);

delta_t = 0;

}

else if( delta_t >= -23 && delta_t < -16)//sai lech 15 do



Trang 30/32



{

dithang(225,210);

delta_t = 0;

}

else

if(delta_t >= 1 && delta_t <= 9) // sai lech nho hon -5 do

{

dithang(220,213);

delta_t = 0;

}

else if( delta_t > 9 && delta_t <= 15)// sai lech 5 do

{

dithang(223,213);

delta_t = 0;

}

else if( delta_t >= 16 && delta_t <= 22)// sai lech 10 do

{

dithang(225,213);

delta_t = 0;

}



Trang 31/32



else if( delta_t >= 23 && delta_t <= 30)//sai lech 15 do

{

dithang(225,210);

delta_t = 0;

}

}

}



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

3 Đánh giá kết quả

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

×