用Arduino打造會調酒的機器人

四月 12, 2017
Facebook
Twitter
任何派對都需要話題,有什麼比調酒機器人更棒的話題呢?這不但是個好的話頭,也可以讓派對發起人不用老是站在吧檯後方,可以出去和其他人聊天。這篇文章介紹的調酒邁泰( Mai Tai)的酒精濃度並不高,即使是工作場合的派對也很適合。
這一臺調酒機器人其實就是以一個Arduino微處理器(Arduino Uno加上許多幫浦製作而成。我寫了一個簡單的程式,讓幫浦打開一段特定的時間來製作飲料。以目前的設計來說,這個機器人只能做一種飲料,不過只要調整一下程式跟輸入開關,要做幾十種飲料都不成問題。這篇文章最主要的目的在於讓你開始動手做,同時,在製作的過程中學習一些基本觀念。
我們的調酒機器人可以調製出完美的邁泰邁泰酒譜也有很多種,我想稱這個酒譜為瑪歌邁泰(Margots Mai Tai),因為這是我太太瑪歌(Margot)畫龍點睛調製出的酒譜,最主要的差別在於酒精濃度較低(從三小杯烈酒變成比一杯多一點)。若是只要按一個按鈕就可以調出一杯邁泰,那就會有太多人醉倒了,很不方便。此外,在這份酒譜當中,我們用紅石榴糖漿和鳳梨汁取代了常用的柳橙汁。
PARTS
邁泰調酒原料

  • 蘭姆酒(Rum),30 ml
  • 柑香酒(Curacao),12 ml
  • 杏仁糖漿(Orgeat), 5 ml
  • 紅石榴糖漿(Grenadine Syrup),6 ml
  • 鳳梨汁+萊姆,120 ml。可以擠10個萊姆,加上1加侖的鳳梨汁

機器人元件

  • Arduino Uno微處理器
  • 小馬達(運作時電流不應耗超過120 mA)
  • 水族箱用的蠕動式幫浦(2)
  • 12V潛水式幫浦
  • Elegoo 電阻塊
  • 門鈴開關

製作機器人

首先,我們要將幫浦校準,看看在 12 V直流電之下,液體流動的速度為何。我用的馬達購自網路,一個大約5美元。在驅動幫浦的時候,使用電流約120mA因此,我還需要可以供應好幾安培的電源供應器來調酒。另外,還有一個重點是飲料完成速度,在我的設計之中,約35秒鐘可以調好一杯邁泰。
圖片

蠕動式幫浦正面

圖片

蠕動式幫浦背面。你可以觀察到幫浦馬達上方的藍色LED上搭載可限制電流的電阻。從正面看,LED會在機器閒置待命時閃爍。開始製作飲料時,LED則會顯示哪一個幫浦正在運作

透過滾球裝置與彈性軟管,蠕動幫浦可以送出定量的液體。這種幫浦在食品業和醫療產業中都很常見。在這個專題當中,我們用的則是在水族產業中常見的小幫浦,目的通常是將化學物質投放到水族箱中。
我用的蠕動幫浦32秒可以打入30ml的液體。請記得在製作專題之前,先測試幫浦發送液體的速度。我一開始先用清水來抓一個大概的時間,再以實際要用的飲料來測試。我用時間線圖來顯示這個過程:
在上圖中,著色面積代表幫浦打入的液體量,因為蘭姆酒需要的量最大,所以蘭姆酒幫浦打開的時間最長,這算是小型蠕動式幫浦的其中一項限制。
圖片

潛水式12 V幫浦運輸速率較快,還可以打入鳳梨果肉!

小幫浦的另一項限制就是無法將鳳梨汁果肉打出去,因為邁泰酒譜中有120 ml的鳳梨汁,用蠕動式馬達又太慢,因此我在這裡改用潛水式馬達,可同時解決果肉和速度的問題。潛水式馬達也是使用12 V直流電,用繼電器盒來控制即可。用這個馬達來打入120 ml的鳳梨汁只需要3.2秒!其實,我原先想要用較大的蠕動式馬達來處理,但在附近都搜尋不到,便改用另一個專題剩下的潛水式馬達。由於我只有一個馬達可以打入果肉,只好將鳳梨汁跟萊姆汁先混在一起,再用這個珍貴的潛水式馬達處理。若是用蠕動式馬達,就會被果肉卡住。而為了避免虹吸現象,潛入式幫浦要放在果汁液體表面之上。
建議: 藍色LED也可以升級成彩色LED加入不同的效果。在製作這個專題時,因時間有限,我使用了有電流限制的藍色上面還附有300歐姆的電阻,以防LED燒掉。
圖片

Elegoo出的電阻塊有8個通道 ,用 Arduino Uno的5V電壓控制。注意:若要用板子開啟繼電器, 控制腳位要寫為LOW。

圖片

電阻塊的簡化示意圖。繼電器控制了兩個蠕動式幫浦。注意:Arduino腳位要寫為LOW來開啟繼電器與幫浦。

圖片

「啟動按鈕」其實就是門鈴開關,在五金行就能買到

我想在專題中使用一個只接兩條電線的門鈴開關,因此我將開關上的燈泡拆下來,換成綠色LED。問題是,如此一來按下開關時邏輯不會停在 HIGH值。要解決這個問題,我將邏輯腳位連接Arduino的類比輸入腳位,當類比的值低於某點,便會觸發飲品序列。當然,這不是唯一的解法。我寫的簡易程式碼是讓門鈴開關在LED閃爍完畢後才驅動飲料馬達。我故意讓程式碼簡單一些,讓它比較好讀且好懂。我希望讓大家感覺到,這些幫浦其實很容易控制,如果能精準控制打入的液體量,除了調酒之外,也可以做許多別的事情,例如用來做一些液體實驗。

只要調整下面的程式碼,就可以調出各種不同濃度、烈度的飲料。另外,這個裝置也能調製超過一種飲料,例如按不同的按鈕就可以調出不一樣的飲料。
看完這篇文章後,希望你也可以打造自己的機器人,其實裝置本身跟電子元件的部分不難,是很適合新手學習 Arduino、程式編寫和電子元件的專題。

程式碼

 /*這個程式叫做邁泰調製機器人
 
* 主要功能就是調製瑪歌邁泰
 
* 作者是Ted Kinsman Rochester Institute of Technology
 
*March 2017 emkpph@rit.edu
 
*12v直流馬達幫浦打出1盎司的液體需要32秒
 
*/
 
#define Rum 1 // (1號幫浦)12VDC馬達連接1號腳位,打入蘭姆酒
 
#define LED8 8 // (1號幫浦)LED顯示蘭姆酒打入狀況
 
 
#define Curacao 2 // (2號幫浦) 柑香酒連接 2號腳位
 
#define LED9 9 // (2號幫浦)LED顯示柑香酒打入狀況
 
 
#define Orgeat 3 // (3號幫浦)連接 3號腳位
 
#define LED10 10 // 3號幫浦上的LED連接到10號腳位
 
 
#define Grenedine 4 // (4號幫浦)連接 4號腳位
 
#define LED11 11 // 4號幫浦上的LED連接到11號腳位
 
#define PineLime 5 // 5號幫浦連接鳳梨與萊姆汁
 
#define LED12 12 // 5號幫浦上的LED連接到12號腳位
 
#define doorbell 13 // 用門鈴啟動開關
 
#define pump6 6 // 6號腳位連接大型潛入式幫浦
 
 
int strobe=100; // 控制LED閃爍速度
 
int sensorPin = A0; // 類比讀取:用來偵測是否有按壓門鈴開關
 
int sensorValue = 0;  // 如果讀取到門鈴值,會寫入這裡
 
 
void setup()
 
{
 
pinMode(Rum, OUTPUT);
 
pinMode(LED8, OUTPUT);
 
pinMode(Curacao, OUTPUT);
 
pinMode(LED9, OUTPUT);
 
pinMode(Orgeat, OUTPUT);
 
pinMode(LED10, OUTPUT);
 
pinMode(Grenedine, OUTPUT);
 
pinMode(LED11, OUTPUT);
 
pinMode(LED12, OUTPUT);
 
pinMode(doorbell, INPUT);
 
pinMode(pump6, OUTPUT);
 
digitalWrite (LED8, LOW); // 1號LED亮
 
digitalWrite (Rum, HIGH); // 關閉1號幫浦
 
digitalWrite (LED9, LOW);
 
digitalWrite (Curacao, HIGH); // 關閉3號幫浦
 
digitalWrite (LED10, LOW);
 
digitalWrite (Orgeat, HIGH); // 關閉3號幫浦
 
digitalWrite (LED11, LOW); // 關閉4號幫浦
 
digitalWrite (PineLime, HIGH); // 關閉4號幫浦
 
digitalWrite (LED11, LOW);
 
digitalWrite (Grenedine, HIGH);// 關閉5號幫浦
 
digitalWrite (pump6, HIGH);// 關閉6號幫浦
 
delay(1000); // 讓繼電器在開始運行前準備就緒
 
}
 
void loop()   // 這部分的程式碼會持續迴圈
 
{
 
sensorValue = analogRead(sensorPin);
 
// 這個部分是在讓LED閃閃發亮,這樣機器人看起來會比較酷
 
// 閃燈在按下開始鈕的時候會停止
 
// 按下按鈕時,LED會顯示在運轉的馬達
 
digitalWrite (LED8, HIGH); // 開啟8號腳位的LED
 
delay(strobe);         // 控制LED閃爍速度
 
digitalWrite (LED8, LOW); // 關閉8號腳位的LED
 
delay(strobe);
 
digitalWrite (LED9, HIGH); // 開啟9號腳位的LED
 
delay(strobe);
 
digitalWrite (LED9, LOW); // 關閉9號腳位的LED
 
delay(strobe);
 
digitalWrite (LED10, HIGH); // 開啟10號腳位的LED
 
delay(strobe);
 
digitalWrite (LED10, LOW); // 關閉10號腳位的LED
 
delay(strobe);
 
digitalWrite (LED11, HIGH); // 開啟11號腳位的LED
 
delay(strobe);
 
digitalWrite (LED11, LOW); // 關閉11號腳位的LED
 
delay(strobe);
 
digitalWrite (LED12, HIGH); // 開啟12號腳位的LED
 
delay(strobe);
 
digitalWrite (LED12, LOW); // 關閉12號腳位的LED
 
delay(strobe);
 
sensorValue = analogRead(sensorPin);
 
if(sensorValue < 300){
 
digitalWrite (LED8, HIGH); // 1號LED開啟
 
digitalWrite (Rum, LOW); // 1號幫浦開啟
 
digitalWrite (LED9, HIGH);
 
digitalWrite (Curacao, LOW); // 2號幫浦開啟
 
digitalWrite (LED10, HIGH);
 
digitalWrite (Orgeat, LOW); // 3號幫浦開啟
 
digitalWrite (LED11, HIGH);
 
digitalWrite (Grenedine, LOW);// 4號幫浦開啟
 
delay(8000);       // 等待8秒鐘打出1/4盎司液體
 
digitalWrite (LED10, LOW); // 關閉杏仁糖漿LED P3
 
digitalWrite (Orgeat, HIGH);   // 關閉杏仁糖漿幫浦 P3
 
digitalWrite (LED11, LOW);   // 5號幫浦LED關閉
 
digitalWrite (Grenedine, HIGH); // 4號幫浦關閉
 
delay(8000);     // 等待8秒鐘打出1/4盎司液體
 
digitalWrite (Curacao, HIGH);   // 關閉柑香酒幫浦 2號
 
digitalWrite (LED9, LOW); // 關閉柑香酒LED 2號
 
// 這個時候,柑香酒開關開啟共16秒,送出1/2盎司。
 
delay(16000);   // 等待8秒鐘打出1/4盎司液體
 
digitalWrite (LED8, LOW); // 關閉1號幫浦 LED
 
digitalWrite (Rum, HIGH);   // 關閉1號幫浦(蘭姆酒)
 
digitalWrite (pump6, LOW);   // 開啟鳳梨汁幫浦(6號幫浦)
 
//digitalWrite (PineLime, LOW); // low 打開繼電器,打開幫浦
 
delay(2500); // 延遲4秒,送出鳳梨汁。
 
digitalWrite (pump6, HIGH);     // 關閉鳳梨汁幫浦(6號幫浦)
 
//digitalWrite (PineLime, HIGH); // 關閉鳳梨汁繼電器
 
}
 
}
(譯:花神)
原文
Social media & sharing icons powered by UltimatelySocial