單片機實習(xí)報告智能小車_第1頁
單片機實習(xí)報告智能小車_第2頁
單片機實習(xí)報告智能小車_第3頁
單片機實習(xí)報告智能小車_第4頁
單片機實習(xí)報告智能小車_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

中國地質(zhì)大學(xué)(武漢單片機實習(xí)匯報指導(dǎo)老師:李勇波日期:7月班級:073092-15|姓名:趙英?。?002410)簡易智能小車匯報摘要本小車以Atmel企業(yè)生產(chǎn)AT89S52為關(guān)鍵,完成尋跡、避障、光源檢測和車速測量等功效。在機械結(jié)構(gòu)上,對普通小車進行了改造,即用一個萬向輪來代替兩個前輪,是小車轉(zhuǎn)向愈加靈敏。采取PWM驅(qū)動芯片控制電機,紅外傳感器檢測白線、障礙物以及用來測量速度,光敏器件檢測光強?;诳煽坑布O(shè)計和穩(wěn)定軟件算法,基本實現(xiàn)題目要求。關(guān)鍵字:STC89C52尋跡光源檢測避障測速測量AbstractThisdesigniscontrolledwiththeMCU(AT89S52)tocompletethefunctionoffindingtrace,avoidingbarrier,tendingtolightandmeasurespeed.Inthemechanicalstructure,aboutthecar,thereformwhichisauniversalwheelinsteadoftwofront,themoresensitivetothecar.UsingPWMmotordrivechipcontrol,infraredsensordetectionwhiteline,obstaclesandusedtomeasurethespeed,photodetectordetectionlightintensity.Basedonreliablehardwaredesignandstablesoftwarealgorithm,basicallyrealizethetopicrequest.Keywords:STC89C52traceavoidingbarriertendingtolightmeasurespeed1.系統(tǒng)設(shè)計1.1設(shè)計要求1.基本要求(1)小車從起跑線出發(fā)(不得超出起跑線),沿引導(dǎo)線抵達B點在B點有一障礙物需繞過障礙物抵達C點(2)小車抵達C點沿一段直到抵達D點后進入“彎道區(qū)”(中間有一斷點),此時有一光源照射,引導(dǎo)小車轉(zhuǎn)彎并經(jīng)過斷點繼續(xù)進入大彎道區(qū)。(3)小車在光源引導(dǎo)下經(jīng)過進入停車區(qū)并抵達車庫(4)小車在最終在碰到停車標志后停車,并最終顯示時間和速度(實時速度)。1.2方案論證1.電機驅(qū)動方案選擇與論證因為普通直流電機更易于購置,小車對于精度要求不是尤其高,同時電路和控制相對簡單,所以本設(shè)計采取直流電機作為驅(qū)動單元。方案一:使用繼電器對電機進行開關(guān)控制和調(diào)制。但缺點很顯著,繼電器響應(yīng)慢而且機械結(jié)構(gòu)輕易壞。方案二:使用三極管或達林頓管,結(jié)合單片機輸出PWM信號實現(xiàn)調(diào)速目標,此方案易于實施,但若控制電機轉(zhuǎn)動方向較為困難。方案三:使用PWM控制芯片來實現(xiàn)對電機控制。方案選擇:采取方案三。該方案電路簡單,性能穩(wěn)定,能夠輕松實現(xiàn)對電機方向控制。2.路面尋跡模塊方案一:采取光敏傳感器,依照白色背景和黑色反光程度不一樣來判斷是否位于黑線上。方案二:采取采取反射式紅外傳感器來進行探測。只要選擇數(shù)量和適宜紅外傳感器,能夠準確判斷出黑線位置。方案選擇:采取方案二。方案一受環(huán)境光影響太大,效果不佳而紅外光不易受到環(huán)境光干擾。3.趨光模塊方案一:采取單一光敏電阻,利用其在不一樣光強下阻值不一樣,確定小車轉(zhuǎn)向,確保其朝著光源最強角度前進。方案二:采取多個光敏電阻,在小車車頭擺成半圓狀結(jié)構(gòu)。方案選擇:方案二精度較高,實現(xiàn)較為復(fù)雜,這里采取方案一,實現(xiàn)效果足以。4.避障模塊方案一:采取光電式傳感器,依照白色背景和黑色反光程度不一樣來判斷障礙物。方案二:采取超聲波測距方法,利用超聲波傳感器,監(jiān)視測量發(fā)射脈沖和接收脈沖時間差,計算超聲波和物體之間距離。能夠?qū)⒈苷虾蛯す饽K一起排列為環(huán)狀結(jié)構(gòu)。方案選擇:即使超聲波測距有其性能上優(yōu)勢,但價格過高,且經(jīng)過算法上優(yōu)化光電式傳感器測距完全能夠滿足設(shè)計要求,故采取方案一。5.測距模塊方案一:采取斷電式光電開關(guān)測距。方案二:采取光電傳感器,結(jié)合輪子外圍本身所帶白條,經(jīng)過光電傳感器紅外檢測單位時間內(nèi)掃描到白條個數(shù)。方案選擇:考慮到小車實際機械結(jié)構(gòu),假如采取方案一必定會對小車結(jié)構(gòu)有較大改變。方案二結(jié)構(gòu)簡單易于在小車上很好固定安裝,而且在軟件上也易于實現(xiàn)。2.硬件電路設(shè)計智能小車總體組成:趨光趨光電電機控制器避障避障單片機最小系統(tǒng)單片機最小系統(tǒng)尋跡尋跡測速測速本系統(tǒng)以STC89C52為控制關(guān)鍵,最小系統(tǒng)以下:2.1主控制模塊STC89C52是一個帶8K字節(jié)閃爍可編程擦出只讀存放器低電壓,高性能COMMOS8微處理器。該器件采取ATMEL高密度非易失真存放器制造技術(shù)制造,與工業(yè)標準MCS-51指令集和輸出管腳相兼容。STC89C52主要完成液晶顯示、尋跡、避障、光源檢測和車速測量等功效。2.2電機驅(qū)動模塊電機驅(qū)動芯片選取L298N作為驅(qū)動芯片。工作穩(wěn)定電機驅(qū)動信號由單片機提供,信號經(jīng)過光耦隔離后傳至PWM控制芯片L298N,經(jīng)過L298N輸出引腳與兩個電機相連。L198N連接方法以下列圖所表示本設(shè)計中采取脈寬調(diào)制技術(shù)(PWM)控制使能端(En),然后改變IN1和IN2狀態(tài)實現(xiàn)電機正轉(zhuǎn)和反轉(zhuǎn)。同時可改變脈寬占空比來調(diào)整電機轉(zhuǎn)速。PWM波形為周期不變周期性高低電平信號,占空比為高電平時間除以周期,改變占空比實質(zhì)上是改變了電動機驅(qū)動電壓。下列圖為10%和50%占空比PWM信號。EnAIN1IN2運轉(zhuǎn)狀態(tài)0XX停頓110正轉(zhuǎn)101反轉(zhuǎn)111剎停100停頓2.2尋跡模塊當(dāng)小車在白色地面行駛時,裝在小車下紅外發(fā)射管發(fā)射紅外線信號,經(jīng)白色反射后,被接收管接收,一旦接收管接收到信號,輸輸出端將輸出低電平,從而實現(xiàn)了經(jīng)過紅外線檢測信號功效。將檢測到信號傳到單片機I/O口,當(dāng)I/O口檢測到信號為高電平時,表明紅外光被地上黑線吸收了,表明小車正處于黑色引線上;同理,當(dāng)I/O口檢測到信號為低電平時,表明小車行駛在白色地面線上。反射式紅外傳感器ST188采取高發(fā)射功率紅外廣電二極管和高靈敏度光電晶體管組成。檢測距離可調(diào)整范圍為4—15mm;采取非接觸式檢測方式。當(dāng)ST188前方為白色時,ST188接收管導(dǎo)通,電阻值降低,輸出電壓降低,此時比較器同相輸入端(3腳)輸入電壓小,比較器輸出為低電平,發(fā)光二極管點亮。以下列圖所表示2.3趨光避障模塊本設(shè)計采取光敏電阻檢測光源從而達成趨光效果,光敏電阻阻值隨光照強度增大而減小,首先在自然光條件下調(diào)整R18改變基準電壓,使發(fā)光二極管點亮。當(dāng)光照強度增大,光敏電阻阻值降低,輸出電壓增加,此時比較器同相輸入端(3腳)輸入電壓大,比較器輸出為高電平,發(fā)光二極管熄滅,以下列圖所表示在進行避障時采取了反射式紅外傳感器ST188,放于小車前部,三個ST188,左右中間各一個,且左右兩個各向各自兩邊傾斜45度角。詳細算法以下:小車左拐小車左拐90度并前進1s碰到障礙物小車右拐繼續(xù)前進單片機檢測到信號小車右拐繼續(xù)前進單片機檢測到信號是否再次碰到障礙物?小車倒退1s否是否再次碰到障礙物?小車倒退1s繼續(xù)執(zhí)行,當(dāng)再次碰到障礙物時再次執(zhí)行上程序,直到繞出障礙物為止。2.4測距和顯示模塊測距采取反射式紅外傳感器ST188結(jié)合小車輪子外圍白條,進行掃描,由單片機計算其一秒鐘所掃描白條個數(shù)乘以兩白條間距離即可。顯示部分:控制端口以下:RSRWED0~D7讀狀態(tài)LHH狀態(tài)字寫狀態(tài)LL高脈沖指令碼讀數(shù)據(jù)HHH數(shù)據(jù)寫數(shù)據(jù)HL高脈沖數(shù)據(jù)2.5電源模塊小車采取單電源供電,12VDC給電機驅(qū)動芯片L298N供電,并經(jīng)一降壓模塊輸出5V給主控制芯片以及其余芯片供電,電路如圖所表示:3.結(jié)論按照要求,小車已經(jīng)很好完成了題目要求任務(wù)。包括包含機械結(jié)構(gòu),硬件,軟件。其中機械結(jié)構(gòu)是小車能否穩(wěn)定運行基礎(chǔ),硬件電路決定了小車實現(xiàn)功效,而軟件部分則是控制靈魂,算法好壞直接決定了完成任務(wù)質(zhì)量。整個設(shè)計無疑是一個充滿辛勞過程,期間也碰到了很多困難,不過在全組組員共同努力下,在整個試驗室同仁無私幫助下,以及老師指導(dǎo)下,最終完成任務(wù),在此對指導(dǎo)老師以及各位同學(xué)一并表示感激!程序源代碼:/***************************************日后修改部分:趨光由P1.6改為P3.0四傳感器將傳感器INT去掉,接上P0.3/***************************************/#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar#include"motor.h"#include"1602.h"#include"xunji.h"#defineWHITE0#defineBLACK1sbitBUZZER=P1^7;sbitOPT=P3^0;sbitzhang_left=P3^3;sbitzhang_middle=P3^4;sbitzhang_right=P3^5;sbitcesu=P0^4;uchar flag=0;//全白標志位charroad_status=0;/******蜂鳴器發(fā)聲xMs,低電平發(fā)聲*****************/voidBuzzer(ucharx){ BUZZER=0; DelayMs(x); BUZZER=1;}/***********趨光*******************************函數(shù)名稱:Park函數(shù)輸入:函數(shù)輸出:函數(shù)功效:**********************************************/voidPark(void) //燈亮(OPT1導(dǎo)通OPT=0,左拐){ Stop(100,100); GoHead(0,0); DelayMs(100);// if(OPT==1) //這種情況下只能用do{}...while 光照一下即可// do// {// {GoHead(52,5);DelayMs(5);}//右轉(zhuǎn)// }while(RIGHT_ST188&MID1_ST188&MID2_ST188&LEFT_ST188);//任何一個檢測到白線停頓 do { TurnLeft(20,20);DelayMs(1000); GoHead(20,15); }while(OPT);}/***********蔽障*****************************函數(shù)名稱:Bizhang函數(shù)輸入:函數(shù)輸出:函數(shù)功效:**********************************************/voidBiZhang(void) //倒退右轉(zhuǎn)90度前進_左轉(zhuǎn)90度{ GoBack(20,20); DelayMs(200); TurnRight(25,25); //右轉(zhuǎn)90度 DelayMs(1000); GoHead(21,21); DelayMs(1000); TurnLeft(25,25); //左轉(zhuǎn)90度 road_status=(P0&0x0f); while(!zhang_left||!zhang_middle||!zhang_right); road_status=(P0&0x0f);}/********************主函數(shù)******************/voidmain(){ Init(); //內(nèi)部資源初始化 LcdReset(); //液晶初始化 DisplayListChar(0,0,"Time",4);DispOneChar(7,0,':');DisplayListChar(0,1,"Speed",5); DisplayListChar(8,1,"cm/s",4); // DisplayListChar(8,0,"Time",4); road_status=(P0&0x0f);//取低四位 00001111 while(1) { road_status=(P0&0x0f); if((road_status==0))//一次全白 { Buzzer(1000);//1000ms flag++; if(flag==1)//第一次全白,開始趨光 { Park();//趨光 } elseif(!zhang_left||!zhang_middle||!zhang_right) { BiZhang(); } elseif(flag==2)//第二次全白,終點停車 { Stop(0,0); EA=0; //關(guān)總中止 while(1) { DispOneChar(5,0,MinuteH+0x30);//顯示時間00110000x,y,*DLata,L DispOneChar(6,0,MinuteL+0x30); //+48 DispOneChar(8,0,SecondH+0x30); DispOneChar(9,0,SecondL+0x30); } } } DispOneChar(5,0,MinuteH+0x30);//顯示時間00110000x,y,*DLata,L DispOneChar(6,0,MinuteL+0x30); //+48 DispOneChar(8,0,SecondH+0x30); DispOneChar(9,0,SecondL+0x30); RoadTrack(road_status); //循跡 DispOneChar(6,1,(b/10)+0x30); //顯示速度 DispOneChar(7,1,(b%10)+0x30); Delay_10Us(5); }}#definedataportP2//8位數(shù)據(jù)口 #definedataportP0 #definebusy0x80//忙檢測DB7DB7=1忙,DB7=0允許讀寫sbitrs=P0^7;//存放器選擇輸入端(硬件)sbitrw=P0^6;//讀寫控制輸入端(硬件)sbite=P0^5;//使能信號輸入端(硬件)/*****************************液晶顯示頭文件*******************************//*--------簡易延時函數(shù)---------*/voiddelay(unsignedinti){ for(i;i>0;i--);}voidDelay5Ms(void){ uintTemp=4552; while(Temp--);}/*--------------延時--------*/voidLcddelay(unsignedcharMS){ unsignedchari,j; while(MS!=0) { j=4; while(j!=0) { i=0xf0; while(i!=0) { i--; } j--; } MS--; }}/*---------------檢測lcd狀態(tài)--------------------*/voidWaitForEnable(void) //等候使能{ dataport=0xff; //dataport=P2;P2=0xff; rs=0; rw=1; Lcddelay(5); _nop_(); e=1; _nop_(); _nop_(); //DB7=1忙,DB7=0允許讀寫 while(dataport&busy);//busy=0x8010000000 e=0;}/*--------------------寫命令--------------*/voidLcdWriteCommand(unsignedcharCMD,unsignedcharAttribC){ if(AttribC) //en需要一個高脈沖 讀出/寫入 WaitForEnable(); rs=0; rw=0; _nop_(); dataport=CMD; Lcddelay(5); _nop_(); e=1; _nop_(); _nop_(); e=0;}/*----------顯示光標定位------------*/voidLocateXY(charpolx,charpoly){ unsignedchartemp; temp=polx&0x0f; //0xf=0x0f poly&=0x01; if(poly) temp|=0x40; temp|=0x80; LcdWriteCommand(temp,0);}/*------------寫字符---------------*/voidLcdWriteLata(charlataW){ WaitForEnable(); //檢測忙否且en需要一個高脈沖 讀出/寫入 rs=1; rw=0; _nop_(); dataport=lataW; Lcddelay(5); _nop_(); e=1; _nop_(); _nop_(); e=0;}/*-------------在指定位置顯示單個字符-----------------*/voidDispOneChar(unsignedcharx,unsignedchary,unsignedcharWlata){ LocateXY(x,y); LcdWriteLata(Wlata);}/*---------初始化----------*/voidLcdReset(void){ LcdWriteCommand(0x38,0); //顯示模塊設(shè)置00111000; Lcddelay(5); LcdWriteCommand(0x38,0); Lcddelay(5); LcdWriteCommand(0x38,0); Lcddelay(5); LcdWriteCommand(0x38,1);//清屏 LcdWriteCommand(0x08,1); //00001000關(guān)顯示,不顯示光標,光標不閃爍; LcdWriteCommand(0x01,1); LcdWriteCommand(0x06,1); LcdWriteCommand(0x0c,1); }/*---在指定位置顯示字符串---*///voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DLata,unsignedcharL){ unsignedchari; for(i=0;i<L;i++) DispOneChar(X++,Y,DLata[i]);} //掃到白線輸出為低/***********道路檢測循跡**********************函數(shù)名稱:RoadTrack函數(shù)輸入:函數(shù)輸出:函數(shù)功效:**********************************************/voidRoadTrack(road_status){ switch(road_status) { case1: GoHead(64,30); break; //小小右轉(zhuǎn) 00010x01 case3: GoHead(65,13); break; //小右轉(zhuǎn) 00110x03 // case7: GoHead(65,6); break; //大右轉(zhuǎn) 01110x07 // case11: GoHead(80,81); break; //直線前進 10110x0b // case13: GoHead(80,81); break; //直線前進 11010x0d // case9: GoHead(80,81); break; //直線前進 10010x09 // case8: GoHead(30,64); break; //小小左轉(zhuǎn) 10000x08 case12: GoHead(13,65); break; //小左轉(zhuǎn) 11000x0c // case14: GoHead(6,64); break; //大左轉(zhuǎn) 11100x0e // case15: GoBack(20,21); DelayMs(2);break; //倒退 1111 //0x0f //case0x00: GoBack(50,50); break;//直線后退 default:break; }} /*//***********直道循跡**********************voidRoadTrackZ(){ road_status=P0&0x0f; switch(road_status) { case0x09: GoHead(50,50);DelayMs(2);break; //1001前進 //一下:P0.0-P0.3 case0x0d: GoHead(40,55); break; //1011一級左轉(zhuǎn) case0x0c: GoHead(40,55); break;//0011二級左轉(zhuǎn) case0x0e: GoHead(20,55); break;//0111三級左轉(zhuǎn) case0x0b: GoHead(55,45); break;//1101一級右轉(zhuǎn) case0x03: GoHead(55,40); break;//1100二級右轉(zhuǎn) case0x07: GoHead(50,20); break;//1110三級右轉(zhuǎn) case0x00:Stop(98,98);break; //0000全白停車 case0x0f:break;//1111全黑保持 default:break; } }//*****************彎道尋跡************voidRoadTrackW(){ road_status=P0&0x0f; switch(road_status) { case0x09: GoHead(40,40);DelayMs(2);break; //1001前進 case0x0d: GoHead(30,55); break; //1011一級左轉(zhuǎn) case0x0c: GoHead(20,55); break;//0011二級左轉(zhuǎn) case0x0e: GoHead(10,70); break;//0111三級左轉(zhuǎn) case0x0b: GoHead(55,30); break;//1101一級右轉(zhuǎn) case0x03: GoHead(55,20); break;//1100二級右轉(zhuǎn) case0x07: GoHead(75,10); break;//1110三級右轉(zhuǎn) case0x00:Stop(98,98);break; //0000全白停車 case0x0f:break;//1111全黑保持 default:break; } }//***********對齊白線**********************voidDuiqi(){ road_status=P0&0x0f; switch(road_status) {

溫馨提示

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

最新文檔

評論

0/150

提交評論