為你最愛的植物們打造一個數位守護神吧!只要使用Arduino開發板和一些價格不貴的感測器,就可以讓植物們處在最「快樂」適當的濕度、溫度與光照線環境中喔!
最簡易版單的盆栽守護神其實就是會感測植物所處環境受的的照明度、土壤濕度和氣溫,將讀數透過USB回傳到,並顯示器到電腦螢幕上。我們將從最簡單的顯示監視器開始,再慢慢接觸更進階的設計,比如納入LED、甚至液晶顯示(LCD)等等,這些都可以透過Arduino來完成,不過我們得先學一點Arduino和電子設備的知識。
所有電子零件都可以在Radio Shack網頁的「Make:: 終極微控制器套件包」購買到;,當然,也可以分別購買。
所需材料:
Make: 終極微控制器套件包加上Arduino,RadioShack #277-077,包含本專題需要的所有電子零件,包含Arduino Uno微控制器開發板、9V電池座、免焊麵包板、10kΩ電阻器(3)、跳線、溫度感測器、光度感測器、三色LED、330Ω電阻器(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微控制器、免焊接麵包板、3個10kΩ電阻器、跳線、溫度感測器、光度感測器、鋼製螺栓 與螺帽。
l 同時,你還會需要為土壤探針(螺栓)製作兩個間隔裝置,請在一塊塑膠上鑽出兩個1/2"的洞來放螺栓,接著,請再製作一個間隔裝置,並將兩個螺栓穿過這兩個間隔裝置,使得它們間隔固定的距離
l 另外,我還作了一個更酷的土壤感測器,方法是雷射切割一些1/16”的壓克力作為分隔裝置,擺在一些直徑1/16”不鏽鋼棒的中間,這種作法常常在TIG(Tungsten Inert Gas,鎢極惰性氣體保護)焊接上看到,至於壓克力板的切割檔案則可以在這裡找到。
l 主體的部分會需要用到Arduino Uno微控制器、免焊接麵包板、3個10kΩ電阻器、跳線、溫度感測器、光度感測器、鋼製螺栓 與螺帽。
l 同時,你還會需要為土壤探針(螺栓)製作兩個間隔裝置,請在一塊塑膠上鑽出兩個1/2"的洞來放螺栓,接著,請再製作一個間隔裝置,並將兩個螺栓穿過這兩個間隔裝置,使得它們間隔固定的距離
l 另外,我還作了一個更酷的土壤感測器,方法是雷射切割一些1/16”的壓克力作為分隔裝置,擺在一些直徑1/16”不鏽鋼棒的中間,這種作法常常在TIG(Tungsten Inert Gas,鎢極惰性氣體保護)焊接上看到,至於壓克力板的切割檔案則可以在這裡找到。
步驟#2:製作感測器線路
l 這個專題裡用到的三種感測器運作方式相同,也就是依據感測到的土壤濕度、氣溫或光度的數值改變電阻;基本上,你只需要像第一張電路圖那樣簡單的設計就可以讓Arduino讀取電阻讀數了。
l 所以,我們會把這個設計套用在三種(土壤濕度、氣溫與光度)感測器上,並用這些東西拼湊出第二張電路圖上的結構。
請依循電路圖的指示,在麵包板上製作線路(如第三張照片)。溫度感測器和光度感測器都裝在麵包板上,土壤探針其實就是兩條長的電線,纏繞在螺栓上、並用螺帽固定。土壤探針連接到Arduino的類比腳位A0、溫度感測器連到A1、光度感測器則連接到A2。
l 這個專題裡用到的三種感測器運作方式相同,也就是依據感測到的土壤濕度、氣溫或光度的數值改變電阻;基本上,你只需要像第一張電路圖那樣簡單的設計就可以讓Arduino讀取電阻讀數了。
l 所以,我們會把這個設計套用在三種(土壤濕度、氣溫與光度)感測器上,並用這些東西拼湊出第二張電路圖上的結構。
請依循電路圖的指示,在麵包板上製作線路(如第三張照片)。溫度感測器和光度感測器都裝在麵包板上,土壤探針其實就是兩條長的電線,纏繞在螺栓上、並用螺帽固定。土壤探針連接到Arduino的類比腳位A0、溫度感測器連到A1、光度感測器則連接到A2。
步驟#3:為Arduino編寫程式
l 基本上,只要在Arduino上輸入以下的程式碼,就可以讀取連接在Arduino類比腳位上可變電阻的資料了:
sensorValue = analogRead(inputPin);
其中,sensorValue是感測器上傳來的讀數,inputPin是感測器連接的腳位編號。
要讀取來自3個感測器的資料,只要將程式碼重複三次、宣稱新的變數、設定序列埠就行了。在這裡可以下載寫好的程式碼,請從連結中下載、在Arduino IDE裡面開啟,並上傳到Arduino上。
l 基本上,只要在Arduino上輸入以下的程式碼,就可以讀取連接在Arduino類比腳位上可變電阻的資料了:
sensorValue = analogRead(inputPin);
其中,sensorValue是感測器上傳來的讀數,inputPin是感測器連接的腳位編號。
要讀取來自3個感測器的資料,只要將程式碼重複三次、宣稱新的變數、設定序列埠就行了。在這裡可以下載寫好的程式碼,請從連結中下載、在Arduino IDE裡面開啟,並上傳到Arduino上。
步驟#4:感測器放置與校準
l 將土壤感測器插到植物旁邊的泥土中,並在能夠與植物葉片受到同等光照的位置擺放光度感測器,至於溫度感測器則放在光度感測器旁邊。接著,將Arduino啟動,電腦螢幕中的序列監視器應該會即時更新讀數。
l 為了達到盆栽守護神的最大功效,最好的辦法就是依照你栽種的植物進行個別的生長環境調整,設定適當的數據範圍到感測器裡。身邊的園藝專家會是一個很好的資源,比如說你可以請教他:「你認為對這個植物來說,泥土濕度怎麼樣最好?」「如果泥土乾燥到這個程度,是不是就該澆水了?」然後,再透過盆栽守護神來將這些數值量化記錄。
l 你也可以直接借一個較好的感測器來校準,以下是我的工業用的土壤濕度感測器與自製不鏽鋼棒土壤探針在Arduino上的讀數:
Ø 在空氣中:兩個感測器讀數都是0。
Ø 非常乾的泥土: 2% Vegetronix,5 DIY
Ø 些微潮濕:7%,150
Ø 些微濕潤:8%,250
Ø 濕土:28%,,370
Ø 非常濕潤的泥土:51%,385
Ø 將探針插入水中:85%,480
所以,如果我希望土壤濕度大約是28%,那感測器讀數的臨界值就可以設在385左右。
l 將土壤感測器插到植物旁邊的泥土中,並在能夠與植物葉片受到同等光照的位置擺放光度感測器,至於溫度感測器則放在光度感測器旁邊。接著,將Arduino啟動,電腦螢幕中的序列監視器應該會即時更新讀數。
l 為了達到盆栽守護神的最大功效,最好的辦法就是依照你栽種的植物進行個別的生長環境調整,設定適當的數據範圍到感測器裡。身邊的園藝專家會是一個很好的資源,比如說你可以請教他:「你認為對這個植物來說,泥土濕度怎麼樣最好?」「如果泥土乾燥到這個程度,是不是就該澆水了?」然後,再透過盆栽守護神來將這些數值量化記錄。
l 你也可以直接借一個較好的感測器來校準,以下是我的工業用的土壤濕度感測器與自製不鏽鋼棒土壤探針在Arduino上的讀數:
Ø 在空氣中:兩個感測器讀數都是0。
Ø 非常乾的泥土: 2% Vegetronix,5 DIY
Ø 些微潮濕:7%,150
Ø 些微濕潤:8%,250
Ø 濕土:28%,,370
Ø 非常濕潤的泥土:51%,385
Ø 將探針插入水中:85%,480
所以,如果我希望土壤濕度大約是28%,那感測器讀數的臨界值就可以設在385左右。
步驟#5:中階組裝:加入三色LED指示裝置
l 現在,你需要加入LED燈來回報植物的狀態,我用藍色來表示水的需求、綠色代表陽光、紅色則是溫度,這些都只需要用到同一個三色LED就能完成(當然,還有很多方式可以作到這一點)。所以,請拿出1個三色LED以及3個330Ω電阻。
l 通常,只要像電路圖畫的那樣將LED連到Arduino上就行了,在電路圖上,LED圖形的三角形尖端指向陽極,在真正的LED上,較長的那一根電線要接地(我曾經因為安裝方向錯誤使好多很貴的LED報銷!)
電阻的功能則是控管流向LED的電流強度:如果電流太強,LED過幾秒就會燒掉,讓原本幾千小時的壽命毀於一旦。
l 現在,你需要加入LED燈來回報植物的狀態,我用藍色來表示水的需求、綠色代表陽光、紅色則是溫度,這些都只需要用到同一個三色LED就能完成(當然,還有很多方式可以作到這一點)。所以,請拿出1個三色LED以及3個330Ω電阻。
l 通常,只要像電路圖畫的那樣將LED連到Arduino上就行了,在電路圖上,LED圖形的三角形尖端指向陽極,在真正的LED上,較長的那一根電線要接地(我曾經因為安裝方向錯誤使好多很貴的LED報銷!)
電阻的功能則是控管流向LED的電流強度:如果電流太強,LED過幾秒就會燒掉,讓原本幾千小時的壽命毀於一旦。
步驟#6:將LED納入電路
l 在三色LED上,通常紅色、綠色、藍色的燈光會有共用的正極或負極,因此,總共加起來會有四個針腳(至於三個顏色到底是共用的正極還是負極,可以參考規格表)。在Make: 終極微控制器套件包裡的三色LED是共用正極,所以連接方式如電路圖。
遵循電路圖的設計,將LED連接到+5V電源以及Arduino的數位I/O腳位D9、D10與D11上。
l 在三色LED上,通常紅色、綠色、藍色的燈光會有共用的正極或負極,因此,總共加起來會有四個針腳(至於三個顏色到底是共用的正極還是負極,可以參考規格表)。在Make: 終極微控制器套件包裡的三色LED是共用正極,所以連接方式如電路圖。
遵循電路圖的設計,將LED連接到+5V電源以及Arduino的數位I/O腳位D9、D10與D11上。
步驟#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會閃爍綠色燈光。
這裡要談到一個概念,也就是函數呼叫:原理很簡單,只要把某些常用到的功能寫進函數裡,之後就只要呼叫函數,就不需要重複寫出函數的內容。舉例來說,如果要把三個顏色的燈光都關掉,需要以下的指令:
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Ω電壓計。
要接上液晶顯示器的,會需要焊接某些零件,如果你以前從來沒有焊接的經驗,那也不用擔心,只要使用良好的工具和適當的技巧,焊接其實並不困難,我們的焊接新手指南是很好的開始喔!
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」的字樣,如果液晶顯示器有正確連接的話,應該會每一秒閃爍一次。
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」的字樣,如果液晶顯示器有正確連接的話,應該會每一秒閃爍一次。
步驟#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值、光譜或濕度等等,讓你的盆栽守護神在科學的領域中百尺竿頭,更進一步!
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值、光譜或濕度等等,讓你的盆栽守護神在科學的領域中百尺竿頭,更進一步!
沒有留言:
張貼留言