2015年2月25日 星期三

要學習 Arduino 之前,首先得要有一塊板子(無誤),以及到 Arduino 官網下載區下載其 IDE 與 driver,Ubuntu 的話可以直接在軟體中心內下載 package 。

板子介紹

在這邊以 motoduino 這塊板子當範例來介紹(MIT 的),因為他比原生的 Arduino 還多了控制馬達的模組,所以取名為 motoduino 。
motoduino 正面


motoduino 背面
由正面來看,底下有 16 根 pin 腳,分別標示 0~15 ,這部分是數位接腳,可以在背面的圖看到,14 旁邊有個 GND 表示接地(負極),其中 13 號為測試用接腳,有加裝電阻使其輸出電壓為 3V ,可以直接接 LED 燈來測試,其他有 PWD 字樣的輸出為 5V ,要接 LED 燈得要自行加裝電阻以避免 LED 燒掉(可搭配麵包板使用,方便組裝測試)。

正面左邊那幾個綠色的是馬達的接腳,上方左側那排六個的為類比接腳,右上方為電源輸入,右下方為 USB 接孔(若以 USB 連接電腦時可不用接電源)。

IDE 介紹


當打開 IDE 後,有幾個地方要注意的。



Arduino IDE 介面

第一個是在 File→Example 裡面,有一些先寫好的如何操作的範例小程式讓你用。




第二個是在 Tools→Board 裡面,這裡是已知的 Arduino 處理器型號的列表,這邊會根據你所使用的板子而不同。這次所選用的 motoduino 要選擇「Arduino Nano w/ ATmega328」

另外還有兩個非常重要的功能要介紹的,在 IDE 最左側有兩個小按鈕,左邊打勾樣式的是驗證/編譯,右邊的是上傳至板子。

Verify/Compile 驗證/編譯
Upload 上傳
底下是他們在選單中的位置。

Verify/Compile 驗證/編譯


Upload上傳

程式部分


Blink 範例


相較於其他程式語言都會有所謂的「Hello World!」來當初心者的第一支程式,Arduino 則是使用 Example→Analog→Blink 做為第一支程式,範例程式碼
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */   // Pin 13 has an LED connected on most Arduino boards: int led = 13;   void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); }   void loop() { digitalWrite(led, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(led, LOW); // set the LED off delay(1000); // wait for a second }



底下將針對這個範例程式做說明。
  • 第 1~6 行的 /* */ ,稱為多行註解,放置在此區段內的內容均會被視為註釋,在編譯時會略過。
  • 第 8 行的 // ,稱為單行註解,該行放置於此記號之後的視為註釋,編譯時略過。
  • 第 9 行的 int led = 13; ,這行包括兩部分:第一個是 int led ,這部分稱為宣告(declare),目的是告訴程式說,我現在定義了一個叫 led 的變數,而他的型別為整數 int ,任何變數均需先宣告後才能使用;第二個是 led = 13 ,這部分稱為賦值(assign),目的是將 13 這個值放入剛剛所宣告的 led 容器中。
  • 第 11~14 行,這一個區塊稱為一個函式(function),他由四個部分所組成:
    • 回傳值(return value):此處為 void ,意思為不需要回傳任何值 。
    • 函式名(function name):此處為 setup ,定義一個函式的名字。
    • 參數(arguments):為 ( ) 所夾住的部分,此處為空表示這個函式不需要參數。
    • 函式內容(content):為 { } 所夾住的部分,在裡面均為此函式的內容,也就是呼叫此函式時會執行的命令。
  • 第 13 行的 pinMode(led, OUTPUT); ,對 led 這個數位 pin 腳做初始,並決定他是要接收/發送(INPUT/OUTPUT)訊號。
  • 第 17 、 19 行的 digitalWrite(led, HIGH/LOW); ,由於第 13 行的設定為 INPUT ,所以這邊所使用的函式為digitalWrite,而 HIGH/LOW 則代表為高/低電位。
  • 第 18 、 20 行的 delay(1000); ,表示休息一段時間,其單位為毫秒(milliseconds),故此兩行代表休息 1 秒。
而每個 Arduino 程式都會有兩個函式,setup 與 loop ,這兩個函式均為無回傳值與無參數型態,而 Arduino 在啟動的時候,會先去呼叫 setup 一次,接著持續的呼叫 loop 到結束。

程式雜談

  • 命名規則:
    • 變數或函式的名稱只能由數字(0-9)、大小寫英文(a-z 與 A-Z)與下底線(_)組成,且第一個字不可為數字
    • 看此範例其命名與寫作規則與 Java 的規範頗相似,變數名稱採用駝峰式命名法
    • ,而 class 名稱則使用帕斯卡命名法
  • 括號位置及縮排格式:這部分其實是各說各話,我個人認為是整個專案統一即可,如果說是自己開發的話,選一個你喜歡的就好,不過要記得的是,程式語言是人在看的,所以不要找自己麻煩。

本日實作項目

  • 在 10 號 pin 腳接上電阻及另一個 LED 燈,讓他與 13 號 pin 腳的 LED 燈可以交替的閃爍,結果程式
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */   // Pin 13 has an LED connected on most Arduino boards: int led1 = 13; // Pin 10 has an LED connected on most Arduino boards: int led2 = 10;   void setup() { // initialize the digital pin as an output. pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); }   void loop() { digitalWrite(led1, HIGH); // set the LED1 on digitalWrite(led2, LOW); // set the LED2 off delay(1000); // wait for a second digitalWrite(led1, LOW); // set the LED1 off digitalWrite(led2, HIGH); // set the LED2 on delay(1000); // wait for a second }
底下為這次的主角。

可以看到這個繼電器的型號是 LUZ-5 ,可搜尋「LUZ-5 data sheet」,找到他的基本資料。翻到第二頁可以看到 LUZ-serial 的圖以及內部線路,將底下的部分分別接上 Arduino 的 10 、 14 號 pin 腳,如此可利用 Arduino 是否供電來控制上方連接的方向,而為了達到一開始不要接通電源的想法,所以電源的部分一開始接在內側,而另一端接在右下角側。 

如此一來當執行到 digitalWrite(led2, HIGH); 時,形成通路讓家電啟動,而執行到 digitalWrite(led2, LOW);時,形成斷路讓家電停止。
  • 請勿拿來控制需要時間開關機的家電,以免造成機械損壞。
  • 此範例用的是機械式繼電器,delay 的時間不要太短,以免使繼電器受損。

沒有留言:

張貼留言