--- tags : DIT 12th 教學 -- 新生教學 --- <!-- {%hackmd @HungPin/Dark %} --> # Arduino  ## <font color="FFC300">什麼是 Arduino?</font> Arduino 是一塊基於開放原始代碼的 Simple i/o 平台,並且具有開放語言和開放環境都很簡單、易理解的特點,配合上一些電子元件使用,例如 LED 燈、蜂鳴器、按鍵、感測器、制動器等等,就可以讓我們快速地做出有趣的專案。Arduino 基於開放原始碼的原則,可以免費下載使用,減少開發的成本,令開發者可以創造出更多令人驚奇的互動作品。有興趣的可以到 [Arduino 官方網站](http://www.arduino.cc/) 進一步了解 Arduino 的美好之處。 ## <font color="FFC300">性能 </font> Arduino 有很多種開發版,像是 Arduino UNO、Arduino Mini 等等,每一種開發版都有自己的特色。 在這裡我們以 Arduino Mega 為例 : - **Digital I/O** : 輸入/輸出共 54 個,==其中有 15 個可以 PWM 輸出== - **Analog I/O** : 輸入 15 個,==無類比訊號輸出==。 - **通訊** : 支援 UART、I2C、SPI 等等的通訊方式。 - **內部時鐘頻率** : 16 MHz - **快閃記憶體** : 256 KB (這樣其實就很夠平常使用) - **工作電壓** : 5V ## <font color="FFC300">開發環境 </font> 那要如何開發 Arduino 板呢? 我們可以利用程式碼,經過編譯並燒錄進 Arduino 後,就可以隨心所欲的控制 Arduino 了!要同時滿足這些需求,一個最普遍的方法就是使用 [Arduiono IDE](https://www.arduino.cc/en/software),現在已經出到第二代。它提供編輯、解讀程式碼、檢查語法錯誤、燒錄程式碼等等的功能,讓你的開發流程便利不少。 ## <font color="FFC300">通訊</font> 一台 Arduino 看起來功能非常齊全,似乎可以完成很多事,為什麼我們需要通訊? 它是拿做什麼的? 有不同原因會需要使用到通訊,有可能是因為一台設備的記憶體不足,需要兩台設備的記憶體才能應付所需。但更常見的原因是為了讓**多台 Arduino 能夠互相溝通**。例如一個機器人有多個部件,而不同部件使用一個單獨的 Arduino 來控制,此時就會需要使用通訊來將他們串接起來,連接到一個控制中心,負責指揮各個部件現在該做些什麼。 ### <font color="FFC300">UART 通訊</font> 其中一種通訊方式便是 UART,它的全名是 Universal Asynchronous Receiver / Transmitter。其中它的兩個腳位分別叫 Receiver, Transmitter,簡稱RX, TX。從名字來看,一個腳位負責接收,一個腳位負責傳送。也因此,兩台機器在使用 UART 通訊時,必須 ==RX-TX 交錯連接==,訊號才能正確傳遞。 ## <font color="FFC300">[PWM](https://en.wikipedia.org/wiki/Pulse-width_modulation) 介紹</font> 一般來說訊號分為 **數位**、**類比** 兩種訊號。 - **數位訊號** (Digital) :==由 1、0 組成==,在 Arduino 當中就是高電位 (5V / 3.3V),還有低電位 (0V)。 - **類比訊號** (Analog) : 與只有 1、0 的數位訊號不同,類比訊號可以為==連續值==,而且可能會有非整數出現,但是 在 Arduino mega 中並沒有類比輸出 ( Analog output ) 的功能。  Pulse Width Modulation (脈衝寬度調變) 是一種利用數位訊號模擬類比訊號的方式。以極快的速度在 1 與 0 之間做開關切換,藉由這種數位訊號高頻率的切換,並調整開關的時間比例,就可以模擬出我們需要的類比訊號。 這個開與關的比例有個專有名詞來描述它:==**工作週期( Duty Cycle )**==。其計算方式為**高電位持續時長/週期時長**。舉例來說,下面那張圖的 Duty Cycle 為 3/4 = 75% <img src="https://hackmd.io/_uploads/S1KR8BE6n.png" alt="drawing" width="300"/>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up