(RB-13K024)基于Arduino電子積木套件

來自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航、 搜索


Ert1.jpg

目錄

概述

Arduino 是一塊基于開放源代碼的 USB 接口 Simp le I/O 接口板(包括 12 通道數(shù)字GPIO,4 通道 PWM 輸出,6-8 通道 10bit ADC 輸入通道),并且具有使用類似 Java,C語言的 IDE 集成開發(fā)環(huán)境。讓您可以快速使用 Arduino 語言與 F lash 或 Processing 等軟件,作出互動(dòng)作品。 Arduino 可以使用開發(fā)完成的電子元件例如 Switch 或 sensors 或其他控制器、LED、步進(jìn)馬達(dá)或其他輸出裝置。Arduino 也可以獨(dú)立運(yùn)作成為一個(gè)可以跟軟件溝的接口,例如說:flash processing Max/MSP VVVV 或其他互動(dòng)軟件。Arduino 開發(fā) IDE 接口基于開放源代碼,可以讓您免費(fèi)下載使用開發(fā)出更多令人驚艷的互動(dòng)作品。
Arduino 可以使用開發(fā)完成的電子元件例如 Switch 或 sensors 或其他控制器、LED、步進(jìn)馬達(dá)或其他輸出裝置。Arduino 也可以獨(dú)立運(yùn)作成為一個(gè)可以跟軟件溝的接口,例如說:flash processing Max/MSP VVVV 或其他互動(dòng)軟件。Arduino 開發(fā) IDE 接口基于開放源代碼,可以讓您免費(fèi)下載使用開發(fā)出更多令人驚艷的互動(dòng)作品。

Arduino技術(shù)參數(shù)

  1. 微控制器核心:AVRmega168-20PU(處理速度可達(dá) 20MIPS)
  2. 工作電壓:+5V
  3. . 外部輸入電壓:+7V~+12V(建議)
  4. . 外部輸入電壓(極值):+6V≤Vin≤+20V
  5. 數(shù)字信號(hào) I/O 接口 0~13:共 14 個(gè),其中 6 個(gè) PWM 輸出接口(P in11、Pin10、Pin9、P in6、Pin5、Pin3)
  6. 模擬信號(hào)輸入接口 0~5:共 6 個(gè)
  7. DC I/O 接口電流:40 mA
  8. Flash 容量:16 KB (其他 2K 用于 bootloader)
  9. SRAM 靜態(tài)存儲(chǔ)容量:1KB
  10. EEPROM 存儲(chǔ)容量:512 bytes
  11. 時(shí)鐘頻率:16MHz、支持 USB 接口協(xié)議
  12. 支持 USB 供電與外部供電
  13. 支持 ISP 下載功能
  14. 支持插針

Arduino下載軟件及開發(fā)環(huán)境

  1. 軟件下載
 官方軟件下載地址:http://arduino.cc/en/Main/Software
  1. 軟件及硬件驅(qū)動(dòng)安裝
 軟件是綠色版本,軟件解壓縮后即可使用。 
Ert2.jpg
  1. 軟件解壓完成后,接下來要安裝 Arduino 硬件驅(qū)動(dòng)。
  2. 現(xiàn)將 Arduino 上的方頭 USB 連接好之后,另外一端的 USB 連接好計(jì)算機(jī)任意一個(gè)US B 接口。


Ert3.jpg

接下來就會(huì)出現(xiàn) F 232R US B UART 的驅(qū)動(dòng)程序安裝畫面。

Ert4.jpg

按照安裝提示選擇從列表或指定位置安裝,點(diǎn)擊下一步。

Ert5.jpg
點(diǎn)擊瀏覽,找到 Arduino 軟件所在位置的 drivers

文件夾,再次點(diǎn)擊下一步,就可 以進(jìn)行安裝驅(qū)動(dòng)程序了,顯示完成即硬件驅(qū)動(dòng)安裝完成。

  1. Arduino 編譯下載軟件使用說明

打開軟件只需執(zhí)行 arduino.exe 執(zhí)行文件,就可以看到如下程序編譯窗口。

Ert6.jpg
在輸入程序前需要先選擇板號(hào)和 COM 口,COM 口號(hào)可以在我的電腦右鍵管理里設(shè)備管理器里看到,實(shí)例中 COM 口為 COM13。
Ert7.jpg
板號(hào)的選擇就需要您根據(jù)您自己Arduino的型號(hào)選擇,實(shí)例中使用的為Arduino Duemilanove 168,需選擇 Arduino Diecimila,Duemilanove,or Nano w/ATmega 168,若硬件為 Arduino Mega 1280 即需選擇 Arduino Mega。
Ert8.jpg
基本設(shè)置完畢就可以編寫程序了。
Ert9.jpg
Ert10.jpg

Arduino 基 本語 言概述

Arduino 使用起來要比其他微處理器更易懂,與 Basic S tamp 有些相似,Arduino 的編程語言更為簡單和人性化,Arduino編程語言基于C語言,但其實(shí)用性要遠(yuǎn)高于C語言,主要由于它將一些常用語句組合函數(shù)化,例如:延時(shí)函數(shù) delay( 1000)即為一秒。
  1. Arduino 程序基本架構(gòu)

(1)聲明變量及接口名稱(int val; int ledPin=13;)。 (2)setup()——函數(shù)在程序開始時(shí)使用,可以初始化變量、接口模式、啟用庫等 (例如:pinMode(ledPin,OUTUPT);)。 (3)loop()——在 setup()函數(shù)之后,即初始化之后,loop() 讓你的程序循環(huán)地被執(zhí)行,使用它來運(yùn)轉(zhuǎn) Arduino。

  1. Arduino 常用編程語言

(1)pinMode(接口名稱,OUTPUT 或 INP UT)將——接口定義為輸入或輸出接口, 用在 setup()函數(shù)里。 (2)digitalWrite(接口名稱,HIGH 或 LOW)——將數(shù)字接口值至高或低。 (3)digitalRead(接口名稱)——讀出數(shù)字接口的值。 (4)analogWrit e(接口名稱, 數(shù)值)——給一個(gè)接口寫入模擬值(PWM 波)。對(duì)于 ATmega168 芯片的 Arduino(包括 Mini 或 BT),該函數(shù)可以工作于 3,5,6,9,10和 11 號(hào)接口。老版的 ATmega8 芯片的 US B 和 serial Arduino 僅僅支持 9,10 和 11 號(hào)接口。 (5)analogRead(接口名稱)——從指定的模擬接口讀取值,Arduino 對(duì)該模擬值進(jìn)行 10-bit 的數(shù)字轉(zhuǎn)換,這個(gè)方法將輸入的 0-5 電壓值轉(zhuǎn)換為 0 到 1023 間的整數(shù)值。 (6)delay()——延時(shí)一段時(shí)間,delay(1000)為一秒。 (7)Serial.begin(波特率)——設(shè)置串行每秒傳輸數(shù)據(jù)的速率(波特率)。在同計(jì)算機(jī)通訊時(shí),使用下面這些值:300,1200,2400,4800,9600,14400,19200,28800,38400,57600 或 115200。你也可以在任何時(shí)候使用其它的值,比如,與 0 號(hào)或 1 號(hào)插口通信就要求特殊的波特率。用在 setup()函數(shù)里 (8)Serial.read()——讀取持續(xù)輸入的數(shù)據(jù)。 (9)Serial.print (數(shù)據(jù),數(shù)據(jù)的進(jìn)制)——從串行端口輸出數(shù)據(jù)。Serial.print(數(shù)據(jù))默認(rèn)為十進(jìn)制等于 Serial.print(數(shù)據(jù),DEC)。 (10)S erial.println(數(shù)據(jù),數(shù)據(jù)的進(jìn)制)——從串行端口輸出數(shù)據(jù),跟隨一個(gè)回車和一個(gè)換行符。這個(gè)函數(shù)所取得的值與 Serial.print()一樣。

Arduino應(yīng)用基礎(chǔ)篇

一般傳感器為三線制即 VCC、GND、信號(hào)(+、-、S),Arduino Sensor Shield V5.0傳感器擴(kuò)展板將 Arduino Duemilanove 2009 控制器的全部數(shù)字與模擬接口以舵機(jī)線序形式擴(kuò)展出來,還特設(shè) IIC 接口、32 路舵機(jī)控制器接口、藍(lán)牙模塊通信接口、SD 卡模塊通信接口、APC220 無線射頻模塊通信接口、RB URF v1.1 超聲波傳感器接口、12864液晶串行與并行接口。
Ert11.jpg

接口示意圖如下:

Ert12.jpg
  1. 常用數(shù)字電子積木

按壓式大按鈕模塊

Ert13.jpg
按壓式大按鈕模塊是 Arduino 學(xué)習(xí)入門必備數(shù)字開關(guān)量輸入模塊,通過編程可以實(shí)

現(xiàn)發(fā)光燈控制,發(fā)聲器控制,按鍵選擇功能等。 電磁式蜂鳴器發(fā)聲模塊

Ert14.jpg
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電源供電,廣泛應(yīng)用于計(jì)算機(jī)、

打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中 作發(fā)聲器件。若想獲得有關(guān)蜂鳴器資訊請(qǐng)點(diǎn)擊:蜂鳴器的結(jié)構(gòu)原理及制作。 單向傾角傳感器模塊

Ert15.jpg
基于鋼球開關(guān)的數(shù)字模塊,利用鋼球的特性,通過重力作用使鋼球向低處滾動(dòng),

從而使開關(guān)閉合或斷開,國內(nèi)的滾珠開關(guān)大都是水銀開關(guān),易破損、氧化、漏氣、壽 命短、污染環(huán)境等弊端,鋼球滾珠開關(guān)摒棄以上缺點(diǎn),更環(huán)保易用,比使用水銀開關(guān) 更加安全,可作為單向傾角傳感器使用。 震動(dòng)傳感器模塊

Ert16.jpg
震動(dòng)式開關(guān)數(shù)字輸出模塊,當(dāng)模塊所處環(huán)境發(fā)生震動(dòng)時(shí),模塊信號(hào)將產(chǎn)生高低電

平變化,左邊傳感器內(nèi)有鋼珠適合檢測較小幅度的震動(dòng),右側(cè)傳感器內(nèi)有彈簧適合測 量較大震動(dòng)幅度的震動(dòng)。 磁感應(yīng)傳感器模塊

Ert17.jpg
磁感應(yīng)傳感器的主要構(gòu)成的材料來自于干簧管。干簧管是一種磁敏的特殊開關(guān)。

它通常由兩個(gè)或三個(gè)既導(dǎo)磁又導(dǎo)電材料做成的簧片觸點(diǎn),被封裝在充有惰性氣體(如氮、氦等)或真空的玻璃管里,玻璃管內(nèi)平行封裝的簧片端部重疊,并留有一定間隙或相互接觸以構(gòu)成開關(guān)的常開或常閉接點(diǎn)。若想獲得有關(guān)磁感應(yīng)傳感器詳細(xì)資料請(qǐng)點(diǎn)擊: 磁感應(yīng)傳感器的知識(shí)。 Mini 尋線傳感器模塊

Ert18.jpg
Mini

紅外尋線傳感器是根據(jù)反射式光電傳感器原理開發(fā)的專用機(jī)器人產(chǎn)品,可以幫助你的機(jī)器人進(jìn)行白線或黑線跟蹤,可以檢測白底中的黑線,也可以檢測黑底中的 白線。尋線反饋信號(hào)可以提供穩(wěn)定的 TTL 電平輸出(開關(guān)量),使尋線更準(zhǔn)確更穩(wěn)定。其可用于光電測速、程控小車尋線,是輪式機(jī)器人的必備傳感器。若想獲得有關(guān)紅外傳感器詳細(xì)資料請(qǐng)點(diǎn)擊:尋線傳感器原理簡介與應(yīng)用。 Mini 避障傳感器模塊

Ert19.jpg
Mini IR Dectector是一款距離可調(diào)式避障傳感器。此傳感器對(duì)環(huán)境光線適應(yīng)能力強(qiáng)、精度高,其具有一對(duì)紅外線發(fā)射與接收管,發(fā)射管發(fā)射出一定頻率的紅外線,當(dāng)檢測方向遇到障礙物(反射面)時(shí),紅外線反射回來被接收管接收,此時(shí)指示燈亮起,經(jīng)過電路處理后,信號(hào)輸出接口輸出數(shù)字信號(hào),可通過電位器旋鈕調(diào)節(jié)檢測距離,有效距離 2~40cm,工作電壓為 3.3V-5V,由于工作電壓范圍寬泛,在電源電壓波動(dòng)比較大的情況下仍能穩(wěn)定工作,適合多種單片機(jī)、Arduino 控制器、BS2 控制器使用,安裝到機(jī)器人上即可感測周圍環(huán)境的變化。若想獲得有關(guān)紅外傳感器詳細(xì)資料請(qǐng)點(diǎn)擊: 紅外遙控的發(fā)射和接收原理簡介與應(yīng)用。

數(shù)字繼電器模塊

Ert20.jpg
Arduino Relay Shield 數(shù)字繼電器模塊提供一路輸入輸出功能,模塊集成動(dòng)態(tài)指示燈,可顯示繼電器開合狀態(tài),設(shè)有續(xù)流二極管起保護(hù)作用,最高可以接 250V/3A 的交流或 30V/3A 直流設(shè)備,因此可以通過 Roboboard 控制器、Arduino 控制器來控制,將弱電控制轉(zhuǎn)換成強(qiáng)電控制。在使用 Arduino 設(shè)計(jì)互動(dòng)作品時(shí),很多大電流或者高電壓的設(shè)備(如電風(fēng)扇等)通常無法直接用 Arduino 或其他單片機(jī)的數(shù)字 I/O 接口進(jìn)行控制,這時(shí)就可以用這款數(shù)字繼電器模塊通過 3P 傳感器連接線直接插到 Arduino S ensor Shield V5.0 傳感器擴(kuò)展板或 Arduino MEGA Sensor Shield V1.0 專用傳感器擴(kuò)展板上,這將會(huì)幫您解決這個(gè)問題,真可謂制作互動(dòng)作品的必備之選。若想獲得更多關(guān)于繼電器方面的知識(shí)請(qǐng)點(diǎn)擊:關(guān)于繼電器的一些知識(shí)。

人體紅外熱釋電傳感器

Ert21.jpg
人體紅外熱釋電傳感器是一款基于熱釋電效應(yīng)的人體熱釋運(yùn)動(dòng)傳感器,能檢測到

人體或動(dòng)物身上發(fā)出的紅外線,配合菲涅爾透鏡能使傳感器探測范圍更遠(yuǎn)更廣??稍贏rduino 控制器上編程應(yīng)用,通過 3P 傳感器連接線插接到 Arduino 專用傳感器擴(kuò)展板上使用,可以輕松實(shí)現(xiàn)人體或動(dòng)物檢測的相關(guān)的互動(dòng)效果。若想獲得更多關(guān)于熱釋電傳感器方面的知識(shí)請(qǐng)點(diǎn)擊:熱釋電紅外傳感器。 綜合應(yīng)用實(shí)例

例程一:用按壓式大按鈕模塊和蜂鳴器發(fā)聲模塊搭建簡單電路,實(shí)現(xiàn)按鍵發(fā)聲提示

功能。

Ert22.jpg
蜂鳴器發(fā)聲模塊接數(shù)字接口7,大按鈕模塊接數(shù)字接口11,當(dāng)大按鈕按下蜂鳴器鳴響,這里大按鈕模塊為輸入設(shè)備,蜂鳴器模塊為輸出設(shè)備。
例程源代碼: 
int Beep=7;//定義蜂鳴器接口 
int But ton=11;//定義大按鈕接口 
int val;//定義數(shù)字變量 val 
void setup() 
{ 
pinMode(Beep,OUTPUT);//定義蜂鳴器為輸出接口 
pinMode(But ton,INPUT);// 定義大按鈕為輸出接口 
} 
void loop() 
{ 
val=digit alRead(Button);// 將數(shù)字接口 11  的值讀取賦給 val 
if(val==LOW)//若按鍵被按下蜂鳴器鳴響 
{ 
digit alWr ite(Beep,LOW); 
} 
else 
{
digit alWr ite(Beep,HIGH);  
} 
} 
例程二:震動(dòng)模塊和數(shù)字 13 接口自帶 LED 搭建簡單電路,制作震動(dòng)閃光器。
Ert23.jpg
利用數(shù)字 13 接口自帶的 LED,將震動(dòng)傳感器接入數(shù)字 7 接口,當(dāng)震動(dòng)傳感器感測

到有震動(dòng)信號(hào)時(shí),LED 閃爍發(fā)光。

例程源代碼: 
int Led=13;//定義 LED  接口 
int S hock=7;//定義震動(dòng)傳感器接口 
int val;//定義數(shù)字變量 val 
void setup() 
{ 
pinMode(Led,OUTPUT);//定義 LED  為輸出接口 
pinMode(S hock,INPUT);//定義震動(dòng)傳感器為輸出接口 
} 
void loop() 
{ 
val=digit alRead(Shock);//將數(shù)字接口 7  的值讀取賦給 val 
if(val==HIGH)//當(dāng)震動(dòng)傳感器檢測有信號(hào)時(shí),LED  閃爍 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digitalWrite(Led,HIGH); 
} 
} 


例程三:將紅外熱釋電傳感器信號(hào)接口通過連接線插到數(shù)字7接口上,搭建簡單電路,檢測到人體或動(dòng)物身上發(fā)出的紅外線時(shí),控制器自帶數(shù)字 13 接口 LED 燈點(diǎn)亮。
Ert24.jpg
例程源代碼: 
int Led=13;//定義 LED  接口 
int S ensor=7;//定義紅外熱釋電傳感器接口
int val;//定義數(shù)字變量 val 
void setup() 
{ 
pinMode(Led,OUTPUT);//定義 LED  為輸出接口 
pinMode(S ensor,INP UT); 
//定義紅外熱釋電傳感器為輸出接口 
} 
void loop() 
{ 
val=digit alRead(Sensor);//將數(shù)字接口 7  的值讀取賦給 val 
if(val==LOW) 
//當(dāng)紅外熱釋電傳感器檢測有信號(hào)時(shí),LED  亮起 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digit alWr ite(Led,HIGH);  
} 
} 
綜上所述,數(shù)字傳感器模塊使用方法比較簡單,一般都是輸出高低電平數(shù)字量信

號(hào),通過以上三個(gè)實(shí)例的介紹,大家可以舉一反三,學(xué)習(xí)使用其他類型的數(shù)字傳感器模塊,完成自己的互動(dòng)佳作。

  1. 常用模擬傳感器

旋轉(zhuǎn)角度傳感器模塊

Ert25.jpg
Arduino 旋轉(zhuǎn)角度傳感器是基于可調(diào)電位計(jì)工作原理所設(shè)計(jì),其不僅可以做為可調(diào)電阻控制電機(jī)轉(zhuǎn)速,還可以在其旋轉(zhuǎn)頭部安裝單擺輪,測量傾角,旋轉(zhuǎn)角度從 0 到 300度,可使用 3P 傳感器連接線與 Arduino Sensor Shield V5.0 傳感器擴(kuò)展板接插,通過編程在 Arduino Mega168 控制器上可以輕松實(shí)現(xiàn)與旋轉(zhuǎn)位置相關(guān)的互動(dòng)作品。
  1. 光線傳感器模塊
Ert26.jpg
Arduino Light S ensor 是基于半導(dǎo)體的光電效應(yīng)原理所開發(fā)的光線傳感器,其可用來對(duì)周圍環(huán)境光的強(qiáng)度進(jìn)行檢測,結(jié)合各種單片機(jī)控制器或者 Arduino 控制器可實(shí)現(xiàn)光的測量、光的控制和光電轉(zhuǎn)換等功能,可通過 3P 傳感器連接線與 Arduino 專用傳感器擴(kuò)展板結(jié)合使用,可以制作光感相關(guān)的互動(dòng)作品。若想獲得更多關(guān)于光線傳感器方面的知識(shí)請(qǐng)點(diǎn)擊:光敏電阻的原理及應(yīng)用。

火焰?zhèn)鞲衅髂K

Ert27.jpg
遠(yuǎn)紅外火焰?zhèn)鞲衅骺梢杂脕硖綔y火源或其它一些波長在 760 納米~1100 納米范圍內(nèi)的熱源,探測角度達(dá) 60 度,其中紅外光波長在 940 納米附近時(shí),其靈敏度達(dá)到最大。此火焰?zhèn)鞲衅髟跍缁饳C(jī)器人比賽或者搜救機(jī)器人比賽中起著非常重要的作用,它可以 當(dāng)做機(jī)器人的眼睛來尋找火源或光源足球,結(jié)合 Arduino 控制器與傳感器擴(kuò)展板,可利用它制作滅火機(jī)器人、足球機(jī)器人等。

F SR 壓力傳感器

Ert28.jpg
Force Sensing Resistor 壓力感應(yīng)電阻是著名 Interlink Electronics 公司生產(chǎn)的一款重量輕,體積小,感測精度高,超薄型壓力傳感器。當(dāng)壓力感測電阻器感應(yīng)面的壓力增加時(shí),其阻抗就會(huì)減少,從而取得壓力數(shù)據(jù)。其可用于機(jī)械手末端夾持器感測夾持物品有無,仿生機(jī)器人足下行走地面感測,哺乳類動(dòng)物咬力測試生物實(shí)驗(yàn),應(yīng)用范圍及其廣泛。若想獲得更多關(guān)于壓力傳感器方面的知識(shí)請(qǐng)點(diǎn)擊:關(guān)于壓力傳感器的知識(shí)。

綜合應(yīng)用實(shí)例

例程一:使用火焰?zhèn)鞲衅骱头澍Q器模塊搭建一個(gè)簡單電路,制作火焰報(bào)警器,讀

取模擬值并在 PC 機(jī)上顯示。蜂鳴器發(fā)聲模塊接數(shù)字 7 接口,火焰?zhèn)鞲衅鹘幽M 1 接口。

Ert29.jpg
int f lame=0;//定義火焰接口為模擬 0  接口 
int Beep=7;//定義蜂鳴器接口為數(shù)字 7  接口 
int val=0;//定義數(shù)字變量 val 
void setup() 
{ 
pinMode(Beep,OUTP UT);// 定義 LED  為輸出接口 
pinMode(flame,INPUT);//定義蜂鳴器為輸入接口 
S erial.begin(9600);//設(shè)定波特率為 9600 
} 
void loop() 
{ 

val=analogRead(flame);//讀取火焰?zhèn)鞲衅鞯哪M值 
Serial.pr int ln(val);/ /輸出模擬值,并將其打印出來 
if(val>=600)//當(dāng)模擬值大于 600  時(shí)蜂鳴器鳴響 
{ 
digitalWrite(Beep,LOW); 
} 
else 
{ 
digitalWrite(Beep,HIGH);  
} 
}
演示視頻地址請(qǐng)點(diǎn)擊:http://v.youku.com/v_show/id_XMTk4NjU5MDcy.html
例程二:壓力大小測試儀的制作,使用壓力感測電阻控制 LED 亮滅程度,并將反

饋模擬值在 PC 屏幕上顯示。

壓力感應(yīng)電阻是彎曲壓力傳感器的一種,簡稱 FSR。FSR 是一種隨著有效表面上

壓力增大而輸出阻值減小的高分子薄膜,F(xiàn)SR 并不是測壓元件或形變測量儀,盡管他們有著相似的性能。而且這類壓力感測電阻不適用于精密測量,但是 FSR 卻是一款靈敏度較高的傳感器。

Ert30.jpg

首先看一下 Force Sensing Resistor 壓力感應(yīng)電阻的使用方法

Ert31.jpg
按照上圖搭建電路,數(shù)字 11 接口連接綠色 LED,將 FSR 讀出的模擬值賦給 LED,

這樣通過 LED 的亮度我們就可以看出讀出模擬值和壓力值的大小了。

Ert32.jpg

例程源代碼:

int led=11;//定義 LED 接口為數(shù)字 11 接口 
int F SR=0;//定義壓力傳感器接口為模擬 0 接口 
int val;//定義數(shù)字變量 val 
int i;//定義數(shù)字變量 i 
void setup() 
{ 
pinMode(led,OUTP UT);// 定義 LED 為輸出接口 
pinMode(F SR,INP UT);// 定義壓力傳感器為輸入接口 
Serial.begin(9600);//設(shè)定波特率為 9600
} 
void loop() 
{ 
val=analogRead(FSR);//度取壓力傳感器的模擬值并將其賦給變量 val 
analogWrit e(led,val);//將 val 的值賦給 LED 接口 
Serial.pr intln(val);打印 val 的模擬值 
}

Arduino 應(yīng) 用高 級(jí) 篇

  1. RB URF v1.1 超聲波傳感器
Ert33.jpg
RB URF v1.1 超聲波傳感器是機(jī)器人領(lǐng)域最常用的測距避障模塊。其可用來檢測對(duì)方機(jī)器人的有無和距離。偵測距離可達(dá) 3cm 到 340cm,傳感器在有效探測范圍內(nèi)自動(dòng)標(biāo)定,無需任何人工調(diào)整就可以獲得障礙物準(zhǔn)確的距離。令你的機(jī)器人像蝙蝠一樣通過聲納來感知周圍的環(huán)境,你只需要在單片機(jī)、BS2 微控制器或Arduino 微控制器中編寫一小段程序,就可以根據(jù)障礙物的距離精確的控制機(jī)器人的電機(jī)運(yùn)行,從而使你的機(jī)器人輕松地避開障礙物。
超聲波的工作原理就像聲納一樣,通過發(fā)送器發(fā)出超聲波信號(hào),遇到物體反射回

來傳到接收器,然后計(jì)算反射回來所用的時(shí)間,即可計(jì)算距障礙物的距離。

Ert34.jpg
Arduino 與超聲波傳感器搭建電路進(jìn)行測距實(shí)驗(yàn)。Arduino Sensor Shield V5.0 傳感器擴(kuò)展板設(shè)有超聲波接口可直接接插使用,對(duì)應(yīng)發(fā)射和接收接口分別為模擬 0和模擬1,即數(shù)字 14 和數(shù)字 15 接口(模擬接口 0-5 可代替數(shù)字接口使用接口號(hào)對(duì)應(yīng)數(shù)字 14-19)。
編一個(gè)簡單的測距程序,在 13 接口接一個(gè)小燈,使其當(dāng)測得距離大于 50 厘米時(shí)亮起。
例程源代碼:
int  inputP in=4;    //  定義超聲波信號(hào)接收接口 
int outputP in=5; //  定義超聲波信號(hào)發(fā)出接口 
int ledpin=13;  
void setup() 
{ 
Serial.begin(9600); 
pinMode(ledpin,OUTPUT); 
pinMode(inputP in, INPUT);  
pinMode(outputP in, OUTPUT);  
}
void loop() 
{ 
digitalWrite(outputPin, LOW);
//  使發(fā)出發(fā)出超聲波信號(hào)接口低電平 2μs 
delayMicroseconds(2); 
digitalWrite(outputPin, HIGH);
//  使發(fā)出發(fā)出超聲波信號(hào)接口高電平 10μs,這里是至少 10μs 
delayMicroseconds(10);  
digitalWrite(outputPin, LOW);  
//  保持發(fā)出超聲波信號(hào)接口低電平 
int distance = pulseIn( inputP in, HIGH);
//  讀出脈沖時(shí)間 
distance= distance/58;
//  將脈沖時(shí)間轉(zhuǎn)化為距離(單位:厘米) 
Serial.pr intln(distance);     //輸出距離值
delay(50);
if (distance >=50)//如果距離大于 50 厘米小燈亮起 
{   digitalWrite(ledpin,HIGH);}  
else//如果距離小于 50 厘米小燈熄滅 
{
digit alWr ite(ledpin,LOW);  
} 
} 

若想獲得更多關(guān)于超聲波傳感器方面的知識(shí)請(qǐng)點(diǎn)擊:超聲波測距原理及應(yīng)用實(shí)例

  1. Arduino 控制舵機(jī)
Ert35.jpg
舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,主要是由外殼、電路板、無核心馬達(dá)、齒輪與位

置檢測器所構(gòu)成。其工作原理是由接收機(jī)或者單片機(jī)發(fā)出信號(hào)給舵機(jī),其內(nèi)部有一個(gè)基準(zhǔn)電路,產(chǎn)生周期為 20ms,寬度為 1.5ms 的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經(jīng)由電路板上的 IC 判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)無核心馬達(dá)開始轉(zhuǎn)動(dòng),透過減速齒輪將動(dòng)力傳至擺臂,同時(shí)由位置檢測器送回信號(hào),判斷是否已經(jīng)到達(dá)定位。適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過級(jí)聯(lián)減速齒輪帶動(dòng)電位器旋轉(zhuǎn),使得電壓差為 0,電機(jī)停止轉(zhuǎn)動(dòng),一般舵機(jī)旋轉(zhuǎn)的角度范圍是 0°到 180°。

舵機(jī)有很多規(guī)格,但所有的舵機(jī)都有外接三根線,分別用棕、紅、橙三種顏色進(jìn)

行區(qū)分,由于舵機(jī)品牌不同,顏色也會(huì)有所差異,棕色為接地線,紅色為電源正極線,橙色為信號(hào)線。

Ert36.jpg
舵機(jī)的轉(zhuǎn)動(dòng)的角度是通過調(diào)節(jié) PWM(脈沖寬度調(diào)制)信號(hào),就是占空比來實(shí)現(xiàn)的,標(biāo)準(zhǔn) PWM(脈沖寬度調(diào)制)信號(hào)的周期為 20ms(50Hz),理論上脈寬分布應(yīng)在 1ms到 2ms 之間,但是事實(shí)上脈寬可由 0.5ms 到 2.5ms 之間,脈寬和舵機(jī)的轉(zhuǎn)角 0°~180°相對(duì)應(yīng)。有一點(diǎn)值得注意的地方,由于舵機(jī)牌子不同,對(duì)于同一信號(hào),不同品牌的舵機(jī)旋轉(zhuǎn)的角度也會(huì)有所不同。
Ert37.jpg
用 Arduino 控制舵機(jī)的方法有兩種,一種是通過 Arduino 的普通數(shù)字傳感器接口產(chǎn)生占空比不同的方波,模擬產(chǎn)生 PWM 信號(hào)進(jìn)行舵機(jī)定位,第二種是直接利用 Arduino自帶的 S ervo 函數(shù)進(jìn)行舵機(jī)的控制,這種控制方法的優(yōu)點(diǎn)在于程序編寫簡單,缺點(diǎn)是只能控制 2 路舵機(jī),因?yàn)?Arduino 自帶函數(shù)只提供了數(shù)字 9、 10 接口的控制。Arduino的 US B 接口供電功率有限,所以當(dāng)需要控制多個(gè)舵機(jī)時(shí)需要外接電源,Arduino S ensor Shield V5.0 傳感器擴(kuò)展板已將外接電源接口留出方便用戶使用。

控制方法一 將 RB-421 舵機(jī)接在 V5.0 傳感器擴(kuò)展板的數(shù)字 7 接口上

Ert38.jpg
編寫一個(gè)程序讓舵機(jī)轉(zhuǎn)動(dòng)到用戶輸入數(shù)字所對(duì)應(yīng)的角度數(shù)的位置,并將角度值顯

示到 PC 屏幕上。

例程源程序 
int servopin=7;//定義舵機(jī)接口數(shù)字接口 7 
int myangle;/ /定義角度變量 
int pulsewidth;//定義脈寬變量 
int val; 
void servopulse(int servopin, int  myangle) 
//定義一個(gè)脈沖函數(shù) 
{ 
pulsewidth=(myangle*11)+500;  
//將角度轉(zhuǎn)化為 500-2480 的脈寬值 
digitalWrite(servopin,HIGH);  
//將舵機(jī)接口電平至高 
delayMicroseconds(pulsewidth);  
//延時(shí)脈寬值的微秒數(shù) 
digitalWrite(servopin,LOW);  
//將舵機(jī)接口電平至低 
delay(20-pulsewidt h/1000);  
} 
void setup() 
{ 
pinMode(servopin,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口 
Serial.begin(9600);//連接到串行端口,波特率為 9600 
Serial.pr intln("servu=o_seral_simp le ready" ) ; 
} 
void loop() 
//將 0 到 9 的數(shù)轉(zhuǎn)化為 0 到 180 角度,并讓 LED 閃爍相應(yīng)數(shù)的次數(shù)
{ 
val=Ser ial.read();//讀取串行端口的值 
if(val>'0'&&val<='9') 
{ 
val=val-'0';//將特征量轉(zhuǎn)化為數(shù)值變量 
val=val*(180/9); //將數(shù)字轉(zhuǎn)化為角度 
Serial.print(" moving servo to "); 
Serial.print( val,DEC);  
Serial.println(); 
for(int  i=0;i<=50; i++)  
//給予舵機(jī)足夠的時(shí)間讓它轉(zhuǎn)到指定角度
} 
servopulse(servopin,val);//引用脈沖函數(shù)
{ 
} 
} 
 
控制方法二

先具體分析一下 Arduino 自帶的 Servo 函數(shù)及其語句,來介紹一下舵機(jī)函數(shù)的幾個(gè) 常用語句吧。

  1. attach(接口)——設(shè)定舵機(jī)的接口,只有數(shù)字9或10接口可利用。
  2. wr ite(角度)——用于設(shè)定舵機(jī)旋轉(zhuǎn)角度的語句,可設(shè)定的角度范圍是0°到180°。
  3. read()——用于讀取舵機(jī)角度的語句,可理解為讀取最后一條 write()命令中的值。
  4. attached()——判斷舵機(jī)參數(shù)是否已發(fā)送到舵機(jī)所在接口。
  5. detach()——使舵機(jī)與其接口分離,該接口(數(shù)字9或10接口)可繼續(xù)被用作 PWM

接口。 注:以上語句的書寫格式均為“舵機(jī)變量名.具體語句()”例如:myservo.attach(9)。 將 RB-421 舵機(jī)接在傳感器擴(kuò)展板 V5.0 的數(shù)字 9 接口上。

Ert39.jpg

例程源代碼:

  1. include <Servo.h>

// 定 義 頭 文件 , 這 里 有一 點(diǎn) 要 注意 , 可 以 直接 在

Arduino

軟 件菜 單 欄 單擊

Sketch>Importlibrary>S ervo, 調(diào)用 Servo 函數(shù),也可以直接輸入#include <Servo.h>,但是在 輸入時(shí)要注意在#include 與<Servo.h>之間要有空格,否則編譯時(shí)會(huì)報(bào)錯(cuò)。 Servo myservo;//定義舵機(jī)變量名 void setup() { myservo.attach(9);//定義舵機(jī)接口,9或10 } void loop() { myservo.write(90);//設(shè)置舵機(jī)旋轉(zhuǎn)的角度 }

我們?cè)谧鲆粋€(gè)小實(shí)驗(yàn),便于鞏固剛才所學(xué)的知識(shí),利用旋轉(zhuǎn)電位器傳感器模塊控

制 RB-421二自由度云臺(tái)運(yùn)動(dòng)姿態(tài)。

這里我們采用上述介紹的控制方法二,相比之下在不多于兩個(gè)舵機(jī)的情況下方法

二還是不錯(cuò)的選擇。我們將 RB-421二自由度云臺(tái)接到 Arduino 的數(shù)字9和10接口。將外接電源接到傳感器擴(kuò)展板 V5.0的紅色端子處,在模擬3和4號(hào)接口接入兩個(gè)旋轉(zhuǎn)電位器傳感器模塊。

Ert40.jpg

例程源程序:

#include <Servo.h> 
S ervo myservo; 
S ervo myservo1; 
int analogP in = 3; 
int analogP in1 = 4;  
int val,val1; 
void setup() 
{ 
myservo.attach(9) ; // 9 號(hào)引腳輸出電機(jī)控制信號(hào) 
myservo1.attach(10);  
S erial.begin(9600); //僅能使用 9、10 號(hào)引腳 
} 
void loop() 
{ 
S erial.print("servo:");  
S erial.println(val);  
delay(15);  
S erial.print("servo1:");  
Serial.pr int ln(val1);  
val = analogRead(analogPin);  
val1 = analogRead(analogPin1);  
//  讀取來自可變電阻的模擬值(0 到 1023 之間) 
val = map(val, 0, 1023, 0, 179);  
//  利用“map”函數(shù)縮放該值,得到伺服電機(jī)需要的角度(0 到 180 之間) 
val1 = map(val1, 0, 1023, 0, 179);  
myservo.write(val);//  設(shè)定伺服電機(jī)的位置 
myservo1.write(val1);  
delay(15); //  等待電機(jī)旋轉(zhuǎn)到目標(biāo)角度 
} 
  1. MMA7260 三軸加速度計(jì)
Ert41.jpg
此款三軸加速度傳感器采用

Freescale(飛思卡爾)公司生產(chǎn)性價(jià)比高微型電容式加速度傳感器 MMA7260 芯片。其采用了信號(hào)調(diào)理、單級(jí)低通濾波器和溫度補(bǔ)償技術(shù),并且提供了 4 個(gè)靈敏度量程選擇的接口和休眠模式接口,該產(chǎn)品帶有低通濾波并已作零 g 補(bǔ)償,化金工藝加工,用料上乘,可靠保證,體積小、重量輕,標(biāo)識(shí)符清晰簡明,接線容易,防止接線錯(cuò)誤造成硬件損壞,可通過 7 彩跳線連接,插于 Mini 面包板上,通過 Arduino 控制器編程,是制作傾角、運(yùn)動(dòng)、姿態(tài)檢測互動(dòng)作品的理想之選。

Ert42.jpg
編寫一段程序采集三軸加速度計(jì) X、Y、Z 軸的輸出模擬值,通過 Arduino 控制器串口回傳到 PC 屏幕上顯示。

例程源代碼:

int xpin=3; 
int ypin=4; 
int zpin=5;  
int n; 
int m; 
int  i; 
void setup() 
{ 
Serial.begin(9600);  
} 
void loop() 
{ 
n=analogRead(xpin);  
m=analogRead(ypin);  
i=analogRead(zpin);  
S erial.print("x=");  
S erial.println(n);  
S erial.print("y=");  
S erial.println(m);  
S erial.print("z="); 
S erial.println(i);  
} 

更詳盡的使用方法和應(yīng)用實(shí)例,請(qǐng)參見 MMA7260 三軸加速度計(jì)使用手冊(cè)。

  1. LCD 1602 Keypad Shield v2.0
Ert43.jpg
Arduino LCD1602 字符液晶擴(kuò)展板 v2.0 主板采用全新優(yōu)質(zhì) 2 行 16 個(gè)字符液晶,不僅具有對(duì)比度調(diào)節(jié)旋鈕、背光燈選擇開關(guān),還具 4 個(gè)方向按鍵、1 個(gè)選擇按鍵和一個(gè)復(fù)位按鍵;4 個(gè)傳感器模擬接口、RB URF v1.1 超聲波傳感器接口、藍(lán)牙模塊接口、APC220無線數(shù)傳模塊通信接口、獨(dú)立擴(kuò)出更加易用方便。對(duì)Arduino 初學(xué)者來說,不必為繁瑣復(fù)雜液晶驅(qū)動(dòng)電路連線而頭疼了,這款 1602 液晶擴(kuò)展板真正意義上的將電路簡化,直接將此板插到 Arduino Duemilanove 控制器上即可,傳感器也僅需一根通用 3P 傳感器連接線連接,可輕松實(shí)現(xiàn)傳感器數(shù)據(jù)的記錄顯示。
Ert44.jpg

英文字符顯示清晰

Ert45.jpg

可制作無線藍(lán)牙超聲波測距儀

下面我們做個(gè)按鍵選擇顯示功能的實(shí)驗(yàn),需要用到的設(shè)備有 Arduino 控制器、

LCD1602 液晶擴(kuò)展板和 USB 數(shù)據(jù)線,測試?yán)淘创a:

#include <LCD4Bit_mod.h>
LCD4Bit_mod lcd = LCD4Bit_mod(2);
char msgs[5][15] = {"Right Key OK ",
"Up Key OK      ",
"Down Key OK   ",
"Left Key OK   ",
"Select Key OK" }; 
int    adc_key_val[5] ={30, 150, 360, 535, 760 };  
int NUM_KEYS = 5; 
int adc_key_in; 
int key=-1;  
int oldkey=-1;  
void setup() {
pinMode(13, OUTPUT);
lcd.init(); 
lcd.clear(); 
lcd.printIn("KEYPAD testing... pressing");
} 
void loop() { 
adc_key_in = analogRead(0);
digitalWrite(13, HIGH);
key = get_key(adc_key_in);  
if (key != oldkey)
{ 
delay(50);  
adc_key_in = analogRead(0);
key = get_key(adc_key_in);
if (key != oldkey) 
{
oldkey = key;  
if (key >=0){ 
lcd.cursorTo(2, 0);
lcd.printIn(msgs[key]);  
} 
} 
}
digitalWrite(13, LOW); 


int get_key(unsigned int input)  
{ 
int k;  
for (k = 0; k < NUM_KEYS; k++) 
{ 
if (input < adc_key_val[k])  
{
return k; 
} 
} 
if (k >= NUM_KEYS) 
k = -1;
return k; 
} 

Arduino 驅(qū)動(dòng)控制 1602 液晶屏操作視頻請(qǐng)點(diǎn)擊: http:/ /v.youku.com/v_show/id_XMTc3ODY3Mzg0.html