在忙碌的城市中你是否想為生活增添一點綠意及樂趣,例如種種菜或養養魚,但卻因繁忙的工作無法細心地照顧盆栽或飼養魚而讓你打消這個念頭呢?在這裡,我們將這兩件事結合在一起,想在城市中同時種菜以及養魚不再是那麼遙不可及的事了!
你一定有聽說過魚菜共生吧? 魚菜共生就是結合水生動物的排泄物和分解水中雜質,提供氨成分作為植物生長的營養,建立互利共生的關係,達到一個自然循環的效果,減少人力和資源消耗的一種新興栽培模式,這就是典型的魚菜共生!講到這,相信你就一定沒有聽說過結合雲端與物聯網的智慧監控魚菜共生吧!雲教授的魚菜共生裝置就是專為忙碌的你所設計的!只要你擁有一台智慧型手機或平板,無論你人在何處,都可以利用雲教授的app來及時觀測家中盆栽以及水族缸的狀況,依照不同的植物生長需求來調整環境亮度及濕度,讓魚兒健康、植物也茁壯。
宏碁雲教授 - 1個
Leonardo 開發板 - 1個
Grove 擴充板 - 1個
水汞(幫浦) - 1個
土壤濕度感測器 - 1個
壓克力底座 - 1個
檯燈(可5V控制) - 1個
魚缸 - 1個
淡水魚 - 數隻
盆栽 - 1個
連接雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
先將雲教授與相對應感應器連接至Grove擴充板,土壤濕度感測器連接至A0插槽,水汞(幫浦)連接上D2插槽,霧化器連接上D3插槽,如圖:
圖
點擊執行按鈕,可對目前感應器進行各別操作與顯示,插槽A0顯示目前土壤濕度值,D2欄位可以開關水汞(幫浦),D3欄位則是可以控制霧化器的噴霧大小。
在開始撰寫程式碼之前,先來看一下本程式自訂的函式(function)介紹:
sensorSet()
取得濕度感測器的數值。
pumpControl(status,time)
使用幫浦增加魚缸的氧氣量。
sprayControl(status,time)
使用霧化器為植物補充水分。
現在,要開始撰寫魚菜共生的程式碼,點擊修改按鈕進入程式碼編輯介面,將預設的程式碼全部刪除。
首先撰寫一個函式sensorSet()
,來取得濕度感測器的數值。
var moistureSensor;
function sensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
程式解析:
sensorSet()
。sensorSet()
函式中,使用moistureSensor變數來接收A0插槽濕度感測器的數值。接著撰寫一個函式pumpControl()
,利用幫浦打氣提供魚缸內的氧氣。
var moistureSensor;
function sensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
function pumpControl(status,time){
cpf.set("socket d2", status);
delay(time);
}
程式解析:
pumpControl()
。接著撰寫一個函式sprayControl()
,控制霧化器來為植物澆水。
var moistureSensor;
function sensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
function pumpControl(status,time){
cpf.set("socket d2", status);
delay(time);
}
function sprayControl(status,time){
cpf.set("socket d3", status);
delay(time);
}
程式解析:
sprayControl()
。sprayControl()
函式中,使用status參數設定D3插槽霧化器的噴霧大小。sprayControl()
函式中,使用time參數來設定程式的延遲。寫一個判斷式,判斷植物土壤的溼度若是過低,則啟動霧化器澆水;否則....
//魚菜共生//
var moistureSensor;
if(sensorSet()<500){
pumpControl(1,3000);
}else{
pumpControl(0,1000);
}
function sensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
function pumpControl(status,time){
cpf.set("socket d2", status);
delay(time);
}
function sprayControl(status,time){
cpf.set("socket d3", status);
delay(time);
}
cpf.repeat();