2010年12月19日 星期日

Arduino 筆記 – 認識 Arduino

什麼是 Arduino?它的特色為何?可以拿來做什麼應用?本文將回答這些基本的問題,帶你認識 Arduino。

分享一個 Arduino 教學心得:學習 Arduino 最好的方法,就是買張 Arduino 控制板和一些電子零件,捲起袖子實際動手做,唯有如此,才能夠真正體驗 Arduino。所以,本文不會花太多的篇幅在文字上作描述,將很快速的介紹 Arduino,讓你在最短的時間內認識 Arduino。

什麼是 Arduino

如下圖,Arduino 是一張微控制器板子(microcontroller board),大約一個手掌大。

image

使用者可以在 Arduino 板子上接上各種電子裝置,例如 LED 燈、喇叭、馬達、開關、溫濕度感測器、紅外線發射與接收器、LCD 顯示裝置,以及 Ethernet, WiFi, XBee, Bluetooth, RFID, GPS 等各種通訊模組。

若再配合撰寫一些自動控制的程式,就能利用 Arduino 做出各式各樣的自動控制應用,例如利用溫度感測器控制風扇的運轉、使用可變電阻控制燈光的明暗、控制馬達的轉速、利用紅外線遙控家電/ 利用伺服機(Servo)控制機械手臂或機器人,以及製作自走車、飛行器等等。

Arduino 的特色

簡單來說,Arduino 有下列這些特色:

  1. 開放源碼。不僅軟體是開放源碼,連硬體也是開放的。開發軟體用的 IDE 可免費下載,Arduino 的電路設計圖也可以從網路上下載。
  2. 簡單好用資源多。傳統上,要開發微控制器的程式,開發者需要具備電子電機相關科系的背景,一般人不容易進入這個世界。Arduino 進入門檻低,即便沒有電子電機相關科系的背景,也可以很容易學會使用 Arduino。再者,由於 Arduino 開放的精神,很多人都樂於分享他們的作品,所以網路上有非常多的資源。很多時候,我們只要參考網友的作品,配合自己的需求調整一下設計,就可以在短時間內完成自己的作品。
  3. 物美價廉。一張微控制器板子動輒 3000 元台幣,相較於這類微控制板子,Arduino 控制板只要 30 美元左右,可以說是俗擱大碗。
Arduino 的應用

Arduino 的應用非常多,不勝枚舉,底下只舉幾個我所知的應用:

LilyPad - 可穿戴在身上的 Arduino,這東西應該可以拿來做鋼鐵人的發光手套。

image image

 

Easy Robot 簡易機器人 - 一個很簡單的機器人自走車,網路上有完整的製作教學。

image

Robot ARM - 使用 Arduino 控制機械手臂。

image

ArduCam - 利用 Arduino 遙控相機

image

Drum Kit - 電子鼓,有了 Drum Kit,你也可以搖身一變成為一個鼓手

image

ArduCopter - 四軸直升機,哇嗚!這東西看了真是令人興奮,有錢應該買一台。

image

Home Power Monitoring - 家庭用電監測系統,利用電流感測器(Current Transducer)監測家庭用電,並且透過 Ethernet 把用電數據傳到網路上,以 Flash 圖表呈現,讓使用者透過瀏覽器就可以看到家裏的用電情形。

 

image 

Arduino 硬體規格

底下說明 2010 年最新的板子 Ardunio UNO 的硬體規格。Arduino UNO 的外觀如下:

image

硬體規格:

微控制器 ATmega328
工作電壓 5V
輸入電壓(建議) 7-12V
輸入電壓(限制) 6-20V
數位 I/O Pins 14 支(其中有 6 支腳位可提供 PWM 輸出)
類入 Input Pins 6 支
I/O pin 直流電流 40mA
3.3V pin 直流電流 50mA
Flash 記憶體 32KB, 其中 0.5KB 拿去給 bootloader 使用
SRAM 2KB
EEPROM 1KB
時脈 16MHz

數位 I/O Pins:

14 支數位 I/O Pins 可以當作 input 使用,也可以當作 output 使用,使用方法是透過 pinMode(), digitalWrite(), and digitalRead() 這幾個函式。這 14 支數位 I/O Pins,其中幾支腳有特殊的功能:

Serial 通訊 0(RX) 和 1 (TX) 這兩支腳。用來接收(RX)與傳輸(TX) TTL 訊號的序列資料。這兩支腳也連接到 USB Converter 晶片中。
外部中斷 2 和 3 這兩支腳。這兩支腳可以利用外部事件觸發中斷。詳細內容請參考 attachInterrupt() 函式。
PWM 3, 5, 6, 9, 10 和 11 共六支腳。透過 analogWrite() 函式可以提供 8-bit 的 PWM 輸出。
SPI 10 (SS), 11 (MOSI), 12 (MISO) 和 13 (SCK) 這四支腳。這四支腳搭配 SPI Library 可提供 SPI 序列通訊。
LED 13。內建一顆 LED,當 pin 腳為 HIGH 時,LED 打開,當 pin 腳為 LOW 時,LED 關閉。

類比輸入 Pins:

Arduino Uno 有 6 支類比輸入腳,標記為 A0 到 A5,每支腳都可提供 10 位元的解析 (即 1024 種不同的數值)。這些腳位所用的參考電壓預設為 0 到 5V,不過參考電壓也是可以更改的,方法是透過 AREF 腳和 analogReference() 函式。

另外,有幾支腳也有特殊功能:

I2C 4 (SDA) 和 5 (SCL) 這兩支腳。透過 Wire library 可以提供 I2C 通訊。

其它:

AREF 類比輸入的參考電壓,搭配 analogReference() 函式一起使用。
Reset 當 Reset 腳為 LOW 時,微控制器會重置。
Arduino 軟體開發環境

Arduino 的軟體開發環境是開放源碼的 IDE (Open-source IDE),可以在它的官網免費下載,它所用的程式語言語法類似於 C/C++,而且 Arduino IDE 是跨平台的,有 Windows, Macintosh OSX 和 Linux 的版本。Arduino IDE 的軟體介面如下:

image

Arduino 的程式叫作 Sketch,Sketch 意為腳本、素描、速寫或小品,因為 Arduino 程式都小小一個,不是很大,之所以取名為 Sketch,猜想大概有小品的意思。Arduino 程式主要由 setup() 和 loop() 這兩個函式組成:

因為 setup() 和 loop() 是每支 Arduino 程式都會用到的兩個函式,為了方便,Arduino IDE 已經幫大家準備好程式骨架了,我們在寫 Arduino 程式的時候,可以直接點選 File > Examples > 1.Basics > BarMinimum 這個範本檔,另存新檔後,然後再填寫 setup() 和 loop() 兩個函式的內容即可。

image

Arduino 硬體版本

Arduino 控制板 (I/O Boards)有很多種版本,我們在使用的時候,可以依據自己的需求(例如用途、尺寸、容量、I/O 腳數量等)挑選適當的板子。底下條列幾款 Arduino 控制板,更多的資訊請上 Arduino 官網查詢。

Arduino Uno
image
Arduino Mega
image
Arduino Duemilanove
image
Arduino Fio

image
Arduino Nano 3.0

image
LilyPad Arduino 02

image
Arduino Mini

image
Arduino BT (BlueTooth)

image
Arduino 擴充板 (Shields)

Shields 是擴充板,就像好像堆積木一樣,擴充板可以直接疊在 Arduino 控制板上,讓 Arduino 增加更加的能力,例如控制搖桿、通訊、記憶卡、LCD 顯示、MP3 音樂播放等等。底下條列幾款擴充板,更多的資訊請上  Arduino Shield List 網站查詢。

Ethernet Shield
提供 Ethernet 上網能力
image
MP3 Shield
提供 MP3 音樂解碼能力

image
Input Shield
提供 Joystick 搖桿、按鍵及震動馬達能力

image
TouchShield
提供 OLED 觸控螢幕顯示能力

 image
XBee Shield
提供 ZigBee 無線通訊能力

image
GPS Shield
提供 GPS 定位能力

image
WiShield
提供 Wi-Fi 上網能力

image
microSD Shield
提供 microSD 儲存媒體能力

image
AeroQuad Shield
提供三軸陀螺儀與加速計的控制

image

Smart Energy Groups SEGMeter
提供家庭與工業用電量測能力

image

參考資料

4 意見:

Jack 提到...

看到你的arduino文章非常好,但大陆无法访问blogspot,不知可否转载这系列文章到我架设的网站,出处作者和链接都给保留,不用于商用,可以的话请联系:
codesaler@hotmail.com 谢谢

Cooper Maa 提到...

可以的,沒問題,只需保留作者和鏈結即可

Jack 提到...

作者好人,我最近刚学这东西,基本入了些门,看你的文章也知道了pwm的作用,只不过是限于输出。
最近买了个灰尘传感器,输出是pwm的,对pwm的概念又模糊了,因为我想的用途都是pwm输出的,输入的还真不知道呢。你能不能扩充下之前介绍pwm的文章。谢谢

Cooper Maa 提到...

你好,我在 From Arduino to AVR 這系列有整理幾篇關於 pwm 的文章,你不妨參考看看