CPF智造泡泡機,能夠利用風扇的轉速自動地連續形成多個泡泡,並且透過馬達的轉動改變泡泡產生的位置,不必再使用以前傳統吹泡泡的方式。只要開啟雲教授App,設定伺服馬達轉動的角度,泡泡機即會瞄準你設定的位置,接著再以紅外線的感測來開啟風扇,泡泡機就會開始吹出泡泡,簡單的操作卻讓結果很有趣,讓我們來看看如何製作吧。
泡泡可以使人身心感到療癒,是個從小到大生活中必玩的一樣物品,而為顛覆傳統透過嘴巴吹泡泡方式,CPF藉由風扇模組及馬達之應用,讓每個人都能透過行動裝置來製造浪漫的泡泡,讓生活中增添不少趣味性。
宏碁雲教授 - 1個
Leonardo 開發板 - 1個
Grove 擴充板 - 1個
180度伺服馬達 - 1個
迷你風扇 - 1個
連接雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
先將雲教授與相對應感應器連接至Grove擴充板,紅外線感測器連接上D6插槽,迷你風扇連接上D3插槽,180度伺服馬達則是連接至D4插槽,如圖:
圖
點擊執行按鈕,可對目前感應器進行各別操作與顯示,D6顯示紅外線感測器是否有偵測到人體,D3欄位用來控制迷你風扇的開關,而D4欄位則是可以控制180度伺服馬達的角度。
在開始撰寫程式碼之前,先來看一下本程式自訂的函式(function)介紹:
sensorSet()
取得紅外線感測器的數值。
現在,要開始撰寫製造泡泡機的程式碼,點擊修改按鈕進入程式碼編輯介面,將預設的程式碼全部刪除。
首先撰寫sensorSet()
函式取得紅外線感測器的數值。
var IRSensor;
function IRSensorSet(){
IRSensor = cpf.get("socket d6");
ui.set("socket d6", IRSensor);
return IRSensor;
}
程式解析:
IRSensorSet()
。IRSensorSet()
函數中,使用IRSensor變數來接收D6插槽紅外線感測器的數值。IRSensorSet()
函數中,執行ui.set()將紅外線感測器的數值顯示在D6區塊上。IRSensorSet()
函數中,回傳IRSensor變數。接著撰寫servoControl()
函式來控致泡泡機的左右轉動,讓泡泡能均勻散佈在空氣中。
var IRSensor;
function IRSensorSet(){
IRSensor = cpf.get("socket d6");
ui.set("socket d6", IRSensor);
return IRSensor;
}
function servoControl(max,min,speed){
cpf.set("socket d4", max, speed);
cpf.set("socket d4", min, speed);
}
程式解析:
servoControl()
。servoControl()
函數中,使用max參數及speed參數來設定D4插槽servo的角度以及速度。servoControl()
函數中,使用min參數及speed參數來設定D4插槽servo的角度以及速度。接著撰寫fanControl()
函式來控制。
var IRSensor;
function IRSensorSet(){
IRSensor = cpf.get("socket d6");
ui.set("socket d6", IRSensor);
return IRSensor;
}
function servoControl(max,min,speed){
cpf.set("socket d4", max, speed);
cpf.set("socket d4", min, speed);
}
function fanControl(speed){
cpf.set("socket d3", speed);
}
程式解析:
fanControl()
。fanControl()
函數中,使用speed參數來設定D3插槽mini fan的轉速。寫一個判斷式,當人體接近紅外線感測器時,啟動泡泡機。
var IRSensor;
if(IRSensorSet() == 1){
servoControl(90,0,20);
fanControl(255);
}else{
servoControl(0,0,0);
fanControl(0);
}
function IRSensorSet(){
IRSensor = cpf.get("socket d6");
ui.set("socket d6", IRSensor);
return IRSensor;
}
function servoControl(max,min,speed){
cpf.set("socket d4", max, speed);
cpf.set("socket d4", min, speed);
}
function fanControl(speed){
cpf.set("socket d3", speed);
}
程式解析:
IRSensorSet()
函式回傳的紅外線感測器數值為1時,呼叫servoControl()
函式控制servo擺動角度從90至0、設定速度為20,另外呼叫fanControl()
函式來控制mini fan的風速為255。servoControl()
函式控制servo擺動角度從0至0、設定速度為0,另外呼叫fanControl()
函式傳入速度為0來暫停mini fan。以上已完成了程式碼的撰寫,最後在最後一行加上 cpf.repeat();
開啟迴圈進行重複執行的動作。
//智造泡泡機//
var IRSensor;
if(IRSensorSet()==1){
servoControl(90,0,20);
fanControl(255);
}else{
servoControl(0,0,0);
fanControl(0);
}
function IRSensorSet(){
IRSensor = cpf.get("socket d6");
ui.set("socket d6", IRSensor);
return IRSensor;
}
function servoControl(max,min,speed){
cpf.set("socket d4", max, speed);
cpf.set("socket d4", min, speed);
}
function fanControl(speed){
cpf.set("socket d3", speed);
}
cpf.repeat();
同樣大小的泡泡是不是覺得相較為單調呢?做完這個作品後,你也可以透過程式的撰寫控制風扇風速強弱和延遲時間,製造出更多不同大小的泡泡喔!