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

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


Ert1.jpg

目錄

概述

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

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


Ert3.jpg

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

Ert4.jpg

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

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

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

  1. Arduino 編譯下載軟件使用說(shuō)明

打開(kāi)軟件只需執(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è)置完畢就可以編寫(xiě)程序了。
Ert9.jpg
Ert10.jpg

Arduino 基 本語(yǔ) 言概述

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

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

  1. Arduino 常用編程語(yǔ)言

(1)pinMode(接口名稱(chēng),OUTPUT 或 INP UT)將——接口定義為輸入或輸出接口, 用在 setup()函數(shù)里。 (2)digitalWrite(接口名稱(chēng),HIGH 或 LOW)——將數(shù)字接口值至高或低。 (3)digitalRead(接口名稱(chēng))——讀出數(shù)字接口的值。 (4)analogWrit e(接口名稱(chēng), 數(shù)值)——給一個(gè)接口寫(xiě)入模擬值(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(接口名稱(chēng))——從指定的模擬接口讀取值,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è)回車(chē)和一個(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ò)展出來(lái),還特設(shè) IIC 接口、32 路舵機(jī)控制器接口、藍(lán)牙模塊通信接口、SD 卡模塊通信接口、APC220 無(wú)線射頻模塊通信接口、RB URF v1.1 超聲波傳感器接口、12864液晶串行與并行接口。
Ert11.jpg

接口示意圖如下:

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

按壓式大按鈕模塊

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

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

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

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

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

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

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

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

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

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

Ert18.jpg
Mini

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

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

數(shù)字繼電器模塊

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

人體紅外熱釋電傳感器

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

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

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

到有震動(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)傳感器檢測(cè)有信號(hào)時(shí),LED  閃爍 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digitalWrite(Led,HIGH); 
} 
} 


例程三:將紅外熱釋電傳感器信號(hào)接口通過(guò)連接線插到數(shù)字7接口上,搭建簡(jiǎn)單電路,檢測(cè)到人體或動(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)紅外熱釋電傳感器檢測(cè)有信號(hào)時(shí),LED  亮起 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digit alWr ite(Led,HIGH);  
} 
} 
綜上所述,數(shù)字傳感器模塊使用方法比較簡(jiǎn)單,一般都是輸出高低電平數(shù)字量信

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

  1. 常用模擬傳感器

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

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

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

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

F SR 壓力傳感器

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

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

例程一:使用火焰?zhèn)鞲衅骱头澍Q器模塊搭建一個(gè)簡(jiǎn)單電路,制作火焰報(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);/ /輸出模擬值,并將其打印出來(lái) 
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
例程二:壓力大小測(cè)試儀的制作,使用壓力感測(cè)電阻控制 LED 亮滅程度,并將反

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

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

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

Ert30.jpg

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

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

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

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

Ert34.jpg
Arduino 與超聲波傳感器搭建電路進(jìn)行測(cè)距實(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è)簡(jiǎn)單的測(cè)距程序,在 13 接口接一個(gè)小燈,使其當(dāng)測(cè)得距離大于 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)擊:超聲波測(cè)距原理及應(yīng)用實(shí)例

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

置檢測(cè)器所構(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)無(wú)核心馬達(dá)開(kāi)始轉(zhuǎn)動(dòng),透過(guò)減速齒輪將動(dòng)力傳至擺臂,同時(shí)由位置檢測(cè)器送回信號(hào),判斷是否已經(jīng)到達(dá)定位。適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過(guò)級(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)的角度是通過(guò)調(diào)節(jié) PWM(脈沖寬度調(diào)制)信號(hào),就是占空比來(lái)實(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ī)的方法有兩種,一種是通過(guò) Arduino 的普通數(shù)字傳感器接口產(chǎn)生占空比不同的方波,模擬產(chǎn)生 PWM 信號(hào)進(jìn)行舵機(jī)定位,第二種是直接利用 Arduino自帶的 S ervo 函數(shù)進(jìn)行舵機(jī)的控制,這種控制方法的優(yōu)點(diǎn)在于程序編寫(xiě)簡(jiǎ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ò)展板已將外接電源接口留出方便用戶(hù)使用。

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

Ert38.jpg
編寫(xiě)一個(gè)程序讓舵機(jī)轉(zhuǎn)動(dòng)到用戶(hù)輸入數(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ù)及其語(yǔ)句,來(lái)介紹一下舵機(jī)函數(shù)的幾個(gè) 常用語(yǔ)句吧。

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

接口。 注:以上語(yǔ)句的書(shū)寫(xiě)格式均為“舵機(jī)變量名.具體語(yǔ)句()”例如: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);  
//  讀取來(lái)自可變電阻的模擬值(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)性?xún)r(jià)比高微型電容式加速度傳感器 MMA7260 芯片。其采用了信號(hào)調(diào)理、單級(jí)低通濾波器和溫度補(bǔ)償技術(shù),并且提供了 4 個(gè)靈敏度量程選擇的接口和休眠模式接口,該產(chǎn)品帶有低通濾波并已作零 g 補(bǔ)償,化金工藝加工,用料上乘,可靠保證,體積小、重量輕,標(biāo)識(shí)符清晰簡(jiǎn)明,接線容易,防止接線錯(cuò)誤造成硬件損壞,可通過(guò) 7 彩跳線連接,插于 Mini 面包板上,通過(guò) Arduino 控制器編程,是制作傾角、運(yùn)動(dòng)、姿態(tài)檢測(cè)互動(dòng)作品的理想之選。

Ert42.jpg
編寫(xiě)一段程序采集三軸加速度計(jì) X、Y、Z 軸的輸出模擬值,通過(guò) 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)參見(jiàn) 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é)旋鈕、背光燈選擇開(kāi)關(guān),還具 4 個(gè)方向按鍵、1 個(gè)選擇按鍵和一個(gè)復(fù)位按鍵;4 個(gè)傳感器模擬接口、RB URF v1.1 超聲波傳感器接口、藍(lán)牙模塊接口、APC220無(wú)線數(shù)傳模塊通信接口、獨(dú)立擴(kuò)出更加易用方便。對(duì)Arduino 初學(xué)者來(lái)說(shuō),不必為繁瑣復(fù)雜液晶驅(qū)動(dòng)電路連線而頭疼了,這款 1602 液晶擴(kuò)展板真正意義上的將電路簡(jiǎn)化,直接將此板插到 Arduino Duemilanove 控制器上即可,傳感器也僅需一根通用 3P 傳感器連接線連接,可輕松實(shí)現(xiàn)傳感器數(shù)據(jù)的記錄顯示。
Ert44.jpg

英文字符顯示清晰

Ert45.jpg

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

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

LCD1602 液晶擴(kuò)展板和 USB 數(shù)據(jù)線,測(cè)試?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