自己寫的關(guān)于WiFi智能小車的實驗報告,寫的不好,敬請改正
2018年全國大學生電子設(shè)計競賽
WIFI智能小車(控制類題)
摘要 隨著科學技術(shù)的發(fā)展,機器人的設(shè)計越來越精細,功能越來越復(fù)雜,智能小車作為其的一個分支,也在不斷發(fā)展。在近幾年的電子設(shè)計大賽中,關(guān)于小車的智能化功能的實現(xiàn)也多種多樣,因此本次我們也打算設(shè)計一智能小車,通過WiFi連接,使用PC端或手機軟件控制,使其能夠?qū)崿F(xiàn)前進后退,攝像并將圖像傳回控制端,并實現(xiàn)循跡和避障等功能。 本次小車采用STC89C51單片機作為控制芯片,步進電機作為行進部件,WIFI模塊作為接受部件,紅外對管為識別器件,要求能在遙控的情況下,能在方圓20米的范圍內(nèi)自由活動,且能夠識別以白底為道路色,寬度10mm左右的黑色膠帶制作的不規(guī)則的封閉曲線為引導(dǎo)軌跡并能沿該軌跡行進的智能小車。并能實現(xiàn)避障功能
Abstract
With the development of science and technology, the design of robots is becoming more and more sophisticated and functions are becoming more and more complex. As a branch of intelligent vehicles, intelligent cars are also developing. In the electronic design competition in recent years, the realization of the intelligent function of the car is also varied, so this time we also intend to design a smart car, through the WIFI connection, using the PC end or mobile software control, so that it can achieve forward back, camera and image back to the control end, and achieve tracking and obstacle avoidance and so on Function. This small car uses STC89C51 as the control chip, the stepping motor is a moving part, the WIFI module is used as the acceptance component, the infrared pair is a recognition device, and it is required to operate freely within the range of 20 meters in the square circle under the condition of remote control, can identify the black tape with the white bottom as the road color and the width of about 10mm. The production of irregular closed curves is a smart car that guides the trajectory and travels along the trajectory. And the obstacle avoidance function can be realized
目錄 一、系統(tǒng)方案 1.單片機模塊的選擇 2.電機控制模塊的選擇 3.無線通信模塊的論證與選擇 4.驅(qū)動模塊的選擇與論證 5.其他模塊的選擇與論證 二、系統(tǒng)理論分析與計算 1.系統(tǒng)總體設(shè)計 2.超聲波模塊的距離計算方法 三、電路與程序設(shè)計 1.電路的設(shè)計 2. 程序的設(shè)計 (1)程序功能描述與設(shè)計思路 (2) 程序流程圖 四、測試方案與測試結(jié)果 1、測試方案 2 測試條件與儀器 3 測試結(jié)果及分析 五、結(jié)論與心得 六、參考文獻 附錄(程序)
WIFI智能小車【?組】 一、系統(tǒng)方案本次智能小車主要采用無線通信模塊、驅(qū)動模塊、單片機模塊、傳感器模塊、超聲波模塊、電源模塊組成。下面分別論證這幾個模塊的選擇。 1.單片機模塊的選擇方案一: 采用STC89C51為主控芯片的最小系統(tǒng)板,即由單片機來實現(xiàn)對WIFI模塊接受的信號進行處理并發(fā)出。STC89C51是一種低功耗、高性能CMOS 8位微控制器,具有4K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。 優(yōu)點:操作方便,配置簡單,應(yīng)用普遍。 缺點:I/O口較少,設(shè)計外部電路較為復(fù)雜。 方案二:STM32系列單片機 STM32系列為高性能、低成本、低功耗的嵌入式應(yīng)用控制系統(tǒng)。 優(yōu)點:處理速度快,片內(nèi)程序存儲空間大,功耗低,資源豐富。 缺點:程序編寫要求較高,價格高。 為了能夠很好的完成題目的基本要求以及發(fā)揮部分的要求,考慮到本次小車結(jié)構(gòu)簡單,不需要較為復(fù)雜的運算。所以采用方案一 2.電機控制模塊的選擇方案一:采用步進電機,其轉(zhuǎn)過的角度可以精確定位,可實現(xiàn)小車行進過程的精確定位。但步進電機的輸出力矩低,歲轉(zhuǎn)速的升高而降低,且轉(zhuǎn)速越快,下降的越快。 方案二:采用直流電機,其轉(zhuǎn)動力矩大,體積小,重量輕,裝配簡單,操作方便。速度的調(diào)節(jié)可以改變電壓也可以調(diào)節(jié)PWM。 基于以上方案,選擇方案二采用直流電機作為驅(qū)動電機。
3.無線通訊模塊的論證與選擇方案一:藍牙模塊 采用普遍的HC05藍牙模塊,是一種新興無線通訊技術(shù)是一個標準的無線通訊協(xié)議,基于低成本設(shè)備的收發(fā)器芯片,近距離傳輸、功耗低。屬于WPAN無線個域網(wǎng),即點對點、多點對多點、主要是用來連接一些外接設(shè)備的,或者是在近距離進行數(shù)據(jù)傳輸。在2016年5月份推出的最新的版本Bluetooth5.0傳輸距離可以達到150米。 方案二:WIFI模塊 Wi-Fi模塊又名串口Wi-Fi模塊,屬于物聯(lián)網(wǎng)傳輸層,功能是將串口或TTL電平轉(zhuǎn)為符合Wi-Fi無線網(wǎng)絡(luò)通信標準的嵌入式模塊,內(nèi)置無線網(wǎng)絡(luò)協(xié)議IEEE802.11b.g.n協(xié)議以及TCP/IP協(xié)議。傳統(tǒng)的硬件設(shè)備嵌入Wi-Fi模塊可以直接利用Wi-Fi聯(lián)入互聯(lián)網(wǎng),是實現(xiàn)無線智能家居、M2M等物聯(lián)網(wǎng)應(yīng)用的重要組成部分。其傳輸速度快。信號穿墻能力強。 綜合以上兩種方案,考慮到傳輸距離的問題,采取方案二的WIFI模塊。 4.驅(qū)動模塊的選擇與論證驅(qū)動模塊是本次智能小車的關(guān)鍵所在,直流電機的功率較大,所以必須選擇合適的驅(qū)動模塊 方案一:采用L298N模塊, L298N是一種特殊的驅(qū)動集成電路,屬于H橋集成電路, 其輸出電流增加, 功率增強。其輸出電流為2A,最高電流為4A, 最高工作電壓為50V。它可以驅(qū)動感應(yīng)負載, 如大功率直流電機、步進電機、電磁閥等, 特別是其輸入端子可以直接連接到單片機, 因此單片機控制非常方便。在驅(qū)動直流電機時,它可以直接控制兩個電機, 實現(xiàn)電機的正反向, 使我們只能改變輸入端的邏輯電平。該系統(tǒng)設(shè)計所用的電機是大功率的直流電機,故在考慮范圍之內(nèi)。 方案二: 中小電流電機專用驅(qū)動器, 使用芯片1298屬于H橋集成電流,輸出電流為 2000mA, 最大電流為 4A, 最大工作電壓為 36V, 可驅(qū)動感應(yīng)負載,比如: 中繼電器、直流電機、步進電機和光功率晶體管, 特別是輸入可以直接與單片機連接, 可以很容易地由單片機控制。但此模塊只能驅(qū)動小型直流電機, 不能驅(qū)動大功率型的直流電機。 經(jīng)過仔細反復(fù)的論證與選擇,我們發(fā)現(xiàn)方案一比較合適,所以我們選擇L298N模塊作為驅(qū)動模塊。 5.其他模塊的選擇與論證傳感器模塊:使用光電傳感器來采集路面信息。使用紅外光電管,其結(jié)構(gòu) 簡明,實現(xiàn)方便,成本低廉,沒有復(fù)雜的圖像處理工作,因此反應(yīng)靈敏,響應(yīng)時間少。 電源模塊:采用5V直流電源作為為電機及WIFI模塊供電的電源。 超聲波模塊:SSD-ME007TX串口超聲波測距模塊是高性能,高性價比的非接觸式距離感測模塊,測量范圍在0.02~4.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩(wěn)定地顯示測量結(jié)果。 二、系統(tǒng)理論分析與計算
1.系統(tǒng)總體設(shè)計智能小車系統(tǒng)總體框圖如圖1.1,系統(tǒng)工作流程為:以STC89C51單片機作為控制核心,通過手機上的APP對小車發(fā)出控制命令,小車上的WIFI芯片接收到APP發(fā)出的指令后通過串口傳輸給STC89C51單片機,開發(fā)板通過對指令的一系列處理控制小車上的相關(guān)原件:電機,來指導(dǎo)小車完成指導(dǎo)小車的動作。
0.png (12.95 KB, 下載次數(shù): 43)
下載附件
2018-5-26 19:09 上傳
圖1.1 系統(tǒng)總體框圖 2.超聲波模塊的距離計算方法圖1.2示意了超聲波測距的原理,即超聲波發(fā)生器T在某一時刻發(fā)出一個超聲波信號,當該信號遇到被測物體后反射回來,被超聲波接收器R所接收到。計算從發(fā)出超聲波信號到接收到返回信號所用的時間,就可算出超聲波發(fā)生器與反射物體的距離。 圖1.2 超聲波測距原理圖 計算公式為: d = s/2 = (Vt)/2 (1) 式中:d為被測物與測距儀的距離;s為聲波來回的路程;v為聲速;t為聲波往返所用的時間。 在測量中需要考慮兩個參數(shù):聲速和發(fā)射脈沖個數(shù)。聲速的精確程度決定了測量精度。聲速與溫度有關(guān),測距儀多用于常溫測量距離較短,如溫度變化不大,則可認為聲速是基本不變的,約為344m/s。如測距精度要求很高,則應(yīng)通過溫度補償?shù)姆椒右孕U。為增強系統(tǒng)可靠性,應(yīng)在軟硬件上采用抗干擾措施。發(fā)射超聲波脈沖個數(shù)決定測距儀測量盲區(qū),影響測量精度,同時與信號發(fā)射能量有關(guān)。發(fā)射脈沖個數(shù)少,可提高測量精度,但減少了發(fā)射能量對接收回波不利;脈沖個數(shù)過多會增加測量盲區(qū)。在設(shè)計中經(jīng)過比較,選擇發(fā)射5個40KHZ的脈沖方波作為測量信號。 三、電路與程序設(shè)計1.電路的設(shè)計1.1 控制系統(tǒng)原理圖圖1.1.控制系統(tǒng)原理圖 1.2L298N原理圖 圖1.2 L298N原理圖 1.3超聲波模塊原理圖 圖1.3超聲波原理圖 2. 程序的設(shè)計(1)程序功能描述與設(shè)計思路1、程序功能描述 通過手機或電腦控制軟件控制小車前進,后退,左轉(zhuǎn),右轉(zhuǎn),尋跡,避障等功能。 2、程序設(shè)計思路 根據(jù)題目要求,程序設(shè)計要做到包括小車的前進,后退,左轉(zhuǎn),右轉(zhuǎn)。即通過程序控制直流電機的轉(zhuǎn)動和方向。尋跡;通過光電傳感器檢測到地面信號后,程序控制車輪的左轉(zhuǎn),右轉(zhuǎn),停止等。避障;通過超聲波模塊檢測到前方15cm處有障礙物時,傳回至單片機,單片機控制舵機左右轉(zhuǎn)動,計算出最佳路線使小車避開障礙。 (2)程序流程圖
1.主程序流程圖 圖1.4 主程序流程圖 2.WiFi模塊流程圖 圖1.5 WIFI模塊流程圖 3. 超聲波子程序流程圖
圖1.6超聲波子程序流程圖 4.尋跡模塊流程圖 圖1.7 尋跡模塊流程圖 四、測試方案與測試結(jié)果1、測試方案1.1硬件測試 焊接完成后,首先進行的調(diào)試是用數(shù)字萬用表測量各個電路是否焊接正常,是否有虛焊漏焊等現(xiàn)象的出現(xiàn),以及各個電容是否是正常的未被擊穿狀態(tài)、電阻的阻值是否與設(shè)計的原理圖上的一致。接通電源,用數(shù)字萬用表測量當有+5V的各引腳是否有+5V的電壓,測量電路中是否出現(xiàn)了不該有的短路現(xiàn)象。接入光電傳感器模塊,使各個光電檢測器的光電管靠近白紙,觀察對應(yīng)的發(fā)光二極管是否發(fā)光,不發(fā)光表示正常。 然后再使各個光電管靠近黑線,觀察對應(yīng)的發(fā)光二級管是否發(fā)光,發(fā)光表示正常。 通過手機或PC端軟件連接WIFI,控制小車相應(yīng)功能是否實現(xiàn)。 1.2硬件軟件聯(lián)調(diào) 通過編寫簡單的關(guān)于電機轉(zhuǎn)動方向程序,觀察目的轉(zhuǎn)動方向與實際轉(zhuǎn)動方向是否一致,軟件都調(diào)試無誤后,進入系統(tǒng)最后的軟件編寫調(diào)試。 2 測試條件與儀器測試條件:帶有尋跡條件的場地(在地板上貼有黑膠帶、適當障礙物) 測試儀器:數(shù)字萬用表、手機或PC端軟件 3 測試結(jié)果及分析3.1測試結(jié)果(數(shù)據(jù)) 小車速度對尋跡的影響 WIFI信號強弱對通訊的影響
3.2測試分析與結(jié)論 根據(jù)上述測試數(shù)據(jù),此系統(tǒng)所有硬件電路都正常工作,系統(tǒng)工作穩(wěn)定,可實現(xiàn)下述功能: 1.能夠通過WIFI控制智能小車的前進后退等功能。 2.能夠傳輸視頻信號到設(shè)備上。 3.能夠一鍵尋跡。 4.能夠通過超聲波模塊實現(xiàn)避障功能。 五、結(jié)論與心得經(jīng)過自己不斷的搜索努力以及老師的耐心指導(dǎo)和熱情幫助,本設(shè)計已經(jīng)基本完成。在這個過程中老師以及曾做過此類設(shè)計的同學給予了我很大的幫助,給我提供了大量的硬件和軟件資料,也給我的設(shè)計提出了寶貴的意見和建議。在此,對大家表示衷心的感謝!這次設(shè)計不僅是對我的專業(yè)知識的一次集中地檢驗,同時也為我們提供了一個進入職場前的實戰(zhàn)機會;通過這次在老師指導(dǎo)下做設(shè)計的機會,我對于技術(shù)實踐方面有了更深刻的認識,也進一步夯實了所學的專業(yè)知識。雖然在設(shè)計中對于知識的運用和銜接還不夠熟練。但是我將在以后的工作和學習中繼續(xù)努力、不斷完善。這設(shè)計是對過去所學知識的系統(tǒng)提高和擴充的過程,為今后的發(fā)展打下了良好的基礎(chǔ)。由于自身水平有限,設(shè)計中一定存在很多不足之處,敬請老師批評指正 六、參考文獻[1] 單片機C語言教程 郭天祥 電子工業(yè)出版社 [2] 譚浩強.C語言程序設(shè)計[M].北京:清華大學出版社,2012. [3] 黃智偉 全國大學生電子設(shè)計競賽訓(xùn)練教程. [M].修訂版.北京:電子工業(yè)出版社 附錄(程序)- #include <STC12C5A.h> //包含STC12C5A系列單片機的頭文件
-
- /*晶振為22.1184MHz 以下為可選波特率*/
- #define BPS_9600 0x70
- #define BPS_19200 0xB8
- #define BPS_38400 0xDC
- #define BPS_57600 0xE8
- #define BPS_11520 0xF4
-
-
- #define Left_moto_go1 {P10=1,P12=1;} //左邊兩個電機向前走
- #define Left_moto_back1 {P10=0,P12=0;} //左邊兩個電機向后轉(zhuǎn)
- #define Right_moto_go1 {P14=1,P16=1;} //右邊兩個電機向前走
- #define Right_moto_back1 {P14=0,P16=0;} //右邊兩個電機向前走
-
-
- #define Left_moto_go {P10=1,P11=0,P12=1,P13=0;} //左邊兩個電機向前走
- #define Left_moto_back {P10=0,P11=1,P12=0,P13=1;} //左邊兩個電機向后轉(zhuǎn)
- #define Left_moto_Stop {P10=0,P11=0,P12=0,P13=0;} //左邊兩個電機停轉(zhuǎn)
- #define Right_moto_go {P14=1,P15=0,P16=1,P17=0;} //右邊兩個電機向前走
- #define Right_moto_back {P14=0,P15=1,P16=0,P17=1;} //右邊兩個電機向前走
- #define Right_moto_Stop {P14=0,P15=0,P16=0,P17=0;} //右邊兩個電機停轉(zhuǎn)
-
- #define Left_2_led P24 //
- #define Right_1_led P25 //
-
- #define Left_moto_pwm P11 //PWM信號端
- #define Left_moto_pwm1 P13
- #define Right_moto_pwm P15
- #define Right_moto_pwm1 P17
-
-
- #define RELOAD_COUNT BPS_9600 //波特率選擇
-
-
- sbit TEST_WEEL =P0^0; //測試電機
- sbit TEST_SEVR =P0^1; //測試舵機
- sbit LED5 = P0^2; //接收指示燈
-
-
- bit rec_flag=0;
- unsigned char buffer[5];
- unsigned char se_timer[5]={0x0A,0x5a,0,0,0};
- unsigned int time=0;
-
- unsigned char pwm_val_left =0;//變量定義
- unsigned char push_val_left =0;// 左電機占空比N/10
- unsigned char pwm_val_right =0;
- unsigned char push_val_right=0;// 右電機占空比N/10
- bit Right_moto_stop=1;
- bit Left_moto_stop =1;
-
- void Delaynms(unsigned int di) //延時
- {
- unsigned int da,db;
- for(da=0;da<di;da++)
- for(db=0;db<1000;db++);
- }
-
-
- //前速前進
- void run(void)
- {
-
- Left_moto_go ; //左電機往前走
- Right_moto_go ; //右電機往前走
- }
-
- //前速后退
- void backrun(void)
- {
-
- Left_moto_back ; //左電機往前走
- Right_moto_back ; //右電機往前走
- }
-
- //左轉(zhuǎn)
- void leftrun(void)
- {
-
- Left_moto_back ; //左電機往前走
- Right_moto_go ; //右電機往前走
- }
-
- //右轉(zhuǎn)
- void rightrun(void)
- {
-
- Left_moto_go ; //左電機往前走
- Right_moto_back ; //右電機往前走
- }
- //STOP
- void stoprun(void)
- {
-
- Left_moto_Stop ; //左電機往前走
- Right_moto_Stop ; //右電機往前走
- }
-
-
- void UART_init(void)
- {
- // PCON |= 0x80; //使能波特率倍速位SMOD
- // SCON = 0x50; //8位數(shù)據(jù),可變波特率
- // BRT = RELOAD_COUNT; //設(shè)定獨立波特率發(fā)生器重裝值
- // AUXR |= 0x04; //獨立波特率發(fā)生器時鐘為Fosc,即1T
- // AUXR |= 0x01; //串口1選擇獨立波特率發(fā)生器為波特率發(fā)生器
- // AUXR |= 0x10; //啟動獨立波特率發(fā)生器
-
- PCON |= 0x80; //使能波特率倍速位SMOD
- SCON = 0x50; //8位數(shù)據(jù),可變波特率
- AUXR |= 0x04; //獨立波特率發(fā)生器時鐘為Fosc,即1T
- BRT = 0xB8; //設(shè)定獨立波特率發(fā)生器重裝值
- AUXR |= 0x01; //串口1選擇獨立波特率發(fā)生器為波特率發(fā)生器
- AUXR |= 0x10; //啟動獨立波特率發(fā)生器
-
-
- PS = 1;
- ES = 0; //允許串口中斷
- TI = 1;
- }
-
- /*****************************************************
- void UART_send_byte(unsigned char byte)
- {
- ES = 0; //關(guān)串口中斷
- TI = 0; //清零串口發(fā)送完成中斷請求標志
- SBUF = byte;
- while(TI ==0); //等待發(fā)送完成
- TI = 1; //清零串口發(fā)送完成中斷請求標志
- ES = 1; //允許串口中斷
- }
- *****************************************************/
-
- void Communication_Decode(void)
- {
- if(buffer[0]==0x00)
- {
- TR1=0;ET1=0; //關(guān)閉中斷不尋跡
- stoprun();
- switch(buffer[1])
- {
- case 0x01: run(); break;
- case 0x02: backrun(); break;
- case 0x03: leftrun(); break;
- case 0x04: rightrun(); break;
- case 0x00: stoprun(); break;
- default: return;
- }
- }
- else if(buffer[0]==0x01)
- {
- TR1=0;ET1=0; //關(guān)閉中斷不尋跡
- stoprun();
-
- if(buffer[2]>180)
- return;
- switch(buffer[1])
- {
- case 0x01:
- {
- se_timer[0]=buffer[2];
- if(se_timer[0]<11)se_timer[0]=11;
- if(se_timer[0]>162)se_timer[0]=162;
- }
- return;
- case 0x02:
- {
- se_timer[1]=buffer[2];
- if(se_timer[1]<11)se_timer[1]=11;
- if(se_timer[1]>162)se_timer[1]=162;
- }
- return;
- //case 0x03:se_timer[2]=buffer[2]; return;
- //case 0x04:se_timer[4]=buffer[2]; return;
- default : return;
- }
- }
- else if((buffer[0]==0x09)&&(buffer[1]==0x09))
- {
- switch(buffer[2])
- {
- case 0x00: TR1=1;ET1=1; break; //尋跡
- case 0x01: break; //避障
- default: return;
- }
- }
- else
- {
- return;
- }
- }
-
- void UART_Interrupt_Receive(void) interrupt 4
- {
- static unsigned char i;
-
- if(RI==1)
- {
- RI = 0;
-
- if(rec_flag==0)
- {
- if(SBUF==0xff)
- {
- rec_flag=1;
- i=0;
- }
- }
- else
- {
- if(SBUF==0xff)
- {
- rec_flag=0;
- if(i==3)
- {
- Communication_Decode();
- }
- i=0;
- }
- else
- {
- buffer[i]=SBUF;
- i++;
- }
- }
- }
- else
- {
- TI = 0;
- }
- }
-
-
- void Timer0_Init(void)
- {
- TMOD &= 0xf0;
- TMOD |= 0x02;
- AUXR |= 0XC0;
- // TH0=10; // 22.1184
- // TL0=10; //
-
- TH0=133; // 22.1184
- TL0=133; //
-
- TR0=1;
- ET0=1;
- }
-
- void Timer1_Init(void)
- {
-
- TMOD &= 0x0f;
- TMOD |= 0x10;
- // TH1 = 0xA9; //1MS定時 22.1184
- // TL1 = 0x9A;
-
- TL1 = 0xCD; //設(shè)置定時初值1MS定時 11.0592
- TH1 = 0xD4; //設(shè)置定時初值
- TR1 = 0; //開定時器1
- ET1 = 0;
-
- }
-
- void Timer_0(void) interrupt 1 //舵機控制程序
- {
-
- time++;
- if(time<=se_timer[0]+45)
- P27=1;
- else P27=0;
-
- if(time<=se_timer[1]+45)
- P26=1;
- else P26=0;
-
-
- if(time>=1800)
- {
- time=0;
- }
-
- }
-
- /************************************************************************/
- /* PWM調(diào)制電機轉(zhuǎn)速 */
- /************************************************************************/
- /* 左電機調(diào)速 */
- /*調(diào)節(jié)push_val_left的值改變電機轉(zhuǎn)速,占空比 */
- void pwm_out_left_moto(void)
- {
- if(Left_moto_stop)
- {
- if(pwm_val_left<=push_val_left)
- {
- Left_moto_pwm=1;
- Left_moto_pwm1=1;
- }
- else
- {
- Left_moto_pwm=0;
- Left_moto_pwm1=0;
- }
- if(pwm_val_left>=10)
- pwm_val_left=0;
- }
- else
- {
- Left_moto_pwm=0;
- Left_moto_pwm1=0;
- }
- }
- /******************************************************************/
- /* 右電機調(diào)速 */
- void pwm_out_right_moto(void)
- {
- if(Right_moto_stop)
- {
- if(pwm_val_right<=push_val_right)
- {
- Right_moto_pwm=1;
- Right_moto_pwm1=1;
- }
- else
- {
- Right_moto_pwm=0;
- Right_moto_pwm1=0;
- }
- if(pwm_val_right>=10)
- pwm_val_right=0;
- }
- else
- {
- Right_moto_pwm=0;
- Right_moto_pwm1=0;
- }
- }
-
-
- void Timer_1(void) interrupt 3
- {
- // static unsigned int ms_count=0;
-
- TL1 = 0xCD; //設(shè)置定時初值1MS定時 11.0592
- TH1 = 0xD4; //設(shè)置定時初值
-
- pwm_val_left++;
- pwm_val_right++;
- pwm_out_left_moto();
- pwm_out_right_moto();
-
- // if(ms_count++ >= 100)
- // {
- // ms_count = 0;
-
- if(Left_2_led==0&&Right_1_led==0)
- {
- Left_moto_go1;
- Right_moto_go1 ; //右電機往前走
- }
-
- else
- {
- if(Right_1_led==1&&Left_2_led==0) //右邊檢測到黑線
- {
- // rightrun(); //右轉(zhuǎn)
- Left_moto_go1 ; //左電機往前走
- Right_moto_back1 ; //右電機往前走
- }
-
- if(Left_2_led==1&&Right_1_led==0) //左邊檢測到黑線
- {
-
- // leftrun(); //左轉(zhuǎn)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
完整的Word格式文檔51黑下載地址(內(nèi)含清晰圖片):
WiFi智能小車2.docx
(420.06 KB, 下載次數(shù): 31)
2018-5-26 09:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|