智能機(jī)器人小車創(chuàng)意設(shè)計(jì)制作指導(dǎo)手冊.doc
《智能機(jī)器人小車創(chuàng)意設(shè)計(jì)制作指導(dǎo)手冊.doc》由會員分享,可在線閱讀,更多相關(guān)《智能機(jī)器人小車創(chuàng)意設(shè)計(jì)制作指導(dǎo)手冊.doc(32頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 智能機(jī)器人小車 創(chuàng)意設(shè)計(jì)制作指導(dǎo)手冊 江蘇省天一中學(xué)人工智能社團(tuán) 指導(dǎo)老師:鄧一波 俞金炎 二零一一年三月 目 錄 一,機(jī)器人概述 二,機(jī)器人小車硬件結(jié)構(gòu)解析 三,機(jī)器人小車編程語言及環(huán)境 四,智能機(jī)器人小車安裝,調(diào)試 五,智能機(jī)器人小活動(dòng)方案及創(chuàng)意案例 第一章 機(jī)器人概述 1,機(jī)器人技術(shù)的發(fā)展 1.1機(jī)器人的由來 機(jī)器人 是20世紀(jì)才出現(xiàn)的新名詞。1920年,捷克劇作家Capek在他的《羅薩姆萬能機(jī)器人公司(R.U.R
2、)》劇本中,第一次提出了機(jī)器人(robot)這個(gè)詞。robot是從古代斯拉夫語robota一詞演變而來的。robota本是強(qiáng)制勞動(dòng)的意思,Capek在二十世紀(jì)工業(yè)革命后技術(shù)和生產(chǎn)快速發(fā)展的背景下,根據(jù)它造出具有"奴隸機(jī)器"含義的新詞robot。它反映著人類希望制造出象人一樣會思考,有勞動(dòng) 的機(jī)器代替自己工作的愿望。但在當(dāng)時(shí),機(jī)器人一詞也僅僅具有科幻意義,并不具備現(xiàn)實(shí)意義,真正使機(jī)器人成為現(xiàn)實(shí)是 20世紀(jì)工業(yè)機(jī)器人出現(xiàn)以后。 人類發(fā)展到20世紀(jì),隨著社會分工的細(xì)化,從事簡單重復(fù)工作的人們強(qiáng)烈渴望有某種能代替自己工作的機(jī)器出現(xiàn),在 這方面的研究,美國的英格伯格和德沃爾走在了前面。
3、 1954年,電子學(xué)家德沃爾獲得了一項(xiàng)"可編程序機(jī)械手"的專利,這是一種象人手臂的機(jī)械手,它按程序進(jìn)行工作,這種程序可以根據(jù)不同工作需要來編制,因此,具有通用性和靈活性,由此,熱衷于機(jī)器人研究的物理學(xué)家英格伯格想到,如果能制造出這種機(jī)器,可象人一樣學(xué)習(xí)別人干活的動(dòng)作,之后便能自動(dòng)重復(fù)進(jìn)行操作。于是,在1958年,英格伯格和德沃爾聯(lián)手制造出第一臺真正實(shí)用的工業(yè)機(jī)器人,并很快得到了應(yīng)用。 隨后,他們成立了世界上第一家機(jī)器人制造工廠——尤尼梅遜公司,并將第一批機(jī)器人稱為"尤尼梅物",意思是"萬能自動(dòng)",英格伯格因此被稱為"工業(yè)機(jī)器人之父",1984年,他還預(yù)言:"我要使機(jī)器人擦地板,做飯,洗刷我
4、的汽車和檢查安全"。 機(jī)器人發(fā)展的三個(gè)發(fā)展階段 隨著人們對機(jī)器的研究,機(jī)器人也在進(jìn)步,按其發(fā)展過程機(jī)器人可分為三代:第一代是示教再現(xiàn)型機(jī)器人:"尤尼梅特"和"沃爾薩特蘭"這兩種最早的工業(yè)機(jī)器人是示教再現(xiàn)型機(jī)器人的典型代表。它由人操縱機(jī)械手做一遍應(yīng)當(dāng)完成的動(dòng)作或通過控制器發(fā)出指令讓機(jī)械手臂動(dòng)作,在動(dòng)作過程中機(jī)器人會自動(dòng)將這一過程存入記憶裝置。當(dāng)機(jī)器人工作時(shí),能再現(xiàn)人教給它的動(dòng)作,并能自動(dòng)重復(fù)的執(zhí)行。這類機(jī)器人不具有外界信息的反饋能力,很難適應(yīng)變化的環(huán)境。 第二代是有感覺的機(jī)器人:它們對外界環(huán)境有一定感知能力,并具有聽覺、視覺、觸覺等功能。機(jī)器人工作時(shí),根據(jù)感覺器官(傳感器)獲得的信息,靈
5、活調(diào)整自己的工作狀態(tài),保證在適應(yīng)環(huán)境的情況下完成工作。如:有觸覺的機(jī)械手可輕松自如地抓取雞蛋,具有嗅覺的機(jī)器人能分辨出不同飲料和酒類。 第三代是具有智能的機(jī)器人:智能機(jī)器人是靠人工智能技術(shù)決策行動(dòng)的機(jī)器人,它們根據(jù)感覺到的信息,進(jìn)行獨(dú)立思維、識別、推理,并作出判斷和決策,不用人的參與就可以完成一些復(fù)雜的工作。日本研制的能演奏數(shù)首曲目?quot;瓦伯特"2號機(jī)器人,已達(dá)到5歲兒童的智能水平。目前,智能機(jī)器人已在許多方面具有人類的特點(diǎn),隨著機(jī)器人技術(shù)不斷發(fā)展與完善,機(jī)器人的智能水平將越來越接近人類。 1.2 機(jī)器人的定義 機(jī)器人(Robot)是自動(dòng)執(zhí)行工作的機(jī)器裝置。它既可以接受
6、人類指揮,又可以運(yùn)行預(yù)先編排的程序,也可以根據(jù)以人工智能技術(shù)制定的原則綱領(lǐng)行動(dòng)。它的任務(wù)是協(xié)助或取代人類工作的工作,例如生產(chǎn)業(yè)、建筑業(yè),或是危險(xiǎn)的工作。 1.3 機(jī)器人學(xué)的進(jìn)展 機(jī)器人的償還期理論促進(jìn)對機(jī)器人產(chǎn)業(yè)的投資。日本后來居上,成為“機(jī)器人王國” 機(jī)器人產(chǎn)業(yè)在全世界迅速發(fā)展應(yīng)用范圍遍及工業(yè)、科技和國防各個(gè)領(lǐng)域。形成新的學(xué)科-----機(jī)器人學(xué) 機(jī)器人向智能化方向發(fā)展 2, 機(jī)器人結(jié)構(gòu)與分類 2.1 機(jī)器人系統(tǒng)的結(jié)構(gòu) 機(jī)器人一般由執(zhí)行機(jī)構(gòu)、驅(qū)動(dòng)裝置、檢測裝置和控制系統(tǒng)和復(fù)雜機(jī)械等組成。 執(zhí)行機(jī)構(gòu)即機(jī)器人本體,其臂部一般采用空間開鏈連桿機(jī)構(gòu),其中的運(yùn)動(dòng)副(轉(zhuǎn)動(dòng)副或移動(dòng)副)常
7、稱為 關(guān)節(jié),關(guān)節(jié)個(gè)數(shù)通常即為機(jī)器人的自由度數(shù)。根據(jù)關(guān)節(jié)配置型式和運(yùn)動(dòng)坐標(biāo)形式的不同,機(jī)器人執(zhí)行機(jī)構(gòu)可分為直角坐標(biāo)式、圓柱坐標(biāo)式、極坐標(biāo)式和關(guān)節(jié)坐標(biāo)式等類型。出于擬人化的考慮,常將機(jī)器人本體的有關(guān)部位分別稱為基座、腰部、臂部、腕部、手部(夾持器或末端執(zhí)行器)和行走部(對于移動(dòng)機(jī)器人)等。 驅(qū)動(dòng)裝置是驅(qū)使執(zhí)行機(jī)構(gòu)運(yùn)動(dòng)的機(jī)構(gòu),按照控制系統(tǒng)發(fā)出的指令信號,借助于動(dòng)力元件使機(jī)器人進(jìn)行動(dòng)作。它輸入的是電信號,輸出的是線、角位移量。機(jī)器人使用的驅(qū)動(dòng)裝置主要是電力驅(qū)動(dòng)裝置,如步進(jìn)電機(jī)、伺服電機(jī)等,此外也有采用液壓、氣動(dòng)等驅(qū)動(dòng)裝置。 檢測裝置的作用是實(shí)時(shí)檢測機(jī)器人的運(yùn)動(dòng)及工作情況,根據(jù)需要反饋給
8、控制系統(tǒng),與設(shè)定信息進(jìn)行比較后,對執(zhí)行機(jī)構(gòu)進(jìn)行調(diào)整,以保證機(jī)器人的動(dòng)作符合預(yù)定的要求。作為檢測裝置的傳感器大致可以分為兩類:一類是內(nèi)部信息傳感器,用于檢測機(jī)器人各部分的內(nèi)部狀況,如各關(guān)節(jié)的位置、速度、加速度等,并將所測得的信息作為反饋信號送至控制器,形成閉環(huán)控制。另一類是外部信息傳感器,用于獲取有關(guān)機(jī)器人的作業(yè)對象及外界環(huán)境等方面的信息,以使機(jī)器人的動(dòng)作能適應(yīng)外界情況的變化,使之達(dá)到更高層次的自動(dòng)化,甚至使機(jī)器人具有某種“感覺”,向智能化發(fā)展,例如視覺、聲覺等外部傳感器給出工作對象、工作環(huán)境的有關(guān)信息,利用這些信息構(gòu)成一個(gè)大的反饋回路,從而將大大提高機(jī)器人的工作精度。 控制系統(tǒng)有兩種方式。
9、一種是集中式控制,即機(jī)器人的全部控制由一臺微型計(jì)算機(jī)完成。另一種是分散(級)式控制,即采用多臺微機(jī)來分擔(dān)機(jī)器人的控制,如當(dāng)采用上、下兩級微機(jī)共同完成機(jī)器人的控制時(shí),主機(jī)常用于負(fù)責(zé)系統(tǒng)的管理、通訊、運(yùn)動(dòng)學(xué)和動(dòng)力學(xué)計(jì)算,并向下級微機(jī)發(fā)送指令信息;作為下級從機(jī),各關(guān)節(jié)分別對應(yīng)一個(gè)CPU,進(jìn)行插補(bǔ)運(yùn)算和伺服控制處理,實(shí)現(xiàn)給定的運(yùn)動(dòng),并向主機(jī)反饋信息。根據(jù)作業(yè)任務(wù)要求的不同,機(jī)器人的控制方式又可分為點(diǎn)位控制、連續(xù)軌跡控制和力(力矩)控制。 2.2 機(jī)器人的分類 誕生于科幻小說之中一樣,人們對機(jī)器人充滿了幻想。也許正是由于機(jī)器人定義的模糊,才給了人們充分的想象和創(chuàng)造空間。 家務(wù)型機(jī)器人:能幫助人們
10、打理生活,做簡單的家務(wù)活。 操作型機(jī)器人:能自動(dòng)控制,可重復(fù)編程,多功能,有幾個(gè)自由度,可固定或運(yùn)動(dòng),用于相關(guān)自動(dòng)化系統(tǒng)中。 程控型機(jī)器人:按預(yù)先要求的順序及條件,依次控制機(jī)器人的機(jī)械動(dòng)作。 示教再現(xiàn)型機(jī)器人:通過引導(dǎo)或其它方式,先教會機(jī)器人動(dòng)作,輸入工作程序,機(jī)器人則自動(dòng)重復(fù)進(jìn)行作業(yè)。 數(shù)控型機(jī)器人:不必使機(jī)器人動(dòng)作,通過數(shù)值、語言等對機(jī)器人進(jìn)行示教,機(jī)器人根據(jù)示教后的信息進(jìn)行作業(yè)。 感覺控制型機(jī)器人:利用傳感器獲取的信息控制機(jī)器人的動(dòng)作。 適應(yīng)控制型機(jī)器人:能適應(yīng)環(huán)境的變化,控制其自身的行動(dòng)。 學(xué)習(xí)控制型機(jī)器人:能“體會”工作的經(jīng)驗(yàn),具有一定的學(xué)習(xí)功能,并將所“
11、學(xué)”的經(jīng)驗(yàn)用于工作中。 智能機(jī)器人:以人工智能決定其行動(dòng)的機(jī)器人。 我國的機(jī)器人專家從應(yīng)用環(huán)境出發(fā),將機(jī)器人分為兩大類,即工業(yè)機(jī)器人和特種機(jī)器人。所謂工業(yè)機(jī)器人就是面向工業(yè)領(lǐng)域的多關(guān)節(jié)機(jī)械手或多自由度機(jī)器人。而特種機(jī)器人則是除工業(yè)機(jī)器人之外的、用于非制造業(yè)并服務(wù)于人類的各種先進(jìn)機(jī)器人,包括:服務(wù)機(jī)器人、水下機(jī)器人、娛樂機(jī)器人、軍用機(jī)器人、農(nóng)業(yè)機(jī)器人、機(jī)器人化機(jī)器等。在特種機(jī)器人中,有些分支發(fā)展很快,有獨(dú)立成體系的趨勢,如服務(wù)機(jī)器人、水下機(jī)器人、軍用機(jī)器人、微操作機(jī)器人等。目前,國際上的機(jī)器人學(xué)者,從應(yīng)用環(huán)境出發(fā)將機(jī)器人也分為兩類:制造環(huán)境下的工業(yè)機(jī)器人和非制造環(huán)境下的服務(wù)與仿人型機(jī)器人
12、,這和我國的分類是一致的。 空中機(jī)器人又叫無人機(jī)器,近年來在軍用機(jī)器人家族中,無人機(jī)是科研活動(dòng)最活躍、技術(shù)進(jìn)步最大、研究及采購經(jīng)費(fèi)投入最多、實(shí)戰(zhàn)經(jīng)驗(yàn)最豐富的領(lǐng)域。80多年來,世界無人機(jī)的發(fā)展基本上是以美國為主線向前推進(jìn)的,無論從技術(shù)水平還是無人機(jī)的種類和數(shù)量來看,美國均居世界之首位。 3,機(jī)器人學(xué)與人工智能的關(guān)系 機(jī)器人學(xué)與人工智能有十分密切的關(guān)系。人工智能的近期目標(biāo)在于研究智能計(jì)算機(jī)及其系統(tǒng),以模仿和執(zhí)行人類的某些智力功能,如判斷、推理、理解、識別、規(guī)劃、學(xué)習(xí)和其他問題求解。這一研究抓住了創(chuàng)造力的首要問題----人類智能。人工智能使目前主要用于數(shù)值計(jì)算的計(jì)算機(jī)變得更
13、加富有生氣,并用它來表達(dá)最復(fù)雜的生物世界----人腦智能。人們的努力遠(yuǎn)非獲得完全成功,但是已經(jīng)在許多研究領(lǐng)域取得進(jìn)展。例如,在規(guī)劃、博弈、問題求解、語言與語音理解、視覺圖像識別、定理證明、知識表示與描述等方面,已取得不少研究成果。 1996年2月10~17日,為了紀(jì)念世界上第一臺電子計(jì)算機(jī)誕生50周年,IBM的“深藍(lán)”同國際象棋世界冠軍卡斯帕羅夫在美國費(fèi)城舉行六局大賽。結(jié)果 卡斯帕羅夫以4:2獲勝。 1997年5月3~11日, “深藍(lán)”再次挑戰(zhàn)卡斯帕羅夫,此時(shí)“深藍(lán)”的運(yùn)算速度達(dá)每秒2億次,比上次提高了一倍。結(jié)果“深藍(lán)”3.5:2.5獲勝。 目前對機(jī)器人學(xué)的研究主要還是以控制理論的反饋
14、概念為基礎(chǔ)的。也就是說,迄今為止,機(jī)器人上的"智能"是由于應(yīng)用反饋控制而產(chǎn)生的。但是,反饋控制技術(shù)本身并不是建立在人工智能技術(shù)的基礎(chǔ)上的,而屬于古典工程控制理論范疇。 一方面,機(jī)器人學(xué)的進(jìn)一步發(fā)展需要人工智能基本原理的指導(dǎo),并采用各種人工智能技術(shù); 另一方面,機(jī)器人學(xué)的出現(xiàn)與發(fā)展又為人工智能的發(fā)展帶來了新的生機(jī),產(chǎn)生了新的推動(dòng)力,并提供一個(gè)很好的試驗(yàn)與應(yīng)用場所。也就是說,人工智能想在機(jī)器人學(xué)上找到實(shí)際應(yīng)用,并使問題求解、搜索規(guī)劃、知識表示和智能系統(tǒng)等基本理論得到進(jìn)一步發(fā)展。 粗略地說,由計(jì)算機(jī)(機(jī)器)來模仿人類的智能行為,就是人工智能,或稱為機(jī)器智能。而下一代新的機(jī)器人就是應(yīng)
15、用各種人工智能技術(shù)的機(jī)器人,所以叫做智能機(jī)器人。 智能機(jī)器人 盡管目前在工業(yè)上運(yùn)行的90%以上的機(jī)器人都談不上有什么智能,機(jī)器人執(zhí)行的許多任務(wù)也根本不需要運(yùn)用傳感器; 但是,隨著機(jī)器人技術(shù)的迅速發(fā)展和自動(dòng)化程度的進(jìn)一步提高,對機(jī)器人的功能提出了更高的要求,特別是需要各種具有不同程度智能的機(jī)器人和機(jī)器人化裝置。 最近20年已生產(chǎn)出一批具有傳感裝置(如視覺、觸覺和聽覺等)的機(jī)器人以及少數(shù)具有與環(huán)境進(jìn)行"對話"能力的交互機(jī)器人(interactive robot)。這些機(jī)器人就屬于智能機(jī)器人,它們能夠執(zhí)行一些過去無法解決的工作任務(wù)。 智能機(jī)器人已在自主系統(tǒng)和柔性加工系
16、統(tǒng)中得到日益廣泛的應(yīng)用。自主機(jī)器人能夠設(shè)定自己的目標(biāo),規(guī)劃并執(zhí)行自己的動(dòng)作,使自己不斷適應(yīng)環(huán)境的變化。柔性加工系統(tǒng)由機(jī)器人工段(robotic work cell)或柔性工段組成。每個(gè)機(jī)器人工段能夠完全自動(dòng)地完成一系列操作、裝卸、運(yùn)輸或加工。把機(jī)器人工段與其他工段相連接,就形成一個(gè)柔性組合式機(jī)器人生產(chǎn)系統(tǒng),簡稱柔性加工系統(tǒng)。 第二章 機(jī)器人小車硬件結(jié)構(gòu)解析 1,智能機(jī)器人小車概述: TY-1智能機(jī)器人小車是由江蘇省天一中學(xué)人工智能社團(tuán)師生共同設(shè)計(jì),研發(fā),制作的一款多功能,智能化,可編程機(jī)器人。該機(jī)器
17、人以小車作為基本活動(dòng)載體,搭配一塊功能強(qiáng)大的控制電路板,在配備各種傳感器的情況下可實(shí)現(xiàn)足球,滅火,探險(xiǎn)等多種可變復(fù)雜功能。另外,對比于當(dāng)前許多商品機(jī)器人,該機(jī)器人又具有結(jié)構(gòu)小巧,造價(jià)低廉的特點(diǎn)。所以,該機(jī)器人可作為中學(xué)生普及機(jī)器人知識,培養(yǎng)實(shí)踐動(dòng)手能力的良好載體。通過學(xué)生親身參與到設(shè)計(jì),制作的全過程中,使學(xué)生從更深的此層次上加深對機(jī)器人的理解,培養(yǎng)學(xué)生科學(xué)興趣和愛好。 該智能機(jī)器人小車外觀如圖一所示: 圖一 TY-1智能機(jī)器人小車基本參數(shù): 整體尺寸:130mm*155mm*110mm(長*寬*高) 整車重量:450g 工作電壓:DC 7~12V 典型工作電壓:DC 7.2V
18、 工作電流:300~ 峰值電流:1A 行動(dòng)速度:20~250mm/ 2,智能機(jī)器人小車結(jié)構(gòu)解析: TY-1智能機(jī)器人小車基本構(gòu)成主要包括小車車架、機(jī)器人控制板和傳感器組成。 TY-1智能機(jī)器人小車車架主要包括左右減速電、左右驅(qū)動(dòng)輪子、車架固定板、萬向輪、固定螺絲等幾個(gè)部分組成。 2.1減速電機(jī): 減速電機(jī)采用普通直流電機(jī),結(jié)合機(jī)械減速箱制作而成。價(jià)格低廉。由于采用塑料齒輪,不適合高扭矩的場合,但用于小功率機(jī)器人小車非常適合。 減速電機(jī)基本參數(shù): 1,工作電壓: 3V~12V DC(建議工作電壓在6到8V左右)。 2,最大扭矩: 800gf cm
19、 min(3V時(shí))。 3,轉(zhuǎn)速比: 1:48。 4,負(fù)載電流: 70mA (250mA MAX)(3V時(shí))。 5,轉(zhuǎn)速15f/min(3V時(shí))。 2.2車輪: 輪子直徑約65MM,厚度約28MM,輪轂采用高強(qiáng)度塑料,輪胎采用黑色橡膠。 2.3萬向輪: 萬向輪采用具有滑動(dòng)轉(zhuǎn)向軸承的平面萬向輪,轉(zhuǎn)動(dòng)靈活。輪子采用尼龍制造,經(jīng)久耐磨,質(zhì)量可靠。 2.4電源: 小車電源采用六節(jié)5號堿性電池,電池電壓為9V。小車電源采用六節(jié)5號五號鎳氫可充電電池,電池電壓為7.2V。 3,智能機(jī)器人小車控制板: 控制板是機(jī)器人小車核心部件之一。小車的智能化主要是由控制板來實(shí)現(xiàn)
20、的。控制板的主要作用是通過運(yùn)行在板載微控制芯片中的用戶程序,來完成檢測、采集傳感器所接受到的外界信號,并根據(jù)程序編制的控制算法對信號進(jìn)行處理后來控制電機(jī)的轉(zhuǎn)動(dòng),從而完成小車的運(yùn)動(dòng)控制。 所以,微控制芯又是控制板的核心部件。它是一個(gè)小型的CPU,執(zhí)行指令,完成機(jī)器人小車的控制任務(wù)。本控制板所采用的是美國Atmel公司生產(chǎn)的單周期,低功耗微控制芯片ATmega8。ATmega8單片機(jī)是高性能、低功耗的 8 位微處理器,8K 字節(jié)的系統(tǒng)內(nèi)可編程Flash,512 字節(jié)的EEPROM,1K字節(jié)的片內(nèi)SRAM,非常豐富的內(nèi)部設(shè)備,在構(gòu)成系統(tǒng)是不需要添加復(fù)雜的外圍芯片設(shè)備,因此適合低成本智能小車的應(yīng)用需
21、要。ATmega8是基于增強(qiáng)的AVR RISC結(jié)構(gòu)的低功耗8位CMOS微控制器。由于其先進(jìn)的指令集以及單時(shí)鐘周期指令執(zhí)行時(shí)間, ATmega8 的數(shù)據(jù)吞吐率高達(dá)1 MIPS/MHz,從而可以緩減系統(tǒng)在功耗和處理速度之間的矛盾。 AVR 內(nèi)核具有豐富的指令集和32 個(gè)通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個(gè)時(shí)鐘周期內(nèi)同時(shí)訪問兩個(gè)獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的CISC 微控制器最高至10 倍的數(shù)據(jù)吞吐率。ATmega8 有如下特點(diǎn):8K 字節(jié)的系統(tǒng)內(nèi)可編程Flash( 具有同時(shí)讀寫的能力,即RWW),512 字節(jié) EE
22、PROM,1K 字節(jié) SRAM,32 個(gè)通用I/O 口線,32 個(gè)通用工作寄存器,三個(gè)具有比較模式的靈活的定時(shí)器/ 計(jì)數(shù)器(T/C), 片內(nèi)/ 外中斷,可編程串行USART,面向字節(jié)的兩線串行接口, 10 位6 路 (8 路為TQFP 與MLF 封裝)ADC,具有片內(nèi)振蕩器的可編程看門狗定時(shí)器,一個(gè)SPI 串行端口,以及五種可以通過軟件進(jìn)行選擇的省電模式。工作于空閑模式時(shí)CPU 停止工作,而SRAM、T/C、 SPI 端口以及中斷系統(tǒng)繼續(xù)工作;掉電模式時(shí)晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位之外都停止工作;在省電模式下,異步定時(shí)器繼續(xù)運(yùn)行,允許用戶保持一個(gè)時(shí)間基準(zhǔn),而其余功能模塊處于休
23、眠狀態(tài); ADC 噪聲抑制模式時(shí)終止CPU 和除了異步定時(shí)器與ADC 以外所有I/O 模塊的工作,以降低ADC 轉(zhuǎn)換時(shí)的開關(guān)噪聲; Standby 模式下只有晶體或諧振振蕩器運(yùn)行,其余功能模塊處于休眠狀態(tài),使得器件只消耗極少的電流,同時(shí)具有快速啟動(dòng)能力。本芯片是以Atmel 高密度非易失性存儲器技術(shù)生產(chǎn)的。片內(nèi)ISP Flash 允許程序存儲器通過ISP 串行接口,或者通用編程器進(jìn)行編程,也可以通過運(yùn)行于AVR 內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用Flash存儲區(qū)(ApplicationFlash Memory)。在更新應(yīng)用Flash存儲區(qū)時(shí)引導(dǎo)Flash區(qū)
24、(Boot Flash Memory)的程序繼續(xù)運(yùn)行,實(shí)現(xiàn)了RWW 操作。 通過將8 位RISC CPU 與系統(tǒng)內(nèi)可編程的Flash 集成在一個(gè)芯片內(nèi),ATmega8 成為一個(gè)功能強(qiáng)大的單片機(jī),為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。ATmega8 具有一整套的編程與系統(tǒng)開發(fā)工具,包括:C 語言編譯器、宏匯編、 程序調(diào)試器/ 軟件仿真器、仿真器及評估板。 3.1智能機(jī)器人小車控制板接口說明: 智能機(jī)器人小車控制板實(shí)物如下圖所示。控制板帶有1個(gè)電源輸入口,由于輸入DC 7~12VDE 工作電壓。1個(gè)九針串口,用于用戶程序下載到板載控制器Atmega8。14個(gè)三線數(shù)字信號輸入
25、輸出口,用于外接數(shù)字信號傳感器或數(shù)字信號驅(qū)動(dòng)設(shè)備。6個(gè)三線模擬信號輸入口,用于外接模擬信號傳感器的信號輸入。2個(gè)電機(jī)接口,用于外接控制直流電機(jī)。2個(gè)二線電機(jī)控制接口,其中一線用于控制電機(jī)的轉(zhuǎn)動(dòng)方向,一線用于控制電機(jī)的轉(zhuǎn)動(dòng)速度(功率值)。 智能機(jī)器人小車控制板接口詳細(xì)說明: 接口名稱 作用 說明 電源插座 為控制板提供電源 DC 7~12V,插頭外內(nèi)電極為正,外電極為負(fù) 程序下載串口 用戶機(jī)器人程序下載 速率9600波特,8位數(shù)據(jù),1位停止位 數(shù)字I/O口 數(shù)字傳感器信號輸入,或輸出數(shù)字控制信號。 D0~D13,三線接口,提供+5V、電源地和數(shù)字信號線。其中D9、D
26、10、D11還具有PWM信號輸出能力,用于控制電機(jī)等設(shè)備的功率值。如果微控制器用ATmega168替換,D3、D5、D6也具有PWM信號輸出能力,其他相同。數(shù)字信號電平范圍為0~+5V。 模擬I/O口 外接模擬信號傳感器的信號輸入。 A0~A5, 三線接口,提供+5V、電源地和模擬信號線。模擬信號電平范圍為0~+5V。超夠或許會損壞器件。 電機(jī)接口 外接控制直流電機(jī) J30 用于控制一號直流電機(jī)。J31用于控制二號直流電機(jī)。 電機(jī)控制接口 控制電機(jī)轉(zhuǎn)動(dòng)方向和轉(zhuǎn)速 MOTO1用于一號電機(jī)控制信號的輸入,其中 DIR1用于和數(shù)字接口連接,控制一號電機(jī)的轉(zhuǎn)動(dòng)方向(高電平為正,低電
27、平為反)。PWM1用于和具有PWM輸出功能的數(shù)字接口連接用于控制電機(jī)的轉(zhuǎn)速(功率值)。變化范圍為0~255.。MOTO2同MOTO1. J32 ISP 控制器Bootloader的燒寫 燒寫啟動(dòng)程序 SERIAL ON 串口使能 跳線在0-1之間時(shí)不允許串口工作,但可以停止串口電路,用于節(jié)能。跳線在1-2之間時(shí)允許串口工作,下載程序。 J3AUTOSESET 程序下載自動(dòng)復(fù)位 當(dāng)加上跳線開關(guān)時(shí)用戶程序在下載過程中可以實(shí)現(xiàn)在東南否則要手動(dòng)進(jìn)行。 3.2智能機(jī)器人小車控制板原理說明: 智能機(jī)器人小車電源部分如下圖所示,電源插座P1接入外部電源,D1為防止電源反接二極管,C
28、1、C3為濾波電容,VIN為電機(jī)驅(qū)動(dòng)電源標(biāo)簽,電機(jī)驅(qū)動(dòng)電源從該處引出。U1為LM7805五伏穩(wěn)壓集成塊。C2 ,C4是輸出濾波電容,+5V標(biāo)簽是控制板5V穩(wěn)壓電源的引出點(diǎn)。D2是電源指示發(fā)光二極管。 智能機(jī)器人小車程序下載串口如右圖所示,該電路是由分立元件構(gòu)成的串口電路。其中J1為串口使能選擇開關(guān)SERIAL ON,當(dāng)跳線開關(guān)置于1-2之間時(shí),串口電路切斷+5V電源,串口電路不可使用,可以降低電源消耗。當(dāng)跳線開關(guān)置于2-3之間時(shí),串口電路接通+5V電源,串口電路可以正常使用,用于用戶小車控制程序下載。J3為程序下載過程中的自動(dòng)復(fù)位跳線開關(guān),當(dāng)加上跳線開關(guān)時(shí)用戶程序在下載過程中可以實(shí)現(xiàn)在東
29、南否則要手動(dòng)進(jìn)行。雖然該電路采用價(jià)格低廉的分立元件,單時(shí)間使用效果很好,工作非常穩(wěn)定。 智能機(jī)器人小車電機(jī)驅(qū)動(dòng)電路如右圖所示。該電路由電機(jī)驅(qū)動(dòng)集成電路L293D結(jié)合一些外圍電路構(gòu)成。其中J30 MOTO1用于一號電機(jī)控制信號的輸入,DIR1用于和數(shù)字接口連接,控制一號電機(jī)的轉(zhuǎn)動(dòng)方向(高電平為正,低電平為反)。PWM1用于和具有PWM輸出功能的數(shù)字接口連接用于控制電機(jī)的轉(zhuǎn)速(功率值)。變化范圍為0~255。MOTO2同MOTO1。 智能機(jī)器人小車控制電路如下圖所示,該電路以耗微控制芯片(單片機(jī))ATmega8為核心。其中,J32為控制器Bootloader啟動(dòng)程序的燒寫。J32
30、、J33為D0~D13十四個(gè)數(shù)字I/O口,用于數(shù)字傳感器信號輸入,或輸出數(shù)字控制信號。J34為A0~A5模擬六個(gè)模擬I/O口外,用于外接模擬信號傳感器的信號輸入。S1為手動(dòng)復(fù)位按鈕。其他都是一些輔助電路,原理簡單,不再贅述。 4,智能機(jī)器人小車光電傳感器: 機(jī)器人小車實(shí)現(xiàn)各種復(fù)雜功能的基礎(chǔ)是首先要實(shí)現(xiàn)小車的自動(dòng)導(dǎo)航。在本活動(dòng)中小車導(dǎo)航時(shí)是通過小車的巡線來實(shí)現(xiàn)的。下車巡線簡單可靠,容易操作。本光電傳感器通過發(fā)光二極管D2發(fā)射可見光,在物體表面反射后被光敏三極管接受到??刂瓢逋ㄟ^檢測光敏三極管兩端的電壓值來判斷物體表面的顏色。 第三章 機(jī)器人小車編
31、程語言及環(huán)境 由于本次活動(dòng)的機(jī)器人控制器所采用的微控制器型號和網(wǎng)絡(luò)上廣泛流行的Arduino開源互動(dòng)平臺項(xiàng)目完全一致,所以在機(jī)器人開發(fā)語言和編程環(huán)境上面完全可以借用該平臺的一切資源。一來可以降低機(jī)器人小車設(shè)計(jì)制作的難度,更主要的是Arduino開源互動(dòng)平臺是一個(gè)資源非常廣泛,支持者和愛好者眾多的優(yōu)秀平臺。 1,Arduino語言 Arduino語言是建立在C/C++基礎(chǔ)上的,其實(shí)也就是基礎(chǔ)的C語言,Arduino語言只不過把AVR單片機(jī)(微控制器)相關(guān)的一些參數(shù)設(shè)置都函數(shù)化,不用我們?nèi)チ私馑牡讓?,讓我們不了解AVR單片機(jī)(微控制器)的朋友也能輕松上手。 在與Arduin
32、o DIYER接觸的這段時(shí)間里,發(fā)現(xiàn)有些朋友對Arduino語言還是比較難入手,那么這里我就簡單的注釋一下Arduino語言(本人也是半罐子水,有錯(cuò)的地方還請各位指正)。 1.1, 基礎(chǔ)C語言 1.1.1關(guān)鍵字: if...else 必須緊接著一個(gè)問題表示式(expression),若這個(gè)表示式為真,緊連著表示式后的代碼就會被執(zhí)行。若這個(gè)表示式為假,則執(zhí)行緊接著else之后的代碼. 只使用 if不搭配else是被允許的。 范例: if (val == 1) { digitalWrite(LED,HIGH); } for 用來明定一段區(qū)域代碼重復(fù)指行的次數(shù)。 范例
33、: for (int i = 0; i < 10; i++) { ("ciao"); } switch case if敘述是程序里的分叉路口,switch case 是更多選項(xiàng)的路口。Swith case 根據(jù)變量值讓程序有更多的選擇,比起一串冗長的if敘述,使用swith case可使程序代碼看起來比較簡潔。 范例 :switch (sensorValue) { case 23: digitalWrite(13,HIGH); break; case 46: digitalWrite(12,HIGH); break; default: // 以上條
34、件都不符合時(shí),預(yù)設(shè)執(zhí)行的動(dòng)作 digitalWrite(12,LOW); digitalWrite(13,LOW); } while 當(dāng)while之后的條件成立時(shí),執(zhí)行括號內(nèi)的程序代碼。 范例 : // 當(dāng)sensor值小于512,閃爍LED燈 sensorValue = analogRead(1); while (sensorValue < 512) { digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1)
35、; } do... while 和while 相似,不同的是while前的那段程序代碼會先被執(zhí)行一次,不管特定的條件式為真或?yàn)榧?。因此若有一段程序代碼至少需要被執(zhí)行一次,就可以使用do…while架構(gòu)。 范例 :do { digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } while (sensorValue < 512); break 讓程序代碼跳離循環(huán),并繼續(xù)執(zhí)行這個(gè)循環(huán)之后的程序代碼。此外,在break也
36、用于分隔switch case 不同的敘述。 范例 : //當(dāng)sensor值小于512,閃爍LED燈 do { // 按下按鈕離開循環(huán) if (digitalRead(7) == HIGH) break; digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } while (sensorValue < 512); continue 用于循環(huán)之內(nèi),它可以強(qiáng)制跳離接下來的程序,并直接執(zhí)行下一個(gè)循環(huán)。 范例
37、 : for (light = 0; light < 255; light++) { // 忽略數(shù)值介于 140 到 200之間 if ((x > 140) && (x < 200)) continue; analogWrite(PWMpin, light); delay(10); } return 函數(shù)的結(jié)尾可以透過return回傳一個(gè)數(shù)值。 例如,有一個(gè)計(jì)算現(xiàn)在溫度的函數(shù)叫 computeTemperature(),你想要回傳現(xiàn)在的溫度給temperature變量,你可以這樣寫: int temperature = computeTemperature(
38、); int computeTemperature() { int temperature = 0; temperature = (analogRead(0) + 45) / 100; return temperature; } goto 1.1.2語法符號: ; (分號) Arduino 語言每一行程序都是以分號為結(jié)尾。這樣的語法讓你可以自由地安排代碼,你可以將兩個(gè)指令放置在同一行,只要中間用分號隔開。 (但這樣做可能降低程式的可讀性。) 范例: delay(100); {} (大括號) 大括號用來將程式代碼分成一個(gè)又一個(gè)的區(qū)塊,如以下范例
39、所示,在loop()函數(shù)的前、后,必須用大括號括起來。 范例: void loop(){ n("cial"); 程式的注釋就是對代碼的解釋和說明,編寫注釋有助于程式設(shè)計(jì)師(或其他人)了解代碼的功能。 Arduino處理器在對程式碼進(jìn)行編譯時(shí)會忽略注釋的部份。 Arduino 語言中的編寫注釋有兩種方式。 //單行注釋: 這整行的文字會被處理器忽略 /*多行注釋: 在這個(gè)范圍內(nèi)你可以 。寫一整首詩 */ 1.1.3運(yùn)算符: = + 相加 - 相減 * 相乘 / 相除 % 余數(shù)除法 == 等于 !=不等于 <
40、小于 > 大于 <= 小于等于 >= 大于等于 && 交集 || 聯(lián)集 ! 反相 ++ 累加 遞減 += -= *= /= 1.1.4Arduuino復(fù)合運(yùn)算符 += , -= , *= , /= 對一個(gè)變量和另一個(gè)參數(shù)或變量完成一個(gè)數(shù)學(xué)運(yùn)算。+=(以及其他)可以縮短語法長度。 Syntax語法 x += y; // 等價(jià)于 x = x + y; x -= y; // 等價(jià)于 x = x - y; x *= y; // 等價(jià)于 x = x *
41、 y; x /= y; // 等價(jià)于 x = x / y; Parameters參數(shù) x:任何變量類型 y:任何變量類型或常數(shù) Examples范例 x = 2; x += 4; // x現(xiàn)在為6 x -= 3; // x現(xiàn)在為3 x *= 10; // x現(xiàn)在為30 x /= 2; // x現(xiàn)在為15 Syntax語法 x++; // increment x by one and returns the old value of x // 將x的值加1并返回原來的x的值
42、。 ++x; // increment x by one and returns the new value of x // 將x的值加1并返回現(xiàn)在的x的值。 x-- ; // decrement x by one and returns the old value of x // 將x的值減1并返回原來的x的值。 --x ; // decrement x by one and returns the new value of x // 將x的值減1并返回現(xiàn)在的x的值。 Parameters參數(shù) x: an
43、integer or long (possibly unsigned) x:一個(gè)整數(shù)或長整數(shù)(可以無符號) Returns返回 The original or newly incremented / decremented value of the variable. 返回變量原始值或增加/消耗后的新值。 Examples范例 x = 2; y = ++x; // x now contains 3, y contains 3 // x現(xiàn)在為3,y為3 y = x--; // x cont
44、ains 2 again, y still contains 3 // x現(xiàn)在仍然為2,y將為3 1.1.5數(shù)據(jù)類型: boolean 布林 布爾變數(shù)的值只能為真(true)或是假(false) char 字符 單一字符例如 A,和一般的計(jì)算機(jī)做法一樣Arduino 將字符儲存成一個(gè)數(shù)字,即使你看到的明明就是一個(gè)文字。 用數(shù)字表示一個(gè)字符時(shí),它的值有效范圍為 -128 到127。 注意:有兩種主流的計(jì)算機(jī)編碼系統(tǒng)ASCII 和UNICODE。ASCII 表示了127個(gè)字符, 用來在序列終端機(jī)和分時(shí)計(jì)算器之間傳輸文字。 UN
45、ICODE可表示的字符量比較多,在現(xiàn)代計(jì)算機(jī)操作系統(tǒng)內(nèi)它可以用來表示多國語言。 在位數(shù)需求較少的信息傳輸時(shí),例如意大利文或英文這類由拉丁文,阿拉伯?dāng)?shù)字和一般常見符號構(gòu)成的語言,ASCII仍是目前主要用來交換信息的編碼法。 byte 字節(jié)類型 儲存的數(shù)值范圍為0到255。如同字符一樣字節(jié)型態(tài)的變量只需要用一個(gè)字節(jié)(8位)的內(nèi)存空間儲存。 int 整數(shù) 整數(shù)數(shù)據(jù)型態(tài)用到2字節(jié)的內(nèi)存空間,可表示的整數(shù)范圍為 –32,768 到 32,767; 整數(shù)變量是Arduino內(nèi)最常用到的數(shù)據(jù)型態(tài)。 unsigned int 無符號整數(shù)(絕對值) 無號整數(shù)同樣利用2
46、字節(jié)的內(nèi)存空間,無號意謂著它不能儲存負(fù)的數(shù)值,因此無號整數(shù)可表示的整數(shù)范圍為0 到 65,535。 long 長整數(shù) 長整數(shù)利用到的內(nèi)存大小是整數(shù)的兩倍,因此它可表示的整數(shù)范圍從 –2,147,483,648 到 2,147,483,647。 unsigned long 無符號長整數(shù) 無號長整數(shù)可表示的整數(shù)范圍為0 到 4,294,967,295。 float 浮點(diǎn)數(shù) 浮點(diǎn)數(shù)就是用來表達(dá)有小數(shù)點(diǎn)的數(shù)值,每個(gè)浮點(diǎn)數(shù)會用掉四字節(jié)的RAM,注意芯片內(nèi)存空間的限制,謹(jǐn)慎的使用浮點(diǎn)數(shù) 。 double 雙字節(jié)浮點(diǎn) 也叫雙精度浮點(diǎn)數(shù),可表達(dá)最大值
47、為 1.3157 x 10308。 string 字符串 字符串用來表達(dá)文字信息,它是由多個(gè)ASCII字符組成(你可以透過序串端口發(fā)送一個(gè)文字訊息或者將之顯示在液晶顯示器上)。字符串中的每一個(gè)字符都用一個(gè)組元組空間儲存,并且在字符串的最尾端加上一個(gè)空字符以提示Ardunio處理器字符串的結(jié)束。下面兩種宣告方式是相同的。 例如: char string1[] = "Arduino";//7字符+1空字符 char string2[8] = "Arduino"; // 與上行相同 array 數(shù)組 一串變量可以透過索引去直接取得。假如你想要儲存不同程
48、度的LED亮度時(shí),你可以宣告六個(gè)變量light01,light02,light03,light04,light05,light06,但其實(shí)你有更好的選擇,例如宣告一個(gè)整數(shù)數(shù)組變量如下: int light[6] = {0 , 20 , 50 , 75 , 100} "array" 這個(gè)字為沒有直接用在變量宣告,而是[]和{}宣告數(shù)組。 1.1.6 控制指令 數(shù)據(jù)類型轉(zhuǎn)換: char() byte() int() long() float() 常量:在Arduino語言中事先定義了一些具特殊用途的保留字。 HIGH | LOW 表示數(shù)字IO口的電
49、平,HIGH 表示高電平(1), LOW 表示低電平(0)。 HIGH 和LOW 也用來表示你開啟或是關(guān)閉了一個(gè)Arduino的腳位(pin) INPUT | OUTPUT 表示數(shù)字IO口的方向,INPUT 表示輸入(高阻態(tài)),OUTPUT 表示輸出(AVR能提供5V電壓 40mA電流)。 true | false true 表示真(1),false表示假(0)。 變數(shù): 變量用來指定Arduino 內(nèi)存中的一個(gè)位置,變量可以用來儲存數(shù)據(jù),程序人員可以透過腳本代碼去不限次數(shù)的操作變數(shù)的值。 因?yàn)锳rduino 是一個(gè)非常簡易的微處理器,但你要宣告一個(gè)
50、變量時(shí)必須先定義他的數(shù)據(jù)型態(tài),好讓微處理器知道準(zhǔn)備多大的空間以儲存這個(gè)變量值。 1.2, Arduino 語言結(jié)構(gòu) 以上為基礎(chǔ)c語言的關(guān)鍵字和符號,有c語言基礎(chǔ)的都應(yīng)該了解其含義,這里也不作過多的解釋。 1.2.1結(jié)構(gòu): 聲明變量及接口名稱(int val;int ledPin=13;)。 void setup() 在程序開始時(shí)使用,在這個(gè)函數(shù)范圍內(nèi)放置初始化Arduino 板子的程式,主要程式開始撰寫前, 使Arduino 板子裝置妥當(dāng)?shù)闹噶羁梢猿跏蓟兞?、管腳接口模式、啟用庫等(例如:pinMode(ledPin,OUTPUT);)。 void l
51、oop() 在setup()函數(shù)之后,即初始化之后,loop() 讓你的程序循環(huán)地被執(zhí)行。使用它來運(yùn)轉(zhuǎn)Arduino。連續(xù)執(zhí)行函數(shù)內(nèi)的語句,這部份的程式會一直重復(fù)的被執(zhí)行,直到Arduino 板子被關(guān)閉。 1.2.2功能 數(shù)字 I/O pinMode(pin, mode) 數(shù)字IO口輸入輸出模式定義函數(shù),將接口定義為輸入或輸出接口,用在setup()函數(shù)里,pin表示為0~13接口名稱, mode表示為INPUT或OUTPUT。即“ pinMode(接口名稱,OUTPUT或INPUT)”。 范例 : pinMode(7,INPUT); // 將腳位 7 設(shè)定
52、為輸入模式 digitalWrite(pin, value) 數(shù)字IO口輸出電平定義函數(shù),將數(shù)字接口值至高或低、開或關(guān),pin表示為0~13,value表示為HIGH或LOW,即digitalWrite(接口名稱, HIGH或LOW)。但腳位必須先透過pinMode明示為輸入或輸出模式digitalWrite才能生效。比如定義HIGH可以驅(qū)動(dòng)LED。 范例 : digitalWrite(8,HIGH); //將腳位 8設(shè)定輸出高電位 int digitalRead(pin) 數(shù)字IO口讀輸入電平函數(shù),讀出數(shù)字接口的值,pin表示為0~13,value表示為HI
53、GH或LOW,即digitalRead(接口名稱)。比如可以讀數(shù)字傳感器。當(dāng)感測到腳位處于高電位時(shí)時(shí)回傳HIGH,否則回傳LOW。 范例 : val = digitalRead(7); // 讀出腳位 7 的值并指定給 val 1.2.3模擬 I/O int analogRead(pin) 模擬IO口讀函數(shù),從指定的模擬接口讀取值,Arduino對該模擬值進(jìn)行10-bit的數(shù)字轉(zhuǎn)換,這個(gè)方法將輸入的0-5電壓值轉(zhuǎn)換為 0到1023間的整數(shù)值。pin表示為0~5(Arduino Diecimila為0~5,Arduino nano為0~7)。即“analogRead
54、(接口名稱)”,比如可以讀模擬傳感器(10位AD,0~5V表示為0~1023)。 范例 : val = analogRead(0); //讀出類比腳位 0 的值并指定給 val變數(shù) analogWrite(pin, value) 數(shù)字IO口PWM輸出函數(shù),給一個(gè)接口寫入模擬值(PWM波)。改變PWM腳位的輸出電壓值。對于 ATmega168芯片的Arduino(包括Mini或BT),該函數(shù)可以工作于 3, 5, 6, 9, 10和 11號接口,即“analogWrite(接口名稱, 數(shù)值)”,pin表示3, 5, 6, 9, 10, 11,value表示為0~255。比如可用于電機(jī)
55、PWM調(diào)速或音樂播放。 例如:輸出電壓2.5伏特(V),該值大約是128。 范例 : analogWrite(9,128); // 輸出電壓約2.5伏特(V) 1.2.4 擴(kuò)展 I/O shiftOut(dataPin, clockPin, bitOrder, value) SPI外部IO擴(kuò)展函數(shù),通常使用帶SPI接口的74HC595做8個(gè)IO擴(kuò)展,把資料傳給用來延伸數(shù)位輸出的暫存器,此函式通常使用在延伸數(shù)位的輸出。函式使用一個(gè)腳位表示資料、一個(gè)腳位表示時(shí)脈。dataPin為數(shù)據(jù)口,clockPin為時(shí)鐘口,bitOrder用來表示位元間移動(dòng)的方式,為數(shù)據(jù)傳輸方向(
56、MSBFIRSTMSBFIRSTMSBFIRSTMSBFIRST高位在前,LSBFIRSTLSBFIRSTLSBFIRSTLSBFIRST低位在前),value會以byte形式輸出,表示所要傳送的數(shù)據(jù)(0~255),另外還需要一個(gè)IO口做74HC595的使能控制。 范例 : shiftOut(dataPin, clockPin, LSBFIRST, 255); unsigned long pulseIn(pin, value) 脈沖長度記錄函數(shù),設(shè)定讀取腳位狀態(tài)的持續(xù)時(shí)間,返回時(shí)間參數(shù)(us),例如使用紅外線、加速度感測器測得某一項(xiàng)數(shù)值時(shí),在時(shí)間單位內(nèi)不會改變狀態(tài)。pin表示
57、為0~13,value為HIGH或LOW。比如value為HIGH,那么當(dāng)pin輸入為高電平時(shí),開始計(jì)時(shí),當(dāng)pin輸入為低電平時(shí),停止計(jì)時(shí),然后返回該時(shí)間。 范例 : time = pulsein(7,HIGH); // 設(shè)定腳位7的狀態(tài)在時(shí)間單位內(nèi)保持為HIGH 1.2.5時(shí)間函數(shù) unsigned long millis() 返回時(shí)間函數(shù)(單位ms), 回傳晶片開始執(zhí)行到目前的毫秒,該函數(shù)是指,當(dāng)程序運(yùn)行就開始計(jì)時(shí)并返回記錄的參數(shù),該參數(shù)溢出大概需要50天時(shí)間。 范例: duration = millis()-lastTime; // 表示自"lastTime"至
58、當(dāng)下的時(shí)間 delay(ms) 延時(shí)函數(shù)(單位ms),延時(shí)一段時(shí)間,暫停晶片執(zhí)行多少毫秒, delay(1000)為一秒。 范例: delay(500); //暫停半秒(500毫秒) delayMicroseconds(us) 延時(shí)函數(shù)(單位us)暫停晶片執(zhí)行多少微秒。 delayMicroseconds(1000); //暫停1豪秒 1.2.6數(shù)學(xué)函數(shù) min(x, y) 求最小值 ,回傳兩數(shù)之間較小者 范例: val = min(10,20); // 回傳10 max(x, y) 求最大值 ,回傳兩數(shù)之間較大者 范例: val = max
59、(10,20); // 回傳20 abs(x) 計(jì)算絕對值 ,回傳該數(shù)的絕對值,可以將負(fù)數(shù)轉(zhuǎn)正數(shù)。 范例: val = abs(-5); // 回傳5 constrain(x, a, b) 約束函數(shù),下限a,上限b,判斷x變數(shù)位于a與b之間的狀態(tài)。x若小于a回傳a;介于a與b之間回傳x本身;大于b回傳b 范例: val = constrain(analogRead(0), 0, 255); // 忽略大于255的數(shù) map(value, fromLow, fromHigh, toLow, toHigh) 約束函數(shù),value必須在fromLow與toLow之
60、間和fromHigh與toHigh之間。將value變數(shù)依照fromLow與fromHigh范圍,對等轉(zhuǎn)換至toLow與toHigh范圍。時(shí)常使用于讀取類比訊號,轉(zhuǎn)換至程式所需要的范圍值。 例如: val = map(analogRead(0),0,1023,100, 200); // 將analog0 所讀取到的訊號對等轉(zhuǎn)換至100,200之間的數(shù)值。 pow(base, exponent) 開方函數(shù),base的exponent次方?;貍饕粋€(gè)數(shù)(base)的指數(shù)(exponent)值。 范例: double x = pow(y, 32); // 設(shè)定x為y的32次方
61、 sq(x) 平方 sqrt(x) 開根號 回傳double型態(tài)的取平方根值。 范例: double a = sqrt(1138); // 回傳1138平方根的近似值 33. 1.2.7三角函數(shù) sin (rad) 回傳角度(radians)的三角函數(shù)sine值。 范例: double sine = sin(2); // 近似值 0. cos(rad) 回傳角度(radians)的三角函數(shù)cosine值。 范例: double cosine = cos(2); //近似值-0. tan(rad) 回傳角度(radia
62、ns)的三角函數(shù)tangent值。 范例: double tangent = tan(2); //近似值-2. 1.2.8隨機(jī)數(shù)函數(shù) randomSeed(seed) 隨機(jī)數(shù)端口定義函數(shù),seed表示讀模擬口analogRead(pin)函數(shù) 。 事實(shí)上在Arduino里的亂數(shù)是可以被預(yù)知的。所以如果需要一個(gè)真正的亂數(shù),可以呼叫此函式重新設(shè)定產(chǎn)生亂數(shù)種子。你可以使用亂數(shù)當(dāng)作亂數(shù)的種子,以確保數(shù)字以隨機(jī)的方式出現(xiàn),通常會使用類比輸入當(dāng)作亂數(shù)種子,藉此可以產(chǎn)生與環(huán)境有關(guān)的亂數(shù)(例如:無線電波、宇宙雷射線、電話和螢光燈發(fā)出的電磁波等)。 范例: randomSeed(an
63、alogRead(5)); // 使用類比輸入當(dāng)作亂數(shù)種子 long random(max) 隨機(jī)數(shù)函數(shù),返回?cái)?shù)據(jù)大于等于0,小于max。 范例: long randnum = random(11); // 回傳 0 -10之間的數(shù)字 long random(min, max) 隨機(jī)數(shù)函數(shù),返回?cái)?shù)據(jù)大于等于min,小于max。 范例: long randnum = random(0, 100); // 回傳0 – 99 之間的數(shù)字 1.2.9外部中斷函數(shù) attachInterrupt(interrupt, , mode) 外部中斷只能用到
64、數(shù)字IO口2和3,interrupt表示中斷口初始0或1,表示一個(gè)功能函數(shù),mode:LOWLOWLOWLOW低電平中斷,CHANGECHANGECHANGECHANGE有變化就中斷,RISINGRISINGRISINGRISING上升沿中斷,F(xiàn)ALLINGFALLINGFALLINGFALLING 下降沿中斷。 detachInterrupt(interrupt) 中斷開關(guān),interrupt=1 開,interrupt=0 關(guān)。 1.2.10中斷使能函數(shù) interrupts() 使能中斷 10noInterrupts() 禁止中斷 1.2.11串
65、口收發(fā)函數(shù) (speed) 串口定義波特率函數(shù),設(shè)置串行每秒傳輸數(shù)據(jù)的速率(波特率),可以指定Arduino從電腦交換訊息的速率,通常我們使用9600 bps。,speed表示波特率,如9600,19200等。在同計(jì)算機(jī)通訊時(shí),使用下面這些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200 bps(每秒位元組)。。你也可以在任何時(shí)候使用其它的值,比如,與0號或1號插口通信就要求特殊的波特率。用在setup()函數(shù)里 范例: (9600) int able() 判斷緩沖器狀態(tài)?;?/p>
66、傳有多少位元組(bytes)的資料尚未被read()函式讀取,如果回傳值是0代表所有序列埠上資料都已經(jīng)被read()函式讀取。 范例: int count = able(); int () 讀串口并返回收到參數(shù)。 ()——讀取持續(xù)輸入的數(shù)據(jù)。讀取1byte的序列資料 范例: int data = (); () 清空緩沖器。 有時(shí)候因?yàn)橘Y料速度太快,超過程式處理資料的速度,你可以使用此函式清除緩沖區(qū)內(nèi)的資料。經(jīng)過此函式可以確保緩沖區(qū)(buffer)內(nèi)的資料都是最新的。 范例: (); (data) 從串行端口輸出數(shù)據(jù)。(數(shù)據(jù))默認(rèn)為十進(jìn)制等于(數(shù)據(jù),DEC)。 (data, encoding) 經(jīng)序列埠傳送資料,提供編碼方式的選項(xiàng)。(數(shù)據(jù),數(shù)據(jù)的進(jìn)制)如果沒有指定,預(yù)設(shè)以一般文字傳送。 范例: (75); // 列印出 "75" (75, DEC); //列印出 "75" (75, HEX); // "4B" (75 的十六進(jìn)位) (75, OCT); // "113" (75 in的八進(jìn)位) (75,
- 溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024《增值稅法》全文學(xué)習(xí)解讀(規(guī)范增值稅的征收和繳納保護(hù)納稅人的合法權(quán)益)
- 2024《文物保護(hù)法》全文解讀學(xué)習(xí)(加強(qiáng)對文物的保護(hù)促進(jìn)科學(xué)研究工作)
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見問題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說話方式
- 汽車銷售績效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩