大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院《熟練使用Arduino(arduino、傳感器、執(zhí)行單元)》技術(shù)構(gòu)成與創(chuàng)新設(shè)計課件_第1頁
大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院《熟練使用Arduino(arduino、傳感器、執(zhí)行單元)》技術(shù)構(gòu)成與創(chuàng)新設(shè)計課件_第2頁
大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院《熟練使用Arduino(arduino、傳感器、執(zhí)行單元)》技術(shù)構(gòu)成與創(chuàng)新設(shè)計課件_第3頁
大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院《熟練使用Arduino(arduino、傳感器、執(zhí)行單元)》技術(shù)構(gòu)成與創(chuàng)新設(shè)計課件_第4頁
大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院《熟練使用Arduino(arduino、傳感器、執(zhí)行單元)》技術(shù)構(gòu)成與創(chuàng)新設(shè)計課件_第5頁
已閱讀5頁,還剩342頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

技術(shù)構(gòu)成與創(chuàng)新設(shè)計學(xué)完本課,你將掌握:

能夠熟練使用Arduino(arduino、傳感器、執(zhí)行單元)傳感器執(zhí)行單元擴(kuò)展溫度、運動、振動、光纖、距離等七段數(shù)碼管、LED點陣屏幕、1602lcd屏幕、舵機(jī)、步進(jìn)電機(jī)等紅外遙控、藍(lán)牙模塊、網(wǎng)絡(luò)功能(需配擴(kuò)展板使用)1234Arduino簡介Arduino硬件Arduino軟件實驗部分目錄1Arduino簡介Arduino是什么?Arduino是一款便捷靈活、方便上手的開源電子原型平臺,Arduino能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達(dá)和其他的裝置來反饋、影響環(huán)境。包含硬件(各種型號的Arduino板)和軟件(ArduinoIDE)。它適用于愛好者、藝術(shù)家、設(shè)計師和對于“互動”有興趣的朋友們。傳感器、開關(guān)等輸入信號輸出信號執(zhí)行單元Arduino板1Arduino簡介Arduino類型megaunoLilyPadprominiYún1Arduino簡介常用擴(kuò)展板GSMWIFISD卡Ethenet電機(jī)驅(qū)動板Yún1Arduino簡介Arduino可以做什么?3D打印機(jī)、自動喂貓機(jī)、四旋翼直升機(jī)、讓電視靜音、玩游戲、幫助殘疾人玩游戲、上網(wǎng)發(fā)Twitter、檢測地震、信息公開、制作儀器、制作產(chǎn)品原型、小衛(wèi)星。。。小時鐘、指紋鎖、玩具、氣象站、自平衡機(jī)器人。。。2Arduino硬件Arduino板2Arduino硬件14個數(shù)字IO口0~136個模擬IO口A0~A56個PWM輸出3、5、6、9、10、11串行通信0、1外部中斷2、3SPI通信10(SS)11(MOSI)12(MISO)13(SCLK)

1個復(fù)位開關(guān)1個ICSP下載口I2C總線2Arduino硬件ArduinoUNO上的端口電源接口模擬I/O接口數(shù)字I/O接口ArduinoUNO共有兩排端口,按功能主要分為數(shù)字I/O、模擬I/O口和電源接口。2Arduino硬件數(shù)字I/O接口數(shù)字I/O口可以輸入和輸出數(shù)字信號。數(shù)字信號只有兩種形態(tài),高電平和低電平。2Arduino硬件模擬I/O接口模擬I/O口可以輸入模擬信號和數(shù)字信號,但是不能輸出模擬信號。它可以測量連接在它上面的電壓以供程序使用。2Arduino硬件電源接口電源端口部分有多個不同名字的接口:IOREF(IO參考電壓)RESET3.3V和5V兩個GNDVin2Arduino硬件Arduino電路原理3Arduino軟件Arduino開發(fā)環(huán)境在你的計算機(jī)上安裝Arduino開發(fā)環(huán)境(IDE)。下載網(wǎng)址:根據(jù)你的計算機(jī)系統(tǒng)選擇下載3.安裝Arduino驅(qū)動4.設(shè)置好Arduino板4.下載Fritzing軟件:3Arduino軟件ArduinoIDE介紹3Arduino軟件Fritzing軟件介紹Fritzing是個電子設(shè)計自動化軟件。它支持設(shè)計師,藝術(shù)家,研究人員和愛好者參加從物理原型到進(jìn)一步實際的產(chǎn)品。還支持用戶創(chuàng)建Arduino和其他電子為基礎(chǔ)的原型,與他人分享,甚至可以制作用于生產(chǎn)印刷電路板的pcb布局文件。3Arduino軟件Fritzing軟件界面4實驗部分1.點亮LED小燈泡連線圖4實驗部分2.聲光報警器4實驗部分3.光敏電阻控制燈光閃爍頻率Arduino基礎(chǔ)教程——基本函數(shù)的使用本節(jié)要點熟練掌握數(shù)字串口函數(shù),這是arduino最基本的函數(shù)。難點:模擬I/O口函數(shù)了解PWM輸出形式單片機(jī)中的中斷概念1串口目錄2345678*數(shù)字I/O口的操作函數(shù)*模擬I/O口的操作函數(shù)擴(kuò)展I/O時間函數(shù)*中斷函數(shù)數(shù)學(xué)庫課后作業(yè)1串口通訊1.1串口概述

串行接口SerialInterface是指數(shù)據(jù)一位位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信.串口的出現(xiàn)是在1980年前后,數(shù)據(jù)傳輸率是115kbps~230kbps。串口出現(xiàn)的初期是為了實現(xiàn)連接計算機(jī)外設(shè)的目的,初期串口一般用來連接鼠標(biāo)和外置Modem以及老式攝像頭和寫字板等設(shè)備。由于串口(COM)不支持熱插拔及傳輸速率較低目前部分新主板和大部分便攜電腦已開始取消該接口,目前串口多用于工控和測量設(shè)備以及部分通信設(shè)備中。1Arduino串口1.2

串口函數(shù)

串口是Arduino與其它設(shè)備進(jìn)行通信的接口,我們需要很好的掌握它的使用。Arduino串口使用相關(guān)的函數(shù)共有10個(主要介紹3種):

Serial.begin();//開啟串口

Serial.end();//關(guān)閉串口

Serial.available();//判斷串口緩沖器是否有數(shù)據(jù)裝入

Serial.read();//讀取串口數(shù)據(jù)

Serial.peek();//返回下一字節(jié)(字符)輸入數(shù)據(jù),但不刪除它

Serial.flush();//清空串口緩存

Serial.print();//寫入字符串?dāng)?shù)據(jù)到串口

Serial.println();//寫入字符串?dāng)?shù)據(jù)+換行到串口

Serial.write();//寫入二進(jìn)制數(shù)據(jù)到串口

Serial.SerialEvent();//read時觸發(fā)的事件函數(shù)

Serial.readBytes(buffer,length);//讀取固定長度的二進(jìn)制流1Arduino串口1.3

Serial.begin();

1Arduino串口1.4Serial.print();

1Arduino串口1.5

Serial.println();

例程:2數(shù)字I/O口的操作函數(shù)2.1數(shù)字I/O口的操作函數(shù)

數(shù)字I/O口的操作函數(shù)主要有三種:2數(shù)字I/O口的操作函數(shù)2.2

pinMode(pin,mode)·pinMode函數(shù)用以配置引腳與輸出或輸入模式,它是一個無返回值函數(shù)。函數(shù)有兩個參數(shù),pin和mode。Pin參數(shù)表示要配置的引腳,mode參數(shù)表示設(shè)置的參數(shù)INPUT(輸入)和OUTPUT(輸出)?!NPUT參數(shù)用于讀取信號,OUTPUT用于輸出控制信號?!IN的范圍是數(shù)字引腳0~13,也可以把模擬引腳(A0~A5)作為數(shù)字引腳使用,此時編號為14腳對應(yīng)模擬引腳A0;19腳對應(yīng)模擬引腳A5.·pinMode函數(shù)一般會放在setup里,先設(shè)置再使用2數(shù)字I/O口的操作函數(shù)2.3

dightalWrite(pin,value)·該函數(shù)的作用是設(shè)置引腳的輸出電壓為高電平或低電平。該函數(shù)也是一個無返回值的函數(shù)。·Pin參數(shù)表示所要設(shè)置的引腳,value參數(shù)表示輸出的電壓HIGH(高電平)或LOW(低電平)?!ぷ⒁猓菏褂们氨仨毾扔胮inMode設(shè)置。2數(shù)字I/O口的操作函數(shù)2.4

dightalRead(pin)·該函數(shù)在引腳設(shè)置為輸入的情況下,可以獲取引腳的電壓情況HIGH(高電平)或者LOW低電平。2數(shù)字I/O口的操作函數(shù)2.5實驗1——按鍵控制led2數(shù)字I/O口的操作函數(shù)程序代碼:intBUTTON=8;//設(shè)置第8腳為按鈕輸入引腳intLED=13;//設(shè)置第13腳為LED輸出引腳,內(nèi)部連上板上的LED燈。voidsetup(){pinMode(BUTTON,INPUT);//設(shè)置為輸入pinMode(LED,OUTPUT);//設(shè)置為輸出}voidloop(){if(digitalRead(BUTTON)==HIGH)//如果讀取高電平digitalWrite(LED,HIGH);//13腳輸出高電平elsedigitalWrite(LED,LOW);//否則輸出低電平}3模擬I/O口的操作函數(shù)3.1模擬I/O口的操作函數(shù)

模擬I/O口的操作函數(shù)主要有三種:3模擬I/O口的操作函數(shù)3.2

analogReference(type)·該函數(shù)用于配置模擬引腳的參考電壓。有3種類型: 1.DEFAULT:默認(rèn)值,參考電壓是5V. 2.INTERNAL:低電壓模式,使用片內(nèi)基準(zhǔn)電壓源2.56V 3.EXTERNAL:擴(kuò)展模式,通過AREF引腳獲取參考電壓?!ぷ⒁猓翰皇褂帽竞瘮?shù)的話,默認(rèn)是參考電壓5V。使用AREF接參考電壓,需接個5K歐的上拉電阻。3模擬I/O口的操作函數(shù)3.3

analogRead(pin)·用于讀取引腳的模擬量電壓值,每讀取一次需要花100US的時間。參數(shù)pin表示所要獲取模擬量電壓值的引腳,返回為int型。精度10位,返回值從0~1023?!ぷ⒁猓汉瘮?shù)參數(shù)的pin范圍是0~5,對應(yīng)板上的模擬口A0~A5。3模擬I/O口的操作函數(shù)3.4

analogWrite(pin,value)·該函數(shù)是通過PWM的方式在引腳上輸出一個模擬量,Arduino數(shù)字I/O口標(biāo)注了PWM的I/O口可使用該函數(shù),pin表示3,5,6,9,10,11,value表示為0~255。主要用于LED亮度控制等。

PWM——Pulse-WidthModulation——脈沖寬度調(diào)制PWM輸出的一般形式:3模擬I/O口的操作函數(shù)3.5實驗2——變阻器控制led亮度3模擬I/O口的操作函數(shù)程序代碼:intsensor=A0;//A0引腳讀取電位器intLED=11;//第11引腳輸出LEDvoidsetup(){Serial.begin(9600);}voidloop(){intv;v=analogRead(sensor);Serial.println(v,DEC);//可以觀察讀取的模擬量analogWrite(LED,v/4);//讀回的值范圍是0~1023結(jié)果除以4才能得到0~255的區(qū)間值}4擴(kuò)展I/O4.1pulseIn(pin,value)

/pulseln(pin,value,timeout)·該函數(shù)用于讀取引腳脈沖的時間長度,脈沖可以是HIGH或者LOW。如果是HIGH,函數(shù)將先等引腳變?yōu)楦唠娖剑缓箝_始計時,一直到變?yōu)榈碗娖??!し祷孛}沖持續(xù)的時間長度,單位為ms.如果超過timeout沒有讀到的話,返回0。5時間函數(shù)5.1時間函數(shù)

時間函數(shù)主要有四種:5時間函數(shù)5.2

delay(ms);·延時函數(shù),參數(shù)是延時的時長,單位是ms(毫秒)。·注意:1000ms=1s5時間函數(shù)5.3

delayMicroseconds(us);·延時函數(shù),參數(shù)是延時的時長,單位是us(微秒)。1ms=1000us.·該函數(shù)可以產(chǎn)生更短的延時。5時間函數(shù)5.4

millis();·應(yīng)用該函數(shù),可以獲取單片機(jī)通電到現(xiàn)在運行的時間長度,單位是ms.系統(tǒng)最長的記錄時間為9小時22分,超出從0開始。返回值是unsignedlong型?!ぴ摵瘮?shù)適合作為定時器使用,不影響單片機(jī)的其他工作。(使用delay函數(shù)期間無法做其他工作。)5時間函數(shù)5.5

micros();·該函數(shù)返回開機(jī)到現(xiàn)在運行的微秒值。返回值是unsignedlong.70分鐘溢出。5時間函數(shù)5.6實驗3——延時5秒后自動點亮燈intLED=13;unsignedlongi,j;voidsetup(){pinMode(LED,OUTPUT);i=millis();//讀入初始值}voidloop(){j=millis();//不斷讀入當(dāng)前時間值if((j-i)>5000)//如果延時超過5秒,點亮LED{digitalWrite(LED,HIGH);}elsedigitalWrite(LED,LOW);}5時間函數(shù)5.7實驗4——顯示當(dāng)前的微秒值unsignedlongtime;voidsetup(){Serial.begin(9600);}voidloop(){Serial.print("Time:");time=micros();//讀取當(dāng)前的微秒值Serial.println(time);//打印開機(jī)到目前運行的微秒值delay(1000);//延時1秒}6中斷函數(shù)5.1中斷的概念

日常生活中的中斷

你在看書,電話鈴響,于是你在書上做上記號,去接電話,與對方通話;門鈴響了,有人敲門,你讓打電話的對方稍等一下,你去開門,并在門旁與來訪者交談,談話結(jié)束,關(guān)好門;回到電話機(jī)旁,繼續(xù)通話,接完電話后再回來從做記號的地方接著看書。6中斷函數(shù)5.1中斷的概念

單片機(jī)中的中斷概念

中斷——由于某一隨機(jī)事件的發(fā)生,計算機(jī)暫停原程序的運行,轉(zhuǎn)去執(zhí)行另一程序(隨機(jī)事件),處理完畢后又自動返回原程序繼續(xù)運行。中斷源——引起中斷的原因,或能發(fā)生中斷申請的來源。主程序——計算機(jī)現(xiàn)行運行的程序。中斷服務(wù)子程序——處理突發(fā)事件的程序。6中斷函數(shù)5.2外部中斷函數(shù)

外部中斷函數(shù)主要有兩種:6中斷函數(shù)6.3

attachInterrupt(interrput,function,mode);·該函數(shù)用于設(shè)置外部中斷,函數(shù)有3個參數(shù),分別表示中斷源,中斷處理函數(shù)和觸發(fā)模式?!ぶ袛嘣纯蛇x0或者1,對應(yīng)2或者3號數(shù)字引腳?!ぶ袛嗵幚砗瘮?shù)是一段子程序,當(dāng)中斷發(fā)生時執(zhí)行該子程序部分?!び|發(fā)模式有四種類型,LOW(低電平觸發(fā))、CHANGE(變化時觸發(fā))、RISING(低電平變?yōu)楦唠娖接|發(fā))、FALLING(高電平變?yōu)榈碗娖接|發(fā))6中斷函數(shù)6.4

detachInterrupt(interrput);·該函數(shù)用于取消中斷,參數(shù)interrupt表示所要取消的中斷源。7數(shù)學(xué)庫7.1常用數(shù)學(xué)函數(shù)7數(shù)學(xué)庫7.2

random(small,big);8課后作業(yè)9課后作業(yè)作業(yè)一擴(kuò)展9課后作業(yè)

動手連接交通燈,并使紅黃綠燈交替閃爍,使用可調(diào)電阻控制紅燈時間。作業(yè)二串口通信LOGO01簡介

串口通信為Arduino與計算機(jī)和其它設(shè)備進(jìn)行交互提供了一種簡單而靈活的方式。本節(jié)詳細(xì)介紹如何使用這一功能發(fā)送和接收信息。02本節(jié)綱領(lǐng)03串口通信Serial.begin()Serial.end()Serial.print()/Serial.write()Serial.read()/Serial.readBytes()Arduino之間進(jìn)行通信一二三四04目錄通信基礎(chǔ)串行通信基本概念串口通信函數(shù)軟件串口05第一章通信基礎(chǔ)05通信基礎(chǔ)6507串行通信6608并行通信09第二章串行通信基本概念10異步通信與同步通信11異步通信與同步通信12異步通信與同步通信外同步自同步13串行通信的傳輸方向單工半雙工全雙工14串行通信的錯誤校驗15傳輸速率與傳輸距離16第三章串口通信函數(shù)注:第二周已經(jīng)簡要了解了串口函數(shù),本章將對其進(jìn)行進(jìn)一步講解。17Serial.begin(intspeed)

初始化串口比特率函數(shù),直接輸入相應(yīng)的數(shù)值就把串口通信的寄存器設(shè)置為對應(yīng)的比特率。當(dāng)然,可以使用的值也不是隨便設(shè)的,一般4800960014400……等等。示例:Serial.begin(4800);Serial.begin(9600);Serial.begin(14400);18Serial.end()19Serial.available()20Serial.print()21Serial.print()8022Serial.print()8123實驗1(見書4.2.2)以不同格式打印數(shù)據(jù)到串口2425Serial.write()26Serial.read()27示例代碼31實驗2(見書4.3.2)87接收8位值(字符和字節(jié))很容易,因為Serial函數(shù)使用8位值。這個程序接收數(shù)字(單個字符的0~9)并讓引腳13上的LED按照與接收到的數(shù)字值成比例的速率閃爍。3228Serial.readBytes()29示例代碼30SerialEvent()serialEvent()說明:當(dāng)RX接收到新的數(shù)據(jù)時調(diào)用此函數(shù),可以使用Serial.read()讀取數(shù)據(jù).

實驗三SerialEvent見代碼serialEvent33第四章軟件串口34Arduino與processing的配合使用9435SoftwareSerialLibrary36軟件串口定義37SoftwareSerial.begin(speed)38SoftwareSerial.available()39SoftwareSerial.isListening()40實驗四兩個arduino通過軟件串口進(jìn)行通信(代碼群文件)數(shù)字輸入和模擬輸入01簡介Arduino感知數(shù)字和模擬輸入的能力使得它能夠?qū)δ愫湍阒車氖澜缱鞒龇磻?yīng)。本節(jié)介紹的內(nèi)容可以用這些輸入來做一些有用的事情。02本節(jié)要點03開關(guān)的使用上拉電阻下拉電阻消抖

一二三04目錄數(shù)字輸入開關(guān)模擬輸入05第一章數(shù)字輸入06數(shù)字I/O口的操作函數(shù)(復(fù)習(xí)第二章內(nèi)容)1061.pinMode(pin,mode)·pinMode函數(shù)用以配置引腳輸出或輸入模式,它是一個無返回值函數(shù)。函數(shù)有兩個參數(shù),pin和mode。Pin參數(shù)表示要配置的引腳,

mode參數(shù)表示設(shè)置的參數(shù)INPUT(輸入)和OUTPUT(輸出)。2.digitalWrite(pin,value)·

該函數(shù)的作用是設(shè)置引腳的輸出電壓為高電平(HIGH)或低電平(LOW)。該函數(shù)也是一個無返回值的函數(shù)。3.digitalRead(pin)·

該函數(shù)在引腳設(shè)置為輸入的情況下,可以獲取引腳的電壓情況HIGH(高電平)或者LOW(低電平)。07第二章開關(guān)08開關(guān)108利用外部電阻使用開關(guān)上拉電阻下拉電阻在數(shù)字電路中開關(guān)(switch)是一種基本的輸入形式,它的作用是保持電路的連接或者斷開。Arduino從數(shù)字I/O引腳上只能讀出高電平(5V)或者低電平(0V),因此我們首先面臨到的一個問題就是如何將開關(guān)的開/斷狀態(tài)轉(zhuǎn)變成Arduino能夠讀取的高/低電平。解決的辦法是通過上/下拉電阻,按照電路的不同通常又可以分為正邏輯(PositiveLogic)和負(fù)邏輯(InvertedLogic)兩種。09開關(guān)109上拉電阻在上拉電阻電路中,開關(guān)一端接地,另一端則通過一個10K的上拉電阻接電源,輸入信號從開關(guān)和電阻間引出。當(dāng)開關(guān)斷開時,輸入信號被電阻“拉”向電源,形成高電平(5V);當(dāng)開關(guān)接通的時候,輸入信號直接與地相連,形成低電平。對于經(jīng)常用到的按壓式開關(guān)來講,就是按下為低,抬起為高。10開關(guān)110下拉電阻在下拉電阻電路中,開關(guān)一端接電源,另一端則通過一個10K的下拉電阻接地,輸入信號從開關(guān)和電阻間引出。當(dāng)開關(guān)斷開的時候,輸入信號被電阻“拉”向地,形成低電平(0V);當(dāng)開關(guān)接通的時候,輸入信號直接與電源相連,形成高電平。對于經(jīng)常用到的按壓式開關(guān)來講,就是按下為高,抬起為低。11實驗1(采用下拉電阻連接開關(guān))/**Pushbuttonsketch*aswitchconnectedtopin2lightstheLEDonpin13*/constintledPin=13;//choosethepinfortheLEDconstintinputPin=2;//choosetheinputpin(forapushbutton)voidsetup(){pinMode(ledPin,OUTPUT);//declareLEDasoutputpinMode(inputPin,INPUT);//declarepushbuttonasinput}voidloop(){intval=digitalRead(inputPin);//readinputvalueif(val==HIGH)//checkiftheinputisHIGH{digitalWrite(ledPin,HIGH);//turnLEDonifswitchispressed}else{digitalWrite(ledPin,LOW);//turnLEDoff}}

12實驗1#(采用上拉電阻連接開關(guān))/**Pushbuttonsketch*aswitchconnectedtopin2lightstheLEDonpin13*/constintledPin=13;//choosethepinfortheLEDconstintinputPin=2;//choosetheinputpin(forapushbutton)voidsetup(){pinMode(ledPin,OUTPUT);//declareLEDasoutputpinMode(inputPin,INPUT);//declarepushbuttonasinput}voidloop(){intval=digitalRead(inputPin);//readinputvalueif(val==HIGH)//checkiftheinputisHIGH{digitalWrite(ledPin,LOW);//turnLEDonifswitchispressed}else{digitalWrite(ledPin,HIGH);//turnLEDoff}}

13開關(guān)113利用內(nèi)部電阻使用開關(guān)使用內(nèi)部的上拉電阻當(dāng)你想在連接開關(guān)時不用外部電阻以簡化你的布線,你需要使用內(nèi)部電阻。數(shù)字引腳的內(nèi)部結(jié)構(gòu)14實驗2(用內(nèi)部電阻使用開關(guān))/**Pullupsketch*aswitchconnectedtopin2lightstheLEDonpin13*/constintledPin=13;//outputpinfortheLEDconstintinputPin=2;//inputpinfortheswitchvoidsetup(){pinMode(ledPin,OUTPUT);pinMode(inputPin,INPUT);digitalWrite(inputPin,HIGH);//turnoninternalpull-upontheinputPin}voidloop(){intval=digitalRead(inputPin);//readinputvalueif(val==HIGH)//checkiftheinputisHIGH{digitalWrite(ledPin,HIGH);//turnLEDON}else{digitalWrite(ledPin,LOW);//turnLEDOFF}}15開關(guān)消抖115通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點斷開、閉合時,由于機(jī)械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產(chǎn)生這種現(xiàn)象而做的措施就是開關(guān)消抖。抖動時間的長短由按鍵的機(jī)械特性決定,一般為5ms~10ms。為確保CPU對鍵的一次閉合僅作一次處理,必須去除按鍵抖動。在按鍵閉合穩(wěn)定時讀取按鍵的狀態(tài),并且必須判別到按鍵釋放穩(wěn)定后再作處理。16軟件消抖116一般來說,軟件消抖的方法是不斷檢測按鍵值,直到按鍵值穩(wěn)定。實現(xiàn)方法:假設(shè)未按鍵時輸入1,按鍵后輸入為0,抖動時不定??梢宰鲆韵聶z測:檢測到按鍵輸入為0之后,延時5ms~10ms,再次檢測,如果按鍵還為0,那么就認(rèn)為有按鍵輸入。延時的5ms~10ms恰好避開了抖動期。17實驗3(可靠地檢測一個開關(guān)的閉合)(實驗1連線圖)constintinputPin=2;//thenumberoftheinputpinconstintledPin=13;//thenumberoftheoutputpinconstintdebounceDelay=10;//millisecondstowaituntilstable//debouncereturnsthestatewhentheswitchisstablebooleandebounce(intpin){booleanstate;booleanpreviousState;previousState=digitalRead(pin);//storeswitchstatefor(intcounter=0;counter<debounceDelay;counter++){delay(1);//waitfor1millisecondstate=digitalRead(pin);//readthepinif(state!=previousState){counter=0;//resetthecounterifthestatechangespreviousState=state;//andsavethecurrentstate}}//herewhentheswitchstatehasbeenstablelongerthanthedebounceperiodreturnstate;}voidsetup(){pinMode(inputPin,INPUT);pinMode(ledPin,OUTPUT);}voidloop()

{intstate=debounce(inputPin);digitalWrite(ledPin,state);}18第三章模擬輸入19模擬I/O口的操作函數(shù)(復(fù)習(xí)第二章內(nèi)容)1191.analogReference(type)·該函數(shù)用于配置模擬引腳的參考電壓。有3種類型:

DEFAULT:

默認(rèn)值,參考電壓是5V.

INTERNAL:

低電壓模式,使用片內(nèi)基準(zhǔn)電壓源2.56V

EXTERNAL:

擴(kuò)展模式通過AREF引腳獲取參考電壓。2.analogRead(pin)·

該函數(shù)用于讀取引腳的模擬量電壓值,每讀取一次需要花100US的時間。參數(shù)pin表示所要獲取模擬量電壓值的引腳,返回為int型。精度10位,返回值從0~1023。3.analogWrite(pin,value)·該函數(shù)是通過PWM的方式在引腳上輸出一個模擬量。20實驗4(讀取模擬值)constintpotPin=0;//selecttheinputpinforthepotentiometerconstintledPin=13;//selectthepinfortheLEDintval=0;//variabletostorethevaluecomingfromthesensorvoidsetup(){pinMode(ledPin,OUTPUT);//declaretheledPinasanOUTPUT}voidloop(){val=analogRead(potPin);//readthevoltageonthepotdigitalWrite(ledPin,HIGH);//turntheledPinondelay(val);//blinkratesetbypotvalue(inmilliseconds)digitalWrite(ledPin,LOW);//turntheledPinoffdelay(val);//turnledoffforsameperiodasitwas//turnedon}21map()函數(shù)描述:將一個數(shù)從一個范圍映射到另外一個范圍。也就是說,會將fromLow到fromHigh之間的值映射到toLow在toHigh之間的值。注意:兩個范圍中的“下限”可以比“上限”更大或者更小,因此map()函數(shù)可以用來翻轉(zhuǎn)數(shù)值的范圍,例如:y=map(x,1,50,50,1);這個函數(shù)同樣可以處理負(fù)數(shù),請看下面這個例子:y=map(x,1,50,50,-100);是有效的并且可以很好的運行。map()函數(shù)使用整型數(shù)進(jìn)行運算因此不會產(chǎn)生分?jǐn)?shù),這時運算應(yīng)該表明它需要這樣做。小數(shù)的余數(shù)部分會被舍去,不會四舍五入或者平均。參數(shù)value:需要映射的值fromLow:當(dāng)前范圍值的下限fromHigh:當(dāng)前范圍值的上限toLow:目標(biāo)范圍值的下限toHigh:目標(biāo)范圍值的上限返回:被映射的值。22實驗5(使用map函數(shù)擴(kuò)展模擬值)constintpotPin=0;intledPin=13;voidsetup(){pinMode(ledPin,OUTPUT);Serial.begin(9600);}voidloop(){intval;intpercent;val=analogRead(potPin);percent=map(val,0,1023,0,100);digitalWrite(ledPin,HIGH);delay(percent);digitalWrite(ledPin,LOW);delay(100-percent);Serial.println(percent);}23讀取超過5V的電壓(分壓器)電路原理:使用兩個電阻串聯(lián)進(jìn)行分壓。輸出電壓=輸入電壓×(R1+R2)/R2原理圖:24實驗6(測量9V電壓)constfloatreferenceVolts=5;//thedefaultreferenceona5-voltboard//constfloatreferenceVolts=3.3;//usethisfora3.3-voltboardconstfloatR1=1000;//valueforamaximumvoltageof10voltsconstfloatR2=1000;//determinebyvoltagedividerresistors,seetextconstfloatresistorFactor=1023.0*(R2/(R1+R2));constintbatteryPin=0;//+Vfrombatteryisconnectedtoanalogpin0voidsetup(){Serial.begin(9600);}voidloop(){intval=analogRead(batteryPin);//readthevaluefromthesensorfloatvolts=(val/resistorFactor)*referenceVolts;//calculatetheratioSerial.println(volts);//printthevalueinvolts}獲取傳感器輸入簡介

Arduino可以獲取和利用來自傳感器的輸入,并將得到的數(shù)據(jù)輸出。傳感器的響應(yīng)來自于物理世界輸入,并將它們轉(zhuǎn)換為可以由Arduino從一個輸入引腳讀取的電信號。本節(jié)課提供了最常用的輸入設(shè)備和傳感器的簡單使用案例。本節(jié)要點傳感器的使用:光敏、熱敏電阻火焰?zhèn)鞲衅鲀A斜傳感器人體傳感器溫濕度傳感器其他傳感器(了解)

第一章光探測器1.1光敏電阻光探測器是利用光與物質(zhì)的各種相互作用,把光能轉(zhuǎn)換為其他可感知量的各種器件的總稱。要檢測光的亮度,最簡單的方法是使用光敏電阻。它的電阻隨光線水平的變化而變化。入射光強(qiáng)、電阻減小、入射光弱、電阻增大。DESCRIPTIONGRAPHIC1.2光敏電阻原理根據(jù)串聯(lián)電路的電壓規(guī)律——串聯(lián)電路的總電壓等于各部分電路兩端電壓之和,也就是說,光敏電阻的阻值越大,則它分到的電壓就越多,而總的電壓是固定的。那么,其他部分電路的電壓就必然會減小。DESCRIPTIONGRAPHIC1.3光控?zé)艄饷綦娮柙谌粘I钪凶畛R姷囊环N應(yīng)用就是光控?zé)簦虼嗽诒拘」?jié)中就實現(xiàn)一個光控?zé)?。該光控?zé)粼诠饩€暗比較暗的時候點亮,而在光線明亮的時候熄滅。DESCRIPTIONGRAPHIC實驗1(光控?zé)?實驗原理圖實驗連線圖實驗1(代碼部分)intpotpin=0;//定義模擬接口0連接光敏電阻intledpin=11;//定義數(shù)字接口11輸出PWM調(diào)節(jié)LED亮度intval=0;//定義變量valvoidsetup(){pinMode(ledpin,OUTPUT);//定義數(shù)字接口11為輸出Serial.begin(9600);//設(shè)置波特率為9600}voidloop(){val=analogRead(potpin);//讀取傳感器的模擬值并賦值給valSerial.println(val);//顯示val變量數(shù)值analogWrite(ledpin,val/4);//打開LED并設(shè)置亮度(PWM輸出最大值255)delay(10);//延時0.01秒}1.4熱敏電阻熱敏電阻是電阻值對溫度極為敏感的一種電阻器,也叫半導(dǎo)體熱敏電阻器。這種電阻器具有一系列特殊的電性能,最基本的特性是其阻值隨溫度的變化有極為顯著的變化。課程中使用的熱敏電阻器溫度越高電阻越小。DESCRIPTIONGRAPHIC實驗1(溫控?zé)?將實驗1中的光敏電阻替換成熱敏電阻,其余電路及代碼保持不變。使用溫度來控制發(fā)光二極管的亮度。第二章火焰?zhèn)鞲衅?.1火焰?zhèn)鞲衅?/p>

火焰?zhèn)鞲衅鳎醇t外接收二極管)是機(jī)器人專門用來搜尋火源的傳感器,本傳感器對火焰特別靈敏。DESCRIPTIONGRAPHIC2.2火焰?zhèn)鞲衅鞴ぷ髟?/p>

火焰?zhèn)鞲衅骼眉t外線對火焰非常敏感的特點,使用特制的紅外線接收管來檢測火焰,然后把火焰的亮度轉(zhuǎn)化為高低變化的電平信號,輸入到中央處理器,中央處理器根據(jù)信號的變化做出相應(yīng)的程序處理。在有火焰靠近和沒有火焰靠近兩種情況下,模擬口讀到的電壓值是有變化的。實際用萬用表測量可知,在沒有火焰靠近時,模擬口讀到的電壓值為0.3V左右;當(dāng)有火焰靠近時,模擬口讀到的電壓值為1.0V左右,火焰靠近距離越近電壓值越大。DESCRIPTION實驗2(火焰報警器)實驗原理圖intflame=0;//定義火焰接口為模擬0接口intBeep=7;//定義蜂鳴器接口為數(shù)字7接口intval=0;//定義數(shù)字變量voidsetup(){pinMode(Beep,OUTPUT);//定義蜂鳴器為輸出接口pinMode(flame,INPUT);//定義flame為輸入接口Serial.begin(9600);//設(shè)定波特率為9600}voidloop(){val=analogRead(flame);//讀取火焰?zhèn)鞲衅鞯哪M值Serial.println(val);//輸出模擬值,并將其打印出來if(val>=300)//當(dāng)模擬值大于300時蜂鳴器鳴響digitalWrite(Beep,HIGH);elsedigitalWrite(Beep,LOW);}第三章傾斜傳感器3.1滾珠開關(guān)

最常見的傾斜傳感器是一個裝有滾珠的盒子,其中一端有接觸點。我們稱其為滾珠開關(guān)。當(dāng)開關(guān)傾斜時,球遠(yuǎn)離觸點,中斷連接;當(dāng)開關(guān)向另一方向傾斜時,滾動的球觸及接觸點,接通電路。DESCRIPTIONGRAPHIC3.2滾珠開關(guān)工作方式

單方向傾斜感應(yīng)觸發(fā),單向雙引腳,接觸更穩(wěn)定。采用水平或豎直的安裝方式可獲得不同的觸發(fā)角度。采用兩顆大滾珠,性能更可靠。用于防盜報警、數(shù)碼相框、家電防傾倒等。DESCRIPTIONGRAPHIC實驗3(動作檢測)實驗連線圖constintledPin=13;constintinputPin=2;voidsetup(){pinMode(ledPin,OUTPUT);pinMode(inputPin,INPUT);digitalWrite(inputPin,HIGH);

//使用內(nèi)部上拉電阻的方式}voidloop()

{intval=digitalRead(inputPin);//readinputvalueif(val==LOW){digitalWrite(ledPin,HIGH);

}else{digitalWrite(ledPin,LOW);}}第四章人體傳感器4.1紅外人體傳感器

在安防領(lǐng)域中,PIR是PassiveInfrared的縮寫,即被動紅外技術(shù)。PIR探測器的全稱就是PassiveInfraredDetection,即被動式紅外探測器或身體感應(yīng)器,有時候被稱為PassiveInfraredSensor,在安防行業(yè)探測器多被稱為Detection。人靠近并活動時傳感器輸出高電平,無人時輸出低電平。DESCRIPTIONGRAPHIC人靠近傳感器時輸出高電平實驗4(人體檢測)實驗連線圖constintledPin=13;constintinputPin=2;voidsetup(){pinMode(ledPin,OUTPUT);pinMode(inputPin,INPUT);}voidloop(){intval=digitalRead(inputPin);if(val==HIGH){digitalWrite(ledPin,HIGH);}else{digitalWrite(ledPin,LOW);}}第五章溫濕度傳感器5.1DHT11溫濕度傳感器DHT11是一款有已校準(zhǔn)數(shù)字信號輸出的溫濕度傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機(jī)相連接。DESCRIPTIONGRAPHIC5.1DHT11溫濕度傳感器技術(shù)參數(shù)供電電壓:3.3~5.5VDC輸出:單總線數(shù)字信號測量范圍:濕度20-90%RH,溫度0~50℃測量精度:濕度+-5%RH,溫度+-2℃分辨率:濕度1%RH,溫度1℃互換性:可完全互換,長期穩(wěn)定性:<±1%RH/年DESCRIPTIONGRAPHIC5.2DHT-sensor-libraryDHT-sensor-library是DHT系列傳感器的庫。DHT庫中的主要方法:dht(DHTPIN,DHTTYPE)

//

DHTPIN為數(shù)據(jù)輸入引腳,DHTTYPE為傳感器類型,此處應(yīng)為DHT11。readHumidity()

//讀取濕度readTemperature(isFahrenheit=false)

//讀取溫度,參數(shù)為控制返回攝氏或者華氏溫度computeHeatIndex(t,h,isFahrenheit=false)

//將溫濕度轉(zhuǎn)換為熱指數(shù)DESCRIPTIONGRAPHICArduinoIDE加載庫的方法:添加:DHTsensorlibrary和Adafruitunifiedsensor兩個庫。5.3DHT-sensor-library添加實驗5(溫濕度測量)#include"DHT.h"#defineDHTPIN2#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(9600);Serial.println("DHT11test!");dht.begin();}voidloop(){delay(2000);

floath=dht.readHumidity();

floatt=dht.readTemperature();

floatf=dht.readTemperature(true);

if(isnan(h)||isnan(t)||isnan(f)){Serial.println("FailedtoreadfromDHTsensor!");return;}

floathif=puteHeatIndex(f,h);floathic=puteHeatIndex(t,h,false);Serial.print("Humidity:");Serial.print(h);Serial.print("%\t");Serial.print("Temperature:");Serial.print(t);Serial.print("*C");Serial.print(f);Serial.print("*F\t");Serial.print("Heatindex:");Serial.print(hic);Serial.print("*C");Serial.print(hif);Serial.println("*F");}*完整代碼見DHTtester第六章其他傳感器6.1.1陀螺儀

陀螺儀又叫角速度傳感器,是不同于加速度計(G-sensor)的,他的測量物理量是偏轉(zhuǎn),傾斜時的轉(zhuǎn)動角速度。在手機(jī)上,僅用加速度計沒辦法測量或重構(gòu)出完整的3D動作,測不到轉(zhuǎn)動的動作的,G-sensor只能檢測軸向的線性動作。但陀螺儀則可以對轉(zhuǎn)動,偏轉(zhuǎn)的動作做很好的測量,這樣就可以精確分析判斷出使用者的實際動作。DESCRIPTIONGRAPHIC6.1.2陀螺儀的應(yīng)用

第一大用途,導(dǎo)航。陀螺儀自被發(fā)明開始,就用于導(dǎo)航,先是德國人將其應(yīng)用在V1、V2火箭上,因此,如果配合GPS,手機(jī)的導(dǎo)航能力將達(dá)到前所未有的水準(zhǔn)。實際上,目前很多專業(yè)手持式GPS上也裝了陀螺儀,如果手機(jī)上安裝了相應(yīng)的軟件,其導(dǎo)航能力絕不亞于目前很多船舶、飛機(jī)上用的導(dǎo)航儀。第二大用途,可以和手機(jī)上的攝像頭配合使用,比如防抖,這會讓手機(jī)的拍照攝像能力得到很大的提升。第三大用途,各類游戲的傳感器,比如飛行游戲,體育類游戲,甚至包括一些第一視角類射擊游戲,陀螺儀完整監(jiān)測游戲者手的位移,從而實現(xiàn)各種游戲操作效果。第四大用途,可以用作輸入設(shè)備,陀螺儀相當(dāng)于一個立體的鼠標(biāo),這個功能和第三大用途中的游戲傳感器很類似,甚至可以認(rèn)為是一種類型。第五大用途,也是未來最有前景和應(yīng)用范圍的用途,就是可以實現(xiàn)很多增強(qiáng)現(xiàn)實的功能。DESCRIPTION6.1.3陀螺儀連接原理圖GRAPHIC6.2電子羅盤

電子羅盤,又稱數(shù)字羅盤,在現(xiàn)代技術(shù)條件中電子羅盤作為導(dǎo)航儀器或姿態(tài)傳感器已被廣泛應(yīng)用。電子羅盤與傳統(tǒng)指針式和平衡架結(jié)構(gòu)羅盤相比能耗低、體積小、重量輕、精度高、可微型化,其輸出信號通過處理可以實現(xiàn)數(shù)碼顯示,不僅可以用來指向,其數(shù)字信號可直接送到自動舵,控制船舶的操縱。DESCRIPTIONGRAPHIC電子羅盤連接圖可視輸出本節(jié)要點LED器件的使用:LED點陣數(shù)碼管

超聲波距離探測器使用第一章(復(fù)習(xí))數(shù)字輸出與模擬輸出1.1數(shù)字輸出161

所有可被用于數(shù)字輸入的引腳也可以用于數(shù)字輸出。數(shù)字輸出決定一個引腳上的電壓是高(5V)或低(0V)。使用digitalWrite(outputPin,value)函數(shù)來打開或關(guān)閉一個設(shè)備。該函數(shù)有兩個參數(shù):outputPin是被控制的引腳,而value可以是HIGH(5V)或LOW(0V)。

為了讓引腳電壓響應(yīng)此命令,該引腳必須使用pinMode(outputPin,OUTPUT)命令設(shè)置成輸出模式。DESCRIPTION1.1.1pinMode(Pin,mode)162

pinMode函數(shù)用以配置引腳與輸出或輸入模式,它是一個無返回值函數(shù)。函數(shù)有兩個參數(shù),Pin和mode。Pin參數(shù)表示要配置的引腳,mode參數(shù)表示設(shè)置的參數(shù)INPUT(輸入)和OUTPUT(輸出)。

Pin的范圍是數(shù)字引腳0~13,也可以把模擬引腳(A0~A5)作為數(shù)字引腳使用,此時編號為14腳對應(yīng)模擬引腳0,19腳對應(yīng)模擬引腳5。一般會放在setup里,先設(shè)置再使用。DESCRIPTION1.1.2digitalWrite(Pin,value)163該函數(shù)的作用是設(shè)置引腳的輸出電壓為高電平或低電平。該函數(shù)也是一個無返回值的函數(shù)。

Pin參數(shù)表示所要設(shè)置的引腳,value參數(shù)表示輸出的電壓HIGH(高電平)或LOW(低電平)。

注意:使用前必須先用pinMode設(shè)置。DESCRIPTION1.2模擬輸出164

模擬指的是可以逐漸改變自己的強(qiáng)度直到最高值(如調(diào)光器和音量控制)。Arduino有analogWrite函數(shù),可以用于控制諸如連接到Arduino的LED的亮度之類。

DESCRIPTION1.2.1analogWrite(Pin,mode)165該analogWrite函數(shù)不是真正的模擬,它是使用一種稱為脈沖寬度調(diào)制(PWM)的技術(shù),使用數(shù)字脈沖來模擬一個模擬信號。PWM是通過改變脈沖開啟和關(guān)閉時間的比例來起作用的。低強(qiáng)度輸出是通過產(chǎn)生開啟時間周期很短的脈沖來實現(xiàn)的,更高強(qiáng)度的輸出是通過開啟脈沖比關(guān)閉脈沖更長時間來模擬的。當(dāng)重復(fù)脈沖速度足夠快(在Arduino是近500次/s),脈沖已經(jīng)不能被人的感官檢測,所以像LED這樣的設(shè)備的輸出看起來像是隨脈沖速率平滑改變。UNO板上支持以下數(shù)字引腳(不是模擬輸入引腳)作為PWM模擬輸出:3、5、6、9、10、11。DESCRIPTION實驗1(自動調(diào)節(jié)LED亮度)constintfirstLed=3;//specifythepinforeachoftheLEDsconstintsecondLed=5;constintthirdLed=6;intbrightness=0;intincrement=1;voidsetup(){//pinsdrivenbyanalogWritedonotneedtobedeclaredasoutputs}voidloop(){if(brightness>255){increment=-1;//countdownafterreaching255}elseif(brightness<1){increment=1;//countupafterdroppingbackdownto0}brightness=brightness+increment;//increment(ordecrementsignisminus)//writethebrightnessvaluetotheLEDsanalogWrite(firstLed,brightness);analogWrite(secondLed,brightness);analogWrite(thirdLed,brightness);delay(10);//10msforeachstepchangemeans2.55secstofadeupordown}實驗原理圖第二章LED點陣屏幕2.1LED點陣屏幕168

LED點陣屏通過LED(發(fā)光二極管)組成,以燈珠亮滅來顯示文字、圖片、動畫、視頻等,是各部分組件都模塊化的顯示器件,通常由顯示模塊、控制系統(tǒng)及電源系統(tǒng)組成。LED點陣顯示屏制作簡單,安裝方便,被廣泛應(yīng)用于各種公共場合,如汽車報站器、廣告屏以及公告牌等。。DESCRIPTIONGRAPHIC2.28×8點陣led169它共由64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點上,當(dāng)對應(yīng)的某一行置高電平,某一列置低電平,則相應(yīng)的二極管就亮。DESCRIPTIONGRAPHIC2.28×8點陣led170文字靠近自己,點陣朝上左下角為1號引腳,逆時針旋轉(zhuǎn)左上角為16號引腳。DESCRIPTIONGRAPHIC實驗2(控制led點陣)實驗原理圖代碼見群文件ch7r7第三章LED數(shù)碼管3.1七段數(shù)碼管173

LED數(shù)碼管實際上是由七個發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp(h)來表示。DESCRIPTIONGRAPHIC3.2七段數(shù)碼管分類174發(fā)光二極管的陽極連接到一起連接到電源正極的稱為共陽數(shù)碼管發(fā)光二極管的陰極連接到一起連接到電源負(fù)極的稱為共陰數(shù)碼管常見型號:5161AS:共陰紅色;5161AG:共陰綠色;5161BS:共陽紅色;5161BG:共陽綠色本節(jié)課使用SMA42056共陰紅色數(shù)碼管

DESCRIPTION實驗3(計時器)實驗原理圖代碼見群文件ch7r10注意:共陰極注釋掉isBitSet=!isBitSet,共陽極保留。3.3四位數(shù)碼管176

4位數(shù)碼管總共有12個引腳,小數(shù)點朝下正放在面前時,左下角為1,其他管腳順序為逆時針旋轉(zhuǎn)。左上角為最大的12號管腳。DESCRIPTIONGRAPHIC3.4限流電阻的連接177

驅(qū)動數(shù)碼管限流電阻肯定是必不可少的,限流電阻有兩種接法,一種是在d1-d4陽極接,總共接4顆。這種接法好處是需求電阻比較少,但是會產(chǎn)生每一位上顯示不同數(shù)字亮度會不一樣,1最亮,8最暗。

另外一種接法就是在其他8個引腳上接,這種接法亮度顯示均勻,但是用電阻較多。本次實驗使用8顆220Ω電阻(因為沒有100Ω電阻,所以使用220Ω的代替,100歐姆亮度會比較高)。DESCRIPTION3.5四位數(shù)碼管引腳圖178GRAPHIC實驗4(教材7.11)實驗原理圖代碼見群文件ch7r11注意數(shù)碼管是共陰極還是共陽極,需要在代碼中調(diào)整對應(yīng)的公共引腳以及七段數(shù)碼管引腳的狀態(tài)。dp第四章超聲波測距模塊4.1超聲波距離傳感器181超聲波測距模塊有好多種類型,目前比較常用的有URM37超聲波傳感器默認(rèn)是232接口,可以調(diào)為TTL接口,URM05大功率超聲波傳感器測試距離能到10米,算是目前來說測試距離比較遠(yuǎn)的一款了,另外還有比較常用的國外的幾款SRF系列的超聲波模塊,目前的超聲波模塊精度能到1cm。

本次實驗使用RisymHC-SR04超聲波模塊,檢測到角度范圍在30°左右。

DESCRIPTIONGRAPHIC4.1超聲波距離傳感器182原理:占用單片機(jī)的兩個IO口,一個IO為觸發(fā)端,一個IO為回波PWM信號捕捉引腳。使用時只需要讀出PWM信號高電平的時間。回響信號是一個與距離成正比的脈沖寬度對象??赏ㄟ^發(fā)射信號到收到的回響信號的時間間隔來計算得到距離。通過聲波在空氣中的傳播公式L=340T/2。計算出測量的距離,如果沒有檢測到回響信號,模塊的回響信號引腳將會輸出約為140uS的電平,以防止發(fā)射信號對回響信號的影響。DESCRIPTIONGRAPHIC4.2pulseIn()函數(shù)183

讀取一個引腳的脈沖(HIGH或LOW)。例如,如果value是HIGH,pulseIn()會等待引腳變?yōu)镠IGH,開始計時,再等待引腳變?yōu)長OW并停止計時。返回脈沖的長度,單位微秒。如果在指定的時間內(nèi)無脈沖函數(shù)返回0。此函數(shù)的計時功能由經(jīng)驗決定,長時間的脈沖計時可能會出錯。計時范圍從10微秒至3分鐘。DESCRIPTION語法pulseIn(pin,value)

pulseIn(pin,value,timeout)參數(shù)pin:你要進(jìn)行脈沖計時的引腳號(int)。

value:要讀取的脈沖類型,HIGH或LOW(int)。

timeout(可選):指定脈沖計數(shù)的等待時間,單位為微秒,默認(rèn)值是1秒(unsignedlong)返回:脈沖長度(微秒),如果等待超時返回0(unsignedlong)DESCRIPTION實驗5(距離測量)實驗圖const

int

TrigPin=

2;

const

int

EchoPin=

3;

float

cm;

void

setup()

{

Serial.begin(9600);

pinMode(TrigPin,OUTPUT);

pinMode(EchoPin,INPUT);

}

void

loop()

{

digitalWrite(TrigPin,LOW);

//低高低電平發(fā)一個短時間脈沖去TrigPin

delayMicroseconds(2);

digitalWrite(TrigPin,HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin,LOW);

cm=pulseIn(EchoPin,HIGH)/

58.0;

//將回波時間換算成cm

cm=(int(cm*

100.0))/

100.0;

//保留兩位小數(shù)

Serial.print(cm);

Serial.print("cm");

Serial.println();

delay(1000);

}

可視輸出本節(jié)要點LED器件的使用:LED點陣數(shù)碼管

超聲波距離探測器使用第一章(復(fù)習(xí))數(shù)字輸出與模擬輸出1.1數(shù)字輸出188

所有可被用于數(shù)字輸入的引腳也可以用于數(shù)字輸出。數(shù)字輸出決定一個引腳上的電壓是高(5V)或低(0V)。使用digitalWrite(outputPin,value)函數(shù)來打開或關(guān)閉一個設(shè)備。該函數(shù)有兩個參數(shù):outputPin是被控制的引腳,而value可以是HIGH(5V)或LOW(0V)。

為了讓引腳電壓響應(yīng)此命令,該引腳必須使用pinMode(outputPin,OUTPUT)命令設(shè)置成輸出模式。DESCRIPTION1.1.1pinMode(Pin,mode)189

pinMode函數(shù)用以配置引腳與輸出或輸入模式,它是一個無返回值函數(shù)。函數(shù)有兩個參數(shù),Pin和mode。Pin參數(shù)表示要配置的引腳,mode參數(shù)表示設(shè)置的參數(shù)INPUT(輸入)和OUTPUT(輸出)。

Pin的范圍是數(shù)字引腳0~13,也可以把模擬引腳(A0~A5)作為數(shù)字引腳使用,此時編號為14腳對應(yīng)模擬引腳0,19腳對應(yīng)模擬引腳5。一般會放在setup里,先設(shè)置再使用。DESCRIPTION1.1.2digitalWrite(Pin,value)190該函數(shù)的作用是設(shè)置引腳的輸出電壓為高電平或低電平。該函數(shù)也是一個無返回值的函數(shù)。

Pin參數(shù)表示所要設(shè)置的引腳,value參數(shù)表示輸出的電壓HIGH(高電平)或LOW(低電平)。

注意:使用前必須先用pinMode設(shè)置。DESCRIPTION1.2模擬輸出191

模擬指的是可以逐漸改變自己的強(qiáng)度直到最高值(如調(diào)光器和音量控制)。Arduino有analogWrite函數(shù),可以用于控制諸如連接到Arduino的LED的亮度之類。

DESCRIPTION1.2.1analogWrite(Pin,mode)192該analogWrite函數(shù)不是真正的模擬,它是使用一種稱為脈沖寬度調(diào)制(PWM)的技術(shù),使用數(shù)字脈沖來模擬一個模擬信號。PWM是通過改變脈沖開啟和關(guān)閉時間的比例來起作用的。低強(qiáng)度輸出是通過產(chǎn)生開啟時間周期很短的脈沖來實現(xiàn)的,更高強(qiáng)度的輸出是通過開啟脈沖比關(guān)閉脈沖更長時間來模擬的。當(dāng)重復(fù)脈沖速度足夠快(在Arduino是近500次/s),脈沖已經(jīng)不能被人的感官檢測,所以像LED這樣的設(shè)備的輸出看起來像是隨脈沖速率平滑改變。UNO板上支持以下數(shù)字引腳(不是模擬輸入引腳)作為PWM模擬輸出:3、5、6、9、10、11。DESCRIPTION實驗1(自動調(diào)節(jié)LED亮度)constintfirstLed=3;//specifythepinforeachoft

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論