要學習 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
的時間不要太短,以免使繼電器受損。
沒有留言:
張貼留言