“(RB-13K024)基于Arduino電子積木套件”的版本間的差異

來自ALSROBOT WiKi
跳轉至: 導航、 搜索
 
第5行: 第5行:
 
: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ù)==
+
==Arduino技術參數(shù)==
 
#  微控制器核心:AVRmega168-20PU(處理速度可達 20MIPS)  
 
#  微控制器核心:AVRmega168-20PU(處理速度可達 20MIPS)  
 
#  工作電壓:+5V  
 
#  工作電壓:+5V  
第21行: 第21行:
 
#  支持插針  
 
#  支持插針  
  
?
==Arduino 下 載軟 件及開發(fā) 環(huán)境 ==
+
==Arduino下載軟件及開發(fā)環(huán)境 ==
 
# 軟件下載  
 
# 軟件下載  
 
   官方軟件下載地址:http://arduino.cc/en/Main/Software
 
   官方軟件下載地址:http://arduino.cc/en/Main/Software
第71行: 第71行:
 
(9)Serial.print (數(shù)據(jù),數(shù)據(jù)的進制)——從串行端口輸出數(shù)據(jù)。Serial.print(數(shù)據(jù))默認為十進制等于 Serial.print(數(shù)據(jù),DEC)。  
 
(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()一樣。
 
(10)S erial.println(數(shù)據(jù),數(shù)據(jù)的進制)——從串行端口輸出數(shù)據(jù),跟隨一個回車和一個換行符。這個函數(shù)所取得的值與  Serial.print()一樣。
?
==Arduino 應 用基 礎 篇==
+
==Arduino應用基礎篇==
 
:一般傳感器為三線制即 VCC、GND、信號(+、-、S),Arduino Sensor Shield V5.0傳感器擴展板將 Arduino  Duemilanove  2009 控制器的全部數(shù)字與模擬接口以舵機線序形式擴展出來,還特設 IIC 接口、32 路舵機控制器接口、藍牙模塊通信接口、SD 卡模塊通信接口、APC220 無線射頻模塊通信接口、RB URF v1.1 超聲波傳感器接口、12864液晶串行與并行接口。  
 
:一般傳感器為三線制即 VCC、GND、信號(+、-、S),Arduino Sensor Shield V5.0傳感器擴展板將 Arduino  Duemilanove  2009 控制器的全部數(shù)字與模擬接口以舵機線序形式擴展出來,還特設 IIC 接口、32 路舵機控制器接口、藍牙模塊通信接口、SD 卡模塊通信接口、APC220 無線射頻模塊通信接口、RB URF v1.1 超聲波傳感器接口、12864液晶串行與并行接口。  
 
[[文件:ert11.jpg|500px|有框|居中]]
 
[[文件:ert11.jpg|500px|有框|居中]]

2015年6月12日 (五) 17:14的最后版本


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ù)

  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. 軟件及硬件驅動安裝
 軟件是綠色版本,軟件解壓縮后即可使用。 
Ert2.jpg
  1. 軟件解壓完成后,接下來要安裝 Arduino 硬件驅動。
  2. 現(xiàn)將 Arduino 上的方頭 USB 連接好之后,另外一端的 USB 連接好計算機任意一個US B 接口。


Ert3.jpg

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

Ert4.jpg

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

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

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

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

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

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

Arduino 基 本語 言概述

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

(1)聲明變量及接口名稱(int val; int ledPin=13;)。 (2)setup()——函數(shù)在程序開始時使用,可以初始化變量、接口模式、啟用庫等 (例如:pinMode(ledPin,OUTUPT);)。 (3)loop()——在 setup()函數(shù)之后,即初始化之后,loop() 讓你的程序循環(huán)地被執(zhí)行,使用它來運轉 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ù)字轉換,這個方法將輸入的 0-5 電壓值轉換為 0 到 1023 間的整數(shù)值。 (6)delay()——延時一段時間,delay(1000)為一秒。 (7)Serial.begin(波特率)——設置串行每秒傳輸數(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應用基礎篇

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

接口示意圖如下:

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

按壓式大按鈕模塊

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

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

Ert14.jpg
蜂鳴器是一種一體化結構的電子訊響器,采用直流電源供電,廣泛應用于計算機、

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

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

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

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

平變化,左邊傳感器內有鋼珠適合檢測較小幅度的震動,右側傳感器內有彈簧適合測 量較大震動幅度的震動。 磁感應傳感器模塊

Ert17.jpg
磁感應傳感器的主要構成的材料來自于干簧管。干簧管是一種磁敏的特殊開關。

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

Ert18.jpg
Mini

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

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

數(shù)字繼電器模塊

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

人體紅外熱釋電傳感器

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

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

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

功能。

Ert22.jpg
蜂鳴器發(fā)聲模塊接數(shù)字接口7,大按鈕模塊接數(shù)字接口11,當大按鈕按下蜂鳴器鳴響,這里大按鈕模塊為輸入設備,蜂鳴器模塊為輸出設備。
例程源代碼: 
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 接口,當震動傳感器感測

到有震動信號時,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)//當震動傳感器檢測有信號時,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) 
//當紅外熱釋電傳感器檢測有信號時,LED  亮起 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digit alWr ite(Led,HIGH);  
} 
} 
綜上所述,數(shù)字傳感器模塊使用方法比較簡單,一般都是輸出高低電平數(shù)字量信

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

  1. 常用模擬傳感器

旋轉角度傳感器模塊

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

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

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

F SR 壓力傳感器

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

綜合應用實例

例程一:使用火焰?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);//設定波特率為 9600 
} 
void loop() 
{ 

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

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

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

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

Ert30.jpg

首先看一下 Force Sensing Resistor 壓力感應電阻的使用方法

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);//設定波特率為 9600
} 
void loop() 
{ 
val=analogRead(FSR);//度取壓力傳感器的模擬值并將其賦給變量 val 
analogWrit e(led,val);//將 val 的值賦給 LED 接口 
Serial.pr intln(val);打印 val 的模擬值 
}

Arduino 應 用高 級 篇

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

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

Ert34.jpg
Arduino 與超聲波傳感器搭建電路進行測距實驗。Arduino Sensor Shield V5.0 傳感器擴展板設有超聲波接口可直接接插使用,對應發(fā)射和接收接口分別為模擬 0和模擬1,即數(shù)字 14 和數(shù)字 15 接口(模擬接口 0-5 可代替數(shù)字接口使用接口號對應數(shù)字 14-19)。
編一個簡單的測距程序,在 13 接口接一個小燈,使其當測得距離大于 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;
//  將脈沖時間轉化為距離(單位:厘米) 
Serial.pr intln(distance);     //輸出距離值
delay(50);
if (distance >=50)//如果距離大于 50 厘米小燈亮起 
{   digitalWrite(ledpin,HIGH);}  
else//如果距離小于 50 厘米小燈熄滅 
{
digit alWr ite(ledpin,LOW);  
} 
} 

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

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

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

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

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

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

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

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

示到 PC 屏幕上。

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

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

  1. attach(接口)——設定舵機的接口,只有數(shù)字9或10接口可利用。
  2. wr ite(角度)——用于設定舵機旋轉角度的語句,可設定的角度范圍是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, 調用 Servo 函數(shù),也可以直接輸入#include <Servo.h>,但是在 輸入時要注意在#include 與<Servo.h>之間要有空格,否則編譯時會報錯。 Servo myservo;//定義舵機變量名 void setup() { myservo.attach(9);//定義舵機接口,9或10 } void loop() { myservo.write(90);//設置舵機旋轉的角度 }

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

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

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

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

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);//  設定伺服電機的位置 
myservo1.write(val1);  
delay(15); //  等待電機旋轉到目標角度 
} 
  1. MMA7260 三軸加速度計
Ert41.jpg
此款三軸加速度傳感器采用

Freescale(飛思卡爾)公司生產性價比高微型電容式加速度傳感器 MMA7260 芯片。其采用了信號調理、單級低通濾波器和溫度補償技術,并且提供了 4 個靈敏度量程選擇的接口和休眠模式接口,該產品帶有低通濾波并已作零 g 補償,化金工藝加工,用料上乘,可靠保證,體積小、重量輕,標識符清晰簡明,接線容易,防止接線錯誤造成硬件損壞,可通過 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);  
} 

更詳盡的使用方法和應用實例,請參見 MMA7260 三軸加速度計使用手冊。

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

英文字符顯示清晰

Ert45.jpg

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

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

LCD1602 液晶擴展板和 USB 數(shù)據(jù)線,測試例程源代碼:

#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 驅動控制 1602 液晶屏操作視頻請點擊: http:/ /v.youku.com/v_show/id_XMTc3ODY3Mzg0.html