常常在烤肉或是野炊時,大部分的人都只利用木炭以及火種來生火,不過這種方法通常會花上較多的時間,且火量的控制還得依照自己來判斷,野炊神器不僅在這個時候可以幫上忙,還將生火這件難事自動化,它透過了解火焰量的大小,加以控制風扇的轉動,這麼有趣的應用是否想實際試試看呢?一起製作出來吧!
野炊活動是露營必備項目之一,但在野外求生經常會遇到缺乏生火工具之問題,因此可以透過CPF並結合伺服馬達,打造出一台野炊神器,來縮短野炊生火時間,並且能有效率的讓大家能快速享用到熱騰騰的美食。
宏碁雲教授 - 1個
Leonardo 開發板 - 1個
Grove 擴充板 - 1個
火焰感測器 - 1個
180度伺服馬達 - 1個
野炊神器的運作方式,主要就是跟火焰傳感器有著密切的關係,使用傳感器接收火焰的強弱,接著搭配著風扇馬達,當火焰的數值越低時表示火量越小,此時提高風扇馬達的轉速,加速生火,若火量越大則轉速越慢,穩穩的生火即可。
連接雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
先將雲教授與相對應感應器連接至Grove擴充板,火焰感測器連接至A0插槽,180度伺服馬達則是連接至D4插槽,如圖:
點擊執行按鈕,可對目前感應器進行各別操作與顯示,A0欄位顯示火焰感測器的值,D4欄位則是可以控制180度伺服馬達的角度。
在開始撰寫程式碼之前,先來看一下本程式自訂的函式(function)介紹:
sensorSet()
取得火焰傳感器的火焰量數值。
servoControl(max,min,speed)
控制風扇馬達的轉速,參數依序為max(最大角度)、min(最小角度)、speed(速度)。
現在,要開始撰寫野炊神器的程式碼,點擊修改按鈕進入程式碼編輯介面,將預設的程式碼全部刪除。
首先撰寫sensorSet()
函式來取得火焰傳感器的數值。
var fireSensor;
function sensorSet(){
fireSensor = cpf.get("socket a0");
ui.set("socket a0", fireSensor);
return fireSensor;
}
程式解析:
sensorSet()
。sensorSet()
函數中,使用fireSensor變數來接收A0插槽火焰傳感器的數值。sensorSet()
函數中,執行ui.set()將火焰的數值顯示在A0區塊上。sensorSet()
函數中,回傳fireSensor變數。接著撰寫servoControl()
函式來控制風扇馬達。
function servoControl(max,min,speed){
cpf.set("socket d4", max, speed);
cpf.set("socket d4", min, speed);
}
程式解析:
開始撰寫主程式來使用目前為止所寫的副程式,主程式的邏輯為判斷當前的火焰量為多少,而給予風扇馬達不同的轉動範圍以及轉速。
if(sensorSet() < 200){
servoControl(180, 0, 20)
}else if((sensorSet() >= 200) && (sensorSet() < 400)){
servoControl(165, 15, 15);
}else if((sensorSet() >= 400) && (sensorSet() < 600)){
servoControl(150, 30, 10);
}else if((sensorSet() >= 600) && (sensorSet() < 800)){
servoControl(120, 60, 5);
}else {
servoControl(90, 90, 0);
}
程式解析:
最後,在程式碼最後一行輸入cpf.repeat();
重複執行,完成野炊神器的撰寫。
//野炊神器//
var fireSensor;
if(sensorSet() < 200){
servoControl(180, 0, 20)
}else if((sensorSet() >= 200) && (sensorSet() < 400)){
servoControl(165, 15, 15);
}else if((sensorSet() >= 400) && (sensorSet() < 600)){
servoControl(150, 30, 10);
}else if((sensorSet() >= 600) && (sensorSet() < 800)){
servoControl(120, 60, 5);
}else {
servoControl(90, 90, 0);
}
function sensorSet(){
fireSensor = cpf.get("socket a0");
ui.set("socket a0", fireSensor);
return fireSensor;
}
function servoControl(max,min,speed){
cpf.set("socket d4", max, speed);
cpf.set("socket d4", min, speed);
}
cpf.repeat();
有趣的野炊神器,使用了簡單的程式碼就能達到有意義的應用,重點是在創意的想法上,此時你可以搭配二氧化碳感測器,觀察出火焰燃燒氧氣產生二氧化碳的整個過程,透過這份觀察,讓野炊神器適時地控制第二個風扇以提供氧氣,說不定可以達到意想不到的效率,或者還有更好的方法能加速生火,你能在多少的時間內完成生火呢?依照你的idea試試看吧!