久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6452|回復(fù): 2
收起左側(cè)

電賽WIFI智能小車實(shí)驗(yàn)報(bào)告下載(控制類題)

[復(fù)制鏈接]
ID:309573 發(fā)表于 2018-5-26 09:36 | 顯示全部樓層 |閱讀模式
自己寫的關(guān)于WiFi智能小車的實(shí)驗(yàn)報(bào)告,寫的不好,敬請(qǐng)改正

2018年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽
WIFI智能小車(控制類題)

摘要

隨著科學(xué)技術(shù)的發(fā)展,機(jī)器人的設(shè)計(jì)越來(lái)越精細(xì),功能越來(lái)越復(fù)雜,智能小車作為其的一個(gè)分支,也在不斷發(fā)展。在近幾年的電子設(shè)計(jì)大賽中,關(guān)于小車的智能化功能的實(shí)現(xiàn)也多種多樣,因此本次我們也打算設(shè)計(jì)一智能小車,通過(guò)WiFi連接,使用PC端或手機(jī)軟件控制,使其能夠?qū)崿F(xiàn)前進(jìn)后退,攝像并將圖像傳回控制端,并實(shí)現(xiàn)循跡和避障等功能。
本次小車采用STC89C51單片機(jī)作為控制芯片,步進(jìn)電機(jī)作為行進(jìn)部件,WIFI模塊作為接受部件,紅外對(duì)管為識(shí)別器件,要求能在遙控的情況下,能在方圓20米的范圍內(nèi)自由活動(dòng),且能夠識(shí)別以白底為道路色,寬度10mm左右的黑色膠帶制作的不規(guī)則的封閉曲線為引導(dǎo)軌跡并能沿該軌跡行進(jìn)的智能小車。并能實(shí)現(xiàn)避障功能

A
bstract
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.單片機(jī)模塊的選擇
2.電機(jī)控制模塊的選擇
3.無(wú)線通信模塊的論證與選擇
4.驅(qū)動(dòng)模塊的選擇與論證
5.其他模塊的選擇與論證
二、系統(tǒng)理論分析與計(jì)算
1.系統(tǒng)總體設(shè)計(jì)
2.超聲波模塊的距離計(jì)算方法
三、電路與程序設(shè)計(jì)
1.電路的設(shè)計(jì)
2. 程序的設(shè)計(jì)
(1)程序功能描述與設(shè)計(jì)思路
(2) 程序流程圖
四、測(cè)試方案與測(cè)試結(jié)果
1、測(cè)試方案
2 測(cè)試條件與儀器
3 測(cè)試結(jié)果及分析
五、結(jié)論與心得
六、參考文獻(xiàn)
附錄(程序)

WIFI智能小車

專科組】

一、系統(tǒng)方案
本次智能小車主要采用無(wú)線通信模塊、驅(qū)動(dòng)模塊、單片機(jī)模塊、傳感器模塊、超聲波模塊、電源模塊組成。下面分別論證這幾個(gè)模塊的選擇。
1.單片機(jī)模塊的選擇
方案一: 采用STC89C51為主控芯片的最小系統(tǒng)板,即由單片機(jī)來(lái)實(shí)現(xiàn)對(duì)WIFI模塊接受的信號(hào)進(jìn)行處理并發(fā)出。STC89C51是一種低功耗、高性能CMOS 8位微控制器,具有4K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。
優(yōu)點(diǎn):操作方便,配置簡(jiǎn)單,應(yīng)用普遍。
缺點(diǎn):I/O口較少,設(shè)計(jì)外部電路較為復(fù)雜。
方案二:STM32系列單片機(jī)
STM32系列為高性能、低成本、低功耗的嵌入式應(yīng)用控制系統(tǒng)。
優(yōu)點(diǎn):處理速度快,片內(nèi)程序存儲(chǔ)空間大,功耗低,資源豐富。
缺點(diǎn):程序編寫要求較高,價(jià)格高。
為了能夠很好的完成題目的基本要求以及發(fā)揮部分的要求,考慮到本次小車結(jié)構(gòu)簡(jiǎn)單,不需要較為復(fù)雜的運(yùn)算。所以采用方案一
2.電機(jī)控制模塊的選擇
方案一:采用步進(jìn)電機(jī),其轉(zhuǎn)過(guò)的角度可以精確定位,可實(shí)現(xiàn)小車行進(jìn)過(guò)程的精確定位。但步進(jìn)電機(jī)的輸出力矩低,歲轉(zhuǎn)速的升高而降低,且轉(zhuǎn)速越快,下降的越快。
方案二:采用直流電機(jī),其轉(zhuǎn)動(dòng)力矩大,體積小,重量輕,裝配簡(jiǎn)單,操作方便。速度的調(diào)節(jié)可以改變電壓也可以調(diào)節(jié)PWM。
基于以上方案,選擇方案二采用直流電機(jī)作為驅(qū)動(dòng)電機(jī)。

3.無(wú)線通訊模塊的論證與選擇
方案一:藍(lán)牙模塊
采用普遍的HC05藍(lán)牙模塊,是一種新興無(wú)線通訊技術(shù)是一個(gè)標(biāo)準(zhǔn)的無(wú)線通訊協(xié)議,基于低成本設(shè)備的收發(fā)器芯片,近距離傳輸、功耗低。屬于WPAN無(wú)線個(gè)域網(wǎng),即點(diǎn)對(duì)點(diǎn)、多點(diǎn)對(duì)多點(diǎn)、主要是用來(lái)連接一些外接設(shè)備的,或者是在近距離進(jìn)行數(shù)據(jù)傳輸。在2016年5月份推出的最新的版本Bluetooth5.0傳輸距離可以達(dá)到150米。
方案二:WIFI模塊
Wi-Fi模塊又名串口Wi-Fi模塊,屬于物聯(lián)網(wǎng)傳輸層,功能是將串口或TTL電平轉(zhuǎn)為符合Wi-Fi無(wú)線網(wǎng)絡(luò)通信標(biāo)準(zhǔn)的嵌入式模塊,內(nèi)置無(wú)線網(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),是實(shí)現(xiàn)無(wú)線智能家居、M2M等物聯(lián)網(wǎng)應(yīng)用的重要組成部分。其傳輸速度快。信號(hào)穿墻能力強(qiáng)。
綜合以上兩種方案,考慮到傳輸距離的問(wèn)題,采取方案二的WIFI模塊。
4.驅(qū)動(dòng)模塊的選擇與論證
驅(qū)動(dòng)模塊是本次智能小車的關(guān)鍵所在,直流電機(jī)的功率較大,所以必須選擇合適的驅(qū)動(dòng)模塊
方案一:采用L298N模塊, L298N是一種特殊的驅(qū)動(dòng)集成電路,屬于H橋集成電路, 其輸出電流增加, 功率增強(qiáng)。其輸出電流為2A,最高電流為4A, 最高工作電壓為50V。它可以驅(qū)動(dòng)感應(yīng)負(fù)載, 如大功率直流電機(jī)、步進(jìn)電機(jī)、電磁閥等, 特別是其輸入端子可以直接連接到單片機(jī), 因此單片機(jī)控制非常方便。在驅(qū)動(dòng)直流電機(jī)時(shí),它可以直接控制兩個(gè)電機(jī), 實(shí)現(xiàn)電機(jī)的正反向, 使我們只能改變輸入端的邏輯電平。該系統(tǒng)設(shè)計(jì)所用的電機(jī)是大功率的直流電機(jī),故在考慮范圍之內(nèi)。
方案二: 中小電流電機(jī)專用驅(qū)動(dòng)器, 使用芯片1298屬于H橋集成電流,輸出電流為 2000mA, 最大電流為 4A, 最大工作電壓為 36V, 可驅(qū)動(dòng)感應(yīng)負(fù)載,比如: 中繼電器、直流電機(jī)、步進(jìn)電機(jī)和光功率晶體管, 特別是輸入可以直接與單片機(jī)連接, 可以很容易地由單片機(jī)控制。但此模塊只能驅(qū)動(dòng)小型直流電機(jī), 不能驅(qū)動(dòng)大功率型的直流電機(jī)。
經(jīng)過(guò)仔細(xì)反復(fù)的論證與選擇,我們發(fā)現(xiàn)方案一比較合適,所以我們選擇L298N模塊作為驅(qū)動(dòng)模塊。
5.其他模塊的選擇與論證
傳感器模塊使用光電傳感器來(lái)采集路面信息。使用紅外光電管,其結(jié)構(gòu) 簡(jiǎn)明,實(shí)現(xiàn)方便,成本低廉,沒(méi)有復(fù)雜的圖像處理工作,因此反應(yīng)靈敏,響應(yīng)時(shí)間少。
電源模塊:采用5V直流電源作為為電機(jī)及WIFI模塊供電的電源。
超聲波模塊:SSD-ME007TX串口超聲波測(cè)距模塊是高性能,高性價(jià)比的非接觸式距離感測(cè)模塊,測(cè)量范圍在0.02~4.00m,測(cè)量精度1cm,測(cè)量時(shí)與被測(cè)物體無(wú)直接接觸,能夠清晰穩(wěn)定地顯示測(cè)量結(jié)果。
二、系統(tǒng)理論分析與計(jì)算
1.系統(tǒng)總體設(shè)計(jì)
智能小車系統(tǒng)總體框圖如圖1.1,系統(tǒng)工作流程為:以STC89C51單片機(jī)作為控制核心,通過(guò)手機(jī)上的APP對(duì)小車發(fā)出控制命令,小車上的WIFI芯片接收到APP發(fā)出的指令后通過(guò)串口傳輸給STC89C51單片機(jī),開(kāi)發(fā)板通過(guò)對(duì)指令的一系列處理控制小車上的相關(guān)原件:電機(jī),來(lái)指導(dǎo)小車完成指導(dǎo)小車的動(dòng)作。
0.png
圖1.1 系統(tǒng)總體框圖
2.超聲波模塊的距離計(jì)算方法
圖1.2示意了超聲波測(cè)距的原理,即超聲波發(fā)生器T在某一時(shí)刻發(fā)出一個(gè)超聲波信號(hào),當(dāng)該信號(hào)遇到被測(cè)物體后反射回來(lái),被超聲波接收器R所接收到。計(jì)算從發(fā)出超聲波信號(hào)到接收到返回信號(hào)所用的時(shí)間,就可算出超聲波發(fā)生器與反射物體的距離。
圖1.2 超聲波測(cè)距原理圖
計(jì)算公式為:   d = s/2 = (Vt)/2    (1)
式中:d為被測(cè)物與測(cè)距儀的距離;s為聲波來(lái)回的路程;v為聲速;t為聲波往返所用的時(shí)間。
在測(cè)量中需要考慮兩個(gè)參數(shù):聲速和發(fā)射脈沖個(gè)數(shù)。聲速的精確程度決定了測(cè)量精度。聲速與溫度有關(guān),測(cè)距儀多用于常溫測(cè)量距離較短,如溫度變化不大,則可認(rèn)為聲速是基本不變的,約為344m/s。如測(cè)距精度要求很高,則應(yīng)通過(guò)溫度補(bǔ)償?shù)姆椒右孕U樵鰪?qiáng)系統(tǒng)可靠性,應(yīng)在軟硬件上采用抗干擾措施。發(fā)射超聲波脈沖個(gè)數(shù)決定測(cè)距儀測(cè)量盲區(qū),影響測(cè)量精度,同時(shí)與信號(hào)發(fā)射能量有關(guān)。發(fā)射脈沖個(gè)數(shù)少,可提高測(cè)量精度,但減少了發(fā)射能量對(duì)接收回波不利;脈沖個(gè)數(shù)過(guò)多會(huì)增加測(cè)量盲區(qū)。在設(shè)計(jì)中經(jīng)過(guò)比較,選擇發(fā)射5個(gè)40KHZ的脈沖方波作為測(cè)量信號(hào)。
三、電路與程序設(shè)計(jì)1.電路的設(shè)計(jì)1.1 控制系統(tǒng)原理圖
圖1.1.控制系統(tǒng)原理圖
1.2L298N原理圖
圖1.2 L298N原理圖
1.3超聲波模塊原理圖
圖1.3超聲波原理圖
2. 程序的設(shè)計(jì)1程序功能描述與設(shè)計(jì)思路

1、程序功能描述

通過(guò)手機(jī)或電腦控制軟件控制小車前進(jìn),后退,左轉(zhuǎn),右轉(zhuǎn),尋跡,避障等功能。

2、程序設(shè)計(jì)思路

根據(jù)題目要求,程序設(shè)計(jì)要做到包括小車的前進(jìn),后退,左轉(zhuǎn),右轉(zhuǎn)。即通過(guò)程序控制直流電機(jī)的轉(zhuǎn)動(dòng)和方向。尋跡;通過(guò)光電傳感器檢測(cè)到地面信號(hào)后,程序控制車輪的左轉(zhuǎn),右轉(zhuǎn),停止等。避障;通過(guò)超聲波模塊檢測(cè)到前方15cm處有障礙物時(shí),傳回至單片機(jī),單片機(jī)控制舵機(jī)左右轉(zhuǎn)動(dòng),計(jì)算出最佳路線使小車避開(kāi)障礙。

2)程序流程圖

1.主程序流程圖
圖1.4 主程序流程圖
2.WiFi模塊流程圖
圖1.5  WIFI模塊流程圖
3. 超聲波子程序流程圖

圖1.6超聲波子程序流程圖
4.尋跡模塊流程圖
圖1.7 尋跡模塊流程圖
四、測(cè)試方案與測(cè)試結(jié)果1、測(cè)試方案
1.1硬件測(cè)試
焊接完成后,首先進(jìn)行的調(diào)試是用數(shù)字萬(wàn)用表測(cè)量各個(gè)電路是否焊接正常,是否有虛焊漏焊等現(xiàn)象的出現(xiàn),以及各個(gè)電容是否是正常的未被擊穿狀態(tài)、電阻的阻值是否與設(shè)計(jì)的原理圖上的一致。接通電源,用數(shù)字萬(wàn)用表測(cè)量當(dāng)有+5V的各引腳是否有+5V的電壓,測(cè)量電路中是否出現(xiàn)了不該有的短路現(xiàn)象。接入光電傳感器模塊,使各個(gè)光電檢測(cè)器的光電管靠近白紙,觀察對(duì)應(yīng)的發(fā)光二極管是否發(fā)光,不發(fā)光表示正常。 然后再使各個(gè)光電管靠近黑線,觀察對(duì)應(yīng)的發(fā)光二級(jí)管是否發(fā)光,發(fā)光表示正常。
通過(guò)手機(jī)或PC端軟件連接WIFI,控制小車相應(yīng)功能是否實(shí)現(xiàn)。
1.2硬件軟件聯(lián)調(diào)
通過(guò)編寫簡(jiǎn)單的關(guān)于電機(jī)轉(zhuǎn)動(dòng)方向程序,觀察目的轉(zhuǎn)動(dòng)方向與實(shí)際轉(zhuǎn)動(dòng)方向是否一致,軟件都調(diào)試無(wú)誤后,進(jìn)入系統(tǒng)最后的軟件編寫調(diào)試。
2 測(cè)試條件與儀器
測(cè)試條件:帶有尋跡條件的場(chǎng)地(在地板上貼有黑膠帶、適當(dāng)障礙物)
測(cè)試儀器:數(shù)字萬(wàn)用表、手機(jī)或PC端軟件
3 測(cè)試結(jié)果及分析
3.1測(cè)試結(jié)果(數(shù)據(jù))
小車速度對(duì)尋跡的影響
速度
5cm/s
8cm/s
10cm/s
15cm/s
20cm/s
25cm/s
尋跡效果
較差
較好
最佳
較好
不能
不能
WIFI信號(hào)強(qiáng)弱對(duì)通訊的影響
距離
1m
5m
10m
15m
20m
50m
通訊狀態(tài)
不能
不能


3.2測(cè)試分析與結(jié)論
根據(jù)上述測(cè)試數(shù)據(jù),此系統(tǒng)所有硬件電路都正常工作,系統(tǒng)工作穩(wěn)定,可實(shí)現(xiàn)下述功能:
1.能夠通過(guò)WIFI控制智能小車的前進(jìn)后退等功能。
2.能夠傳輸視頻信號(hào)到設(shè)備上。
3.能夠一鍵尋跡。
4.能夠通過(guò)超聲波模塊實(shí)現(xiàn)避障功能。
五、結(jié)論與心得
經(jīng)過(guò)自己不斷的搜索努力以及老師的耐心指導(dǎo)和熱情幫助,本設(shè)計(jì)已經(jīng)基本完成。在這個(gè)過(guò)程中老師以及曾做過(guò)此類設(shè)計(jì)的同學(xué)給予了我很大的幫助,給我提供了大量的硬件和軟件資料,也給我的設(shè)計(jì)提出了寶貴的意見(jiàn)和建議。在此,對(duì)大家表示衷心的感謝!這次設(shè)計(jì)不僅是對(duì)我的專業(yè)知識(shí)的一次集中地檢驗(yàn),同時(shí)也為我們提供了一個(gè)進(jìn)入職場(chǎng)前的實(shí)戰(zhàn)機(jī)會(huì);通過(guò)這次在老師指導(dǎo)下做設(shè)計(jì)的機(jī)會(huì),我對(duì)于技術(shù)實(shí)踐方面有了更深刻的認(rèn)識(shí),也進(jìn)一步夯實(shí)了所學(xué)的專業(yè)知識(shí)。雖然在設(shè)計(jì)中對(duì)于知識(shí)的運(yùn)用和銜接還不夠熟練。但是我將在以后的工作和學(xué)習(xí)中繼續(xù)努力、不斷完善。這設(shè)計(jì)是對(duì)過(guò)去所學(xué)知識(shí)的系統(tǒng)提高和擴(kuò)充的過(guò)程,為今后的發(fā)展打下了良好的基礎(chǔ)。由于自身水平有限,設(shè)計(jì)中一定存在很多不足之處,敬請(qǐng)老師批評(píng)指正
六、參考文獻(xiàn)
[1]   單片機(jī)C語(yǔ)言教程      郭天祥          電子工業(yè)出版社
[2]  譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2012.
[3] 黃智偉 全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽訓(xùn)練教程. [M].修訂版.北京:電子工業(yè)出版社
附錄(程序)
  1. #include <STC12C5A.h>               //包含STC12C5A系列單片機(jī)的頭文件

  2. /*晶振為22.1184MHz 以下為可選波特率*/
  3. #define BPS_9600       0x70
  4. #define BPS_19200                 0xB8
  5. #define BPS_38400                 0xDC
  6. #define BPS_57600                 0xE8
  7. #define BPS_11520      0xF4


  8. #define Left_moto_go1      {P10=1,P12=1;}    //左邊兩個(gè)電機(jī)向前走
  9. #define Left_moto_back1    {P10=0,P12=0;}               //左邊兩個(gè)電機(jī)向后轉(zhuǎn)                  
  10. #define Right_moto_go1     {P14=1,P16=1;}              //右邊兩個(gè)電機(jī)向前走
  11. #define Right_moto_back1   {P14=0,P16=0;}              //右邊兩個(gè)電機(jī)向前走


  12. #define Left_moto_go      {P10=1,P11=0,P12=1,P13=0;}    //左邊兩個(gè)電機(jī)向前走
  13. #define Left_moto_back    {P10=0,P11=1,P12=0,P13=1;}               //左邊兩個(gè)電機(jī)向后轉(zhuǎn)
  14. #define Left_moto_Stop    {P10=0,P11=0,P12=0,P13=0;}    //左邊兩個(gè)電機(jī)停轉(zhuǎn)                    
  15. #define Right_moto_go     {P14=1,P15=0,P16=1,P17=0;}              //右邊兩個(gè)電機(jī)向前走
  16. #define Right_moto_back   {P14=0,P15=1,P16=0,P17=1;}              //右邊兩個(gè)電機(jī)向前走
  17. #define Right_moto_Stop   {P14=0,P15=0,P16=0,P17=0;}              //右邊兩個(gè)電機(jī)停轉(zhuǎn)   

  18. #define Left_2_led         P24              //            
  19. #define Right_1_led        P25              //

  20. #define Left_moto_pwm                 P11              //PWM信號(hào)端
  21. #define Left_moto_pwm1                 P13            
  22. #define Right_moto_pwm                 P15
  23. #define Right_moto_pwm1                 P17            


  24. #define RELOAD_COUNT   BPS_9600              //波特率選擇

  25.             
  26. sbit TEST_WEEL =P0^0;              //測(cè)試電機(jī)
  27. sbit TEST_SEVR =P0^1;   //測(cè)試舵機(jī)
  28. sbit LED5     = P0^2;   //接收指示燈                                                                                   
  29.                                                                                                                

  30. bit rec_flag=0;
  31. unsigned char buffer[5];
  32. unsigned char se_timer[5]={0x0A,0x5a,0,0,0};
  33. unsigned int  time=0;

  34. unsigned char pwm_val_left  =0;//變量定義
  35. unsigned char push_val_left =0;// 左電機(jī)占空比N/10
  36. unsigned char pwm_val_right =0;
  37. unsigned char push_val_right=0;// 右電機(jī)占空比N/10
  38. bit Right_moto_stop=1;
  39. bit Left_moto_stop =1;

  40. void Delaynms(unsigned int di) //延時(shí)
  41. {
  42.               unsigned int da,db;
  43.               for(da=0;da<di;da++)
  44.                                for(db=0;db<1000;db++);
  45. }


  46. //前速前進(jìn)
  47.      void  run(void)
  48. {

  49.               Left_moto_go ;   //左電機(jī)往前走
  50.               Right_moto_go ;  //右電機(jī)往前走
  51. }

  52. //前速后退
  53.      void  backrun(void)
  54. {

  55.               Left_moto_back ;   //左電機(jī)往前走
  56.               Right_moto_back ;  //右電機(jī)往前走
  57. }

  58. //左轉(zhuǎn)
  59.      void  leftrun(void)
  60. {

  61.               Left_moto_back ;   //左電機(jī)往前走
  62.               Right_moto_go ;  //右電機(jī)往前走
  63. }

  64. //右轉(zhuǎn)
  65.      void  rightrun(void)
  66. {

  67.               Left_moto_go ;   //左電機(jī)往前走
  68.               Right_moto_back ;  //右電機(jī)往前走
  69. }
  70. //STOP
  71.      void  stoprun(void)
  72. {

  73.               Left_moto_Stop ;   //左電機(jī)往前走
  74.               Right_moto_Stop ;  //右電機(jī)往前走
  75. }


  76. void UART_init(void)
  77. {
  78. //              PCON |= 0x80;                            //使能波特率倍速位SMOD
  79. //              SCON =  0x50;                            //8位數(shù)據(jù),可變波特率
  80. //              BRT = RELOAD_COUNT;              //設(shè)定獨(dú)立波特率發(fā)生器重裝值
  81. //              AUXR |= 0x04;                            //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc,即1T
  82. //              AUXR |= 0x01;                            //串口1選擇獨(dú)立波特率發(fā)生器為波特率發(fā)生器
  83. //              AUXR |= 0x10;                            //啟動(dòng)獨(dú)立波特率發(fā)生器

  84.               PCON |= 0x80;                            //使能波特率倍速位SMOD
  85.               SCON = 0x50;                            //8位數(shù)據(jù),可變波特率
  86.               AUXR |= 0x04;                            //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc,即1T
  87.               BRT = 0xB8;                            //設(shè)定獨(dú)立波特率發(fā)生器重裝值
  88.               AUXR |= 0x01;                            //串口1選擇獨(dú)立波特率發(fā)生器為波特率發(fā)生器
  89.               AUXR |= 0x10;                            //啟動(dòng)獨(dú)立波特率發(fā)生器


  90.               PS      =   1;
  91.               ES      =   0;      //允許串口中斷
  92.               TI      =   1;            
  93. }

  94. /*****************************************************
  95. void UART_send_byte(unsigned char byte)
  96. {
  97.               ES     =   0;  //關(guān)串口中斷
  98.     TI     =   0;  //清零串口發(fā)送完成中斷請(qǐng)求標(biāo)志
  99.     SBUF   =   byte;
  100.     while(TI ==0); //等待發(fā)送完成
  101.     TI     =   1;  //清零串口發(fā)送完成中斷請(qǐng)求標(biāo)志
  102.     ES     =   1;  //允許串口中斷
  103. }
  104. *****************************************************/

  105. void Communication_Decode(void)
  106. {            
  107.               if(buffer[0]==0x00)
  108.               {
  109.                     TR1=0;ET1=0;  //關(guān)閉中斷不尋跡
  110.                     stoprun();               
  111.                             switch(buffer[1])
  112.                             {
  113.                                           case 0x01: run();      break;
  114.                                           case 0x02: backrun();  break;
  115.                                           case 0x03: leftrun();  break;
  116.                                 case 0x04: rightrun(); break;
  117.                                           case 0x00: stoprun();  break;
  118.                                           default: return;
  119.                             }            
  120.               }
  121.               else if(buffer[0]==0x01)
  122.               {
  123.                   TR1=0;ET1=0;  //關(guān)閉中斷不尋跡
  124.                             stoprun();               
  125.                            
  126.                             if(buffer[2]>180)
  127.                                           return;
  128.                             switch(buffer[1])
  129.                             {
  130.                                           case 0x01:
  131.                                           {
  132.                                           se_timer[0]=buffer[2];
  133.                                           if(se_timer[0]<11)se_timer[0]=11;
  134.                                           if(se_timer[0]>162)se_timer[0]=162;
  135.                                           }
  136.                                           return;
  137.                                           case 0x02:
  138.                                           {
  139.                                           se_timer[1]=buffer[2];
  140.                                           if(se_timer[1]<11)se_timer[1]=11;
  141.                                           if(se_timer[1]>162)se_timer[1]=162;
  142.                                           }
  143.                                           return;
  144.                                           //case 0x03:se_timer[2]=buffer[2]; return;
  145.                                           //case 0x04:se_timer[4]=buffer[2]; return;
  146.                                           default : return;
  147.                             }
  148.               }
  149.               else if((buffer[0]==0x09)&&(buffer[1]==0x09))
  150.               {
  151.                             switch(buffer[2])
  152.                             {
  153.                                           case 0x00:    TR1=1;ET1=1;   break;                            //尋跡
  154.                                           case 0x01:                   break;                            //避障
  155.                                           default: return;
  156.                             }            
  157.               }
  158.                             else
  159.               {
  160.                             return;
  161.               }
  162. }

  163. void UART_Interrupt_Receive(void) interrupt 4
  164. {
  165.               static unsigned char i;
  166.             
  167.     if(RI==1)
  168.     {
  169.         RI  =   0;
  170.                            
  171.         if(rec_flag==0)
  172.                             {
  173.                                           if(SBUF==0xff)
  174.                                           {                                                         
  175.                                                         rec_flag=1;            
  176.                                                         i=0;
  177.                                           }                                         
  178.                             }
  179.                             else
  180.                             {
  181.                                           if(SBUF==0xff)
  182.                                           {
  183.                                                         rec_flag=0;            
  184.                                                         if(i==3)
  185.                                                         {            
  186.                                                                       Communication_Decode();                           
  187.                                                         }
  188.                                                         i=0;
  189.                                           }
  190.                                           else
  191.                                           {
  192.                                                         buffer[i]=SBUF;
  193.                                                         i++;
  194.                                           }
  195.                             }                           
  196.     }
  197.     else
  198.     {
  199.         TI  =  0;
  200.     }            
  201. }


  202. void Timer0_Init(void)
  203. {
  204.                  TMOD   &=   0xf0;
  205.     TMOD   |=   0x02;
  206.               AUXR   |=   0XC0;
  207. //              TH0=10;                 //              22.1184
  208. //              TL0=10;                 //

  209.               TH0=133;                 //              22.1184
  210.               TL0=133;                 //

  211.               TR0=1;
  212.               ET0=1;
  213. }

  214. void Timer1_Init(void)
  215. {

  216.       TMOD   &=   0x0f;
  217.       TMOD   |=   0x10;  
  218.     //  TH1     =   0xA9;   //1MS定時(shí) 22.1184
  219.      // TL1     =   0x9A;

  220.                 TL1 = 0xCD;                            //設(shè)置定時(shí)初值1MS定時(shí)               11.0592
  221.       TH1 = 0xD4;                            //設(shè)置定時(shí)初值
  222.       TR1     =   0;    //開(kāi)定時(shí)器1
  223.                 ET1     =                0;

  224. }

  225. void Timer_0(void) interrupt 1                 //舵機(jī)控制程序
  226. {

  227.    time++;
  228.    if(time<=se_timer[0]+45)
  229.         P27=1;
  230.    else P27=0;

  231.    if(time<=se_timer[1]+45)
  232.         P26=1;
  233.    else P26=0;


  234.    if(time>=1800)
  235.    {
  236.      time=0;
  237.    }

  238. }

  239. /************************************************************************/
  240. /*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
  241. /************************************************************************/
  242. /*                    左電機(jī)調(diào)速                                        */
  243. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  244.                             void pwm_out_left_moto(void)
  245. {
  246.    if(Left_moto_stop)
  247.    {
  248.     if(pwm_val_left<=push_val_left)
  249.                      {
  250.                                  Left_moto_pwm=1;
  251.                                  Left_moto_pwm1=1;
  252.                                }
  253.               else
  254.                      {
  255.                        Left_moto_pwm=0;
  256.                                  Left_moto_pwm1=0;
  257.                                }
  258.               if(pwm_val_left>=10)
  259.                      pwm_val_left=0;
  260.    }
  261.    else   
  262.           {
  263.            Left_moto_pwm=0;
  264.            Left_moto_pwm1=0;
  265.                               }
  266. }
  267. /******************************************************************/
  268. /*                    右電機(jī)調(diào)速                                  */
  269.    void pwm_out_right_moto(void)
  270. {
  271.   if(Right_moto_stop)
  272.    {
  273.     if(pwm_val_right<=push_val_right)
  274.                     {
  275.                      Right_moto_pwm=1;
  276.                                Right_moto_pwm1=1;
  277.                                }
  278.               else
  279.                     {
  280.                                Right_moto_pwm=0;
  281.                                Right_moto_pwm1=0;
  282.                               }
  283.               if(pwm_val_right>=10)
  284.                      pwm_val_right=0;
  285.    }
  286.    else   
  287.           {
  288.            Right_moto_pwm=0;
  289.            Right_moto_pwm1=0;
  290.                     }
  291. }


  292. void Timer_1(void) interrupt 3
  293. {
  294. //    static unsigned int ms_count=0;

  295.                 TL1 = 0xCD;                            //設(shè)置定時(shí)初值1MS定時(shí)               11.0592
  296.       TH1 = 0xD4;                            //設(shè)置定時(shí)初值

  297.      pwm_val_left++;
  298.               pwm_val_right++;
  299.               pwm_out_left_moto();
  300.               pwm_out_right_moto();

  301. //              if(ms_count++ >= 100)
  302. //              {
  303.                   // ms_count = 0;

  304.                               if(Left_2_led==0&&Right_1_led==0)
  305.                                             {
  306.                                              Left_moto_go1;
  307.                                              Right_moto_go1 ;   //右電機(jī)往前走
  308.                                              }

  309.                                             else
  310.                                           {                                          
  311.                                               if(Right_1_led==1&&Left_2_led==0)                            //右邊檢測(cè)到黑線
  312.                                                           {               
  313.                                                      // rightrun();                                                                            //右轉(zhuǎn)
  314.                                                                           Left_moto_go1 ;      //左電機(jī)往前走
  315.                                   Right_moto_back1 ;   //右電機(jī)往前走  
  316.                                                           }
  317.                                                       
  318.                                                         if(Left_2_led==1&&Right_1_led==0)                  //左邊檢測(cè)到黑線
  319.                                                         {
  320.                                     
  321.                                                                       //  leftrun();                                                                                        //左轉(zhuǎn)
  322. ……………………

  323. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整的Word格式文檔51黑下載地址(內(nèi)含清晰圖片)
WiFi智能小車2.docx (420.06 KB, 下載次數(shù): 31)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:587108 發(fā)表于 2019-10-30 08:51 來(lái)自觸屏版 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:632473 發(fā)表于 2019-10-30 09:23 | 顯示全部樓層
謝謝,分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91免费在线 | 99久久婷婷国产综合精品电影 | 中文在线www| www.9191| 亚洲精品乱码久久久久久蜜桃91 | 日日骚网 | 亚洲精品一 | 日韩 欧美 综合 | 国产午夜精品一区二区三区四区 | 久久国产精品免费一区二区三区 | 欧美久久久网站 | 91av在线视频观看 | 久久国产成人午夜av影院武则天 | 国产不卡一区在线观看 | 久久国产欧美日韩精品 | 日韩中文一区二区三区 | 在线观看视频你懂得 | 日韩视频一区在线观看 | 成人在线视频免费观看 | 国产亚洲一区二区三区 | 免费午夜剧场 | 免费观看日韩精品 | 国产黄色av网站 | 91欧美 | 国产超碰人人爽人人做人人爱 | 国产精品精品视频一区二区三区 | 日本亚洲一区 | 国内自拍偷拍视频 | 欧美性受 | 91亚洲精品国偷拍自产在线观看 | 亚洲先锋影音 | 一级爱爱片 | 日韩www| 在线色网 | 国产精品久久免费观看 | 99视频在线免费观看 | 精品一区二区三区在线观看国产 | www.国产 | 日日做夜夜爽毛片麻豆 | 伊人亚洲 | 正在播放国产精品 |