유튜브에서 비슷한 프로젝트들을 보고 바봇(Barbot)을 만들기로 영감을 받았습니다. 대부분의 바봇은 기술 수준과 부품 수가 높았는데, 펌프를 사용하면 단순화할 수 있을 것 같았습니다. 펌프를 사용하는 다른 디자인들은 매우 느리게 펌핑(작은 음료 한 잔 섞는 데 1분 이상 소요)하지만, 제가 사용하는 펌프는 이 용도에 아주 적합합니다.
프로젝트 진행 상황을 보여주는 영상:
이 프로젝트를 만들면서 원하는 음료를 믹스할 수 있도록 탄탄한 코드와 좋은 주석에 신경 썼습니다.
먼저 집에 있던 나무 패널로 프레임을 만들었습니다. 16.5cm x 33cm 크기 4개를 자르고, 두 개씩 나사로 연결했습니다.
이전에 자른 판들을 연결했을 때 안쪽 정사각형 치수로 나무 조각을 하나 더 자르고, 28mm 드릴 비트로 구멍을 뚫었습니다. 구멍 중심이 5cm(2인치) 간격이 되도록 하여 펌프 설치 공간을 확보하세요.
판들을 사진처럼 나사로 조립했습니다. 나사 구멍을 작은 드릴로 미리 뚫으면 나무가 갈라지는 것을 방지할 수 있습니다.
이제 아두이노 UNO와 블루투스 모듈, 릴레이 보드를 연결할 차례입니다. 펌프는 아직 연결하지 마세요. 배선도를 따라 연결하세요.
릴레이 보드, 블루투스 모듈, 아두이노 UNO 회로가 작동하는지 확인해야 합니다. 코드를 아두이노 UNO에 다운로드한 후 테스트하세요.
앱을 다운로드하고 블루투스 모듈과 연결하세요. 블루투스 모듈 전원이 켜져 있고 깜빡이는지 확인하세요.
다음 영상 가이드를 따르세요:
참고: 실수를 최소화하기 위해 앱에서 버튼을 2-3초간 길게 눌러야 작동하도록 만들었습니다.
칵테일 버튼을 누르면 릴레이가 켜지고 꺼지는 소리가 들릴 겁니다. 릴레이 보드의 램프로도 확인 가능합니다. 모든 펌프를 테스트하려면 세척 프로그램을 실행하세요. 각 릴레이가 5초씩 순차적으로 활성화됩니다.
0.1μF 커패시터를 납땜해야 합니다. 그렇지 않으면 DC 모터 브러시의 무선 주파수 노이즈가 블루투스 모듈 연결 끊김 등 원치 않는 문제를 일으킵니다.
이후 파워 서플라이와 펌프를 연결하세요. 미리 뚫어둔 구멍에 펌프를 장착합니다. 여분의 원형 실드 부품을 제거해야 하는데, 쉽게 뜯어집니다. 하나는 나중에 쓰니 보관하세요.
배선도에 따라 파워 서플라이, 릴레이 보드, 펌프를 연결하세요. 앱으로 펌프 작동 확인 후, 블루투스 통신 문제 시 커패시터가 떨어졌는지 확인하세요.
이제 실제 음료 제조를 위해 설정합니다. 먼저 모든 펌프를 세척하세요. 큰 피처나 버킷에 깨끗한 물을 담고 모든 흡입 호스를 넣으세요. 압력 측 호스(나중에 칵테일 잔이 놓일 곳)에도 빈 피처나 버킷을 두세요. 세척 프로그램을 실행해 모든 펌프 작동 확인.
첫 칵테일 제조를 위해 호스를 올바른 병에 넣으세요. 배선도를 따랐다면 펌프 1(릴레이 1, 핀 2 연결)은 보드카, 펌프 2는 크랜베리 주스 순서입니다...
// 각 음료에 사용되는 핀 정의, 펌프와 음료 연결 방식에 따라 변경 가능
int Vodka = 2;
int Cointreau = 3;
int CranberryJuice = 4;
int Sprite = 5;
int LemonJuice = 6;
int SugarWater = 7;
int BlueCur = 8;
int Gin = 9;
변경 사항이 있다면 코드의 핀 번호를 수정하세요.
"전체 설정" 버튼은 모든 펌프를 잠시 작동시켜 호스와 펌프를 채웁니다. 처음엔 각 펌프를 개별 설정하여 올바른 병에 연결되었는지 확인하세요.
"보드카 설정"으로 시작해 모든 병을 순차적으로 확인하세요.
모두 괜찮으면 첫 칵테일을 만들어보세요. 큰 잔용으로 프로그래밍되어 있으니 큰 잔을 사용하세요 ;-)
음료 비율이 마음에 안 들면 코드에서 수정하세요:
// 코스모폴리탄
if (state == 'c') {
Serial.println("Cosmo in the making");
Mix(2500,1500,3800,0,1200,1200,0,0);
// 보드카, 트리플 섹, 크랜베리 주스, 스프라이트, 라임 주스, 설탕 물, 블루 큐라소, 진
}
괄호 안 값은 각 펌프 작동 시간(밀리초)입니다. 예를 들어 설탕 물 양을 1.2초에서 2초로 늘리고 싶다면 Mix(2500,1500,3800,0,1200,1200,0,0)을 Mix(2500,1500,3800,0,1200,2000,0,0)으로 변경하세요.
모든 값을 이렇게 조정하여 입맛에 맞게 튜닝할 수 있습니다.
질문 있으시면 댓글 남겨주세요.
업데이트 => 약간 다른 레이아웃으로 하나 더 만들었습니다.
커피 한 잔 사주시면 작업에 큰 힘이 됩니다.
코드
블루투스 기능 아두이노 칵테일 메이커 (C/C++)
블루투스로 연결하여 칵테일 메이커가 음료를 만들게 합니다.
// created by Seafoxc
//#include <SoftwareSerial.h>
//SoftwareSerial EEBlue(0, 1); // RX | TX
// 각 음료에 사용되는 핀 정의
int Vodka = 2;
int Cointreau = 3;
int CranberryJuice = 4;
int Sprite = 5;
int LemonJuice = 6;
int SugarWater = 7;
int BlueCur = 8;
int Gin = 9;
int state = 0;
int TimeBetweenPours = 500; // 다음 펌프로 전환 전 대기 시간
void setup() {
Serial.begin(9600);
Serial.println("The bluetooth gates are open.\n Connect to HC-05 from any other bluetooth device with 1234 as pairing key!");
// 핀 2-9를 출력으로 설정하여 릴레이 보드 구동
pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT);
pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT);
// 릴레이 보드가 "로우 트루" 방식이라 출력을 로우로 설정하면 릴레이가 활성화됨.
// 전원 켤 때 모두 켜지지 않게 하려면 하이로 설정
digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH);
digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH);
}
void loop() {
if(Serial.available() > 0){
state = Serial.read();
Serial.println(state);
}
// 칵테일 레시피들 (생략 - 원문 참조)
// 'a'~'l': 각종 칵테일, 'm'~'u': 설정 및 세척
// 예: 보드카 스프라이트
if (state == 'a') { Mix(3000,0,0,0,5000,0,0,0); }
// 예: 블루 라군
if (state == 'b') { Mix(2000,0,0,5000,1800,1000,1800,0); }
// 예: 코스모
if (state == 'c') { Mix(2500,1500,3800,0,1200,1200,0,0); }
// ... 기타 레시피 생략
}
void Mix(int DelayTimeVodka, int DelayTimeCointreau, int DelayTimeCranberryJuice, int DelayTimeSprite,
int DelayTimeLemonJuice, int DelayTimeSugarWater, int DelayTimeBlueCur, int DelayTimeGin) {
state = 0;
delay(800);
digitalWrite(Vodka, LOW); delay(DelayTimeVodka); digitalWrite(Vodka, HIGH); delay(TimeBetweenPours);
digitalWrite(Cointreau, LOW); delay(DelayTimeCointreau); digitalWrite(Cointreau, HIGH); delay(TimeBetweenPours);
digitalWrite(CranberryJuice, LOW); delay(DelayTimeCranberryJuice); digitalWrite(CranberryJuice, HIGH); delay(TimeBetweenPours);
digitalWrite(Sprite, LOW); delay(DelayTimeSprite); digitalWrite(Sprite, HIGH); delay(TimeBetweenPours);
digitalWrite(LemonJuice, LOW); delay(DelayTimeLemonJuice); digitalWrite(LemonJuice, HIGH); delay(TimeBetweenPours);
digitalWrite(SugarWater, LOW); delay(DelayTimeSugarWater); digitalWrite(SugarWater, HIGH); delay(TimeBetweenPours);
digitalWrite(BlueCur, LOW); delay(DelayTimeBlueCur); digitalWrite(BlueCur, HIGH); delay(TimeBetweenPours);
digitalWrite(Gin, LOW); delay(DelayTimeGin); digitalWrite(Gin, HIGH); delay(TimeBetweenPours);
Serial.println("Drink is done!");
state = 0;
}
앱 소스 파일 (빌드에 불필요) - YAML
MIT App Inventor에 업로드할 수 있는 AIA 파일입니다. 앱 인벤터 초보라 코드가 완벽하진 않지만 작동합니다 :-)