植物都具有向光性,這會讓它們往有太陽的地方生長,但卻會使身軀傾斜,於是,為了看到自己的植物能夠一柱擎天,因此產生了可以使植物追隨太陽的追日儀,不論太陽在哪裡,植物們總是面向著陽光,健康且強壯的生長。
太陽東升西落人人知曉,但植物並不知曉,想要照顧好庭院的植物並不容易,透過CPF光線偵測,可以藉由伺服馬達來控制植物的轉向,那麼一來不管主人在那邊,追日儀都讓植物追隨太陽普照的方向來進行生長。
首先,分別讀取三個光感測器的數值,接收三個方位的亮度,再判斷出位於哪個方位的光感測器亮度最高,利用伺服馬達,將植物轉向至亮度最高的感測器位置。
使雲教授連結所需的設備, 分別將三個太陽能板連接A0,A1,A2插槽,另外將伺服馬達插入至D4的位置。
配對好雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
進入後,按下編輯程式的按鈕,將預設程式碼全部刪除,重新命名主題並先定義變數。
//追日儀//
var lightSensorA0;
var lightSensorA1;
var lightSensorA2;
程式解析:
撰寫副程式sensorSet(),設置太陽能板的腳位並接收光度數值,同時顯示在CPF App介面上。
function sensorSet(){
lightSensorA0 = cpf.get("socket a0");
lightSensorA1 = cpf.get("socket a1");
lightSensorA2 = cpf.get("socket a2");
ui.set("socket a0", lightSensorA0);
ui.set("socket a1", lightSensorA1);
ui.set("socket a2", lightSensorA2);
}
程式解析:
開始寫追日儀的主程式,首先執行STEP4所設定的副程式,接下來判斷哪一個太陽能板的陽光亮度最高,並執行相對應的馬達副程式。
sensorSet();
if((lightSensorA0 > lightSensorA1)&&
(lightSensorA0 > lightSensorA2))
{
servoControl(0);
}
else if((lightSensorA1 > lightSensorA0)&&
(lightSensorA1 > lightSensorA2))
{
servoControl(1);
}
else if((lightSensorA2 > lightSensorA0)&&
(lightSensorA2 > lightSensorA1))
{
servoControl(2);
}
程式解析:
撰寫伺服馬達要進行工作的副程式servoControl(),指定伺服馬達要讓植物轉到最大亮度的太陽能板的位置。
function servoControl(status){
switch(status) {
case 0:
cpf.set("socket d4", 180, 20);
break;
case 1:
cpf.set("socket d4", 90, 20);
break;
case 2:
cpf.set("socket d4", 0, 20);
break;
}
}
程式解析:
於最後一行加上 cpf.repeat();
程式碼,產生迴圈不斷地執行,完成。
//追日儀//
var lightSensorA0;
var lightSensorA1;
var lightSensorA2;
sensorSet();
if((lightSensorA0 > lightSensorA1) && (lightSensorA0 > lightSensorA2)){
servoControl(0);
}else if((lightSensorA1 > lightSensorA0) && (lightSensorA1 > lightSensorA2)){
servoControl(1);
}else if((lightSensorA2 > lightSensorA0) && (lightSensorA2 > lightSensorA1)){
servoControl(2);
}
function sensorSet(){
lightSensorA0 = cpf.get("socket a0");
lightSensorA1 = cpf.get("socket a1");
lightSensorA2 = cpf.get("socket a2");
ui.set("socket a0", lightSensorA0);
ui.set("socket a1", lightSensorA1);
ui.set("socket a2", lightSensorA2);
}
function servoControl(status){
switch(status) {
case 0:
cpf.set("socket d4", 180, 20);
break;
case 1:
cpf.set("socket d4", 90, 20);
break;
case 2:
cpf.set("socket d4", 0, 20);
break;
}
}
cpf.repeat();
追日儀是一個簡單卻很有趣的實際應用,而它不只可以運用在植物上,甚至連曬衣服、曬棉被等都可以套用追日儀的應用,自動讓棉被的每一面都可以均勻地吸收陽光,達成更有效的天然殺菌,也可以使用溫度感測器,製作出相似的追溫儀等等。是否另外有想到需要陽光或者需要溫度的物品、生物及活動呢?請將它們套在追日儀的應用上吧!