物聯網時代來臨,連盆栽都可以智慧化,智慧盆栽可以讓你透過雲教授的App了解到植物的需求狀態,它能監看盆栽中的土壤水分,並在達到缺水的時候進行自動補充,以及判斷目前的光度,了解到植物是否有均衡的吸收陽光,現在,開啟雲教授,將家中的盆栽智慧化吧!
現代人經常為了工作忙到沒日沒夜,常常導致自己所種植的植物枯萎,因此將傳統盆栽與CPF結合後,並透過行動裝置即能不受任何環境與時間的限制,即可隨時監控盆栽的狀況,並在植物需要光線或是補水時能第一時間給予適時的補給。
宏碁雲教授 - 1個
Leonardo 開發板 - 1個
Grove 擴充板 - 1個
檯燈(可5V控制) - 1個
霧化器模組 - 1個
濕度感測器 - 1個
光敏感測器 - 1個
壓克力底座 - 1個
盆栽 - 1個
連接雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
先將雲教授與相對應感應器連接至Grove擴充板,土壤濕度感測器連接至A0插槽,光敏感測器連接至A1插槽,檯燈連接上D2插槽,霧化器連接上D3插槽,如圖:
圖
點擊執行按鈕,可對目前感應器進行各別操作與顯示,插槽A0顯示土壤濕度感測器的值,插槽A1顯示光敏感測器的值,D2欄位可以控制檯燈開關,D3欄位可以控制霧化器的噴霧大小。
在開始撰寫程式碼之前,先來看一下本程式自訂的函式(function)介紹:
lightSensorSet()
取得光敏感測器的數值。
LEDControl()
控制RGB LED燈的顏色。
moistureSensorSet()
取得濕度感測器的數值。
sprayControl()
使用霧化器為植物補充水分。
現在,要開始撰寫智慧盆栽的程式碼,點擊修改按鈕進入程式碼編輯介面,將預設的程式碼全部刪除。
首先,撰寫moistureSensorSet()
來取得濕度感測器的數值。
var moistureSensor;
function moistureSensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
程式解析:
moistureSensorSet()
。moistureSensorSet()
函式中,使用moistureSensor變數來接收濕度感測器的數值。moistureSensorSet()
函式中,執行ui.set(),將濕度感測器的數值顯示在A0區塊上。moistureSensorSet()
函式中,回傳moistureSensor變數。接著撰寫lightSensorSet()
函式,來取得光敏感測器的光感值。
var moistureSensor;
var lightSensor;
function moistureSensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
function lightSensorSet(){
lightSensor = cpf.get("socket a1");
ui.set("socket a1", lightSensor);
return lightSensor;
}
程式解析:
lightSensorSet()
。lightSensorSet()
函式中,使用lightSensor變數來接光敏感測器的光感值。lightSensorSet()
函式中,執行ui.set(),將光敏感測器的光感值顯示在A1區塊上。lightSensorSet()
函式中,回傳lightSensor變數。接著撰寫sprayControl()
函式,來控制霧化器的噴霧大小,提供植物足夠的水分。
...
function lightSensorSet(){
lightSensor = cpf.get("socket a1");
ui.set("socket a1", lightSensor);
return lightSensor;
}
function sprayControl(status,time){
cpf.set("socket d3", status);
delay(time);
}
sprayControl()
。sprayControl()
函式中,使用status參數設定D3插槽霧化器的噴霧大小。sprayControl()
函式中,使用time參數來設定程式的延遲。接著撰寫LEDControl()
函式,來控制檯燈的開與關。
...
function sprayControl(status,time){
cpf.set("socket d3", status);
delay(time);
}
function LEDControl(status){
cpf.set("socket d2", status);
}
程式解析:
LEDControl()
。LEDControl()
函式中,使用status參數設定D2插槽的白光LED開與關。相關函式都完成後,接下來要新建一個判斷式,判斷若盆栽光線不足時開啟白LED燈增加環境的亮度;若土壤濕度不足時則開啟霧化器來提供土壤足夠的水分。
var moistureSensor;
var lightSensor;
if(lightSensorSet()<300){
LEDControl(1);
}else{
LEDControl(0);
}
if(moistureSensorSet()<300){
sprayControl(255);
}else{
sprayControl(0);
}
...
程式解析:
lightSensorSet()
函式取得的光感值小於300時,呼叫LEDControl()
函式並傳入參數1來開啟白光LED燈,否則傳入0來關閉白光LED燈。moistureSensorSet()
函式取得的濕度值小於300時,呼叫sprayControl()
函式並傳入參數255來控制霧化器的噴霧大小,否則傳入0來關閉霧化器。以上已完成了程式碼的撰寫,最後在最後一行加上 cpf.repeat();
開啟迴圈進行重複執行的動作。
//智慧盆栽//
var moistureSensor;
var lightSensor;
if(lightSensorSet()<300){
LEDControl(1);
}else{
LEDControl(0);
}
if(moistureSensorSet()<300){
sprayControl(255);
}else{
sprayControl(0);
}
function moistureSensorSet(){
moistureSensor = cpf.get("socket a0");
ui.set("socket a0", moistureSensor);
return moistureSensor;
}
function lightSensorSet(){
lightSensor = cpf.get("socket a1");
ui.set("socket a1", lightSensor);
return lightSensor;
}
function sprayControl(status,time){
cpf.set("socket d3", status);
delay(time);
}
function LEDControl(status){
cpf.set("socket d2", status);
}
cpf.repeat();
一個智慧的盆栽解決了許多都市人在種植植物上的困擾,讓盆栽也有自我照顧的能力!接下來我們可以加入一些聲光模組,像是當霧化器的水不夠而造成無法澆水的話,可以透過蜂鳴器發出警示聲或是閃LED燈提醒主人該加水囉!當然,每一種植物的生長需求還是會有所不同,如何讓智慧盆栽能夠智慧化的改變生長環境,這也是一個值得探討的課題。