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 的時間不要太短,以免使繼電器受損。

本日用到器材

可變電阻
開關(正面)
開關(背面)
特別注意到開關的背面,有兩條平行線,在此線連接的兩個點是通路。

名詞

PWM(Pulse Width Modulation)--一種以數位方式來達到類比輸出的技術,一般 Arduino 板子其 digital 的 3、5、6、9、10 以及 11 接腳均是,詳情請見官網

程式部分

Fade 範例

程式碼可由 File -> Examples -> Basics -> Fade 找到。之前說明過的部分會省略掉,麻煩自己看之前的筆記,謝謝。
    /**
     * SyntaxHighlighter
     */
    function foo()
    {
        if (counter <= 10)
            return;
        // it works!
    }
/*
 Fade
 
 This example shows how to fade an LED on pin 9
 using the analogWrite() function.
 
 This example code is in the public domain.
 */
 
int led = 9;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by
 
// the setup routine runs once when you press reset:
void setup()  { 
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
} 
 
// the loop routine runs over and over again forever:
void loop()  { 
  // set the brightness of pin 9:
  analogWrite(led, brightness);    
 
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
 
  // reverse the direction of the fading at the ends of the fade: 
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  // wait for 30 milliseconds to see the dimming effect    
  delay(30);
}
說明:
  • 第 23 行 analogWrite(led, brightness); :將 brightness 的值以 analogWrite 的方式寫入 9 號接腳(pwm)。
  • 第 26 行 brightness = brightness + fadeAmount; :先看等號右手邊的部分,這是將原本的 brightness 的值加上 fadeAmount 後,然後再將值賦與左手邊的 brightness 。
  • 第 29~31 行:此處包含一個判斷區塊,底下拆分說明。
    • 第 29 行 if (brightness == 0 || brightness == 255) : 此為 if 判斷式,如果在 () 為真,則會執行 {}內的內容,通常會與 else 搭配,不過此範例中 else 的內容為空,所以沒有寫出來。
      () 中的 brightness == 0 代表判斷 brightness 是否為 0 ,是的話為 true,否則為 false
      而連結兩個判斷式的 「||」 為邏輯語法的 or(或)語句,代表前或後其中一個對即成立。同為邏輯語法的還有 「&&」 ,代表 and(且)語句,前後均需為 true 才會返回 true 。還有 「!」 代表 not(否定),也就是原本為 true 會變成 false ,而原本為 false 的會變為 true 。兩者的關係如下表:
      ||TF
      TTT
      FTF
      &&TF
      TTF
      FFF
    • 第 30 行 fadeAmount = -fadeAmount; :目的是將 fadeAmount 變號(負變正,正變負)。
  • 由整個 loop 的內容來看,此函式區塊會每 30 毫秒(millisecond)執行一次,一開始的 brightness 為 0 ,之後每次遞增 5fadeAmount的值),一直到 brightness 的值為 255 ,此時 fadeAmount 會被改為 -5 ,所經過第 26 行的時候, brightness 的值會一直遞減,直到 0 為止,此時又會將 fadeAmount 設為 5 ,如此一來, LED 燈就會達到漸亮→漸暗→漸亮的效果。
注意:此範例雖然是接在 digital 端的接腳,但是因為有使用到 pwm 的功能,所以在寫入時需以 analogWrite 來設定值才可達到我們要的功能,如果說使用 digitalWrite 的話,只會看到 LED 燈突然點亮,又突然變暗的效果。
程式執行結果:


Digital Read 範例

程式碼的部分可以由 File -> Examples -> Basics -> DigitalReadSerial 找到。
/* DigitalReadSerial Reads a digital input on pin 2, prints the result to the serial monitor This example code is in the public domain. */   // digital pin 2 has a pushbutton attached to it. Give it a name: int pushButton = 2;   // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(pushButton, INPUT); }   // the loop routine runs over and over again forever: void loop() { // read the input pin: int buttonState = digitalRead(pushButton); // print out the state of the button: Serial.println(buttonState); delay(1); // delay in between reads for stability }
而接線方法如下:

說明:

  • 第 14 行 Serial.begin(9600); :設定傳送資料的速率,常用的速度為 9600 bits/secs ,詳細資料請自行查閱官網。
  • 第 22 行 int buttonState = digitalRead(pushButton); :將 pushButton 的資料讀進來,並放入變數buttonState 中。
  • 第 24 行 Serial.println(buttonState); :將資料由 serial port 印出,而與 Serial.print() 的不同是,他會自動幫你在每一個輸出後面加上換行符號,以利閱讀。
此範例需要開啟 Serial Monitor ,可以在 Tools -> Serial Monitor 中找到。 
Serial Monitor
修改:增加讓開關成為一個控制項,讓 Arduino 利用讀入的數據來控制 LED 燈的明滅,修改後的程式
/* DigitalReadSerial Reads a digital input on pin 2, prints the result to the serial monitor This example code is in the public domain. */   // digital pin 2 has a pushbutton attached to it. Give it a name: int pushButton = 2; const int LED = 13;   // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(pushButton, INPUT); // make the LED's pin an output: pinMode(LED, OUTPUT); }   // the loop routine runs over and over again forever: void loop() { // read the input pin: int buttonState = digitalRead(pushButton); // print out the state of the button: Serial.println(buttonState); // check the value of buttonState and trun on/off the LED: if (buttonState == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } delay(1); // delay in between reads for stability }
接線方式如下:
說明:
  • 第 10 行 const int LED = 13; :其中的 const 為修飾此 LED 為一常數,故賦值之後不可再修改,通常會於宣告時一起賦值。
  • 由原本的例子可以得到按下去的結果為 1 ,放開的結果為 0
修改後的執行結果:

Analog Read 範例

程式碼可以在 File -> Examples -> Basics -> AnalogReadSerial 中找到。
/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor. Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. */   // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); }   // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(1); // delay in between reads for stability }
而接線方法如下:

說明:

  • 第 18 行 int sensorValue = analogRead(A0); :將 A0 的值以 analogRead 的方式讀入,並紀錄在變數sensorValue 中。
修改:調節可變電阻,並依讀入的數據以 Arduino 來控制 LED 的亮度,修改後的程式
/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor. Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. */ const int LED = 11; // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the LED's pin an OUTPUT pinMode(LED, OUTPUT); }   // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: int mappedValue = map(sensorValue, 0, 1023, 0, 255); analogWrite(LED, mappedValue); Serial.println(sensorValue); delay(1); // delay in between reads for stability }
接線方式如下,因怕 LED 會燒掉,所以還多加一顆 10KΩ 的電阻做保護。
說明:
  • 由原本的例子可以得到,所取得的 sensorValue 會落在 0 ~ 1023 之間。
  • 第 22 行的 int mappedValue = map(sensorValue, 0, 1023, 0, 255); :因為使用 analogWrite 時,其值得落在 0 ~ 255 之間,但所取得的值明顯超出,故以一 map 函式將值轉換到我們要的區間之內,其傳入的參數第一個為原本的值,第二、三個參數為原本的最小、最大值,第四、第五個參數為目標的最小、最大值。
修改後的執行結果:

2015年2月9日 星期一

盆栽守護神-(arduino 溫濕度感測應用)

盆栽守護神

來自 http://www.makezine.com.tw/make2599131456/110
 為你最愛的植物們打造一個數位守護神吧!只要使用Arduino開發板和一些價格不貴的感測器,就可以讓植物們處在最「快樂」適當的濕度、溫度與光照線環境中喔!

最簡易版單的盆栽守護神其實就是會感測植物所處環境受的的照明度、土壤濕度和氣溫,將讀數透過USB回傳到,並顯示器到電腦螢幕上。我們將從最簡單的顯示監視器開始,再慢慢接觸更進階的設計,比如納入LED、甚至液晶顯示(LCD)等等,這些都可以透過Arduino來完成,不過我們得先學一點Arduino和電子設備的知識。


所有電子零件都可以在Radio Shack網頁的「Make: 終極微控制器套件包」購買到;,當然,也可以分別購買。
所需材料:

 Make: 終極微控制器套件包加上ArduinoRadioShack #277-077,包含本專題需要的所有電子零件,包含Arduino Uno微控制器開發板、9V電池座、免焊麵包板、10kΩ電阻器(3)、跳線、溫度感測器、光度感測器、三色LED330Ω電阻器(3)16×2液晶螢幕和10kΩ電壓計。


塑膠,用來作土壤探針的間隔裝置,你也可以透過雷射切割壓克力材料來製作(詳見步驟#1)。


9V電池RadioShack#23-853


#6-32機械螺絲RadioShack#64-3012。你可以用其他螺栓或鋼條代替,不過最好是不鏽鋼或鍍鋅的。


#6-32螺帽RadioShack#64-3019
 工具:
 有安裝Arduino IDE軟體(可從www.arduino.cc網頁下載)的電腦

剪線鉗/剝線鉗RadioShack #64-224


焊鐵和焊料RadioShack #64-053#64-2055或者#64-2184,焊料則是#64-009


A-B USB連接線RadioShack #26-713
图片
步驟#1基本構造:光度、溫度與濕度感測器

 l   主體的部分會需要用到Arduino Uno微控制器、免焊接麵包板、310kΩ電阻器、跳線、溫度感測器、光度感測器、鋼製螺栓          與螺帽。


l   同時,你還會需要為土壤探針(螺栓)製作兩個間隔裝置,請在一塊塑膠上鑽出兩個1/2"的洞來放螺栓,接著,請再製作一個間隔裝置,並將兩個螺栓穿過這兩個間隔裝置,使得它們間隔固定的距離


l   另外,我還作了一個更酷的土壤感測器,方法是雷射切割一些1/16”的壓克力作為分隔裝置,擺在一些直徑1/16”不鏽鋼棒的中間,這種作法常常在TIGTungsten Inert Gas鎢極惰性氣體保護)焊接上看到,至於壓克力板的切割檔案則可以在這裡找到。
步驟#2:製作感測器線路

l   這個專題裡用到的三種感測器運作方式相同,也就是依據感測到的土壤濕度、氣溫或光度的數值改變電阻;基本上,你只需要像第一張電路圖那樣簡單的設計就可以讓Arduino讀取電阻讀數了。


l   所以,我們會把這個設計套用在三種(土壤濕度、氣溫與光度)感測器上,並用這些東西拼湊出第二張電路圖上的結構。


請依循電路圖的指示,在麵包板上製作線路(如第三張照片)。溫度感測器和光度感測器都裝在麵包板上,土壤探針其實就是兩條長的電線,纏繞在螺栓上、並用螺帽固定。土壤探針連接到Arduino的類比腳位A0、溫度感測器連到A1、光度感測器則連接到A2
图片
步驟#3Arduino編寫程式

l   基本上,只要在Arduino上輸入以下的程式碼,就可以讀取連接在Arduino類比腳位上可變電阻的資料了:


sensorValue = analogRead(inputPin);


 其中,sensorValue是感測器上傳來的讀數,inputPin是感測器連接的腳位編號。


要讀取來自3個感測器的資料,只要將程式碼重複三次、宣稱新的變數、設定序列埠就行了。在這裡可以下載寫好的程式碼,請從連結中下載、在Arduino IDE裡面開啟,並上傳到Arduino上。
步驟#4感測器放置與校準

l   將土壤感測器插到植物旁邊的泥土中,並在能夠與植物葉片受到同等光照的位置擺放光度感測器,至於溫度感測器則放在光度感測器旁邊。接著,將Arduino啟動,電腦螢幕中的序列監視器應該會即時更新讀數。


l   為了達到盆栽守護神的最大功效,最好的辦法就是依照你栽種的植物進行個別的生長環境調整,設定適當的數據範圍到感測器裡。身邊的園藝專家會是一個很好的資源,比如說你可以請教他:「你認為對這個植物來說,泥土濕度怎麼樣最好?」「如果泥土乾燥到這個程度,是不是就該澆水了?」然後,再透過盆栽守護神來將這些數值量化記錄。


l   你也可以直接借一個較好的感測器來校準,以下是我的工業用的土壤濕度感測器與自製不鏽鋼棒土壤探針在Arduino上的讀數:


Ø   在空氣中:兩個感測器讀數都是0


Ø   非常乾的泥土: 2% Vegetronix5 DIY


Ø   些微潮濕:7%150


Ø   些微濕潤:8%250


Ø   濕土:28%,370


Ø   非常濕潤的泥土:51%385


Ø   將探針插入水中:85%480


所以,如果我希望土壤濕度大約是28%,那感測器讀數的臨界值就可以設在385左右。
步驟#5中階組裝:加入三色LED指示裝置

l   現在,你需要加入LED燈來回報植物的狀態,我用藍色來表示水的需求、綠色代表陽光、紅色則是溫度,這些都只需要用到同一個三色LED就能完成(當然,還有很多方式可以作到這一點)。所以,請拿出1個三色LED以及3330Ω電阻。


l   通常,只要像電路圖畫的那樣將LED連到Arduino上就行了,在電路圖上,LED圖形的三角形尖端指向陽極,在真正的LED上,較長的那一根電線要接地(我曾經因為安裝方向錯誤使好多很貴的LED報銷!)


電阻的功能則是控管流向LED的電流強度:如果電流太強,LED過幾秒就會燒掉,讓原本幾千小時的壽命毀於一旦。
步驟#6LED納入電路
 l   在三色LED上,通常紅色、綠色、藍色的燈光會有共用的正極或負極,因此,總共加起來會有四個針腳(至於三個顏色到底是共用的正極還是負極,可以參考規格表)。在Make: 終極微控制器套件包裡的三色LED是共用正極,所以連接方式如電路圖。

遵循電路圖的設計,將LED連接到+5V電源以及Arduino的數位I/O腳位D9D10D11上。
图片
步驟#7:編寫 Arduino程式
這裡要談到一個概念,也就是函數呼叫:原理很簡單,只要把某些常用到的功能寫進函數裡,之後就只要呼叫函數,就不需要重複寫出函數的內容。舉例來說,如果要把三個顏色的燈光都關掉,需要以下的指令:

digitalWrite(redPin, HIGH);


digitalWrite(greenPin, HIGH);


digitalWrite(bluePin, HIGH);


其實,我們不需要每次都輸入這些指令,只要把這些功能放進一個函數裡就行了:


void off()


{


digitalWrite(redPin, HIGH);


digitalWrite(greenPin, HIGH);


digitalWrite(bluePin, HIGH);


}


l   現在,如果要關閉LED,只要呼叫off()這個函數就行了,這是函數最簡單的應用方式,當你對程式語言了解程度越來越高之後,就可以做出更加有趣、更加複雜的應用了!


l   所以,程式碼會變成這樣,你可以從這裡下載,用Arduino IDE開啟,並上傳到你的Arduino上。


l   這樣一來,LED就會以5秒鐘為單位,展示植物目前的代表溫度、濕度與陽光的訊息。


 Ø   如果土壤濕潤,LED會閃爍1秒的藍色燈光。


Ø   如果植物溫度夠高,LED則會閃爍紅色燈光。


如果植物有接受到陽光,LED會閃爍綠色燈光。
步驟#8進階設定:在液晶顯示器上顯示讀數

 l   現在,我們要加入一段文字,搭配LED的燈光訊息在液晶螢幕上循環


播放,每個讀數播放4秒鐘,這樣才能與LED燈光閃爍的時間搭配(詳見前一步驟),請從Make:終極微控制器套件包拿出16針腳液晶顯示器與10kΩ電壓計。


要接上液晶顯示器的,會需要焊接某些零件,如果你以前從來沒有焊接的經驗,那也不用擔心,只要使用良好的工具和適當的技巧,焊接其實並不困難,我們的焊接新手指南是很好的開始喔!
步驟#9:液晶顯示器連接與測試
 l   在這個專題中,液晶顯示器的設定會有一些不同,不過請別擔心,我們這裡有指南可以參考!如果有興趣的話,可以到http://arduino.cc/en/Tutorial/LiquidCrystalDisplay網頁看看。

l   接著,請依照線路圖,將液晶顯示器連接到你的電路上。


 Ø   液晶顯示器的#1針腳連接到麵包板上的地線。


Ø   液晶顯示器的#2針腳連接到5V電源和電壓計的外側針腳,哪一支都沒關係,選一支就行了。


Ø   液晶顯示器的#3針腳連到電位計的電刷上(也就是中間的針腳)。


Ø   液晶顯示器的#4針腳連接到Arduino#7數位腳位,請注意,這和液晶顯示器預設程式庫的設定不符。


Ø   液晶顯示器的#5針腳連接到GND腳位和電壓計的另外一支外側針腳。


Ø   液晶顯示器的#6針腳連到Arduino #6數位腳位,注意,這和液晶顯示器預設程式庫的設定不符。


Ø   液晶顯示器的#7#10針腳不會用到。


Ø   液晶顯示器的#11針腳連到Arduino#5數位腳位。


Ø   液晶顯示器的#12針腳連到Arduino#4數位腳位。


Ø   液晶顯示器的#13針腳連到Arduino#3數位腳位。


Ø   液晶顯示器的#14針腳連到Arduino#2數位腳位。


Ø   液晶顯示器的#14#15不會用到。


 上面提到的Arduino使用指南中可以看到驅動液晶顯示器的所有方法,而如果需要測試的話,這裡有範例程式碼,已經針對我們專題的針腳編號做了調整。請從這個連結下載程式碼,並上傳到Arduino上。請確認電壓計打開,然後看到螢幕上應該會出現「hello world」的字樣,如果液晶顯示器有正確連接的話,應該會每一秒閃爍一次。
图片
步驟#10:Arduino重新編寫程式

所以,這就是加入液晶顯示器的盆栽守護神程式碼,如果你對成果還算滿意,可以從這個連結下載程式碼並上傳到Arduino上。
步驟#11:更進一步

l   好了!一切大功告成。現在你的植物會在對的時間、地點告訴你他的一切需求。接下來,還有什麼可以讓你的盆栽守護神功能更上一層樓呢?


l   控制:加入繼電器擴充板(RadioShack#277-067)來控制植物用的打水泵浦、暖氣機或光照程度,你可以玩玩看Arduino的時間程式庫(http://playground.arduino.cc/Code/time),試著達成「在日落時照光,使得每日光照總數達到16小時」這類的任務。


l   電源供應:讓你的Arduino進入睡眠狀態,每隔幾分鐘才顯示一次讀數,使得電池的壽命大幅提升!在網路上可以看到簡單版(http://hwstartup.wordpress.com/2013/03/11/how-to-run-an-arduino-on-a-9v-battery-for-weeks-or-months/)的操作指南,而且,這麼一來,土壤探針的壽命也會大大延長,不會這麼快就壞掉。


l   太陽能電源:在專題中加入太陽能板和太陽能電池,就可以達到能源的自給自足(http://voltaicsystems.com/blog/solar-powered-automated-garden/)!


l   連接網路:你可以透過Ethernet擴充板(RadioShack#276-241), Wi-Fi擴充板(http://growerbot.com)、甚至是Cellular擴充板來遠端分享資料!


更好的感測器:可以去探索其他感測器的功能,像是感測pH值、光譜或濕度等等,讓你的盆栽守護神在科學的領域中百尺竿頭,更進一步!