第2章 能力風暴機器人的結(jié)構(gòu)_第1頁
第2章 能力風暴機器人的結(jié)構(gòu)_第2頁
第2章 能力風暴機器人的結(jié)構(gòu)_第3頁
第2章 能力風暴機器人的結(jié)構(gòu)_第4頁
第2章 能力風暴機器人的結(jié)構(gòu)_第5頁
已閱讀5頁,還剩195頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第二章 能力風暴機器人的結(jié)構(gòu)(綜述)n打開包裝箱,里面有:能力風暴機器人一臺,串口通信線一根,充電器一只。n小心地拿出機器人,放在桌子上。n機器人下部的碰撞環(huán)是柔性部件,拿的時候要小心,盡量不要接觸碰撞環(huán)。n拿機器人的姿勢如圖 (a) 所示。圖 (b) 的拿法要避免,否則會使碰撞傳感器失靈。n 連接能力風暴n接線。接線。取出串口連接線,一頭接在機器人的下載插口,另一頭接PC機機箱后的9針串口。記?。翰灰獛щ姴灏?。n打開能力風暴的主開關(guān)。打開能力風暴的主開關(guān)。注意:能力風暴可能開機就運動,請把它托在手上,不要讓它從高處摔下來。連接能力風暴n按下機器人的電源開關(guān),您會聽到“嘟”的一聲,同時綠色電源

2、指示燈亮,說明電源開關(guān)已經(jīng)打開,機器人的電源接通了。這時可看到機器人液晶顯示屏上出現(xiàn)“ASOS2002 Grandar Ability Storms”的字樣,并且液晶屏右下角有“太極圖”在跳動。n如果看不到“太極圖”跳動,則說明機器人里沒有了操作系統(tǒng)ASOS,請您為機器人下載操作系統(tǒng) 檢測是否連接成功檢測是否連接成功n如果程序不能正常下載,可能有以下6個方面的原因:n1)能力風暴的主開關(guān)未打開。 2)電池電壓不足。 3)機器人型號設(shè)置不正確。n4)該串口硬件有問題。n5)能力風暴操作系統(tǒng)被破壞。n6)串口線頭過松,接觸不好。 檢測能力風暴n下載自檢程序selftest.jc。n自檢項目。給機器

3、人檢查身體,共有九個項目,如下表所示:n 逐項檢查 n按下機器人的運行鍵,機器人就開始自檢了,LCD 液晶屏上顯示“AS-UII Inteligent Robot Test”,緊接著就開始了第一個自檢項目:n1)檢查 LCD 液晶屏nLCD 液晶顯示屏安裝在機器人的外殼上,作用是顯示各種信息,便于了解程序執(zhí)行中的情況。顯示屏可以顯示 162 個字符(每行 16 個字符,共 2 行),機器人與我們之間的交流可以通過顯示屏反映出來。顯示屏可以告訴您機器人運行的信息,這一點在以后調(diào)試程序時尤其顯得重要。自檢開始后,LCD 顯示屏標明的測試項目為“Now Test NO.1”,接著提示“LCD Tes

4、t”,然后就開始顯示字符,如數(shù)字、符號、字母等。注意觀察 LCD 顯示屏有沒有出現(xiàn)黑屏(出現(xiàn)整排蘭色條紋)或無字符等現(xiàn)象,如果沒有,說明機器人的 LCD顯示屏是正常的。n2)喇叭檢測n第二次按下“運行”鍵,機器人就開始了第二項檢查工作,LCD顯示屏標明的測試項目為“Now Test NO.2”,接著提示“Piezo Test”,請注意聽機器人是否在為你“唱歌”,聲音是否清晰響亮。機器人是用喇叭發(fā)聲,喇叭是機器人的“嘴巴”,它裝在主板上。顯示屏上的數(shù)字會伴隨著機器人的聲音不斷變化,顯示的數(shù)字是機器人發(fā)出的聲音頻率。音調(diào)越高,顯示的數(shù)字就越大。 n3)光敏檢測n機器人的光敏傳感器安裝在外殼上,兩只

5、光敏傳感器一左一右,用來識別外界光線的強弱。再按一下“運行”鍵,機器人就開始了第三項檢查工作,LCD標明的測試項目為“Now Test NO.3”,其后在 LCD 上有類似“Photo L242 R248”的提示,其中 L 表示“左光敏”,R 表示“右光敏”,字母后面的數(shù)字表示機器人檢測到的光線強度值。隨著光強的不同,光敏傳感器的感應數(shù)值也不同,其變化范圍為 0255。光強越弱,數(shù)值越大,光強越強,數(shù)值越小。在相同光強條件下,左右兩邊光敏傳感器的數(shù)值偏差應當小于 10。 n4)紅外檢測 n紅外傳感系統(tǒng)也安裝在機器人的外殼上,左右兩側(cè)一邊一只紅外發(fā)射管,中間一只紅外接收模塊。紅外傳感器的作用是檢

6、測機器人前方、左前方、右前方是否有障礙物。再按下“運行”鍵,機器人就開始了第四項檢查工作,LCD標明的測試項目為“Now Test NO.4”,其后在 LCD 出現(xiàn)“IR Test”提示。剛出廠時,紅外檢測的距離設(shè)置在 30cm 左右。將 A4 紙大小的障礙物分別放在機器人的正前方、左側(cè)、右側(cè)時,觀察 LCD 的變化。n5)話筒檢測 n再按一下“運行”鍵,機器人就開始了第五項檢查工作,LCD標明的測試項目為“Now Test NO.5”,其后出現(xiàn)“Microphone Test”提示。對著 AS-U的話筒槽孔(蜂窩狀小孔)說話,看 LCD 上的“”號是否增加。 n6)檢測碰撞傳感器 n機器人的

7、碰撞傳感器,相當于我們?nèi)祟惖挠|覺。它雖然只用了四只碰撞傳感器,卻能感知全身碰撞的方位。再按一下“運行”鍵,機器人就開始了第六項檢查工作,LCD標明的測試項目為“Now Test NO.6”,其后出現(xiàn)“Bumper Test”字樣。當你用手從不同方向觸動碰撞環(huán)時,LCD 就會相應地顯示出機器人受到碰撞的方向: n用手從正前方擠壓碰撞環(huán),LCD 顯示屏上顯示“Front”; n用手從正后方擠壓碰撞環(huán),LCD 顯示屏上顯示“Back”; n你也可以試試其他方向,如左、右、左前、右前、左后、右后n方等。 7)檢測運動系統(tǒng) n再把機器人放到開闊的平地上(有 2 米2 米大小即可),按一下“運行”鍵,n機

8、器人就開始第七項檢查工作。液晶屏標明的測試項目為“Now Test NO.7”,接著提示“Motor Test”,其后機器人將會移動、轉(zhuǎn)彎,同時在 LCD 上顯示機器人移動的累計“距離”和瞬時電機轉(zhuǎn)速。如: nMotor 30 L 100 nTest 31 R 100 n表示左電機速度 100,右電機速度 100,左輪轉(zhuǎn)過 30 個單位,右輪轉(zhuǎn)過 31 個單位。n 可能碰到的問題: n 1) 機器人運動突然停止,可能是機器人電量不足,請給機 器人充電。 n 2) 另外,注意不要讓機器人運動時頂住障礙物,否則會造 成電機堵轉(zhuǎn),容易損壞驅(qū)動芯片。 n8)檢測光電編碼器 n第七項檢測完成后,把機器人

9、從地上拿起來,再按一下“運行”n鍵,機器人就開始了第八項檢查工作,LCD 標明的測試項目為“Now Test NO.8”,接著提示“Encoders Test”。機器人的輪子每轉(zhuǎn)動 1 圈,碼盤也隨著轉(zhuǎn)動 1 圈,LCD 上顯示的光電編碼器的計數(shù)值約等于 33。即輪子轉(zhuǎn)動 1 周,光電計數(shù)為 33。我們可以用手分別轉(zhuǎn)動左、右兩側(cè)的輪子,觀察顯示屏上的數(shù)字變化情況。n9)檢測擴展電機 n再按一下運行鍵,顯示屏標明的測試項目為“Test No.9”,接著提示“DC Motor 3”,這時就開始檢測擴展電機了。擴展電機通常接在機器人主板的 MDCA3 接口上。此項檢測在此不多介紹,我們只要知道有這項

10、功能就行了。n自檢程序全部完成后,按一下復位鍵,機器人就會停止運行。最后關(guān)閉電源開關(guān)。也可以不按復位鍵,直接關(guān)閉電源開關(guān)。 自檢程序selftest.jcn/* Definitions of the registers in the MC68HC11E1 */nint porta = 0 x1000;nint pioc = 0 x1002;nint portc = 0 x1003;nint portb = 0 x1004;nint portcl = 0 x1005;nint ddrc = 0 x1007;nint portd = 0 x1008;nint ddrd = 0 x1009;nint

11、 porte = 0 x100A;nint cforce = 0 x100B;nint oc1m = 0 x100C;nint oc1d = 0 x100D;nint tcnt = 0 x100E;nint tic1 = 0 x1010;nint tic2 = 0 x1012;nint tic3 = 0 x1014;nint toc1 = 0 x1016;nint toc2 = 0 x1018;nint toc3 = 0 x101A;nint toc4 = 0 x101C;nint toc5 = 0 x101E;nint tctl1 = 0 x1020;nint tctl2 = 0 x1021

12、;nint tmsk1 = 0 x1022;nint tflg1 = 0 x1023;nint tmsk2 = 0 x1024;nint tflg2 = 0 x1025;nint pactl = 0 x1026;nint pacnt = 0 x1027;nint spcr = 0 x1028;nint spsr = 0 x1029;nint spdr = 0 x102A;nint baud = 0 x102B;nint sccr1 = 0 x102C;nint sccr2 = 0 x102D;nint scsr = 0 x102E;nint scdr = 0 x102F;nint adctl

13、= 0 x1030;nint adr1 = 0 x1031;nint adr2 = 0 x1032;nint adr3 = 0 x1033;nint adr4 = 0 x1034;nint option = 0 x1039;nint coprst = 0 x103A;nint pprog = 0 x103B;nint hprio = 0 x103C;nint init = 0 x103D;nint test1 = 0 x103E;nint config = 0 x103F;n/* Fundamental freq of this octave. Ohters: 220, 440, 880, 1

14、760 */nfloat octave = 440.0;nfloat a0 = octave * 1.000;nfloat b0 = (octave * 1.143);nfloat c = (octave * 1.218);nfloat d = (octave * 1.375);nfloat e = (octave * 1.542);nfloat f = (octave * 1.628);nfloat g = (octave * 1.810);nfloat a = (octave * 2.000);nfloat b = (octave * 2.0 * 1.143);nfloat c2 = (o

15、ctave * 2.0 * 1.218);n/* Note times: q - quarter, h - half, w - whole */nfloat tempo = 0.25;/* Duration of a quarter note */nfloat q = tempo;/* Quarter note */nfloat h = (2.0 * tempo);/* Half note */nfloat dh = (3.0 * tempo);/* Dotted half */nint note_display = 0;/* Global chooses whether to display

16、 note or not */nvoid note(float freq, float dur)n if (note_display)n printf(Piezo Test freq%fn, freq);n tone(freq,dur);n nvoid speaker()n note(c,q);n note(f,h); n note(g,q); n note(a,h);n note(g,dh);n note(e,5.0 * q);nn/* Piezo test */nvoid piezo_test()n int ctr = 0;n while (1)n printf( n);n ctr+;n

17、note_display = 1;/* Enable note frequency display */n speaker();n note_display = 0;/* Disable display */n n/* LCD test - should exercise all characters at all positions (but dosent for now) */nvoid lcd_test()n int j;n int chr = 32;n printf(nLCD Testn);n sleep (1.5);n while(1)n for (j = 1; j 4) + (1

18、& (val 3);/* Divide with round off */n for (j = 1; j);n for (j = blks; j 16; j+)n printf(-);nn/* Microphone test */nvoid mic_test()n int sum, i;n while (1)n sum = 0; /* Collect some samples */n for (i = 0; i 5 );/* Divide by 64 to average samples and multiply by */n printf(Microphone Testn); /*

19、2 to convert therm() range from 128 to 256 */n nn/* IR Test */nvoid ir_test()n int ir_val;n while (1)n ir_val = ir_detector();n if (ir_val = 0)nprintf( );/* Clear */n else if (ir_val = 4)nprintf( );/* Both */n else if (ir_val = 1)n printf( ); /* Right */n printf(IR Testn);n sleep(0.35);n n/* Print a

20、 3 digit 8-bit integer that takes up exactly 3 characters */nvoid p_byte(int val)n if (val 10) printf( %d, val); /* .n */n else if (val : 4 */n/* : -6 */n/* therm_diff is for displaying the difference between two quantities */nvoid therm_diff (int val)n if (val = 0)n printf( );/* Zero */n else if (v

21、al -8)n printf(%c ,127);/* Less than -8 */n else if (val 0)n repeat_char(32,8 + val);/* 32 = space */n repeat_char(60,abs(val);/* 60 = 8)n printf( %c,126);/* More than +8 */n elsen printf( );n repeat_char(62,val);n repeat_char(32,8 - val);n n/*photo test*/nvoid photo_test()n int pc_left, pc_right;n

22、while(1)n pc_left = photo(1);n pc_right = photo(2);n therm_diff(pc_left - pc_right);/* Diff thermometer points toward brighter light */n printf(Photo L); p_byte(pc_left);n printf( R); p_byte(pc_right); printf( n);n sleep(0.25);n nn/* Motor Test n 0123456789ABCDEFn Motor cc L vvvv Where cc is the num

23、ber of clicks during the past intervaln Test cc R vvvv* and vvvv is the commanded velocity (as a percentage of max)n*/n/* Count the number of digits in an integer (negative numbers add 1 for - sign) */nint digits(int signed_val)n int digs, val;n val = abs(signed_val);n if (val 100)n if (val 10)ndigs

24、 = 1;n else digs = 2; n else if (val 10000)n if (val = 0)n return digs;n else return (digs + 1);nn/* Print character ch, rep times */nvoid repeat_char(int ch, int rep)n int j = 0;n for (j = 0; j = cols)n printf(%d, val);/* May not be possible to print in required number of cols */n elsen repeat_char

25、(32,cols - digs);n printf(%d,val); nnvoid display_mot_test(int lvel, int rvel)n printf(Motor ); printn(rotation(1),2); printf( L ); printn(lvel,4); printf( );n printf(Test ); printn(rotation(2),2); printf( R ); printn(rvel,4); printf( );n printf( n);nnvoid set_show_motors(int left, int right)n motor

26、(1, left);n motor(2, right);n display_mot_test(left, right);nnvoid motor_test()n int i;n float interval = 0.4;n init_motors();n rotation(1);n rotation(2);n while(1)n n for (i = 0; i = 200; i = i + 10)/* Reverse direction while spinning */n set_show_motors(100 - i), (100 - i); wait(0.05); n stop();wa

27、it(0.5);n for (i = 0; i 9) | (test_number 1) test_number = 1;n printf(AS-UII Intelligent Robot Testn);n wait(1.5);n printf(Push RUN to nexttestn);n wait(1.5);n printf(n);n printf(Now test No.%d ,test_number);n for( i = 0; i ); n printf(n);nwhile(1)n nif(!run_keyflag) run_keyflag = runbutton();nwait(

28、0.2);nif(run_keyflag & !runbutton() run_keyflag = 2;nif(run_keyflag = 2)n run_keyflag = 0; nif(pid)n kill_process(pid); test_number +;n if (test_number 9) | (test_number 1) test_number = 1;n bit_clear(0 x1000, 8);bit_clear(0 x1020, 0b00000001); bit_clear(0 x100c,0 x60);n printf(n);n printf(Now t

29、est No.%d ,test_number);n for( i = 0; i ); n printf(n);n nif(test_number = 1)n pid=start_process(lcd_test();n else if (test_number = 2)n pid=start_process(piezo_test(); nelse if (test_number = 3)n pid=start_process(photo_test();nelse if (test_number = 4)n pid=start_process(ir_test();nelse if (test_n

30、umber = 5)n pid=start_process(mic_test();nelse if (test_number = 6)n pid=start_process(bumper_test();nelse if (test_number = 7)n pid=start_process(motor_test();nelse if (test_number = 8)n pid=start_process(encoder_test();nelse if (test_number = 9)n pid=start_process(dcmotor3_test();n nn幾種常用的操作n如何更新操

31、作系統(tǒng) n如何為機器人配置型號 n如何給機器人充電 n如何下載自檢程序 n如何下載當前程序 n如何正確使用“復位/ASOS”按鈕 n如何讓機器人走的直線更好 機器人的構(gòu)成的三大要素能力風暴機器人對信息的處理過程:五種傳感器,使它能象人一樣,有了視覺、聽覺、觸覺等感覺器官;然后這些 “感覺器官”將感覺到的外界信號送給機器人的大腦微控制器;微控制器根據(jù)裝載的JC程序進行思維,最后由執(zhí)行器來執(zhí)行相應的動作。 機器人的身體結(jié)構(gòu)n控制部分:機器人的核心組成部分,包括主板和控制按鍵1.主板:由很多電子元器件組成,跟人的大腦一樣,主要完成接收信息、處理信息、和發(fā)出指令等。2.控制按鍵:機器人的運行控制部件。

32、包括開關(guān)按鈕、電源指示燈、充電指示燈、充電口、下載口、復位/ASOS按鈕、運行鍵、通信指示燈n傳感器部分:包括五種基本的傳感器(P10)n執(zhí)行部分:揚聲器、LCD、主動輪及其驅(qū)動機構(gòu)、從動輪、直流電機前后后前4只碰撞傳感器2只紅外傳感器2只光敏傳感器2只光電編碼器1只麥克風外部存儲器單片機穩(wěn)壓與低電壓復位系統(tǒng)2只直流電機LCD喇叭1只直流電機或伺服電機電機驅(qū)動喇叭驅(qū)動直流驅(qū)動BUS各種外部擴展卡ASBUS總線串口通訊PC微控制器n擁有8個模擬口,5個輸入捕捉,3個輸出, 16位地址,8位數(shù)據(jù)總線,串口,以及4個通用I/O。n68HC11具有自下載功能,既可用于開發(fā)高層應用軟件,又便于開發(fā)底層驅(qū)

33、動,還能交互調(diào)試n微控制器68HC11由CPU、片內(nèi)存儲器、定時器系統(tǒng)、串行口、A/D、并行I/O口、中斷和復位系統(tǒng)組成。(原理結(jié)構(gòu)圖參見P34)PORT A:PA0-PA2輸入捕捉通道(input capture IC) PA3-PA6輸出比較通道(output compare OC) PA7通用的I/O口能力風暴機器人中:光電編碼器利用PA0,PA7口捕 捉計碼盤信號; 直流電機驅(qū)動采用PA5,PA6發(fā)出 PWM信號; 喇叭由PA3控制。PORT B:端口功能受68HC11E的工作模式的影響,單獨工作模式下,提供普通的8條輸出信號通道,擴展工作模式下,提供8位地址通道。能力風暴機器人中:P

34、ORT B與PORT C提供16條地址線, PORT B做為地址的高8位。PORT C:單獨工作模式下,提供普通的8條輸入/輸出信號通道,擴展工作模式下,提供8位地址/數(shù)據(jù)復合通道。能力風暴機器人中:PORT B與PORT C提供16條地址線,8條數(shù)據(jù)線(PORT C做為地址的低8位,地址/數(shù)據(jù)時分多用) PORT D:PD0-PD1作為串行通信口(SCI),PD2-PD5 串行外設(shè)接口(SPI); 能力風暴機器人中:用PD0,PD1 與PC機進行通信; PD0(RXD)接收數(shù)據(jù); PD1(TXD)發(fā)送數(shù)據(jù)。紅外傳感器:利用PD2,PD3設(shè)置發(fā)光二極管的狀態(tài);直流電機:利用PD4,PD5給驅(qū)動

35、電機芯片提供輸入脈沖。 PORT E:A/D口 能力風暴機器人中:光敏傳感器利用PE0,PE1口采集光敏電阻上的電壓值; 麥克風利用PE2口采集電壓值; 碰撞傳感器利用PE3口采集電壓值; 紅外傳感器利用PE4口采集紅外探測器的當前值; 外部存儲器外部存儲器n機器人擴展了32KB的低功耗靜態(tài)RAM,其優(yōu)點是既有靜態(tài)RAM的速度和方便(70 ns),又有E2PROM或Flash ROM的掉電不丟失性,從而能令程序和數(shù)據(jù)合用一個芯片。AS62256寫入的數(shù)據(jù)可保存10年以上,同時具有可靠的上電、掉電、強靜電等數(shù)據(jù)保護功能。(1)存儲體(2)地址譯碼器(3)數(shù)據(jù)緩沖器(4)控制邏輯電路62256引腳

36、圖選址和并行口擴展n32KRAM用了A0-A14共15根地址線,構(gòu)成32K的地址空間,A15為高電平時,和E、RESET等信號復合片選32KRAM;n32KRAM的地址空間為0X8000-0XFFFF。另一根地址線A15和其余地址線及讀/寫 線復合擴展4個輸入控制線,4個輸出控制線。nOX4000-0X4FFF:OS0(寫操作) 、ISO(讀操作)n0X5000-0X5FFF:OS1(寫操作) 、IS1(讀操作)n0X6000-0X6FFF:0S2(寫操作) 、IS2(讀操作)n0X7000-0X7FFF:OS3(寫操作) 、IS3(讀操作)復位系統(tǒng)和電源復位系統(tǒng)和電源n計算機有多種復位方式:

37、上電自動復位、外部RE-SET復位、看門狗復位(軟件工作不正常時)、時鐘監(jiān)視復位。機器人采用前兩種復位方式。n電源:機器人底盤下安裝有電池。滿電壓8.4V,額定工作電壓7.2V,最低工作電壓5V。采用的是鋰電池,沒有記憶和充爆問題。機器人的傳動機構(gòu)n齒輪傳動機構(gòu):將齒輪作為主要傳動件的傳動機構(gòu)。工作時,首先有一只主動輪先動起來,轉(zhuǎn)動過程中與另一個從動輪的齒一個一個的咬和下去,這個與它咬和的齒輪也會跟著旋轉(zhuǎn),這樣運動主動輪傳遞到從動輪。n傳動類型示意圖參見P13齒輪箱n齒輪箱里的傳動系統(tǒng)采用多級傳動。如果采用一級傳動,為了改變速度,就必須一個齒輪很小,一個齒輪很大,這樣不僅會造成空間上的浪費,并

38、且對小齒輪性能指標的要求也很高,所以,為了達到一定的傳動比,節(jié)省空間,采用多級傳動,一級一級的改變速度,直到將輸出軸的速度調(diào)整到所需要的指標。齒輪箱結(jié)構(gòu)圖P14機器人的動力n電動機:電動機是以電為原動力產(chǎn)生機械旋轉(zhuǎn)動力的裝置。機器人的動力來源于位于機器人底盤內(nèi)的電池,電池提供電能,電動機則將電能轉(zhuǎn)化為動能。n直流電機:電動機依靠直流電源工作,稱為直流電機。直流電機將軸的旋轉(zhuǎn)運動輸入到齒輪箱,然后齒輪箱的輸出軸控制輪子轉(zhuǎn)動,從而驅(qū)動機器人運動。機器人的驅(qū)動方式n差動驅(qū)動方式:是指將兩個有差異的或獨立的運動合成為一個運動。當我們把兩個電機的運動合成為一個運動時,這就成了差動運動。(參見P16-17

39、) n問題:為什么要采用差動驅(qū)動方式?如何進行差動驅(qū)動方式?執(zhí)行器n直流電機n液晶顯示器n喇叭n可擴展其它執(zhí)行器。例如再擴展一個直流電機,驅(qū)動滅火風扇裝置;安裝伺服電機來驅(qū)動機械手,讓機器人取東西等等?;镜膱?zhí)行器(一)直流電機:由直流電機驅(qū)動芯片SN754410來驅(qū)動,這里采用改變電機電壓的方式來改變電機的轉(zhuǎn)速。(直流電機的TN圖P15)脈寬調(diào)制 :直流電機驅(qū)動芯片提供給電機的信號是方波,不同的方波它的平均電壓不同。這樣采用不同的脈寬調(diào)節(jié)平均電壓的高低,進而調(diào)節(jié)電機的轉(zhuǎn)速。n調(diào)節(jié)好的電機的轉(zhuǎn)速,經(jīng)過減速器傳給主動輪,將高速轉(zhuǎn)化為低速,以滿足所需的運行速度。 機器人速度的調(diào)節(jié)n直流電機上電壓的

40、大小影響主動輪的轉(zhuǎn)速和轉(zhuǎn)矩(見P40圖3.34)n脈寬調(diào)制PWM:PA5、PA6分別給SN754410發(fā)脈寬調(diào)制信號,通過改變脈沖寬度來調(diào)節(jié)輸入到電機的平均電壓。(參見P41圖3.35)基本的執(zhí)行器(一) drive()同時設(shè)定兩個電機的速度 ,控制能力風暴的平移和旋轉(zhuǎn)。trans_vel為平移速度,rot_vel為旋轉(zhuǎn)速度,其中,左輪速度設(shè)為trans_vel+rot_vel,右輪速度設(shè)為trans_vel-rot_vel,也就是說,rot_vel 0,機器人順時針旋轉(zhuǎn),rot_vel 0,機器人逆時針旋轉(zhuǎn)。nvoid drive(int trans_vel, int rot_vel)n m

41、otor(1,trans_vel + rot_vel);n motor(2,trans_vel - rot_vel);n基本的執(zhí)行器(二)喇叭:喇叭是能力風暴的嘴,可發(fā)出多種聲音,對應的庫函數(shù)為 beep() 和 tone() 等。(參見P93)nvoid beep()nn tone(1000., .3);nLCD:用于顯示能力風暴的實時運行信息,在狀態(tài)檢測和故障診斷時特別有用 例題:perform/dance.jc nvoid tone(float frequency, float length)nn if(frequency 3) | (val1 & val3) 4); n msl

42、eep(2L); /* 等待 2毫秒 */n if(result=3) result=4;n return result;n二進制表示二進制表示n返回值: 0b00:沒有障礙 0b01:左方有障礙 0b10:右方有障礙 0b100:前方有障礙。即當左右兩方向都有障礙時就認為前方有障礙。紅外傳感器對應的庫函數(shù)是ir_detector()。 自編簡短程序:n請用紅外傳感器檢測障礙,并用液晶顯示器顯示,無障礙,顯示0,左邊有障礙顯示1,右邊有障礙顯示2,前方有障礙顯示4nvoid main()nint ir;nwhile(1)nir=ir_detector();n printf(“ir=%dn”,i

43、r);n wait(0.5);n專題項目專題項目 n紅外避障。機器人前進,發(fā)現(xiàn)障礙物就轉(zhuǎn)向。(相關(guān)模塊:紅外測障、條件判斷、永遠循環(huán)、直行、轉(zhuǎn)向)拓展項目:跟人走。n自己制作硬件,并進行軟件編程。n撰寫論文。內(nèi)容包括:相關(guān)的研究資料;硬件設(shè)計、制作詳細說明,并畫出硬件電路圖;詳細的軟件驅(qū)動程序,附加必要的軟件說明;測試運行效果圖,或者運行的錄象;工作總結(jié)與展望。參考的硬件電路及程序參考程序(main.h)n#includereg52.hn#includen#define uchar unsigned charn#define uint unsigned intn#define left_inf

44、rare 0n#define right_infrare 1nuchar flage =0 x00;nuchar display_flage=0 x00;n#define state1 0X5F /前進n#define state2 0X4F /右轉(zhuǎn)n#define state3 0X1F /左轉(zhuǎn)n#define state4 0X0F /后退n#define state5 0XfF /停車n#define light_off 0 x0f /關(guān)轉(zhuǎn)向燈n#define left_light 0X1F /左轉(zhuǎn)向燈n#define right_light 0X2F /右轉(zhuǎn)向燈n#define bac

45、k_light 0XcF /剎車燈n#define front_light 0 x3f /前燈n#define light_on 0 xff /開所有燈n#define true 1 n#define false 0nuchar code Product = Create-RBcar ; nuchar code webcom = www.create.cc; nuchar code talk1=Mastor: please;/14 charactersnuchar code talk2=touch my head; /12 charactersnuchar code talk3=thank y

46、ou!; /10 charactersnuchar code talk4=Im running; /11 charactersnextern void LCMInit(void);nextern void WriteCommandLCM(unsigned char WCLCM,BuysC); /BuysC為0時忽略忙檢測nextern void DisplayListChar(uchar X, uchar Y,uchar ListLength, uchar *DData,uchar n);n/*nsbit ledcs=P12; /74H573的片選信號nsbit left_led=P02; /

47、左紅外發(fā)射管nsbit right_led=P03; /右紅外發(fā)射管n*/ main.c文件n/*n程序名稱:小車避障程序n程序說明:硬件原理,小車左右兩個紅外二極管發(fā)射38KHz載波的信號(P02,P03),n 一個一體化的紅外接收頭接收載波信號(p32)。n*/n n/*n 紅外線接收子程序 n*/n#include main.hnvoid infrared_ray()interrupt 0using 3nn flage=0 x01;n display_flage=1;n IE &= 0Xfe; /EX0 =0; nn/ 延時子程序nvoid delay(uint n)nnwhil

48、e(-n);nnvoid Init0(void)nn IE |=0X80; /EA=1;n TCON |=0 x01; /IT0=1;nnvoid seng_wave(uchar timer,bit n)/timer -通過載波發(fā)射信號的時間,n-左右發(fā)射管的選擇nn uchar i;n P1 |= 0X04; /ledcs=1; n IE |= 0X01; /EX0 =1;n P0 |=0 x04;nfor(i=timer;i0;i-)n n if(n) P0 =0 x08; / 右發(fā)射管通過載波發(fā)射信號n else P0 =0 x04; / 左發(fā)射管通過載波發(fā)射信號n delay(1000

49、0);n n P1 &= 0Xfb; /ledcs=0;n IE &= 0Xfe; /EX0 =0; n nvoid light_control(uchar op)/轉(zhuǎn)向燈控制子程序nn P1 |=0X04; /ledcs=1; n P0 =op;n P1 &=0XFB; /ledcs=0;nnvoid control(uchar n,uchar state,uchar light)nn uchar i;n light_control(light);/轉(zhuǎn)向指示燈n P2 =state; /行使方向改變n for(i=n;i0;i-)n delay(5000);n P2=

50、state5;n delay(2000);n light_control(light_off);/關(guān)閉n P2=state1;nnvoid move_car(void)nn uchar temp =0 x00;n /*檢測程序段*/ n seng_wave(2,left_infrare); /左邊紅外管發(fā)射n if(flage=0 x01)temp |=0 x01;flage=0 x00;nseng_wave(2,right_infrare); /右邊紅外管發(fā)射n if(flage=0 x01)temp |=0 x02;flage=0 x00;n /*控制程序段*/n /左邊有障礙物,右轉(zhuǎn)n

51、if(temp=0 x01) control(5,state2, right_light);n /右邊有障礙物,左轉(zhuǎn)n else if(temp=0 x02) control(5,state3,left_light ); n /兩個方向都有障礙物,后退,右轉(zhuǎn)n else if(temp=0 x03) control(10,state4,back_light );control(5,state2,right_light );n temp =0 x00;nnvoid main(void)nn uchar dis_flage=0 x00;n Init0();n P1 |= 0X04; /ledcs=

52、1; n P0 = 0 xFf;n P1 &=0XFB; /ledcs=0;n LCMInit(); /LCM初始化 n n DisplayListChar(0,0,14,Product,true);n DisplayListChar(0,1,15,webcom,false);n delay(50000);n WriteCommandLCM(0 x01,1); /顯示清屏n delay(100);n DisplayListChar(0,0,14,talk1,false);n DisplayListChar(0,1,13,talk2,false);nwhile(1)n n move_ca

53、r();n if(display_flage=0 x01 )&(dis_flage =0 x00)n n P1 |= 0X04; /ledcs=1; n P0 = 0 x0f;n P1&=0XFB;n dis_flage=0 x01;n WriteCommandLCM(0 x01,1); /顯示清屏n delay(100);n DisplayListChar(0,0,10,talk3,false);n DisplayListChar(0,1,11,talk4,false);n n delay(20000);n n能力風暴機器人 聲音傳感器聲音傳感器 問題n麥克風如何采集聲音信息

54、,并如何將采集到的信息傳遞給微控制器的?麥克風n它是能夠識別聲音聲強大小的聲音傳感器。n麥克風采集到的信號通過放大,輸出信號至PE2口。沒有聲音時,電壓為2.5V左右,轉(zhuǎn)換為8位二進制數(shù)后得到的十進制整數(shù)為127左右。當有聲音時,輸出電壓在2.5V上下波動,PE2測得的電壓和2.5V相減的絕對值越大,則聲音越大。n麥克風對應的庫函數(shù)是 microphone()。n在JC窗口中輸入如下程序塊:while(1) printf(“mic=%dn”, analogport(2); wait(0.1); 當周圍環(huán)境很安靜時,LCD上顯示mic=127,對著麥克風發(fā)出聲音,可以看到顯示的值不斷變化,其變化

55、范圍為0255。n如MIC=100=(127-27)與MIC=154=(127+27)表示兩次采集的瞬時聲強是相同的,只是波動的方向不同。nMicrophone()對數(shù)據(jù)進行了處理,使返回值在 0255 之間。n/*讀麥克風,返回值0255,聲音越響數(shù)值越大*/nint microphone()nn return abs(analogport(2)-127)*2;n工作原理分析n通常聲音傳感器內(nèi)置一個對聲音敏感的電容式駐極體話筒。聲波使話筒內(nèi)的駐極體薄膜振動,導致電容的變化,而產(chǎn)生與之對應變化的微小電壓。這一電壓隨后被轉(zhuǎn)化成05V的電壓,經(jīng)過A/D轉(zhuǎn)換被數(shù)據(jù)采集器接受,并傳送給單片機。 n能力

56、風暴機器人麥克風采集到的信號通過LM386(IC5)進行放大,放大倍數(shù)為200(由C25確定)。n音訊放大器LM386是專為低損耗電源所設(shè)計的功率放大器。它的內(nèi)建增益為20,透過pin1和pin8腳位間的電容的搭配,增益最高可達200。 LM386特別適用于電池供電的場合。nLM386輸出信號接至PE2。沒有聲音時,電壓為25V左右,轉(zhuǎn)換為8位二進制數(shù)后得到的十進制整數(shù)為127左右 n具體硬件電路圖如下:自編簡短程序:n請用麥克風檢測聲音,讓機器人第一次聽到聲音時,全速前進;第二次聽到聲音時,停下來;如此循環(huán)。(有效聲音標志microphone()返回值大于180) nVoid main()n

57、n int I=0;n int mic;n while(1)n n mic=microphone();n if (mic180) I+=1;n if (I=1) drive(100,0);n else n stop(); I=0;n 自編簡短程序:n把幾個機器人放在一起,編寫程序并下載運行,試一試機器人你叫我應的場面是不是很有趣。n一部分機器人先發(fā)音,一部分機器人先偵聽。發(fā)音的機器人發(fā)音完畢后轉(zhuǎn)入偵聽,聽到聲音的機器人回應(發(fā)音)。n/*初始化b=1時,設(shè)置該機器人先偵聽;初始化b= -1時,設(shè)置該機器人先發(fā)出聲音。*/nvoid main()nint b=1;nint mic;nwhile(

58、1)nmic=microphone();nprintf(mic=%dn,mic);nwait (0.5);nif(b=1&mic140)nb=b*(-1);nbeep ( );nwait (2.0);nif(b=-1)nnbeep();nwait (1.0);nb=b*(-1);n 聲音檢測n用機器人檢測自己的聲音,并顯示數(shù)值(相關(guān)模塊:聲音檢測、顯示、延時等待、永遠循環(huán))。n拓展項目 1:百米賽跑。 n拓展項目 2:寵物。 討 論 課n通過前段時間的課程的學習,大家有什么收獲?n大家對這門課的感受如何?n對這門課的學習,有什么想法?n有些什么實驗心得?有些什么體會?n通過軟件編程,來

59、對實物進行控制,與以前學過的純理論上的編程,有些什么不一樣的地方?n如何理解“實踐是檢驗真理的唯一標準”這句話?n設(shè)計制作機器人的想法呢? 光敏傳感器光敏傳感器 n1、樓梯聲控燈n2、自動調(diào)光臺燈n3、自動控制路燈n4、樓道應急燈n光敏傳感器(光敏電阻)其實是一個可調(diào)電阻器,只是它的阻值因照射在它上面的光線強弱的變化而變化。n功能:檢測周圍環(huán)境光線的強弱。n在光傳感器中,感應光強度不同,光敏電阻值就會有變化。它只對可見光有效,光敏電阻值近似與光強度成反比。光線越強,返回值越小。使用時應取其多次平均值,因為返回值具有隨機性。n平常用的最多的有受光照后阻值急劇下降的CDS(硫化鎘)光敏電阻、受光照

60、射后能夠產(chǎn)生光電流的光敏二極管、以及用光電流替代基極電流制成的光敏三極管。n還可以采用光敏三極管作為光敏傳感器的感光電路。如果光敏傳感器受到光照,電路的輸出電壓就會降低。 光敏電阻在強光下阻值只有幾十;在很暗的環(huán)境下阻值可達幾百K。有的光敏電阻的特性剛好相反,它的阻值隨光線的加強而增大 。能力風暴機器人上的光敏電阻屬于前者。 兩個光敏電阻分別與模擬輸入口PE0,PE1相連,系統(tǒng)中采集的是光敏電阻上的電壓值。光暗時,電阻上的電壓接近5V;光強時,接近0V。光敏電阻的阻值變化是連續(xù)的,因此PE0,PE1的電壓變化也是連續(xù)的,電壓信號經(jīng)過模數(shù)轉(zhuǎn)換變成8位二進制數(shù),即十進制0-255。0表示光線最強;255表示光線最弱。n在JC中,光敏傳感器的庫函數(shù)是:n 左光敏:photo (1); 右光敏: photo (2)n 在程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論