(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 等軟件,作出互動作品。 Arduino 可以使用開發(fā)完成的電子元件例如 Switch 或 sensors 或其他控制器、LED、步進馬達或其他輸出裝置。Arduino 也可以獨立運作成為一個可以跟軟件溝的接口,例如說:flash processing Max/MSP VVVV 或其他互動軟件。Arduino 開發(fā) IDE 接口基于開放源代碼,可以讓您免費下載使用開發(fā)出更多令人驚艷的互動作品。
Arduino 可以使用開發(fā)完成的電子元件例如 Switch 或 sensors 或其他控制器、LED、步進馬達或其他輸出裝置。Arduino 也可以獨立運作成為一個可以跟軟件溝的接口,例如說:flash processing Max/MSP VVVV 或其他互動軟件。Arduino 開發(fā) IDE 接口基于開放源代碼,可以讓您免費下載使用開發(fā)出更多令人驚艷的互動作品。

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

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

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

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


Ert3.jpg

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

Ert4.jpg

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

Ert5.jpg
點擊瀏覽,找到 Arduino 軟件所在位置的 drivers

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

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

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

Ert6.jpg
在輸入程序前需要先選擇板號和 COM 口,COM 口號可以在我的電腦右鍵管理里設(shè)備管理器里看到,實例中 COM 口為 COM13。
Ert7.jpg
板號的選擇就需要您根據(jù)您自己Arduino的型號選擇,實例中使用的為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語言,但其實用性要遠高于C語言,主要由于它將一些常用語句組合函數(shù)化,例如:延時函數(shù) delay( 1000)即為一秒。
  1. Arduino 程序基本架構(gòu)

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

  1. Arduino 常用編程語言

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

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

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

接口示意圖如下:

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

按壓式大按鈕模塊

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

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

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

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

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

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

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

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

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

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

Ert18.jpg
Mini

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

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

數(shù)字繼電器模塊

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

人體紅外熱釋電傳感器

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

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

例程一:用按壓式大按鈕模塊和蜂鳴器發(fā)聲模塊搭建簡單電路,實現(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);  
} 
} 
例程二:震動模塊和數(shù)字 13 接口自帶 LED 搭建簡單電路,制作震動閃光器。
Ert23.jpg
利用數(shù)字 13 接口自帶的 LED,將震動傳感器接入數(shù)字 7 接口,當(dāng)震動傳感器感測

到有震動信號時,LED 閃爍發(fā)光。

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


例程三:將紅外熱釋電傳感器信號接口通過連接線插到數(shù)字7接口上,搭建簡單電路,檢測到人體或動物身上發(fā)出的紅外線時,控制器自帶數(shù)字 13 接口 LED 燈點亮。
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)紅外熱釋電傳感器檢測有信號時,LED  亮起 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digit alWr ite(Led,HIGH);  
} 
} 
綜上所述,數(shù)字傳感器模塊使用方法比較簡單,一般都是輸出高低電平數(shù)字量信

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

  1. 常用模擬傳感器

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

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

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

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

F SR 壓力傳感器

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

綜合應(yīng)用實例

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

取模擬值并在 PC 機上顯示。蜂鳴器發(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  時蜂鳴器鳴響 
{ 
digitalWrite(Beep,LOW); 
} 
else 
{ 
digitalWrite(Beep,HIGH);  
} 
}
演示視頻地址請點擊: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) 用高 級 篇

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

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

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

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

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

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

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

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

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

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

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

示到 PC 屏幕上。

例程源程序 
int servopin=7;//定義舵機接口數(shù)字接口 7 
int myangle;/ /定義角度變量 
int pulsewidth;//定義脈寬變量 
int val; 
void servopulse(int servopin, int  myangle) 
//定義一個脈沖函數(shù) 
{ 
pulsewidth=(myangle*11)+500;  
//將角度轉(zhuǎn)化為 500-2480 的脈寬值 
digitalWrite(servopin,HIGH);  
//將舵機接口電平至高 
delayMicroseconds(pulsewidth);  
//延時脈寬值的微秒數(shù) 
digitalWrite(servopin,LOW);  
//將舵機接口電平至低 
delay(20-pulsewidt h/1000);  
} 
void setup() 
{ 
pinMode(servopin,OUTPUT);//設(shè)定舵機接口為輸出接口 
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++)  
//給予舵機足夠的時間讓它轉(zhuǎn)到指定角度
} 
servopulse(servopin,val);//引用脈沖函數(shù)
{ 
} 
} 
 
控制方法二

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

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

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

Ert39.jpg

例程源代碼:

  1. include <Servo.h>

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

Arduino

軟 件菜 單 欄 單擊

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

我們在做一個小實驗,便于鞏固剛才所學(xué)的知識,利用旋轉(zhuǎn)電位器傳感器模塊控

制 RB-421二自由度云臺運動姿態(tài)。

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

二還是不錯的選擇。我們將 RB-421二自由度云臺接到 Arduino 的數(shù)字9和10接口。將外接電源接到傳感器擴展板 V5.0的紅色端子處,在模擬3和4號接口接入兩個旋轉(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 號引腳輸出電機控制信號 
myservo1.attach(10);  
S erial.begin(9600); //僅能使用 9、10 號引腳 
} 
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ù)縮放該值,得到伺服電機需要的角度(0 到 180 之間) 
val1 = map(val1, 0, 1023, 0, 179);  
myservo.write(val);//  設(shè)定伺服電機的位置 
myservo1.write(val1);  
delay(15); //  等待電機旋轉(zhuǎn)到目標(biāo)角度 
} 
  1. MMA7260 三軸加速度計
Ert41.jpg
此款三軸加速度傳感器采用

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

Ert42.jpg
編寫一段程序采集三軸加速度計 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)用實例,請參見 MMA7260 三軸加速度計使用手冊。

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

英文字符顯示清晰

Ert45.jpg

可制作無線藍牙超聲波測距儀

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

LCD1602 液晶擴展板和 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ū)動控制 1602 液晶屏操作視頻請點擊: http:/ /v.youku.com/v_show/id_XMTc3ODY3Mzg0.html