版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、南京師范大學電氣與自動化工程學院畢業(yè)設計論文摘 要智能小車是移動機器人學的一個重要分支,是當今從業(yè)余愛好者到研究人員中最受歡迎的項目之一,應用廣泛,在文化與生活中也起到越來越大的作用。從長遠來看,它未來不管在民用還是軍事亦或是太空開發(fā)等領域有著不錯的前景與發(fā)展空間,隨著時代的發(fā)展,人工智能也日益受人們所青睞。本文主要設計任務的制作一輛基于Arduino的麥克納姆輪繪圖小車,并編寫合適的程序使得用戶可以通過安卓手機藍牙來控制小車的移動以及筆架的升降,從而達到繪圖目的。文章對小車的車體設計及整體框架進行了描述,對小車的各個模塊也進行了相應介紹。文章介紹了本次所使用的ATmega328開發(fā)板與麥克納
2、姆輪的運動原理,通過對Arduino平臺和keil軟件的使用編寫了控制小車運作的主程序與控制筆架升降的STC單片機程序。文章末尾為本次設計所遇到的問題以及對應心得的描寫,也有對本次畢業(yè)設計的一些改進的想法。本次畢業(yè)設計所完成的智能小車基本達到預期所想,具有很大的推廣價值,可以實現(xiàn)可靠的全向移動能力,性能可靠。關鍵詞:Arduino 麥克納姆輪 藍牙控制 智能小車 IAbstractSmart car is an important branch of mobile robotics . It is today's researchers from amateur to one of t
3、he most popular items, widely used, in culture and also play a more and more important role in the life. In the long run, its future development both in civil and military or space, and other fields has a good prospects and development space, with the development of The Times, artificial intelligenc
4、e is increasingly popular with people.In this paper, the main design task of making a glossy mu wheel drawing based on the Arduino car, and write the right program that allows users to android bluetooth to control the movement of the car and the rise and fall of pen rack, so as to achieve mapping pu
5、rpose. This paper describes the vehicle body design and the overall frame, and introduces the module of the car.ATmega328 used by this article introduces the development board and the department's kinematic principle of wheel, through the use of the Arduino platform and keil software the write o
6、peration is to control the car pen rack main program and control of the elevator on STC microcontroller program. At the end of the article, there are some Suggestions for the design of this design.This graduate design complete intelligent car achieves the expected, has great popularization value, ca
7、n realize omnidirectional mobile ability, reliable performance and reliability.Key words: Arduino Mecanum wheel bluetooth control smart car II目 錄第一章 緒論11.1 選題背景及意義11.2 國內(nèi)外研究現(xiàn)狀11.3 課題的主要研究內(nèi)容2第二章 硬件介紹32.1 Arduino介紹32.1.1 Arduino開發(fā)板的選擇32.1.2 Arduino拓展板62.2 麥克納姆輪介紹62.2.1 麥克納姆輪原理72.2.2 麥克納姆輪運動分析72.2.3 全向
8、運動的實現(xiàn)92.3 藍牙模塊的選擇122.4 L293驅動控制板13第三章 程序的調(diào)用及編寫143.1 類庫的編寫及調(diào)用143.1.1 簡介143.1.2 庫文件的改用143.2 Arduino主程序的編寫173.3 STC單片機程序的編寫20第四章 程序的燒錄254.1 Arduino的燒錄254.2 STC單片機的燒錄26第五章 小車模型及操作流程285.1 小車的最終成品285.2 流程示意29第六章 總結與不足306.1 課題總結306.2 問題與不足31致謝32參考文獻33第1章 緒論1.1 選題背景及意義如今,多智能體系統(tǒng)(Multi-Agent System)已經(jīng)被給予越來越多的
9、研究和重視。智能小車作為其體系的重要組成部分,擁有廣泛的應用前景和期望,成為了當前許多高校和電子競賽所熱衷的課題,可見其研究意義之大。本課題結合了當前熱門的智能小車以及創(chuàng)客熱衷的Arduino設計開發(fā)平臺,再配合上將來擁有巨大商業(yè)和工業(yè)價值的Mecanum輪,通過藍牙遙控實現(xiàn)無線控制進而達到全向繪圖功能的智能小車。智能化是現(xiàn)代社會的產(chǎn)物,是未來的方向,是當前科技發(fā)展的目標,它可以起到比人為更為高效和安全的效果。自1978年,“智能模擬”就成為國家科學技術發(fā)展規(guī)劃的主要研究課題。大力發(fā)展智能化,可以實現(xiàn)對資源的充分利用,進而獲得最大收益,提高工業(yè)生產(chǎn)效率,還可以大大減少事故發(fā)生的概率,適合以后向
10、慢慢從高端走向生活化。智能小車,是現(xiàn)代的先進技術的綜合體,屬于移動輪式機器人的一種。目前常見的輪式機器人遍布于醫(yī)療、軍事、生活等各領域,發(fā)展面之廣。然而目前常見的輪式機器人有其很多的弊端,在執(zhí)行許多工作中往往會因為環(huán)境空間過于狹小進行無法移動,喪失機動性。近年來,全向移動的機器人以其特有的優(yōu)越性越來越受到人們的關注及國內(nèi)外研究機構的重視,Mecanum輪能在狹隘的空間里快速完成多種作業(yè),對輪式移動小車具有極大的研究價值。1.2 國內(nèi)外研究現(xiàn)狀基于Mecanum輪的全向機器人在國外已經(jīng)發(fā)展多年,國內(nèi)的研究還十分少見。在使用全向移動的技術后,可以顯著提高小車的機動性和靈活性,在狹隘的空間作業(yè)時,有
11、著顯著的優(yōu)勢。在Mecanum輪發(fā)明后,世界許多發(fā)達國家諸如美國等大量應用于工業(yè)、民用、軍事領域,包括叉車、運輸車、競賽智能車等。1996年美國的Airtrax公司就作為第一個采用該技術公司,將其運用于車輛商業(yè)化。圖1-1為Airtrax公司的Sidewinder系列叉車,它們可以實現(xiàn)在狹窄的空間里全方位移動,靈活自由,極大的提高了企業(yè)生產(chǎn)效率,具有極大的經(jīng)濟效益。圖1-1 Airtrax公司系列叉車同時,隨著國外對Mecanum輪的研究及應用,諸多國內(nèi)學者也對其進行了許多深入的研究及討論。研究的領域包括運動學、運動效率的研究、全向輪的布局及原理探究等,并在此基礎上提出了一系列的成果。其中,P
12、atrick Muir運用矩陣變換的方法建立了Mecanum運動學模型,并運用于反饋算法設計。1.3 課題的主要研究內(nèi)容本課題的主要研究任務是研制一輛基于Arduino開發(fā)板的,Mecanum輪由4個直流電機控制的,由NMB 微型步進推桿電機驅動的筆架結構,從而實現(xiàn)繪圖功能的智能小車。其中,小車由四輪底盤、Mecanum全向輪設計、筆架結構、藍牙模塊、Arduino開發(fā)板、電機驅動板等構成。本文內(nèi)容一共分為六章,安排如下:第1章 緒論:介紹課題背景,并探討智能小車以及Mecanum輪在國內(nèi)外的研究現(xiàn)狀,以此來討論課題意義。第2章 硬件介紹:主要介紹本次設計所用到的硬件及一些簡單的原理分析及使用
13、介紹。第3章 程序的調(diào)用及編寫:主要描寫了本次小車所用到的主要程序及編寫思路和構成的框架。第4章 程序的燒錄:將本次設計所用到的一些軟件部分進行使用說明,描述了我燒錄程序的一些基本步驟。第5章 小車模型及操作流程:介紹了小車最終的成品以及操作小車的流程示意。第6章 總結與不足第二章 硬件介紹近年來單片機的種類眾多,既有一直流行的 8位機:51單片機、AVR、PIC等系列,還有日趨受歡迎的 16位機、 MSP420等系列,還有 ARM CortoxM系列,這些的單片機都有其各自的優(yōu)勢,使用者可以根據(jù)自己的喜好,除此以外還有更接近 MCU的DSP系列。 而且我認為:關于所謂單片機的應用學習,最核心
14、的是要去自己理解以個 MCU,然后再根據(jù)控制需求來分配 MCU資源,編寫對應程序,這樣才是學習的關鍵所在。2.1 Arduino介紹馬西莫·班茲原是意大利伊夫雷亞的一家設計學校的老師。他學校的學生們經(jīng)常抱怨沒有好用的微控制器。到2005年冬天,馬西莫·班茲與David Cuartielles一起說起了這個問題。于是2人開始一起設計電路板,三天后,電路板宣布完工。Massimo Banzi根據(jù)自己喜歡去的一家叫做di Re Arduino的酒吧,這個酒吧是在1000年前以意大利國王Arduin的名字所命名的。他為了紀念這個就把,將這塊電路板命名為Arduino,這就是Ardu
15、ino名字的由來。后來Banzi、Cuartielles和Mellis將這個設計圖發(fā)到了網(wǎng)上。那時版權法雖然可以監(jiān)管許多開源軟件,但卻很難作用于硬件上面,所以他們后來便采用了一種叫做Creative Commons(CC)的方式來公開設計圖來維持自己的自由開源理念。通過這樣的授權,任何人都可以使用他們的設計板。人們可以自由的使用或者開發(fā)Arduino開發(fā)板,甚至都不需要開發(fā)團隊的授權。但是,一旦你發(fā)布了自己的引用設計,那么你就需要聲明原先的開發(fā)團隊。如果你相應修改電路板。那么必須用一用的CC授權方式,這樣就可以保證新的版本也可以有一用的自由和開發(fā)。Arduino這個名字是被唯一所保留的,被注冊
16、成了商標,不允許在未經(jīng)許可的情況下使用。隨著Arduino的發(fā)展,今年來有了眾多的衍生控制器產(chǎn)生,這也是Arduino的自由開放所帶來的成果。2.1.1 Arduino開發(fā)板的選擇Arduino控制器是一個在一個微控制器專為機器人應用。作用與Arduino開源平臺,它支撐上千的開放源代碼,并易于擴展與大多數(shù)Arduino Shields。板上的微控制器使用Arduino編程語言編程(基于接線)和Arduino開發(fā)環(huán)境(基于處理)。 Arduino項目可以獨立或他們可以在計算機上運行的軟件進行通信 (例如Flash,處理,MaxMSP等)。本次設計小車采用的開發(fā)板型號是Arduino Atmeg
17、a 168/328,如圖2-1所示圖2-1 Atmega 168/328Atmega 168 / 328開發(fā)板具有14通道數(shù)字輸入輸出,6通道的PWM(PIN1 1,pin10,pin9,pin6,PIN3)8通道10位模擬I/O,也支持USB接口通信,有自動感應的開關電源輸入,燒錄方面也支持ICSP頭程序直接下載,串行借口TTL電平,支持AREF和male/female針頭,有著用于APC220射頻模塊集成插座。在直流電源方面支持USB供電或外部的7v交流電壓,直流12V電壓。直流輸出:5V/3.3V DC和外部電源輸出尺寸:90x80mm。硬件簡介:- 調(diào)節(jié)電動機的電源輸入端(6v-12v
18、);- 不受管制的伺服電源輸入端子(供給調(diào)節(jié)4v-7.2V);- 伺服輸入功率選擇跳線口;- 串行接口模塊headerforapc220模塊;- 兩直流電機端子處理電機電流制定2a;- IIC / TWI端口SDA,SCL,5V,GND;- 模擬端口與8個模擬輸入;- 輸入與內(nèi)部電源電壓;- 通用I/O端口13個I/O線;- 4,5,6,7可以用來控制電機;- 復位按鈕。ATmega328的微控制器板有14個數(shù)字輸入/輸出引腳(其中6可作為PWM輸出),6個模擬輸入,一個16 MHz的晶體振蕩器,一個USB接口,一個電源插座,一個擴展報頭,和一個復位按鈕。它包含所有需要的 D支持微控制器;只需
19、將它連接到計算機與USB電纜或電源它與交流到直流適配器或電池開始。具有以下功能。a.記憶功能:ATmega328具有32KB的記憶容量(0.5KB用于引導)。除此之外它也有2 KB的SRAM和1 KB的EEPROM(可讀取和寫入與EEPROM庫)。b.輸入和輸出PinMode:14個不同的數(shù)字引腳的Duemilanove可以作為輸入或輸出,使用pinmode(),digitalwrite()和digitalread()功能可以實現(xiàn)引腳的引用。他們的工作電壓固定在5V。每個引腳可以提供或接收 40 mA最大并具有內(nèi)部上拉電阻(斷開默認)20-50歐姆。此外,一些引腳有專門的功能: 系列引腳:0號
20、引腳(RX)和1號引腳(TX)。用于接收(RX)和傳輸(TX)TTL串行數(shù)據(jù)。這些引腳連接到相應的引腳的FTDI USB TTL串口芯片。 外部中斷:2號引腳和3號引腳。這些引腳可配置觸發(fā)中斷,在一個低值,上升或下降沿,或改變價值??吹絘ttachinterrupt()功能詳情。 脈寬調(diào)制:3,5,6,9,10,11號引腳。提供與analogwrite() 8位PWM輸出功能。 SPI:10(SS),11(2)、12(MISO),13(SCK)。這些引腳支持SPI通信使用SPI。c.通信:Arduino 開發(fā)板上有許多設施可以通過計算機與另外的Arduino微控制器進行通信。ATmega328
21、提供UART TTL(5V)串行通信,可通過數(shù)字引腳0(RX)和1(TX)進行通信。板上的串口通信在Atmega8u2渠道USB和作為一個虛擬COM端口一起出現(xiàn)在計算機上的軟件上。8u2固件使用標準的USB COM驅動程序,不需要外部驅動程序。然而,在Windows中,一個inffile是必須安裝的。當計算機發(fā)送數(shù)據(jù)時,RX和TX發(fā)光二極管在板上會閃爍時,數(shù)據(jù)是通過USB傳輸?shù)酱行酒蚒SB連接到計算機。2.1.2 Arduino拓展板圖2-2 ATmega168和Atmega 328拓展板ATmega168和Atmega 328的IO拓展板如圖2-2所示,支持RS485接口可驅動4個電機。
22、這個Arduino兼容的I/O擴展通過精心的設計從而達到與Arduino板之間的一個簡單的連接(如Arduino Duemilanove)和其他設備,如傳感器、RS485 器件。在本質(zhì)上,它擴大了Arduino控制器的數(shù)字I/O和模擬輸入引腳與電源和接地端。它是用arduino mega兼容,是一個完美的伴侶。特征:1.支持XBee(XBee-Pro);2.一個獨特的RS485輸出,支持RS485設備;3.獨立的PWM引腳,這是與標準伺服連接器兼容;4.支持藍牙模塊APC220模塊;5.外部電源與車載電源之間的自動切換;6. 支持SD卡(讀寫-我們的SD卡模塊是必要的);7. 支持IIC /
23、I2C /雙連接。2.2 麥克納姆輪介紹麥克納姆輪最早為瑞典Macanum公司所提出的,目前應用十分廣泛。他也可以成為斜齒輪,輪齒是由可以旋轉的鼓形錕子所組成的。麥克納姆輪的輪子結構相對來說比較繁雜,無論對于環(huán)境或者是生產(chǎn)工藝都要求較高。但是,它無論在工業(yè)還是軍事領域都有極為廣泛的運用和前景,這點讓它具有很大的上升和研究空間。2.2.1 麥克納姆輪原理麥克納姆輪的設計體系,廣泛運用于各類工程實際運作當中,屬于目前技術相對較為成熟的一種輪體設計結構。它有別于傳統(tǒng)的車輪,它由設計軸線相差四十五度的輪轂和輥子所構成。數(shù)個輥子由一定的精度設計搭建在一起,與車輪的圓周重合,從而使得車輪實現(xiàn)自由滾動的目的
24、。當車輪以一定速度滾動時,輥子會與車輪圓周一起實現(xiàn)側向運動。通過將多個麥克納姆輪搭建在一起,從而實現(xiàn)小車在平面內(nèi)按照指令實現(xiàn)多個方向的移動和轉動。一般情況來說,安裝麥克納姆輪的小車通常由多個電機通過同步驅動的方式,加以微調(diào)從而來達到小車的全方向移動。麥克納姆輪的自由度是影響其全向移動的關鍵。麥克納姆輪具有2個自由度:第一個是車輪本身圍繞其軸線的轉動;第二個是輥子繞其軸線轉動。因此,麥克納姆輪在旋轉的時候,除了能主動運動之外,在輥子的軸線上也具備被動運動的能力。當輪子繞著固定的車軸轉動時,其輥子會繞成一個圓柱面,進而實現(xiàn)連續(xù)的滾動,當各個輪子按照一定的組合一起運動時,可以實現(xiàn)在平面上的三自由度運
25、動。如圖2-3為麥克納姆輪結構件的圖示。圖2-3 麥克納姆輪結構件圖2.2.2 麥克納姆輪運動分析 本次畢業(yè)設計采用四個麥克納姆輪按照正方四輪接法,為了方便分析運動原理,建立了如圖2-4所示坐標系。圖2-4 麥克納姆輪小車底盤坐標系如圖所示,L表示車身的長度,l為寬度,車速為V(包括Vx與Vy),Wz為車身繞Z軸的角速度。圖中參數(shù)滿足以下關系: (2-1a) (2-1b) (2-1c) (2-1d)其中ai-i輪輥子軸線與輪軸線夾角(i=1,2,3,4)若考慮矢量方向性,沿著XY軸分解公式可得: (2-2a) (2-2b) (2-2c) (2-2d)聯(lián)立以上方程可得小車的逆運動學方程: (2-
26、3a) (2-3b) (2-3c) (2-3d)當小車的平移速度和轉動角速度已知時,運用以上逆運動學方式,就可得各個輪子的轉速,再對以上公式進行矩陣變換,便可得到正運動學方程: (2-4a) (2-4b) (2-4c) 2.2.3 全向運動的實現(xiàn) 本次畢業(yè)設計搭建小車底盤麥克納姆輪搭建方式如圖2-5所示。圖2-5 小車示意圖 從示意圖分析小車的運動方式其實很直觀,當輪1,2,3,4,按照一定角速度向前或向后轉動時,小車可實現(xiàn)向前移動,如圖2-6所示。圖2-6 小車前后移動當輪四個輪子速度相同,而輪1、3與輪2、4運動方向相反時,小車即可實現(xiàn)左右移動,如圖2-7所示。圖2-7 小車左右移動 當輪
27、1、3速度與方向相同而輪2、4不動或者輪2、4速度與方向相同而輪1、3不動時,小車可實現(xiàn)斜45度方向移動,如圖2-8所示。圖2-8 小車斜45度移動當4個輪子速度相同,而輪1、4與輪2、3方向相反時,小車會做原地旋轉運動,如圖2-9所示。圖2-9 小車原地旋轉2.3 藍牙模塊的選擇本次設計使用的藍牙模塊是hc-06型號,如圖2-10所示圖2-10 藍牙模塊hc-06這里簡單介紹一下其接線方式:1. GND:GND為電源接地口,接地或者鏈接電源負極;2. 5V/3.3V:電源正極接入口;3. RX: RX是藍牙傳感器的讀取口,接入串口的TX口;4. TX: TX是藍牙傳感器的寫入口,接入串口的R
28、X口;以上為4個接線口的說明,在安卓手機端下載藍牙SPP助手來給藍牙模塊發(fā)送指令從而達到控制小車的目的,如圖2-11位SPP界面。圖2-11 SPP界面2.4 L293驅動控制板本次選用的L293驅動控制板來控制推桿步進電機,筆架與控制板一起構成繪圖模塊,如圖2-12為L293驅動控制板的原理圖。圖2-12 L293驅動控制板原理圖由接線圖可知L293的P4端和P5端的3號引腳連接在STC12C2052AD的P1.6和P1.7數(shù)字引腳上,所以因此我想到可以通過Arduino開發(fā)板上的數(shù)字引腳與L293控制板上的數(shù)字引腳相連接,通過Arduino ide平臺通過設置開發(fā)板上的數(shù)字引腳的高低電平和
29、STC單片機程序上通過數(shù)字引腳上的高低電平相互配合,從而達到控制電機推桿升降的目的。 第三章 程序的調(diào)用及編寫3.1 類庫的編寫及調(diào)用3.1.1 簡介Arduino之所以能成為全球流行的硬件開發(fā)平臺,得益于其開放自由的特點,能大大激發(fā)開發(fā)者的創(chuàng)意與效率,而這是與Arduino的類庫機制密切相關的。類庫可以說是作為Arduino開發(fā)平臺的大腦,類庫的引用可以大大提高代碼的編寫效率以及程序的簡潔與可讀性。類庫的存放地點一般在Arduino源文件的libraries文件中,在主程序的編寫中可以引用。本次所使用的類庫是MotorWheel電機類庫,用于控制4個直流伺服電機的運作,具體庫文件如圖3-1所
30、示。圖3-1 MotorWheel類庫的庫文件3.1.2 庫文件的改用本次畢業(yè)設計所調(diào)用的是類庫中的Omni4WD庫文件。庫文件因其使用的方便而受到許多開發(fā)者的歡迎,但同時也存在諸多的問題。在庫的引用時,若直接引用很容易出現(xiàn)硬件沖突的問題,最常見的有定時器的共用、引腳的沖突、參數(shù)的不協(xié)調(diào)等問題,所以在調(diào)用一個庫文件時首先要做的就是讀懂程序以及做適當?shù)男薷?。本次修改后使用的庫文件詳見附?。接下來的內(nèi)容中,我會對要使用到的部分主要的小車移動函數(shù)結構進行說明。unsigned char Omni4WD:setSwitchMotorsStat(unsigned char switchMotorsSt
31、at) if(MOTORS_FB<=switchMotorsStat && switchMotorsStat<=MOTORS_BF)_switchMotorsStat=switchMotorsStat;return getSwitchMotorsStat();unsigned char Omni4WD:switchMotors() if(getSwitchMotorsStat()=MOTORS_FB) setSwitchMotorsStat(MOTORS_BF); else setSwitchMotorsStat(MOTORS_FB); 此段為電機正反運作的初始化程
32、序,當接受高電壓時電機正向轉動,低電壓時電機反向轉動。unsigned char Omni4WD:setCarStat(unsigned char carStat) if(STAT_UNKNOWN<=carStat && carStat<=STAT_UPPERRIGHT) return _carStat=carStat; else return STAT_UNKNOWN;此段為定義小車啟動的初始化程序。wheelULSetSpeedMMPS(speedMMPS*sin(rad)+speedMMPS*cos(rad)-omega*WHEELSPAN);wheelLLS
33、etSpeedMMPS(speedMMPS*sin(rad)-speedMMPS*cos(rad)-omega*WHEELSPAN);wheelLRSetSpeedMMPS(-(speedMMPS*sin(rad)+speedMMPS*cos(rad)+omega*WHEELSPAN);wheelURSetSpeedMMPS(-(speedMMPS*sin(rad)-speedMMPS*cos(rad)+omega*WHEELSPAN);此段為文章.2.2節(jié)所示公式的小車速度的計算與定義,所得結果保留在SpeedMMPS中,在下面的小車前進公式中用到。int Omni4WD:setCarAdv
34、ance(int speedMMPS) setCarStat(STAT_ADVANCE);return setCarMove(speedMMPS,PI/2,0);小車的前進函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarAdvance();”來調(diào)用。int Omni4WD:setCarBackoff(int speedMMPS) setCarStat(STAT_BACKOFF);return setCarMove(speedMMPS,PI*3/2,0);小車的后退函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarBackoff();”來調(diào)用。int Omni4WD:setCarLeft(
35、int speedMMPS) setCarStat(STAT_LEFT);return setCarMove(speedMMPS,PI,0);小車的左移函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarLeft();”來調(diào)用。int Omni4WD:setCarRight(int speedMMPS) setCarStat(STAT_RIGHT);return setCarMove(speedMMPS,0,0);小車的右移函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarRight();”來調(diào)用。int Omni4WD:setCarUpperLeft(int speedMMPS) setC
36、arStat(STAT_UPPERLEFT);return setCarMove(speedMMPS,PI*3/4,0);小車的45度角左前移函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarUpperLeft();”來調(diào)用。int Omni4WD:setCarLowerLeft(int speedMMPS) setCarStat(STAT_LOWERLEFT);return setCarMove(speedMMPS,PI*5/4,0);小車的45度角左后移函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarLowerLeft();”來調(diào)用。int Omni4WD:setCarLowerRi
37、ght(int speedMMPS) setCarStat(STAT_LOWERRIGHT);return setCarMove(speedMMPS,PI*7/4,0);小車的45度角右后移函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarLowerRight();”來調(diào)用。int Omni4WD:setCarUpperRight(int speedMMPS) setCarStat(STAT_UPPERRIGHT);return setCarMove(speedMMPS,PI/4,0);小車的右45度角前移函數(shù),在主函數(shù)的調(diào)用時可用 “Omni.setCarUpperRight();”來調(diào)用
38、。3.2 Arduino主程序的編寫有了上一節(jié)所講的庫函數(shù)的基礎上,主程序的編寫方面就變得更高效且根據(jù)可讀性了。Arduino程序可以分為三個主要部分:結構、變量/常量和功能。Arduino有兩個重要的結構:setup()和loop()。他們是必不可少的。setup()的功能是當開始編寫程序時,使用它初始化變量,引腳模式,開始使用庫等設置功能,并且只運行一次。每次開機將重置開發(fā)板上的功能設置。不過在這個之前本次設計還會使用到很多類庫的調(diào)用。在創(chuàng)建setup()函數(shù),初始化和設置初始值后執(zhí)行l(wèi)oop()功能。Loop如同名字一樣,會連續(xù)循環(huán),并允許程序更改和響應,以此來控制Arduino電路板。
39、通常在loop()中設置主程序來完成如驅動模塊或者采集數(shù)據(jù)等功能。本次編寫的主程序,能通過手機藍牙每發(fā)送一個不同的字符,使得小車車輪及筆架部分會作出相應的動作,配合庫函數(shù)的使用,可以使程序簡潔且高效。下面我會詳細說明本次設計所用的主程序框架。#include <PinChangeInt.h>#include <PinChangeIntConfig.h>#include <EEPROM.h>#define _NAMIKI_MOTOR /定義常量#include <fuzzy_table.h>#include <PID_Beta6.h>#
40、include <MotorWheel.h> /調(diào)用控制電機運作的主要庫文件#include <Omni4WD.h>#include <fuzzy_table.h>#include <PID_Beta6.h> /以上為本次編程所用到的庫文件/ / wheel1 / wheel4 Left / Right / wheel2 / wheel3 Right / Left /小車的輪子設計示意irqISR(irq4,isr4);MotorWheel wheel4(3,2,4,5,&irq4);irqISR(irq3,isr3);MotorWhee
41、l wheel3(11,12,14,15,&irq3);irqISR(irq2,isr2);MotorWheel wheel2(9,8,16,17,&irq2);irqISR(irq1,isr1);MotorWheel wheel1(10,7,18,19,&irq1); /對每個麥克納姆輪所用的引腳設置及初始化Omni4WD Omni(&wheel1,&wheel2,&wheel3,&wheel4); /引用程序,電機初始化int up = 6; int down =13; /由以上的各個電機定義的數(shù)字引腳,6與13為開發(fā)板上剩余的可用引
42、腳,本次關于配合L293控制板控制推桿步進電機的引腳設置為6與13引腳 void setup() TCCR1B=TCCR1B&0xf8|0x01; / Pin9,Pin10 的PWM 為31250HzTCCR2B=TCCR2B&0xf8|0x01; / Pin3,Pin11 的PWM 為31250Hz Omni.PIDEnable(0.31,0.01,0,10); / PWM的初始化設置Serial.begin(9600); /設置波特率為9600 pinMode(up, OUTPUT); /定義6號引腳為輸出引腳pinMode(down, OUTPUT); /定義13號引腳為
43、輸出引腳void loop() while(Serial.available() /當串口有輸出時做出反應 char c=Serial.read(); if(c='w') Serial.println("Adance"); Omni.setCarAdvance(); Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收w時,小車執(zhí)行前進命令 if(c='s') Serial.println("Back"); Omni.setCarBackoff();
44、Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收s時,小車執(zhí)行后退命令 if(c='a') Serial.println("Left"); Omni.setCarLeft(); Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收a時,小車執(zhí)行左移命令 if(c='d') Serial.println("Right"); Omni.setCarRight(); Omni.set
45、CarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收d時,小車執(zhí)行右移命令 if(c='q') Serial.println("Upleft"); Omni.setCarUpperLeft(); Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收q時,小車執(zhí)行左上45度角移動命令 if(c='e') Serial.println("Upright"); Omni.setCarUpperRight
46、(); Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收e時,小車執(zhí)行右上45度角移動命令 if(c='z') Serial.println("Lowleft"); Omni.setCarLowerLeft(); Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收z時,小車執(zhí)行左下45度角移動命令 if(c='c') Serial.println("Lowright"); O
47、mni.setCarLowerRight(); Omni.setCarSpeedMMPS(30,1000); Omni.delayMS(500,false); /當串口接收c時,小車執(zhí)行右下45度角移動命令 if(c='x') Serial.println("stop"); Omni.setCarStop(); Omni.delayMS(500,false); /當串口接收x時,小車執(zhí)行停止命令 if(c='r') digitalWrite(up, HIGH); delay(3000); digitalWrite(up, LOW); dela
48、y(500); /當串口接收r時,筆架上升 if(c='t') digitalWrite(down,HIGH); delay(3000); digitalWrite(down, LOW); delay(500); /當串口接收t時,筆架下降 3.3 STC單片機程序的編寫前面2節(jié)是關于Arduino開發(fā)板的程序編寫,本節(jié)是關于STC單片機程序的編寫,燒錄進L293驅動板以達到控制推桿步進電機運作的目的。在編寫前,第一個重要的工作就是對L293驅動板的接線圖進行仔細的研究,然后再進行程序的編寫。從上圖2-12來看L293的P4端和P5端的3號引腳連接在STC12C2052AD的P
49、1.6和P1.5數(shù)字引腳上,所以因此我想到可以通過Arduino開發(fā)板上的數(shù)字引腳與L293控制板上的數(shù)字引腳相連接,通過Arduino ide平臺通過設置開發(fā)板上的數(shù)字引腳的高低電平和STC單片機程序上通過數(shù)字引腳上的高低電平相互配合,從而達到控制電機推桿升降的目的。#include<STC12C2052AD.H> /頭文件#include <intrins.h>/51基本運算(包括_nop_空函數(shù))sbit S1=P15;/定義點動正轉按鍵控制端口sbit S2=P16;/定義點動反轉按鍵控制端口sbit A1=P13;/定義A線圈端口sbit B1=P12;/定義
50、B線圈端口sbit C1=P11;/定義C線圈端口sbit D1=P10;/定義D線圈端口#define Coil_A1 A1=0;B1=1;C1=1;D1=1; /A線圈通電#define Coil_B1 A1=1;B1=0;C1=1;D1=1; /B線圈通電#define Coil_C1 A1=1;B1=1;C1=0;D1=1; /C線圈通電#define Coil_D1 A1=1;B1=1;C1=1;D1=0; /D線圈通電#define Coil_OFF A1=1;B1=1;C1=1;D1=1; /全部斷電 unsigned char Speed;/速度調(diào)節(jié)變量unsigned int b=2000;/中斷初值變量bit Flag1;/啟停標志位bit Flag2;/正反轉標志位void DelayMs (unsigned int a)/1T單片機大致1ms延時unsigned int i;/無符號整型局部變量while(a-!=0)for(i=0;i<600;i+);void KeyScan()if(S1=1)/P1.5收到高電平,正轉DelayMs(10);/延時10ms,防抖if(S1=1)/確認高電平Flag1=1;/啟動標志Flag2=1;/正轉標志else if(S2=1)/P1.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共設施緊急維修協(xié)議范例
- 股票配資風險提示合同模板
- 寫字樓租賃終止協(xié)議模板
- 癥瘕(子宮肌瘤)中醫(yī)護理方案
- 2025人教高中物理同步講義練習選擇性必修三第二章《氣體、固體和液體》綜合練習(含答案)
- 智慧城管系統(tǒng)建設項目解決方案
- 網(wǎng)站內(nèi)容合同模板
- 產(chǎn)品生命周期質(zhì)量管理合同
- 企業(yè)全面風險管理合同
- “書香機關”創(chuàng)建實施方案
- 期末知識點復習 2024-2025學年統(tǒng)編版語文九年級上冊
- 《江蘇省一年級上學期數(shù)學第二單元試卷》
- 2024中國通信服務股份限公司招聘高頻500題難、易錯點模擬試題附帶答案詳解
- 數(shù)學七年級上冊《合并同類項》說課-課件
- 2024新教材高中政治 第一單元 生產(chǎn)資料所有制與經(jīng)濟體制 第一課 我國的生產(chǎn)資料所有制 1.1《公有制為主體 多種所有制經(jīng)濟共同發(fā)展》教案 部編版必修2
- cet6大學英語六級考試大綱詞匯excel版
- 廢舊風機葉片循環(huán)利用項目可行性研究報告-積極穩(wěn)妥推進碳達峰碳中和
- 《甘肅省中醫(yī)康復中心建設標準(2021版)》
- QB∕T 2345-2013 脂肪烷基二甲基甜菜堿平均相對分子質(zhì)量的測定氣相色譜法
- 高中英語外刊-小貓釣魚50篇
- 監(jiān)理大綱工程監(jiān)理方案技術標投標方案
評論
0/150
提交評論