ướ

i d ch:

Ng

H ng d n ROBOCON 2005 Sample Robots ườ ị roboconaz@gmail.com www.robocon.vn www.skynet.com.vn

Hà n i 2006 ộ

N i dung

Ch

ươ

ng 1: Đi u khi n DC Motor ể

1.1 Gi i thi u ho t đ ng DC motor ớ ạ ộ ệ

ng chuy n đ ng dùng m ch c u H ể ộ ạ ầ

1.2 Đi u khi n h

ỏ 1.3 1.4 Đi u khi n DC motor dòng nh (1A) dùng L293B Đi u khi n DC motor dòng l n (2A) dùng L298 ề ề ề ể ướ ể ể ớ

ộ ộ ề ỉ

1.5 Đi u khi n t c đ DC Motor dùng ch nh đ r ng xung (Pulse Width

ể ố ộ Modulation -PWM) Ph n c ng Pulse Width Modulation (PWM) Ph n m m Pulse Width Modulation (PWM) 1.6 1.7 ầ ứ ề ầ

Ch

ng 2:

Dò đ

ng tr ng dùng Sensor h ng ngo i (IR)

ươ

ườ

ặ ủ 2.1 2.2 các đ c tính c a IR sensor IR Sensor đi u bi n ề ế

Ch

ng 3:

L p trình Robot t

đ ng

ươ

ự ộ

ạ 3.1 3.2 Ch y theo đ Dò và đ m nh ng đ ng c t ng tr ng ắ ườ ườ ữ ế ắ

Ch

ươ

ng 1: Đi u khi n DC Motor ể

1.1 Gi i thi u ho t đ ng DC motor ớ ạ ộ ệ

ể ạ ộ ề ệ ề ầ Đ cho motor 1 chi u ho t đ ng, chúng ta c n đ t 1 đi n áp 1 chi u vào motor and 1 dòng đi n 1 chi u s ch y qua motor, motor s quay theo 1 chi u nào đó. ề ẽ ạ ặ ẽ ệ ề

N u chúng ta đ i chi u c a đi n áp 1 chi u này, motor s quay ng i ề ủ ế ệ ề ẽ ổ c l ượ ạ

ệ ượ ị ượ ấ ẽ ị ỏ ặ t quá giá tr đ ơ ệ ặ i c a motor s gi m theo. ế c ghi trên motor, n u Chú ý: đi n áp V và dòng I không nên v không motor s b h ng. Tuy nhiên n u ta đ t 1 đi n áp th p h n V ho c 1 dòng ế đi n th p h n I, thì t c đ và đ ch u t ộ ị ả ủ ố ộ ẽ ả ệ ấ ơ

1.2 Đi u khi n h ng chuy n đ ng dùng m ch c u H ể ướ ề ể ộ ạ ầ

ể ể ề ề ệ ặ ướ ổ ế ầ ầ ượ ủ ể ề ố ữ ạ ộ i ở ạ ặ ng quay c a motor 1 chi u, chúng ta c n đ t đi n áp lên motor. Đ đi u khi n h c g i nh ư Có 1 m ch ph bi n dùng đ đi u khi n motor g i là c u H. Nó đ ọ ọ ể ạ v y b i vì m ch này trông gi ng hình ch ‘H’. M t trong nh ng kh năng c c hay ả ự ữ ậ c a m ch này là nó cho phép đi u khi n motor ti n lên ho c lùi l ố ộ b t kỳ t c đ ạ ở ấ ề ủ nào, ngoài ra nó còn có th dùng 1 ngu n đi n đ c l p [1]. ế ộ ậ ể ồ ể ệ

tr ng thái cao thì motor s chuy n sang ch đ h ở ạ ẽ ng. N u đ u vào ‘Direction’ ể tr ng thái th p thì motor s quay ng ườ ế ầ ng ế ộ ướ ượ c ở ạ ẽ ấ Khi đ u vào ‘Direction’ ầ bình th chi u.ề

ấ ề ạ ạ ạ ổ Có r t nhi u lo i IC dùng cho m ch c u H. Lo i ph thông dùng cho motor dòng ầ th p là L293B và motor dòng cao là L298. ấ

1.3 Đi u khi n DC motor dòng nh (1A) dùng L293B ỏ ề ể

ng d ng đi n hình c a L293B đ ể ụ ướ ặ ể ượ ớ ể ớ ể ề ớ ể ầ ể ầ các c a hàng đi n t ộ ể ạ ệ ử ử ể ặ ộ i [2]. Vs là đi n áp đ t vào c v trên hình d ệ Ứ ủ ẽ i 1A m i kênh. motor và có th lên t i 36V. Dòng l n nh t c a L293B có th lên t ấ ủ ỗ ể ề M t IC L293B có th dùng đ đi u khi n 2 motor. Đ u vào 2 và 7 dùng đ đi u ể khi n motor 1. Đ u 10 và 15 dùng đ đi u khi n motor 2. Diode D1 và D8 t o 1 ạ ể ề m ch c p. L293B là m t IC ph thông có th mua (giá ở kho ng 20 ngàn đ ng – tham kh o www.skynet.com.vn) ổ ả ả ồ

ể ề ử ụ ể ẽ Trong các robot t và ph i. M ch đ đ ng, chúng tôi s d ng con L293B đ đi u khi n motor r trái c v trên hình d i đây. ả ạ ự ộ ượ ẽ ướ

ể ề c t ượ ổ ợ ệ ướ ề ệ ề ng này đ ể ề ộ con vi s lý Trong s đ P1.1 và P1.3 là các tín hi u đi u khi n chi u motor t ử ừ ệ h p AND v i các tín hi u 87C552. Nh ng tín hi u đi u khi n h ớ ể đi u bi n đ r ng xung PWM0 và PWM1 đ đi u khi n t c đ motor. Chúng tôi ể ố ề s gi ụ ẽ ả ế i thích vi c đi u khi n này trong m c sau. ể ơ ồ ữ ộ ộ ệ ề

c cung c p vào chân 8 c a con L293B. Đi n áp th c t ồ ượ ự ế ụ ử ụ ừ ủ ế c n i vào đi n áp 5V logic dùng làm ngu n IC. Ngu n motor đ ấ vào thông s c a motor, th ng t ườ ố ủ 12V. Chân 16 đ ệ ộ ph thu c ệ 9V đ n 12V. Robot m u này s d ng đi n áp ệ ẫ ồ ượ ố

ạ ộ ồ ố ư L1 và L2 tách ngu n nuôi L293B ra kh i h th ng. Chúng ho t đ ng gi ng nh nh ng b l c các tín hi u nhi u đ ỏ ệ ố c sinh ra b i motor. ở ễ ượ ộ ọ ữ ệ

1.4 Đi u khi n DC motor dòng l n (2A) dùng L298 ớ ể ề

ự ư ư ớ ng t c miêu t ụ nh con L293B nh ng nó cho phép dòng l n h n. ng d ng nh sau [3]. (Giá con này kho ng 40 ngàn đ ng – tham ơ Ứ ồ ả ư ả L298 cũng t ươ đi n hình đ ượ kh o www.skynet.com.vn) ể ả

ứ ụ ớ ơ Cho ng d ng dòng l n h n, chúng ta dùng 2 kênh nh hình v trên. Vs là ngu n ồ motor và Vss là ngu n logic. Đi n tr Rs đ ồ ư ẽ c dùng đ h n ch . ế ể ạ ượ ệ ở

ể ề ể ề Trong robot m u đi u khi n b ng tay, chúng tôi dùng con L298 đ đi u khi n 2 ể ẫ motor dòng l n (2A). M ch đ ằ c v nh hình d i đây. ượ ẽ ư ướ ạ ớ

1.5 Đi u khi n t c đ DC Motor dùng ch nh đ r ng xung (Pulse Width Modulation - ỉ ể ố ộ ộ ộ ề PWM)

ề ể c làm b ng cách t ằ ồ

ủ ề ồ

Đi u khi n đ r ng c a xung đ ượ ộ ộ motor. Ngu n áp 1 chi u DC s chuy n thành tín hi u xung vuông, thay đ i t ể ẽ 12V xu ng 0V, t o cho motor m t lo t các cú s c đi n. ộ t b t nhanh ngu n đi n lên ắ ậ ệ ổ ừ ệ ệ ạ ạ ố ố

t mà đ cao, motor s ch y ẽ ạ ở ộ ố ộ ổ m t t c đ n đ nh nh mômen ị ủ ờ

N u t n s b t t ế ầ ố ậ ắ quay c a bánh xe. ủ

ằ ủ ệ

ổ ộ ộ ặ ứ ệ ồ ờ

B ng cách thay đ i chu kỳ ho t đ ng c a tín hi u (thay đ i đ r ng xung – PWM), t c là kho ng th i gian “B t”, ngu n đi n trung bình đ t lên motor s ẽ thay đ i và d n đ n thay đ i t c đ . [4][5] ạ ộ ậ ổ ố ộ ổ ả ế ẫ ổ

ầ ứ

1.6 Ph n c ng Pulse Width Modulation (PWM)

ạ ờ Đi u khi n đ r ng xung (PMW) có th dùng IC th i gian NE555. M ch dùng con ề này đ ể c th hi n trên hình v d ể i đây. [6] ộ ộ ể ệ ẽ ướ ượ

ủ ụ ệ ậ ầ ộ ộ ữ ặ ộ ụ ủ Trong m ch này đ r ng “B t” c a xung ph thu c vào đi n áp đ t lên đ u vào ộ ạ chân 5 (RA và C gi ệ nguyên). Và chu kỳ c a xung vuông ph thu c vào tín hi u Trigger.

ẫ ề ể ạ ề ế ệ ể ề bi n tr ề ừ ế c đi u ch nh đ c truy n t ề ể ố ể ỉ Trong robot m u đi u khi n tay, 2 con NE555 t o thành ph n c ng đ đi u khi n ể ầ ứ ở đ r ng xung nh trên hình v . Tín hi u đi u bi n MOD đ ượ ẽ ộ ộ ể đi u khi n t c đ trên bàn đi u khi n. VR1 và VR2 có th đ ể ượ ề ề thay đ i chu kỳ c a xung vuông. VR3 dùng đ ch nh chu kỳ c a sóng. ủ ư ộ ủ ể ỉ ổ

ề ầ

1.7 Ph n m m Pulse Width Modulation (PWM)

ử ụ ử ư ư ệ S d ng con vi s lý có s các tín hi u PWM, nh 87C552 nh chúng tôi dùng cho robot m u, chúng tôi có th l p trình đ t o các sóng PWM. ẵ ể ậ ể ạ ẫ

ứ ế ạ i đ ề ượ ậ ả ở c l p trình. T n s l p l ồ ộ ồ Con 87C552 ch a 2 kênh đi u bi n PWM. Nh ng kênh này t o các xung theo đ ộ c đ nh nghĩa b i thanh ghi r ng và kho ng cách đ ị ộ ộ ế 8-bit trong tên là b chia PWMP, t o nh p đ ng h cho b đ m. B chia và b đ m ộ ế ạ 0 đ n 254. dùng chung cho c 2 kênh PWM. B đ m 8-bit dùng đ m 255, t c là t ế ữ ầ ố ặ ạ ượ ị ộ ế ộ ả ừ ứ ế

ượ ớ ộ ị ộ ế ầ ứ ớ ộ ữ ỏ ơ ệ ẽ ặ ủ ị 0% đ n 100% và có th đ c so sánh v i n i dung c a 2 thanh ghi: PWM0 và Giá tr c a b đ m 8-bit đ ủ ộ ế ị ủ s n i dung c a nh ng thanh ghi này l n h n giá tr b đ m, thì đ u ra PWM1. Gi ữ ơ ủ ả ử ộ ng ng /PWM0 hay /PWM1 s là TH P. N u n i dung nh ng thanh ghi này mà t ươ ế Ấ ẽ b ng ho c nh h n giá tr b đ m, tín hi u ra s là CAO. Chu kỳ làm vi c do đó ệ ị ộ ế ằ ệ c xác đ nh b i n i dung c a 2 thanh ghi PWM0 và PWM1. Chu kỳ làm vi c đ ượ n m trong kho ng t ằ c l p trình t nh ti n 1/255/ ị ở ộ ừ ể ượ ậ ế ế ả

Đ l p l i c a t n s f ộ ặ ạ ủ ầ ố PWM, v i các tín hi u ra PWMn đ ệ ớ ượ c xác đ nh b i: ị ở

PWM

OSC PWMP

f = f + · · ) 1(2 255

i t ầ ố ặ ạ ừ ườ ằ ứ ứ ẽ ệ ặ đ t t ờ ạ ớ ợ OSC=11.0592MHz) trong tr 84.7Hz to 21.7kHz (f Nó cho ta t n s l p l ng h p c a chúng tôi. B ng cách đ a vào các thanh ghi PWM giá tr là 00H ho c FFH, các ặ ị ư ủ ng ng. Vì b đ m 8-bit kênh PWM s cho tín hi u ra m c CAO ho c TH P t ộ ế Ấ ươ đ m modul 255, nó có th không bao gi i giá tr c a các thanh PWM khi ị ủ ể ế chúng ta đ t FFH. ặ

c n p giá tr m i, thì đ u ra t ị ớ ượ ạ ầ ươ ng c c p nh t ngay l p t c. Vi c này không c n ph i đ i đ n h t chu kỳ ẽ ượ ậ ả ợ ế ậ ứ ệ ế ầ Khi thanh ghi so sánh (PWM0 và PWM1) đ ng s đ ậ ứ đ m. [7] ế

//Define the registers addresses

…… /* PWM for Philips 87c552 */ sfr at 0xFC PWM0 ; sfr at 0xFD PWM1 ; sfr at 0xFE PWMP ; ……

//The period of the pulse (set to around 400Hz) //Set 50% duty cycle for /PWM0 //Set 25% duty cycle for /PWM1

…… …… PWMP=53; PWM0=127; PWM1=63; …… [8][9]

Mã ngu n C sau đây đ c l p cho các đ u ra PWM: ồ ượ ậ ầ

Ch

ng 2:

ươ

Dùng Sensor h ng ngo i (IR) đ dò v ch tr ng ạ

2.1 Các đ c tính c a IR sensor ủ ặ

ẫ ự ộ ệ ạ ồ ộ ạ ậ ử ụ ộ ẽ ạ ệ ồ ệ ạ Trong con robot m u t đ ng này, chúng tôi s d ng 2 linh ki n h ng ngo i (IR): m t linh ki n phát h ng ngo i (IR emitter) và m t linh ki n nh n (IR receiver) t o ạ ồ ệ thành 1 c p c m bi n sensor. Linh ki n phát s t o tia h ng ngo i và sau khi ph n ả ặ ả ế x s truy n t ề ớ ạ ẽ i linh ki n nh n. ệ ậ

v i c ệ ậ ẽ ỉ ệ ớ ườ ng đ năng l ộ ượ ồ ng c a tia h ng ủ ệ c. Dòng đi n đi qua linh ki n nh n s t l ngo i mà nó nh n đ ậ ượ ạ

ượ ạ ố ẫ ủ i đây. Khi TX ướ ẽ c n i m ch theo s đ ậ tr ng thái th p, dòng s đi qua linh ki n phát và nó s ắ ệ ượ ạ ầ ậ ệ ấ ả ơ ạ ạ ồ ệ ệ ở ạ ế ộ ậ ậ ầ ẫ ế ệ ả ạ ầ ặ ơ ơ ồ Trong robot m u c a chúng tôi, linh ki n phát và nh n đ ẽ hình d ng h ng ngo i phát ra tia h ng ngo i. N u có 1 v t ph n x m u tr ng thì năng l ạ ồ i và t o m t dòng cao h n đi qua linh ki n nh n, do đó đi n áp trên s ph n h i l ả ồ ạ ẽ IRS0 s h xu ng. N u v t ph n x có m u đen, ho c m u s m h n thì đi n áp ố ẽ ạ trên IRS0 s nâng lên. ẽ

c v ch d n đ t đ ọ ể ệ ượ ạ ẫ ườ ắ ng màu tr ng Đ c giá tr đi n áp này chúng ta có th phân bi ị ệ trên n n nhà màu xanh. ề

2.2 IR Sensor đi u bi n ế ề

c miêu t c b nh h ị ả ầ ả ồ ườ ệ ưở ng trên ph n tr ướ ng. M c đi n áp trên đ u ra c a sensor IR không ủ ầ ệ ng đ ánh sáng ph n x mà còn b thay đ i b i đi u ki n ị ổ ở ở ộ ườ ề ả ạ Đ chính xác c a sensor h ng ngo i đ ạ ượ ủ ộ r t nhi u b i ánh sáng môi tr ề ấ ứ ch ph thu c vào c ộ ụ ỉ ng. ánh sáng môi tr ườ

ưở ủ ườ ồ ng, chúng tôi dùng 1 sensor h ng Đ gi m b t s nh h ngo i đi u bi n thay vì sensor IR thông th ng c a ánh sáng môi tr ng. ớ ự ả ế ể ả ạ ườ ề

ủ ề ậ ệ ố ồ ồ c b t và t ậ ề ượ ạ ế ạ ụ ạ ỏ ổ ươ ề ế ộ b phát là đ ệ ế ỉ ạ ả ồ ừ ộ ư ậ ạ ỉ ứ ộ ạ ng. [10] Trong h th ng sensor IR đi u bi n c a chúng tôi, linh ki n phát đ ế b i 1 đ ng h . Tín hi u nh n đ ở ượ nh trên hình v d ẽ ướ ư qua b khu ch đ i này. Ch có ph n xoay chi u c a tín hi u thay đ i t ạ ầ v i tia h ng ngo i ph n x phát ra t ạ ớ m c 1 chi u ủ ề ở ầ ứ h ng ngo i mà không ph thu c vào ánh sáng môi tr ụ ạ ồ ắ t ệ c sau đó đi qua 1 m ch khu ch đ i 1 chi u DC ệ i đây. T C2 trong m ch s ch n dòng DC ra kh i tín hi u đi ệ ẽ ặ ứ ng ng ủ c khu ch đ i và tích h p vào ượ ợ đ u ra c a m ch. Nh v y m c ra c a m ch ch ph thu c vào tia ủ ụ ườ ạ ộ

Ch

ng 3:

L p trình m t Robot t

đ ng

ươ

ự ộ

đ ng trong cu c thi Robocon 2005, ể ự ộ ộ Đ hoàn thành các công vi c c a 1 robot t ệ ủ robot ph i có các tính năng sau: ả

1. kh năng l n theo v ch tr ng ạ ắ ả ầ

kh năng nh n bi t và đ m các đi m giao nhau khi nó đi qua ả ậ ế ể ế

2.

3.1 L n theo v ch tr ng ạ ầ ắ

ặ ự ộ ặ đ ng m u c a chúng tôi, chúng tôi đ t 2 c p sensor IR: bên trái ắ ườ c và chúng ta ị ủ ẽ ạ ầ ủ i m c đi n áp ng ệ ứ ướ ộ ả ể

ng đ t tr ặ ướ ưỡ c đ đi u ch nh h ỉ ướ ể ề ị ủ ạ ạ ả ả ướ ả ẽ ấ ộ ắ ạ ề ế ả ng và đ nó ch y th ng. Trong con robot t ẫ ủ ng tr ng, (Left) và bên ph i (Right) ph n đ u c a robot. Khi sensor trái c t đ ắ ở ầ ả giá tr c a sensor s h xu ng d ố ng đi c a bu c ph i đ cho robot ch y sang trái m t vài b ủ ộ ạ nó. Ho c khi sensor ph i c t vào v ch tr ng, giá tr c a sensor ph i s th p h n ơ ặ ắ ả ắ ướ ể c đ ng đ t s n, chúng ta ph i cho robot ch y sang ph i m t vài b giá tr ng ặ ẵ ị ưỡ đi u chính h ng ch y chính xác. N u c hai sensor đ u không c t v ch tr ng thì ướ ắ ạ đ nh là đã đi đúng h chúng ta gi ả ị ề ẳ ướ ể ạ

Thu t toán l n theo v ch tr ng đ c miêu t ậ ầ ắ ạ ượ ả trong bi u đ sau: ể ồ

3.2 Dò và đ m nh ng đ ng c t ữ ế ườ ắ

ể ượ ủ ữ ể c nh ng đi m giao nhau c a các vach khi robot ch y qua, chúng tôi ki m Đ dò đ tra c sensor trái và ph i. N u c hai sensor đ u c t v ch tr ng cùng lúc thì chúng ề ả ế ả ể ả ắ ạ ạ ắ

ng h p này, chúng ta ườ ể ợ ta có th cho r ng robot đã đi qua 1 đi m giao nhau. Trong tr ằ ph i đ cho robot đi ti p vài b c đ tránh đ m 2 l n đi m giao nhau này. ể ả ể ướ ể ế ế ể ầ

Thu t toán nh n bi t và đ m đi m giao nhau đ i đây: ậ ậ ế ế ể c v d ượ ẽ ướ

…… void move_robot(unsigned char step) {

int cnt;

cnt=0; while(cnt

if (read_sensor(1)>ALIGN_THRESHOLD && read_sensor(2)>ALIGN_THRESHOLD) movet(FORWARD,1,0);

else if (read_sensor(1) <=ALIGN_THRESHOLD && read_sensor(2) >ALIGN_THRESHOLD) movet(TURN_LEFT,1,80); else if (read_sensor(2) <=ALIGN_THRESHOLD && read_sensor(1) >ALIGN_THRESHOLD) movet(TURN_RIGHT,1,80); else if (read_sensor(2) <=ALIGN_THRESHOLD && read_sensor(1) <=ALIGN_THRESHOLD) {

cnt++; movet(FORWARD,8,0); }

} stop();

} ……

……

move_robot(3); // move the robot for 3 cross line ……

i đây là ví d cho 1 robot l n theo đ ng tr ng và đ m v ch giao nhau ụ ầ ườ ế ạ ắ ướ Hàm C d khi nó đi qua:

[11]

References

[1] http://www.robotroom.com/HBridge.html [2] http://personal.telefonica.terra.es/web/x-robotics/downloads/datasheets/L239B.pdf [3] http://www.learn-c.com/l298.pdf [4] http://www.cpemma.co.uk/pwm.html [5] http://www.cse.cuhk.edu.hk/~khwong/ceg3430/mrobot6.ppt [6] http://www.fairchildsemi.com/ds/NE/NE555.pdf [7] http://www.jjmb.nl/datasheets/microcontroller/8xc5x2_ov.pdf [8] http://www.cse.cuhk.edu.hk/~khwong/ceg3430/87c552.h [9] http://www.cse.cuhk.edu.hk/~khwong/ceg3430/demo.c [10] bottom.pdf [11] RoboconDemo05.c