[40호]오믹(Automatic Mixer)
2016 ICT 융합 프로젝트 공모전 참가상
오믹(Automatic Mixer)
글 | 광운대학교 황승현, 김신복, 조영빈
심사평
JK전자 구현된 작품이 실제 사용할 수준은 아니지만, 가정이나 과일쥬스 등의 영업점에서 실제로 구현된 제품을 사용한다면 사용자의 입맛에 맞는 정확한 데이터를 기준으로 믹서기를 작동시켜 입맛을 만족시켜 줄수도 있을 것이다. 또한 사용자가 좋아하는 조합 패턴을 데이터로 저장하여 자동으로 맞춤형 서비스로 개발하는 것도 좋을것 같다.
뉴티씨 매우 좋은 아이디어이며, 원하는 과일을 선택하여 밀어내어 집어넣고, 뚜껑을 닫고 믹서를 사용한다는 개념은 매우 우수해 보인다. 자세히 보지 않으면, 좋은 아이디어임을 놓치기 쉽다. 다만, 이를 구현하는 방법은 다시 생각하여 보는 것을 권장한다. 창의성 실용성 작품성은 각각 만점을 주었으나, 기술성, 완성도 면에서 점수가 깎였다. 전체적으로는 상위권에 포진할 수 있는 좋은 아이디어라고 생각하여 매우 높은 점수를 주었다.
칩센 옛날 공상과학 영화같은데 나올만한 주제다. 천재 과학자가 집에 갔더니 믹서기가 자동으로 음료를 갈아서 자동으로 먹여주고 하는 재미있고 상세한 설명이지만 다른 사람들이 도전할 것 같지는 않다.
위드로봇 스마트 기기로 모터를 제어하는 방법은 이번 작품으로 많은 공부가 되었을 것으로 보입니다. 제어기가 단순히 on/off 제어를 사용하고 있는데, 제어기 설계 부분이 좀 더 보강되면 좋겠습니다.
1. 작품 제목 :
오믹(Automatic Mixer)
2. 작품 개요 :
오믹(Auotomatic Mixer)은 자동화 생과일주스 믹서기이다. 블루투스 기능을 이용하여 스마트 기기로 원하는 재료를 선택 및 수량을 조절할 수 있고 재료를 믹서기에 넣고 믹서기 작동까지의 동작을 몇 번의 터치만으로 할 수 있게 만든 제품이다. 제품의 제어는 아두이노를 이용하여 시행하였고, 모터와 레일, 물레 등을 이용하여 하드웨어를 구성하였다.
오믹(Automatic Mixer)의 동작과정
1. 스마트기기를 이용한 재료 및 재료의 양 선택
2. 레일을 이용하여 각 재료의 구간으로 믹서기를 이동
3. 재료의 각 구간에서 선택한 양 만큼의 재료가 믹서기로 투입
4. 믹서기의 뚜껑을 랙과 기어를 이용하여 개폐
5. 믹서기의 동작
3. 작품 설명
3.1. 주요 동작 및 특징
이 제품은 자동화, 편리성을 추구하는 현대사회에서 어플리케이션, 블루투스 기능을 통해 편리하게 생과일주스를 만들 수 있는 제품이다.
이 제품을 제작하게 된 배경으로는 바쁜 현대인들 중 아침식사를 거르고 하루를 시작하는 사람이 많다는 것에서 시작했다. 바쁜 시간 중 먹기에 부담스럽지 않은 생과일주스를 간편하게 만들 수 있는 믹서기를 만들기로 하였고, 이 믹서기를 사람들이 자주 사용하는 스마트기기를 이용해 제어하여 사람들이 더 간편하게 사용할 수 있도록 제작하였다.
이 제품의 동작 방법으로는 블루투스 기능이 있는 스마트기기로 원하는 재료를 선택하고 그 재료의 양을 정하여 버튼을 누르면, 그 정보가 믹서기의 아두이노로 보내져 자동적으로 생과일주스가 만들어져 간단하게 사용이 가능하다.
이 제품의 추가적 활용 방안으로는 카페나 음료를 파는 업소에서도 이 제품을 사용하여 근무자가 하는 일을 간소화할 수 있는데, 예를 들어 고객의 주문을 받고 포스 단말기에 블루투스를 이용하여 믹서기와 연동을 하고 주문과 동시에 주문한 재료를 찾지 않고 자동적으로 만들어 업무의 간소화가 가능해진다.
3.2. 전체 시스템 구성
3.2.1. 기본 시스템 구성
오믹(Automatic Mixer)의 기본적인 시스템 흐름은 아래 그림과 같다.
우선 제어부(아두이노)에서 블루투스를 통한 정보를 입력받게 되고 그 정보를 정리하여 과일 보관함과 믹서쪽 제어를 한다. 제어부에서 과일 1, 과일 2, 설탕의 신호가 있고 그 값에 따라 제품이 작동하도록 제작하였다. 자세한 제어방법은 각 제어부, 과일 보관함부의 설명에서 언급한다. 그리고 이 시스템을 구성하기 위한 전원은 믹서기 모터를 돌리는 콘센트에서 분기하여 사용하였다. 220V의 전압을 220:12 비율의 변압기와 5V 레귤레이터를 통하여 믹서부와 과일 보관함 부의 모터에서 사용할 12V, 5V 전원을 얻어내었다. 220:12의 변압기의 정격은 모터의 사용을 고려한 1A 정격의 변압기를 선택하였고, 변압기를 통해 얻어진 12V의 교류전원을 브릿지 소자를 통해 직류의 전원으로 바꾸었다. 그리고 커패시터를 통해 리플값을 줄여 더욱 완벽한 직류의 전원을 얻어내고, 7805 레귤레이터로 5V 전원까지 얻어내었다.
12V의 전압은 레일을 작동시키는 모터의 전원으로 사용하였고, 5V의 전압은 과일 1, 과일 2, 설탕, 뚜껑 개폐하는 모터의 전원으로 사용하였다. 이 전원들은 각 제어부의 릴레이로 연결되어 아두이노로 ON, OFF하도록 하였다.
믹서기를 작동시키는 모터의 전원은 기존 믹서기의 스위치를 우리가 제어할 수 있는 릴레이로 교체하여 사용하였다.
3.2.2. 제어부 구성
제어부는 아두이노와 과일 보관함부, 믹서부의 모터들을 ON, OFF할 수 있는 8개의 릴레이들로 구성되었다. 블루투스 모듈을 통해 스마트폰으로 입력한 정보를 아두이노에서 받고 아두이노의 D3~D10까지의 핀으로 릴레이를 ON, OFF하는 출력을 내보냈다.
릴레이 소자는 직류 12V, 교류 240V까지 통할 수 있는 릴레이를 선택하여 아두이노의 3~5V의 신호로 다양한 모터의 전원을 모두 사용 할 수 있도록 하였다.
· D3, 4핀에 연결된 릴레이는 레일을 움직이게 하는 모터의 정·역을 제어하는 것으로 아두이노에서 받은 신호에 따라 과일 1을 떨어트리는 곳, 과일 2를 떨어트리는 곳, 설탕을 떨어트리는 곳으로 순서대로 이동하여 생과일 주스에 필요한 재료를 받는다.
· D5 핀에 연결된 릴레이는 과일 1부에 연결된 모터를 제어하는 것으로, 받은 신호에 따라 최대 2번까지 과일 1을 떨어트리게 작동한다.
· D6 핀에 연결된 릴레이는 과일 2부에 연결된 모터를 제어하는 것으로, 받은 신호에 따라 최대 2번까지 과일 2을 떨어트리게 작동한다.
· D7 핀에 연결된 릴레이는 설탕부에 연결된 모터를 제어하는 것으로 받은 신호에 따라 설탕을 떨어트리게 작동한다.
· D8, 9 핀에 연결된 릴레이는 뚜껑을 여닫는 모터를 제어하는 것으로 D3~7 핀에서의 제어가 끝나게 되면 뚜껑을 닫는 역할을 한다.
· D10 핀에 연결된 릴레이는 믹서기의 메인 모터를 제어하는 것으로 D8 핀의 작동이 끝난 후에 믹서기가 작동하게 한다.
· D3~10 핀에서의 제어로 생과일 주스가 만들어지면 뚜껑이 닫혀있는 상태로 제자리에 있는데, 블루투스의 UP버튼을 누르게 되면 뚜껑이 열리고 믹서기가 처음의 자리로 이동하게 된다.
3.2.3. 레일부 구성
레일부는 믹서기를 이동시키는 레일과 뚜껑을 여닫는 기둥으로 구성되어 있다. 레일은 믹서기 모터와 믹서기를 얹을 수 있는 수레와 이 수레의 바퀴가 좌·우 방향으로만 이동할 수 있게 하는 라인으로 만들었다. 레일을 움직이는 모터는 제어부의 D3, 4핀에 연결된 릴레이가 ON, OFF됨에 따라 정방향, 역방향으로 움직인다. 처음 작동으로 D3핀에 연결된 릴레이의 ON으로 과일 1 → 과일 2 → 설탕을 받는 곳으로 순서대로 이동한다. 이동하는 동안 릴레이가 각 재료를 받는 구간에서 OFF신호를 주어 재료를 받는 동안 멈추도록 설정하였다. 모든 동작 후 D4핀에 연결된 릴레이가 모터를 역방향으로 움직이게 하여 처음의 자리로 이동하게 한다.
레일부의 뚜껑을 여닫는 기둥은 랙, 피니언, 모터를 이용하여 제작하였다.
기둥에 랙이 상·하 운동을 할 수 있을 정도의 구멍을 뚫고 피니언기어를 연결한 모터를 이용하여 뚜껑과 연결한 랙을 상·하로 움직이게 하여 뚜껑을 여닫는 동작을 수행한다. 뚜껑을 여닫는 모터의 제어는 제어부 아두이노의 D8, 9핀에 연결된 릴레이로 각 정방향·역방향 운동을 하게 하였다.
3.2.4. 과일 보관부 구성
과일 보관부의 상자는 각 과일 1, 과일 2, 설탕을 담을 수 있게 구간을 나누어 놓았다. 과일 1, 2 구간의 모서리에는 과일을 믹서기로 떨어트릴 수 있는 물레가 있고, 이 물레는 +모양으로 모터가 90° 회전시 물레에 있던 1개의 과일이 믹서기로 떨어지게 한다. 만약 제어부에서 2번의 신호를 받았다면, 물레는 180° 회전하여 2개의 과일을 떨어트리게 된다. 설탕은 모터에 연결된 바퀴의 구멍을 이용하여 모터가 한 번 회전할 때 일정량 만큼의 설탕을 떨어트리도록 제작하였다. 과일 1, 2구간 물레의 90° 만큼의 회전은 여러 번의 실험을 통하여 90° 만큼 회전하는 시간을 측정하여 릴레이를 ON, OFF하였다. 이와 마찬가지로 설탕구간의 모터도 실험을 통하여 한 바퀴 회전하는 시간을 측정하여 릴레이를 ON, OFF하였다.
3.3. 개발 환경(개발 언어, Tool, 사용 시스템)
3.3.1. 아두이노(Arduino)
■ 버튼부
버튼선택 : 블루투스를 이용하여 스마트 기기에서부터 원하는 재료에 해당하는 값을 받는다.
버튼설명
1. 1~3 : 서로 다른 재료들을 자신의 취향에 맞게 선택이 가능하다.
2. Back : 잘못 선택하였을 경우 선택을 취소할 수 있다.
3. Enter : 선택을 완료한다.
4. UP : 믹서기 뚜껑을 열고 믹서기를 제자리로 되돌린다. (작동 완료 후 사용자가 바로 먹지 않아 먼지가 들어가거나 실수로 제품을 쳐 주스가 쏟아지는 것을 방지하기 위해 작동 후 바로 올라오지 않고 따로 버튼을 둠)
if(BT_Serial.available())
{
button = (int)BT_Serial.read();
one = 1;
if(button > 48 && button < 51)
{
Stack[i] = button;
i++;
}
else if(button == 52)
{
i–;
Stack[i] = 0;
}
입력신호 저장
· 블루투스를 이용하여 받은 입력 값을 Stack 배열에 순차적으로 저장.
(블루투스로 받은 입력 값이 아스키코드에 준하기 때문에 1번부터 49의 값으로 받는다.)
· Back키를 입력받을 경우 이전 값을 지운다.
else if(button == 54)
{
for(int a = 0; < i-1 ; a++)
{
if(Stack[b] > Stack[b+1]}
{
Temp = Stack[b];
Stack[b] = Stack[b+1];
Stack[b+1] = Temp;
}
}
}
입력신호 정렬
· 입력 값 저장 후 Stack의 값들을 버블소트를 활용하여 오름차순으로 정렬하여 제품을 효율적으로 작동시킨다.
재료 개수 제한
· 너무 많은 양의 재료를 담아 작동에 무리가 가거나 실수로 선택을 많이 하여 모두 취소해야 하는 경우를 방지하기 위해 하나의 재료를 최대 2개로 개수 제한을 두었다.
for(int j = 0; j< i-1; j++)
{
if(Stack[j] == Stack[i-1])
{
count ++;
}
}
if(count >=2)
{
i–;
Stack[i]=0;
}
■ 모터부
각 모터를 작동하여 저장된 값에 맞는 재료를 믹서기에 넣고 뚜껑을 닫고 믹서기를 작동시킨다.
주 재료 투입
swicth(Stack[j])
{
case 49 ;
digitalWrite(5,1); //과일 모터
delay(70);
digital Write(5,0);
delay(1000);
Serial.print(Stack[j]);
if(Stack[j] !=Stack[j+1])
{
digitalWrite(3,1); //레일 모터
delay(2450);
digitalWrite(3,0);
serial.print(‘\n’);
}
break;
case 50;
digitalWrite(6,1);// 과일 모터
delay(150);
digitalWrite(6,0);
delay(1000);
if(Stack[j] !=Stack[j+1])
{
digitalWrite(3,1); //레일 모터
delay(1700);
digitalWrite(3,0);
}
break;
· 과일 2가 선택됐는지 확인 : 선택이 됐으면 믹서기에 투하하고 다음 값을 확인, 다음 값이 종료를 알리는 수일 경우 레일 이동, 과일 2일 경우 다시 투하 (동작이 멈추어야 하는 곳 사이간의 간격이 서로 달라 믹서기가 멈춰야하는 위치가 달라져 반복문이 아닌 조건문으로 따로 처리하여 움직이게 하였다.)
case 51 :
digitalWrite(6,1);// 설탕 모터
delay(500);
digitalWrite(6,0);
delay(1000);
break;
부 재료 투입
· 설탕모터를 한 바퀴 돌리면서 바퀴에 뚫린 구멍으로 설탕이 떨어짐
if(button == 57)
{
digitalWrite(9,1); //뚜껑 올리기
delay(2800);
degitalWrite(9,1);
delay(1000);
degitalWrite(4,1);//레일 돌려놓기
delay(4300);
degitalWrite(4,0);
delay(400000);
}
동작 종료
· UP 키를 누를 경우 뚜껑을 열고 믹서기를 제자리에 되돌린다.
4. 단계별 제작 과정
4.1.제품 구상 및 설계
1. 공모전 주제에 대한 회의 결과 스마트기기를 이용한 믹서기 제작을 결정
2. 믹서기의 이동은 레일을 이용한 좌·우 운동
3. 과일 보관함에서 과일을 떨어트리는 것은 물레를 이용하는 것, 원통모양의 기둥에서 문을 여닫은 동작을 이용하는 것 중 물레를· 이용하는 것으로 결정
4. 외관에 필요한 디자인은 생활용품점에서 구상한 것과 유사한 제품을 구매하기로 결정
4.1.1. 외관, Power Supply 제작
1. 설계에 필요한 물품 구입 : 믹서기, 레일부 상자 및 부품, 공구, Power Supply 제작을 위한 소자
2. 믹서기 분해 : 믹서기의 모터를 제어하는 스위치 및 받침대 부분을 제품 설계에 필요한 모터, 스위치, 전력 공급 부분으로 분해
3. 레일부 외관 제작 : 믹서기의 이동범위를 고려하여 두 개의 상자를 이어 붙여 원하는 길이의 외관을 제작, 모터의 이동경로 확보
4. Power Supply 제작 : 분해한 믹서기의 전력 공급 부분에서 220V 교류전원을 분기하여 변압기 → 브릿지소자 → 커패시터 및 레귤레이터의 경로로 DC 12V, 5V 구현
4.1.2. 레일부 제작
1. 제작한 외관에 수레, 수레가 다니는 길 제작
2. 레일을 구동할 모터와 레일 축 제작 : 원형의 통의 바닥에 모터 심이 들어갈 정도의 구멍을 뚫어 모터와 원형 통을 연결하고, 시멘트를 이용하여 고정
4.1.3. 아두이노 코딩
1)아두이노와 블루투스 모듈 연결 확인 : 아두이노와 블루투스 모듈, 실험을 위한 모터를 브레드보드에 연결 후 작동 확인
2) 레일부 아두이노 코딩 : 기본 동작 틀 코딩
4.1.4. 물레 제작
1) 과일 보관부 재료 구매 : 물레 재료, 상자, 공간을 나눌 재료
2) 물레 제작 : 시중에 판매하는 모터 바퀴와 나무젓가락을 이용하여 제작
4.1.5. 과일 보관부 조립 및 제작, 믹서기 뚜껑의 지지대 구상
1) 과일 보관부 조립 : 상자의 모서리를 물레에 맞는 크기를 뚫고, 물레를 연결
2) 과일 보관부 공간 나눔 : 물레의 모터부분과 물레부분을 칸막이를 이용하여 구분
3) 믹서기 뚜껑의 지지대 구상 : 뚫을 수 있는 재질의 기둥을 구하여 ‘ㄱ모양’ 으로 만든 후 뚜껑을 랙, 피니언기어를 이용하여 개폐하기로 결정
4.1.6. 뚜껑 지지대 제작
1) 뚜껑 지지대 제작 : 나무 막대를 연결하고 구멍을 뚫어 랙과 피니언기어가 달린 모터를 연결하여 뚜껑 지지대 제작
4.1.7. 아두이노 코드 작동
1) 과일 보관부의 물레를 아두이노를 이용하여 제어 시도 : 아두이노의 출력으로 모터를 구동하기에 전력이 부족함 인지
2) 과일 보관부 모터 구동 회의 : 레일부 모터와 같이 릴레이를 이용하여 220VAC를 변성한 전원 사용 결정
4.1.8. 아두이노 코드 작동(2)
1) 릴레이 소자 연결 : 아두이노와 릴레이, 모터를 연결하여 제어부 완성
4.1.9. 종합 구동
1) 모든 하드웨어 연결 : 하드웨어 및 회로를 연결 후 제어값 조정 중 레일 모터와 레일 축을 고정하는 시멘트의 마모로 인해 모터가 헛도는 것을 발견
2) 레일모터 파손 : 레일모터와 레일 축의 재 연결 과정에서 모터가 파손됨
3) 모터 재구매 회의 : 기존의 모터는 레일을 돌리기에 힘이 과하고 재 구매시 가격 부담이 커 더 저렴한 모터로 구매 결정
4.1.10. 모터 재 구매 및 최종 제어 설정
1) 모터 재 구매 : 기존 모터보다 저렴한 모터 구매
2) 최종 연결 후 제어값 조절
4.2. 제품 시연
5. 기타 (회로도, 소스코드, 참고문헌 등)
5.1. 소스코드
#include <SoftwareSerial.h>
SoftwareSerial BT_Serial(2,12); //RX TX
// 버튼 변수
int button ;
int Stack[5] = {0};
int count = 0;
int i = 0 ;
int Temp;
int one = 0;
int END = 0;
void setup() {
pinMode(3, OUTPUT); // 레일 정가동
pinMode(4, OUTPUT); // 레일 역가동
pinMode(5, OUTPUT); // 과일 1
pinMode(6, OUTPUT); // 과일 2
pinMode(7, OUTPUT); // 설탕
pinMode(8, OUTPUT); // 뚜껑 정
pinMode(9, OUTPUT); // 뚜껑 역
pinMode(10, OUTPUT); // 믹서기
Serial.begin(9600);
BT_Serial.begin(9600);
}
void loop() {
count = 0;
if(END == 0)
{
if (BT_Serial.available())
{
button = (int)BT_Serial.read();
one = 1;
if(button > 48 && button < 51)
{
Stack[i] = button;
i++;
}
else if(button == 52)
{
i–;
Stack [i] = 0;
}
else if(button == 54)
{
for(int a = 0; a < i-1 ; a++)
{
for(int b = 0; b < i-1-a; b++)
{
if(Stack[b] > Stack[b+1])
{
Temp = Stack[b];
Stack[b] = Stack[b+1];
Stack[b+1] = Temp;
}
}
}
END = 1;
}
for(int j = 0; j< i-1; j++)
{
if(Stack[j] == Stack[i-1])
{
count ++;
}
}
if(count >= 2)
{
i–;
Stack[i] = 0;
}
}
}
if(one == 1)
{
Serial.print(“Stack: “);
for(int a = 0; a <= i ; a++)
{
//시리얼 모니터로 조이스틱 값 확인
Serial.print(Stack[a]);
}
one = 0;
Stack[i] = 90;
Serial.print(“\n”);
}
/////////////////////////////////////// 블루투스 입력
delay(500);
if(END == 1)
{
for(int j = 0; j < i;j++)
{
switch(Stack[j])
{
case 49 :
digitalWrite(5, 1); //과일 모터
delay(70);
digitalWrite(5, 0);
delay(1000);
Serial.print(Stack[j]);
if(Stack[j] != Stack[j+1])
{
digitalWrite(3, 1); //레일 모터
delay(2450);
digitalWrite(3, 0);
Serial.print(‘\n’);
}
break;
case 50 :
digitalWrite(6, 1); //과일 모터
delay(150);
digitalWrite(6, 0);
delay(1000);
if(Stack[j] != Stack[j+1])
{
digitalWrite(3, 1); //레일 모터
delay(1700);
digitalWrite(3, 0);
}
break;
case 51 :
digitalWrite(6, 1); //설탕 모터
delay(500);
digitalWrite(6, 0);
delay(1000);
break;
}
delay(1000);
}
digitalWrite(8, 1); //뚜껑 내리기
delay(2900);
digitalWrite(8, 0);
delay(2000);
delay(3000);
digitalWrite(10, 1); //믹서기 가동
delay(10000);
digitalWrite(10, 0);
delay(1000);
END = 0;
}
if(button == 57)
{
digitalWrite(9, 1); //뚜껑 올리기
delay(2800);
digitalWrite(9, 0);
delay(1000);
digitalWrite(4, 1); //레일 돌려놓기
delay(4300);
digitalWrite(4, 0);
delay(400000);
}
}
5.2. 전체 회로도