機器人創(chuàng)新實驗3指導書_第1頁
機器人創(chuàng)新實驗3指導書_第2頁
機器人創(chuàng)新實驗3指導書_第3頁
機器人創(chuàng)新實驗3指導書_第4頁
機器人創(chuàng)新實驗3指導書_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 機器人創(chuàng)新實驗(3)實驗指導書機器人實驗室實驗一 熟悉機器人與C51單片機硬件軟件一、實驗目的1、掌握寶貝車機器人用C51教學板與計算機硬件連接和寶貝車基本結構;2、熟悉及掌握C51系列單片機Keil uVision IDE(集成開發(fā)環(huán)境)軟件、ISP下載軟件及串口調試終端的使用方法。二、實驗設備及軟件寶貝車機器人套件、ISP下載線、串行接口線、計算機、電源。Keil uVision2 IDE集成開發(fā)環(huán)境、PROGISP1.72下載軟件、串口調試軟件。三、實驗內容和步驟單片機控制的寶貝車機器人是通過串并口或USB接口通信交互,由硬件系統(tǒng)與軟件系統(tǒng)相互結合組成的一個完整的智能控制系統(tǒng)。單片機必

2、須與外圍設備及軟件組成一個完整的應用系統(tǒng)(如圖1.1)。1、熟悉寶貝車機器人的結構組成(如圖1.2):小車底板、車輪、教學板、伺服電機、電池盒。這是寶貝車機器人的硬件系統(tǒng),它的微控制器(MCU)是由Atmel公司生產與51系列兼容的8位AT89S52單片機。 圖1.1單片機應用系統(tǒng)圖 圖1.2采用C51單片機的機器人2、教學板指方便單片機與電源、ISP下載線、串口線以及各種傳感器和電機的連接制作的一個電路板(如圖1.3)。將寶貝車機器人與計算機硬件連接,并連接到電源。l 連接單片機教學板ISP接口到計算機,以便程序下載;l 連接單片機教學板串行接口到計算機,以便調試和交互;l 連接機器人到電池

3、或者是供電電源。USBasp C版通用編程器圖1.3 C51單片機教學板3、運用C語言編程,運用編譯器編譯生成可執(zhí)行文件并下載到單片機,用串口調試軟件查看單片機輸出信息。建立用戶文件夾,方便管理程序,拷入編譯所需頭文件(例如,將光盤“頭文件”文件夾中的文件拷貝到C:Program FilesKeilC51INC文件夾里)。進入編程系統(tǒng)(Keil uVision2 IDE):1) 新建項目工程(*.uv2):ProjectNew Project,命名,保存在新建立的用戶文件夾內;選擇單片機生產公司及類型:Atmel、AT89S52。2) 新建C程序文件:;編輯好程序,保存為*.c的文件。注意程序

4、關鍵字的拼寫、英文標點、字母的大小寫等。3) 添加C程序到項目工程:Source Group 1右鍵單擊Add Files to Group Source。Source Group 1前面出現(xiàn)+號,單擊它出現(xiàn)剛才添加的C程序文件名,單擊此C文件,Keil會自動識別關鍵字,并以不同的顏色提示用戶加以注意,這樣會使用戶少犯錯誤,有利于提高編程效率。4) 生成執(zhí)行文件十六進制目標代碼文件(*.hex):Target 1 右鍵單擊Option for targetTarget 1Output選中“Create Hex Fi:”連接編譯生成可執(zhí)行文件*.hex。編譯要求沒有錯誤產生,允許出現(xiàn)警告。進入下

5、載系統(tǒng)(PROGISP1.72):1) 參數(shù)選擇:勾選芯片擦除、編程FLASH、校驗FLASH。單片機型號:AT89S52。2)單擊“調入 Flash”按鈕,找到要下載的 HEX 文件。3) 單擊“編程”區(qū)的“擦除”按鈕,開始擦除芯片內部程序。芯片擦除成功后,點擊“自動”按鍵,完成寫、校驗Flash。等待下載完畢后,固件下載完成。拔掉USBASP下載器ISP 接口排線。注意:要將ISP下載線連接計算機和機器人教學板,電源接好,開關撥到“1”檔位置(PRO),給教學板通電,才能進行單片機程序下載。從執(zhí)行文件下載到單片機的那個時刻開始,程序就開始運行。單片機向計算機發(fā)送信息。可利用串口調試軟件查看

6、單片機輸出信息,“Reset”按鈕可讓下載到單片機內的程序重新運行一次。使用串口調試助手之前,首先使用串口線將單片機的串口與計算機的USB口相連,然后通過計算機的設備管理器查看要使用的串口號,如圖所示。記下該串口號,打開串口調試助手軟件,選擇正確的串口號,如圖所示。4、做完實驗斷開電源,將開關撥到“0”檔(OFF),系統(tǒng)在不使用時沒有消耗電能,電池可以用得更久。拆卸串口線還原。四、實驗程序1、程序HelloRoBot.c。#include<uart.h>int main(void)uart_Init(); /串口初始化printf("Hello,this is a mes

7、sage from your Robotn");while(1);2、 利用while循環(huán)與delay_nms( )函數(shù)(毫秒級的延時)編程:每秒發(fā)送一個信息(內容為英文自己定),通過串口顯示在計算機上。delay_nms( )函數(shù)在BoeBot.h頭文件中有定義。即#include<Boebot.h>,編譯時系統(tǒng)將根據頭文件自動將延時函數(shù)插入到程序中。3、 讓豎線“|”在屏幕上順時針或逆時針轉動輸出。 參考下面的程序代碼: printf("|"); delay_nms(500); printf("/"); delay_nms(50

8、0); printf("-"); delay_nms(500); printf(""); delay_nms(500); printf("|"); delay_nms(500);4、顯示靜態(tài)圖形:* * * * * * * * * *五、實驗報告要求1、按要求:每秒發(fā)送一個信息(內容為英文自己定),通過串口顯示在計算機上,進行程序設計。2、程序調試心得。3、觀察到的程序運行效果并加以分析。六、思考題1、什么是單片機?2、MCS51、8051、C51、AT89S52之間是什么關系?3、寶貝車機器人采用的AT89S52單片機的特點是什么?

9、4、#include<uart.h>頭文件的作用是什么? 5、程序HelloRoBot.c中while(1);的作用是什么?注:實驗操作現(xiàn)場檢查。實驗二 C51接口與伺服電機控制一、實驗目的1、理解和掌握C51單片機的輸入輸出接口的特性; 2、理解機器人伺服電機PWM調速原理,C語言編程輸出脈沖序列控制機器人輪子運動。二、實驗設備及軟件寶貝車機器人、ISP下載線、串行接口線、計算機、電源、螺絲刀、紅色發(fā)光二極管2個和470電阻2個。Keil uVision2 IDE集成開發(fā)環(huán)境、PROGISP1.72下載軟件、串口調試軟件。三、實驗內容和步驟1、用C51單片機的P1口的位輸出高低電

10、平控制LED發(fā)光二極管的閃爍??唇滩母戒汣關于面包板及LED的介紹。面包板上共有18行插座,通過中間槽分為兩列。每一行由5個插座組成,這5個插座在面包板上是電氣相連的,如將兩根導線分別插入五口插座行的任意兩個插座中,它們都是電氣相連的?!癎ND”對應于教學板的接地端,“Vcc”指校準的+5V電壓。發(fā)光二極管(如圖2.1)是單向導電的電子管,長腳為正極,短腳為負極,必須連接正確,否則不能正常工作。通過5mA左右即可發(fā)光,電流越大,其亮度越強,但若電流過大,會燒毀二極管。給發(fā)光二極管串聯(lián)一個電阻的目的是限制通過發(fā)光二極管的電流不要太大。 圖2.1 LED零件圖 圖2.2發(fā)光二極管與I/O腳P1_0

11、的連接色環(huán)電阻為五色,用五條色環(huán)表示電阻的阻值大小。黑0 棕1 紅2 橙3 黃4 綠5 藍6 紫7 灰8 白9 金、銀表示誤差具體如下:l 第一條色環(huán):阻值的第一位數(shù)字;l 第二條色環(huán):阻值的第二位數(shù)字;l 第三條色環(huán):阻值的第三位數(shù)字;l 第四條色環(huán):阻值乘數(shù)的10的冪數(shù);l 第五條色環(huán):誤差(常見是棕色,誤差為1%)。由此,470電阻為黃紫黑黑棕。搭建一個發(fā)光二極管閃爍的LED電路(如圖2.2)并編寫程序HighLowLed.c。注意,在教學底板上搭建電路時要斷開電源。修改程序讓兩個LED同時閃爍,并修改程序讓兩個LED交替亮或者滅,也可以改變延時函數(shù)參數(shù)n的值,改變LED閃爍頻率。Hig

12、hLowLed.c程序如下:#include<BoeBot.h>#include<uart.h>int main(void)uart_Init(); /初始化串口printf("The LED connected to P1_0 is blinking!n");while(1)P1_0=1; / P1_0 輸出高電平delay_nms(500); /延時500msP1_0=0; / P1_0 輸出低電平delay_nms(500); /延時500ms【拓展訓練】實現(xiàn)4個或更多LED流水燈控制,對應流水燈從全滅到一個一個亮或者對應流水燈從全亮到一個一個

13、滅。編程方法與兩個LED閃爍類似,接入的LED二極管繼續(xù)接在面包板左側其他的端口位上。注意,程序控制各引腳輸出高低電平要與所接的端口要一一對應起來。2、兩伺服電機調零。在操作之前,先確認一下機器人兩個伺服電機的電源控制線(如圖2.3)是否已經正確的連接到C51單片機教學板的兩個專用電機控制接口上。P1_1引腳控制左邊電機,P1_0引腳控制右邊電機,在電路板上我們分別采用W、R、B來表示信號線、電源線和地,電機控制線顏色與教學板接口對應字母一致(白紅黑對應WRB)。圖2.3伺服電機實物圖 圖2.4 電壓“占空比”與平均電壓關系電機調速應用PWM(脈寬調制)基本原理,通過控制固定電壓的直流電源開關

14、頻率改變負載兩端的電壓。在PWM驅動控制的調整系統(tǒng)中,按一個固定的頻率來接通和斷開電源,并根據需要改變一個周期內“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來改變平均電壓的大小,從而控制電動機的轉速。如圖2.4,在脈沖作用下,當電機通電時,速度增加;電機斷電時,速度逐漸減少。只要按一定規(guī)律,改變通、斷電的時間,即可讓電機轉速得到控制。高電平持續(xù)的時間控制電機轉速,即脈沖寬度控制連續(xù)旋轉電機速度和方向。將時間間隔為20ms,脈寬為1.5ms的一系列脈沖稱為零點標定信號,電機轉速為零,機器人輪子靜止不動。如果電機沒有進行零點標定,機器人輪子會轉動,如圖2.5所示,用螺絲刀輕

15、輕調節(jié)馬達上的電位器,直到馬達停止轉動。如電機已經完成了零點調節(jié),不會轉動。但是損壞了或有缺陷的電機有時也不轉動。繼續(xù)檢測:l 當高電平持續(xù)時間為1.3ms時,電機順時針全速旋轉;l 當高電平持續(xù)時間為1.7ms時,電機逆時針全速旋轉;l 當高電平持續(xù)時間為1.3ms1.5ms之間時,電機順時針旋轉;l 當高電平持續(xù)時間為1.5ms1.7ms之間時,電機逆時針旋轉。 圖2.5.1經過孔把螺絲刀插入電位器 圖2.5.2輕輕地旋轉螺絲刀調節(jié)電位器3、測試電機,改變脈沖寬度控制機器人運動速度和方向。如圖2.6,定義機器人的前、后、左、右四個方向。例程中使用printf函數(shù)是為了起提示作用,若覺得串口

16、線影響機器人的運動,可以不用此函數(shù)。將程序下載到單片機,關閉機器人電源開關,斷開ISP下載線,將開關撥到“2”檔(RUN),觀察寶貝車運動情況。圖2.6 機器人及其前進方向的定義四、實驗程序1、參考一個LED閃爍的程序(程序HighLowLed.c),編寫程序讓兩個LED同時閃爍,并修改程序讓兩個LED交替閃爍,也可以改變延時函數(shù)參數(shù)n的值,改變LED閃爍頻率。*編程實現(xiàn)4個或更多LED流水燈控制,對應流水燈從全滅到一個一個亮或者對應流水燈從全亮到一個一個滅。2、 編程實現(xiàn)兩伺服電機調零,可以分別調零,也可一起調零。實現(xiàn)右輪調零參考代碼如下,注意編程的完整性。while(1)P1_0=1; /

17、P1_0 輸出高電平delay_nus(1500); /延時1.5msP1_0=0; /P1_0 輸出低電平delay_nus(20000); /延時20ms3、 驗證下列程序BothServosThreeSeconds.c是否讓寶貝車向前進3s,后退3s。并根據此程序按照實驗報告要求編程。#include<BoeBot.h>#include<uart.h>int main(void)int counter;uart_Init();printf("Program Running!n");for(counter=1;counter<=130;co

18、unter+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);for(counter=1;counter<=130;counter+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);while(1);4、 用LED 指示電機運動狀態(tài) 在實際應用中,LED 往往起到狀態(tài)提示作用,交通紅綠燈就是一個典型的應用。你可以修改程序來模擬交通燈過程:假設A 燈為交通燈,B 燈為電機運行狀態(tài)指示燈。模擬過

19、程如下:A 燈閃爍,B 燈滅,電機停止運行;A 燈滅,B 燈亮,電機開始運行;B 燈閃爍,電機減速運行;B 燈滅,A 燈閃爍,電機停止運行;如此往復。五、實驗報告要求1、實現(xiàn)兩個LED交替閃爍的編程及電路原理圖,觀察到的運行效果并加以分析,程序調試心得。有興趣的同學還可以完成4個或更多LED流水燈控制,對應流水燈從全滅到一個一個亮或者對應流水燈從全亮到一個一個滅。要求編程及繪制電路原理圖,觀察到的運行效果并加以分析,程序調試心得。2、編程實現(xiàn)兩伺服電機調零,可以分別調零,也可一起調零,觀察到的運行效果并加以分析,程序調試心得。3、控制兩個電機的delay_nus函數(shù)的參數(shù)n有不同的組合,各種組

20、合的運動狀況填寫下表。P1_1P1_0描述運動狀況17001300全速,P1_1電機逆時針,P1_0電機順時針1300170017001700130013001500170015001300130015001700150015001500兩個電機都靜止六、思考題1、LED閃爍的工作原理,即引腳輸出高低電平信號,發(fā)光二極管會滅或者亮的原因是什么?2、LED閃爍的實驗中,逐漸減小延時函數(shù)參數(shù)n的值,還能看到LED閃爍嗎?為什么?3、LED閃爍的實驗中,分別將開關撥到“1”(PRO)與“2”(RUN),看實驗現(xiàn)象有什么區(qū)別?分析原因。4、將電機調零的程序下載到單片機,開關撥到 “2”,按“Reset

21、”按鈕,輪子仍轉動,不能完全停下來,試分析有哪些原因造成的? 5、編程給與P1_1連接的左輪發(fā)出脈寬為1.7ms,與P1_0連接的右輪發(fā)出脈寬1.3ms,觀察到寶貝車后退,分析是什么原因引起的?注:實驗操作現(xiàn)場檢查。實驗三 C語言函數(shù)與機器人巡航控制一、實驗目的1、掌握對單片機編程使機器人做基本的巡航動作:向前、向后、左轉、右轉和原地旋轉。通過測試機器人脈沖數(shù)與機器人運動距離的關系,實現(xiàn)機器人的精確動作。 2、掌握編寫程序時機器人由突然啟動或停止變?yōu)橹鸩郊铀倩驕p速運動。3、寫一些執(zhí)行基本巡航動作的函數(shù),每一個函數(shù)都能夠被多次調用。4、將復雜巡航運動記錄在數(shù)組中,編寫程序執(zhí)行這些巡航運動。二、實

22、驗設備及軟件寶貝車機器人、ISP下載線、串行接口線、計算機、電源。Keil uVision2 IDE集成開發(fā)環(huán)境、PROGISP1.72下載軟件、串口調試軟件。三、實驗內容和步驟1、驗證程序ForwardLeftRightBackward.c,看機器人是否向前、左轉、右轉及向后走。如果寶貝車向前運動的過程輕微向左或右偏移,不是一條直線。結果就是左輪與右輪程序上是以全速行駛,實際輸出有速度差,要么左輪速度太慢,要么右輪速度太慢。讓輪子加速不太實際,但是減小輪子的速度就可以解決問題。電機速度是脈沖寬度即程序中延時函數(shù)delay_nus的參數(shù)n決定的。n越接近1500,電機轉速越慢。要重復試驗得到一

23、個比較準確的輸出。將確定好的沿直線運動的參數(shù)更新到程序ForwardLeftRightBackward.c中相應的值。利用for循環(huán)控制電機的運行時間,由小車運動形式決定輸出距離或角度。例程中for循環(huán)的循環(huán)次數(shù)為65,小車運行時間為1.5s,運行距離減半。for循環(huán)的循環(huán)次數(shù)為26,電機的運行時間決定小車旋轉的角度。調整for循環(huán)的循環(huán)次數(shù)得到非常接近你想要的旋轉角度。由于每個小車的情況不一樣,在向左轉與右轉中for循環(huán)的循環(huán)次數(shù)增加或減少電機的轉角,使寶貝車旋轉期望的角度,例如旋轉90度。如果發(fā)現(xiàn)一個值使旋轉超過90°,而另一個使旋轉小于90°,嘗試選擇一個使其旋轉更多

24、的值,然后稍微減小電機速度。測試一下你的小車要循環(huán)多少次才能旋轉90度。在轉彎半徑較大時,可以采用一個電機增速另一個電機減速的方法轉彎。由于小車結構的影響,這種方法轉彎較慢,轉彎半徑較大,效果受運動速度的影響大。在需要轉彎半徑較小時,可以采用一個電機轉動,而另一個靜止的方法。兩個電機等速反向轉動可以實現(xiàn)原地轉彎。測試寶貝車速度。將寶貝車放在尺子旁邊,確保輪子接觸的地面與尺子的0厘米對齊在一條線上,按復位鍵重新運行程序,讓寶貝車向前走1秒鐘,測量從出發(fā)點到機器人停下來所接觸的地面距離,測量結果就是以厘米/s為單位的。可以參考下列程序。#include<BoeBot.h>#includ

25、e<uart.h>int main(void)int counter;uart_Init();printf("Program Running!n");for(counter=0;counter<130;counter+)/運行3 秒P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);while(1);2、將加速或減速與基本巡航動作結合起來,使機器人的每一個動作都能夠勻加速或勻減速。參考教材程序StartAndStopWithRamping.c及相似代碼更改For

26、wardLeftRightBackward.c。3、教材程序MovementsWithFuntions.c、MovementsWithOneFuntion.c運行結果與ForwardLeftRightBackward.c產生的效果是相同的,用函數(shù)調用簡化運動程序。修改MovementsWithOneFuntion.c使機器人走一個正方形。4、驗證程序NavigationWithSwitch.c是否走了一個矩形。使用數(shù)組或調用函數(shù)編寫程序,使機器人按你的想法運動,實現(xiàn)較為復雜的運動。【拓展訓練】編程使履帶坦克機器人、相撲機器人、爬蟲機器人巡航控制。四、實驗程序1、驗證程序ForwardLeftR

27、ightBackward.c。#include<BoeBot.h>#include<uart.h>int main(void)int counter;uart_Init();printf("Program Running!n");for(counter=1;counter<=65;counter+)/向前P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);for(counter=1;counter<=26;counter+)/向左轉P1_1=1

28、;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);for(counter=1;counter<=26;counter+)/向右轉P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);for(counter=1;counter<=65;counter+)/向后P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);w

29、hile(1);2、編程反復測試一下小車要循環(huán)多少次才能旋轉精確的90度。3、編程測試寶貝車速度,測量結果就是以厘米/s為單位的。4、參考以下程序StartAndStopWithRamping.c及相似代碼,更改ForwardLeftRightBackward.c,使機器人的每一個動作都能夠勻加速或勻減速。#include<BoeBot.h>#include<uart.h>int main(void)int pulseCount;uart_Init();printf("Program Running!n");for(pulseCount=10;pul

30、seCount<=200;pulseCount=pulseCount+1)P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);for(pulseCount=1;pulseCount<=75;pulseCount+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);for(pulseCount=200;pulseCount>=0;pulseCo

31、unt=pulseCount-1)P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);while(1);5、 修改MovementsWithOneFuntion.c使機器人走一個正方形。#include <BoeBot.h>#include <uart.h>void Move(int counter,int PC1_pulseWide,int PC0_pulseWide)int i;for(i=1;i<=counter;i+)

32、P1_1=1;delay_nus(PC1_pulseWide);P1_1=0;P1_0=1;delay_nus(PC0_pulseWide);P1_0=0;delay_nms(20);int main(void)uart_Init();printf("Program Running!n");Move(65,1700,1300);Move(26,1300,1300);Move(26,1700,1700);Move(65,1300,1700);while(1);6、使用數(shù)組或調用函數(shù)編寫程序,使機器人按你的想法運動,實現(xiàn)較為復雜的運動。五、實驗報告要求1、程序設計小車要循環(huán)多少

33、次才能旋轉精確的90度,觀察到的運行效果并加以分析,程序調試心得。2、更改ForwardLeftRightBackward.c,使機器人的每一個動作都能夠勻加速或勻減速。寫出程序,觀察到的運行效果并加以分析,程序調試心得。3、修改MovementsWithOneFuntion.c,使機器人走一個正方形。寫出程序,觀察到的運行效果并加以分析,程序調試心得。4、使用數(shù)組或調用函數(shù)編寫程序,使機器人按你的想法運動,實現(xiàn)較為復雜的運動。寫出程序,觀察到的運行效果并加以分析,程序調試心得。六、思考題1、在程序ForwardLeftRightBackward.c中,向左轉與右轉的for循環(huán)的循環(huán)次數(shù)為26

34、,這是什么意思?程序運行效果是怎樣的?2、機器人完成各種巡航動作的過程中,每次啟動和停止時,動作太快,幾乎傾倒,為什么會這樣呢?采用什么方法可以解決這種問題?3、讓小車實現(xiàn)轉彎的方法有哪些?注:實驗操作現(xiàn)場檢查。實驗四 C51接口與觸覺導航一、實驗目的1、接觸型傳感器作為輸入反饋與C51單片機的編程實現(xiàn)。 2、編程使機器人基于胡須導航,條件判斷語句的嵌套與機器人的人工智能決策的編程使機器人逃離進入墻角死區(qū)。二、實驗設備及軟件寶貝車機器人、ISP下載線、串行接口、USB接口、計算機、電源、安裝機器人胡須,所需硬件如圖4.1。元件清單: (1) 胡須狀金屬絲2根; (2) 平頭M3x22盤頭螺釘2

35、個; (3) 13mm圓形立柱2個;(4) M3尼龍墊圈2個; (5) 3-pin公-公接頭2個;(6) 220電阻2個; (7) 10k電阻2個。 圖4.1 胡須硬件Keil uVision2 IDE集成開發(fā)環(huán)境、PROGISP1.72下載軟件、串口調試軟件。三、實驗內容和步驟1、通過布置恰當?shù)碾娐?,在機器人前端安裝并測試一個稱為胡須的觸覺開關,對C51單片機編程來監(jiān)視觸覺開關的狀態(tài)。安裝并測試機器人胡須見圖4.2。確定兩條胡須比較靠近,但又不接觸面包板上的3-pin頭,推薦保持3mm的距離。參考接線圖4.3,搭建胡須電路。色環(huán)電阻你會讀嗎?(提示:棕紅橙黃綠,藍紫灰白黑)220電阻(紅紅黑

36、黑棕),10k電阻(棕黑黑紅棕)。注意:右邊胡須狀態(tài)信息輸入是通過P1口的第4引腳完成,左邊胡須狀態(tài)信息輸入是通過P2口的第3引腳完成。也可以接其他引腳,注意電路與程序要匹配。圖4.2 安裝機器人胡須 圖4.3 胡須電路示意圖 圖4.4是實際的參考接線圖,安裝好的觸覺胡須的機器人如圖4.5。 圖4.4 胡須接線圖 圖4.5安裝好觸覺胡須的機器人單片機AT89S52的四個端口P0、P1、P2和P3是可以按位來操作,從低到高依次為第0口、第1口第7口,書寫分別為PX.0、PX.1、PX.7(X取0到3)。P1&0x10:取P1.4P1P1.7P1.6P1.5P1.4P1.3P1.2P1.1

37、P1.00x1000010000P2&0x08:取P2.3P2P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.00x0800001000P1&0x10和P2&0x08分別提取了P1.4和P2.3的值,屏蔽了其他位。測試胡須源程序TestWhiskers.c。要用到調試終端,當程序運行時要確保串口已經接好。弄清哪條胡須是左胡須,哪條是右胡須。當胡須沒有被碰到,使引腳電壓為5V,胡須狀態(tài)為1;當胡須被碰到時,使引腳電壓為0V,胡須狀態(tài)為0。2、通過胡須導航。機器人行走時,如果有胡須被觸動,意味著碰到了什么。嘗試讓寶貝車向前行走,當在其路線上遇到障礙物時,它將后

38、退、旋轉并向另一個方向行走以避開障礙物。具體程序RoamingWithWhiskers.c??梢哉{整Left _Turn()和Right_Turn ()子程序中for循環(huán)的循環(huán)次數(shù)增加或減少電機的轉角,使寶貝車旋轉期望的角度。在空間比較狹小的地方,可以調整程序Backward()中for循環(huán)的循環(huán)次數(shù)來減少后退的距離。3、基于人工智能決策的編程使機器人逃離進入墻角死區(qū)。編程使機器人逃離進入墻角死區(qū)。當寶貝車進入墻角時,左胡須觸墻,于是它倒退,右轉。當小車再向前行走,右胡須觸墻,于是再倒退,左轉。然后它又前進又會碰到左墻,再次碰到右墻等,直到有人把它從困境中解救出來。使用含ifelse嵌套語句用

39、于探測連續(xù)的、交替出現(xiàn)的胡須觸動。編程使寶貝車在行走時,輪流觸動它的胡須,胡須在經過四次觸動之后,寶貝車會進行后退、旋轉180°離開墻角。具體程序EscapingCorners.c。嘗試增加或減小變量counter的數(shù)值,觀察機器人在正常行走過程中是否有任何不同?!就卣褂柧殹坑|覺導航機器人走迷宮競賽。四、實驗報告要求1、搭建觸覺導航電路,測試胡須源程序TestWhiskers.c。使用串口調試助手觀察運行效果并加以分析。程序調試心得。#include<BoeBot.h>#include<uart.h>int P1_4state(void)/獲取P1_4 的狀態(tài)

40、return (P1&0x10)?1:0;int P2_3state(void)/獲取P2_3 的狀態(tài)return (P2&0x08)?1:0;int main(void)uart_Init();printf("WHISKER STARTESn");while(1)printf("右邊胡須的狀態(tài):%d ",P1_4state();printf("左邊胡須的狀態(tài):%dn",P2_3state();delay_nms(150);2、 程序RoamingWithWhiskers.c觸覺導航的實現(xiàn),胡須機器人怎樣行走。#inc

41、lude<BoeBot.h>#include<uart.h>int P1_4state(void)return (P1&0x10)?1:0;int P2_3state(void)return (P2&0x08)?1:0;void Forward(void)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void)int i;for(i=1;i<=26;i+)P1_1=1;delay_nus(1300);P1_1=0;P1

42、_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Right_Turn(void)int i;for(i=1;i<=26;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);void Backward(void)int i;for(i=1;i<=65;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);int main(void)uart

43、_Init();printf("Program Running!n");while(1)if(P1_4state()=0)&&(P2_3state()=0) /兩胡須同時碰到Backward(); /向后Left_Turn();/向左Left_Turn();/向左else if(P1_4state()=0) /右胡須碰到Backward();/向后Left_Turn();/向左else if(P2_3state()=0) /左胡須碰到Backward();/向后Right_Turn();/向右else /胡須沒有碰到Forward();/向前3、 程序Esc

44、apingCorners.c是如何工作的。#include<BoeBot.h>#include<uart.h>int P1_4state(void)return (P1&0x10)?1:0;int P2_3state(void)return (P2&0x08)?1:0;void Forward(void)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void)int i;for(i=1;i<=26;i+)P1_1=1;

45、delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Right_Turn(void)int i;for(i=1;i<=26;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);void Backward(void)int i;for(i=1;i<=65;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_n

46、ms(20);int main(void)int counter=1; /胡須碰撞總次數(shù)int old2=1; /右胡須舊狀態(tài)int old3=0; /左胡須舊狀態(tài)uart_Init();printf("Program Running!n");while(1)if(P1_4state()!=P2_3state()if(old2!=P1_4state()&&(old3!=P2_3state()counter=counter+1;old2=P1_4state();old3=P2_3state();if(counter>4)counter=1;Backwar

47、d();/向后Left_Turn();/向左Left_Turn();/向左elsecounter=1;if(P1_4state()=0)&&(P2_3state()=0)Backward();/向后Left_Turn();/向左Left_Turn();/向左else if(P1_4state()=0)Backward();/向后Left_Turn();/向左else if(P2_3state()=0)Backward();/向后Right_Turn();/向右elseForward();/向前五、思考題1、觸覺導航的原理是什么?通過胡須導航時如何避開障礙物?2、語句Return

48、(P1&0x10)?1:0的意義是什么?試說明。3、語句if(P1_4state()=0)&&( P2_3state()=0)Backward();Left_Turn();Left_Turn(); 的含義是什么?4、在胡須導航程序中函數(shù)Forward()有變動,只發(fā)送一個脈沖,然后返回,這樣的好處是什么?5、是否有且只有一根胡須被觸動,如何通過獲取左、右胡須的狀態(tài)作出判斷?寫出具體的判斷語句。注:實驗操作現(xiàn)場檢查。實驗五 C51接口與紅外線導航一、實驗目的1、掌握紅外傳感器作為輸入反饋與單片機的編程實現(xiàn),讓機器人的C51單片機可以收發(fā)紅外光信號。 2、使用紅外線發(fā)射和接

49、收器件探測道路,編程實現(xiàn)高性能的IR導航和邊沿探測。二、實驗設備及軟件寶貝車機器人、ISP下載線、串行接口、USB接口、計算機、電源。所需元件:(1) 兩個紅外檢測器,如圖5.1; (2) 兩個IR LED,如圖5.2; (3) 四個470電阻 (黃紫黑黑棕);(4) 兩個9013三極管,如圖5.3。 圖5.1紅外檢測器 圖5.2紅外線二極管LED發(fā)射器 圖5.3.1 三極管9013管腳圖 圖5.3.2 三極管9013結構圖及符號圖Keil uVision2 IDE集成開發(fā)環(huán)境、PROGISP1.72下載軟件、串口調試軟件。三、實驗內容和步驟使用紅外光來照射機器人前進的路線,確定何時有光線從被

50、探測目標反射回來,通過檢測反射回來的紅外光可以確定前方是否有物體。機器人使用紅外線二極管LED發(fā)射紅外光線,紅外檢測器相當于眼睛,檢測到反射回來的紅外光線,并發(fā)出信號來表明檢測到從物體反射回紅外線,如圖5.4。紅外線(IR)接收/檢測器有內置的光濾波器,除了需要檢測980nm波長的紅外線外,幾乎不允許其他光通過。紅外檢測器還有一個電子濾波器,只允許大約38.5kHz的電信號通過。圖5.4 用紅外探測障礙物 1、搭建并測試IR發(fā)射和探測器對,如圖5.5。注意斷開主板和電機的電源。圖5.5左側和右側IR組電路原理圖圖5.6 左右IR組實物參考圖本任務中,發(fā)送持續(xù)1ms的 38.5kHz的紅外光,如

51、果紅外光被小車路徑上的物體反射回來,紅外檢測器將給微控制器發(fā)送一個信號,讓它知道已經檢測到反射回的紅外光。當沒有IR信號返回時,探測器的輸出狀態(tài)為高電平。當它探測到被物體反射的38.5kHz的紅外信號時,它的輸出為低電平。放一個物體,比如手或一張紙,距離IR組大約1英寸。驗證當你放一個物體在IR組前時,調試終端是否會顯示0,當你將物體移開時,它是否顯示1。注意:保持寶貝車機器人與串口電纜的連接,因為你將用串口調試助手來測試你的IR組。參考程序(TestLeftIrPair.c):#include<BoeBot.h>#include<uart.h>int P1_2stat

52、e(void)return (P1&0x04)?1:0;int main(void)int counter;int irDetectLeft;uart_Init();printf("Program Running!n");while(1)for(counter=0;counter<38;counter+)P1_3=1;delay_nus(13);P1_3=0;delay_nus(13);irDetectLeft=P1_2state();printf("irDetectLeft=%dn",irDetectLeft);delay_nms(100

53、);2、IR檢測器探測和避開障礙物IR檢測器的輸出與觸須的輸出非常相象。沒有檢測到物體時,輸出為高,檢測到物體時,輸出為低。故采取與胡須相同的導航策略。#include<BoeBot.h>#include<uart.h>#include<intrins.h>#define LeftIR P1_2 /左邊紅外接收連接到P1_2#define RightIR P3_5 /右邊紅外接收連接到P3_5#define LeftLaunch P1_3 /左邊紅外發(fā)射連接到P1_3#define RightLaunch P3_6 /右邊紅外發(fā)射連接到P3_6void IR

54、Launch(unsigned char IR)int counter;if(IR='L') /左邊發(fā)射for(counter=0;counter<38;counter+) /發(fā)射時間比胡須長LeftLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();LeftLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();if(IR='R') /右邊發(fā)射for(counter=0;counter<38;counter+)RightLaunch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_

溫馨提示

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

最新文檔

評論

0/150

提交評論