[55호]스마트 사물함
2019 ICT 융합 프로젝트 공모전 입선
스마트 사물함
글 | 국민대학교 이우섭 이다연 유지호 채인석
1. 심사평
칩센 음성 인식 기술을 이용한 여러가지 서비스가 새로이 만들어지고 있는 최근 시점에 맞추어 볼때 재미있는 작품을 본듯 합니다. 음성 인식을 진행할 음원을 등록하는 과정 등에서 현재 개발 작품에 사용된 솔루션의 경우 분명한 제약이 있습니다만, 최근 AWS 및 여타 음성 인식 솔루션을 도입한다면 훨씬 다양한 어플리케이션에 접목이 가능할 것으로 보입니다. 음성 인식과 관련하여 추가적인 연구와 개발을 진행하면 더 좋은 아이디어가 나올수 있으리라는 기대가 됩니다.
뉴티씨 매우 간단한 것이지만, 아주 유용하게 사용될 수 있을 것이라고 생각됩니다. 사실, 어떤 부품이 어디에 있는지 찾는 것도 일이니까요. 종류가 작으면 모르는데, 많아지게 되면 점점 더 어려워지게 되지요. 이 스마트 사물함은 택배, 공구, 부품, 약재 등을 자동으로 찾아서 필요한 수량만큼씩 내려주는 시스템으로 발전할 가능성도 있다고 생각됩니다.
위드로봇 일상에서 아이디어를 얻은 실용성이 높은 작품으로 평가됩니다. 모터 제어 부분을 좀 더 보강하면 더욱 좋은 작품이 될 것 같습니다.
펌테크 키 패드 등의 터치 방식이 아닌 음성인식 방식을 통해 슬라이더 와 서보모터를 구동시키는 등 아이디어가 우수한 작품이라고 생각합니다. 작품의 완성도가 높았으며 학부과정의 학생이 구현하기에 적정한 난이도를 가진 작품이라고 생각합니다.
2. 작품 개요
주제를 선정하는데 있어 2가지를 고려하기로 결정했다.
첫째는, 4차 산업시대에 발맞춰 관련된 주제를 선정할 것이다.
최근 ‘2017년부터 세상을 지배할 4M’ 이라는 기고 글에서 4가지 트렌드를 이야기했다. 글로벌 음성인식 시장은 폭풍 성장하였고, 금년 초 글로벌 시장 조사업체인 트랜드포스에 따르면 전 세계 음성인식 솔루션 시장은 4년 뒤인 2021년까지 159억 8000만 달러로 급성장할 것으로 전망하였다. 지난해 26억 1000만 달러와 비교하면 불과 5년 새에 6배가량 폭풍 성장한 것이다. 연 평균 성장률이 43.6[%]을 웃돌고 있다. 그런데 전 세계가 본격적인 음성인식 시대를 맞았지만 한국 기업들은 주도권 다툼에서 크게 밀리는 것으로 나타났으며 가전제품에 기능은 도입했지만 향후 시장을 주도할 플랫폼이나 생태계 경쟁에서는 이제 겨우 걸음마를 딛는 수준이다. 그 대신 아마존, 구글 등 미국 기업들이 음성인식 시장을 주도하고 있는 양상이다. 실제 작년 초 미국 라스베이거스에서 열린 시계 최대 쇼인 ‘CES 2017’ 에서는 인공지능과 결합한 음성인식 기술을 적용한 가전제품, 자율주행 자동차가 쏟아져 나왔다.
둘째는 일상생활에서 실제로 겪었던 불편함에 대해 생각해볼 것이다,
재학 당시 국가근로장학생으로 실습준비실에서 근로를 한 적이 있었다.
실습준비실에는 수없이 많은 저항과 커패시터 등 여러 IC 소자들이 있었는데 학생들이 필요로 하는 소자를 일일이 서랍을 직접 열면서 내용물을 찾아야하는 서랍형 수납함에 불편함을 느꼈습니다. 따라서 음성인식과 결합하여 ‘음성인식 수납함’을 제작한다면 여러 분야에 적용 가능할 것으로 판단하였고, 결과적으로 ICT 융합 프로젝트에 참여하는 계기가 되었습니다.
3. 작품 설명
음성인식 수납함이다. 재학 당시 국가근로장학생으로 실습 준비실에서 근로를 한 적이 있었는데 실습준비실에는 수없이 많은 저항과 커패시터 등 여러 IC 소자들이 있다.
학생들이 필요로 하는 소자는 무수히 많았으며 이를 일일이 서랍을 직접 열면서 내용물을 찾아야하는 서랍형 수납함에 불편함을 느꼈고, 따라서 VoiceRecognition V3을 이용하여 음성으로 말하는 원하는 물건이 들어있는 수납함이 열려 위치를 알려주는 것이다. 이번 작품의 핵심 기술인 물품 탐색 기능은 수십 개로 구성된 서랍형 수납함뿐만 아니라 기업의 물류창고 및 도서관 등에서도 활용 될 수 있다. 특히 본 작품에서 사용한 시스템을 응용하여 출력방식을 LED에서 소리로, 입력방식을 음성에서 타이핑 형식으로 변경할 경우 시각·청각 장애인들을 위한 물품탐색까지도 활용 가능하다는 것이 장점이다. 또한, 모터 슬라이더 포텐셔미터를 이용하기 때문에 지정된 위치로 즉각 이동하여 시간지체를 최소화할 수 있다.
3.1. 주요 동작 및 특성 / 전체 시스템 구성
3.1.1. 기획 기술의 개요
제어 순서도
기존의 사물함은 직접 목표한 사물함을 찾고 움직여야 하는 번거로움이 있으나 본 작품은 VoiceRecognition V3을 활용하여 음성인식을 하고 이후 내장된 코드에 따라 모터 슬라이더 포텐셔미터 및 ServoMotor가 동작하여 입력한 사물함이 열리게 된다. 따라서 불필요한 움직임을 최소화하여 시간을 절약할 수 있다.
3.1.2. 기획 기술의 목표
3.1.3. 작품 구조
1) Arduino Uno : 본 프로젝트에서 핵심 부품 중 하나입니다. 모터 슬라이더 포텐셔미터 및 ServoMotor, VoiceRecognition V3을 코딩을 통해 제어한다.
2) VoiceRecognition V3 : 내장 마이크가 아니라 3.5[mm] mono-channel 마이크로폰을 이용하며, 음성명령 또한 정해진 명령이 아니라 사용자가 직접 음성명령을 등록하는 방식이다. UART 통신으로 아두이노와 연결될 수 있다. 사용자가 직접 음성명령을 등록하는 과정을 Train이라고 하며, 모듈에 Train된 음성 명령을 복사하는 것을 Load 라고 한다. 최대 80개까지 음성명령을 Load 할 수 있으며 그룹화 하여 한 그룹에는 최대 7개의 음성 명령이 사용 가능하다.
3) 모터 슬라이더 포텐셔미터 : 모터 슬라이더 포텐셔미터는 기본적으로 작은 모터와 벨트에 의해 동작되는 슬라이더 포텐셔미터이다. 슬라이더 두 개의 10K 리니어 taper 포텐셔미터를 포함하고 있어 하나는 슬라이더의 위치를 읽기 위한 서보 피드백으로 사용이 가능하고 다른 하나는 제어하고자 하는 타겟에 사용이 가능하다. 또한 금속 슬라이더 탭에 전기적으로 직접 연결된 터치 센스 라인이 있어 슬라이더를 정전식 터치 회로에 인터페이스 할 수 있다.
본 모터 슬라이더는 미리 설정된 위치들로 점프하여 이동하거나 가상 컨트롤러에게서 물리적인 피드백을 얻고자할 때 유용하다. 이외에도 모터에 펄스를 주어 즉각적인 피드백을 주거나 가벼운 경로봇을 위해 리니어 엑추에이터로도 사용이 가능하다.
4) Servo Motor : 모터 슬라이더 포텐셔미터를 이용하여 x축과 y축의 이동을 담당한다면 Servo Motor는 지정된 위치로 이동한 뒤 서랍을 밀어주기 위해 동작한다.
5) L293 Motor Shield : 모터 슬라이더 포텐셔미터 역시 DC모터와 벨트의 조합이기 때문에 양방향 제어를 위해 L293 Motor Shield를 이용하였다. L293 Motor Shield의 내부회로는 Full-Bridge로 구성되어 있다.
6) Transistor C1815 : 모터 슬라이더 포텐셔미터는 DC모터와 가변저항의 결합이다 따라서 원하지 않은 값을 읽어 프로그램이 멈추는 경우가 발생하였다. 따라서 Transistor는 하나의 스위치 역할이 가능하기 때문에 안정적인 구동을 위해 사용하게 되었다.
7) 그 외의 재료로는 만능기판과, LED 발광 다이오드가 있습니다.
3.2. 개발 환경
3.2.1. Hardware(회로도)
3.2.2. Software(코딩)
작품을 개발하기에 앞서 가장 주요한 모터 슬라이더 포텐셔미터, Voice Recognition V3 및 ServoMotor를 제어하기 위하여 C언어를 기반으로 한 Arduino Uno를 이용하였습니다.
3.2.3. 음성명령을 등록하는 Train 과정
기본적으로 들어있는 코딩 라이브러리입니다. 키 코드를 이용하여 VoiceRecognition V3에 사용자가 직접 음성 명령을 등록할 수 있습니다. 사용자가 직접 음성 명령을 등록하는 과정을 Train이라고 하며, 모듈에 Train된 음성 명령을 복사하는 것을 ‘Load’ 라고 하며 최대 80개까지 음성명령을 Load 할 수 있습니다. 그룹화하여 한 그룹에는 최대 7개의 음성 명령이 사용 가능하다. 즉, 한 그룹만 존재한다고 하면 최대 7개의 명령만 등록할 수 있습니다.
3.2.4. 모터 슬라이더 포텐셔미터 및 Servo Motor 제어를 위한 코딩
#include <VoiceRecognitionV3.h> //앞서 설정한 Train 라이브러리
#include <Servo.h> // 서보모터 사용을 위한 라이브러리
Servo servomotor;
Servo servomotor1;
VR myVR(2,3); // 2:RX 3:TX
uint8_t records[7];
uint8_t buf[64];
#define one 1
#define two 2
#define three 3
#define four 4
#define five 5
#define six 6
int Hold=0;
int S1=A0; // X축 가변저항
int S2=A1; // Y축 가변저항
int EN1=4;
int IN1=5;
int EN2=7;
int IN2=6;
int SW1 = 8;
int SW2 = 9;
int pos = 90;
void setup()
{
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(EN1,OUTPUT);
pinMode(EN1,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(SW1,OUTPUT);
pinMode(SW2,OUTPUT);
servomotor.attach(10);
servomotor1.attach(11);
myVR.begin(9600);
Serial.begin(115200);
}
void loop()
{
int ret;
ret = myVR.recognize(buf, 50);
if(ret>0){
switch(buf[1]){
case one:
Serial.println(“1″);
Hold=1;
break;
case two:
Serial.println(“2″);
Hold=2;
break;
case three:
Serial.println(“3″);
Hold=3;
break;
case four:
Serial.println(“4″);
Hold=4;
break;
case five:
Serial.println(“5″);
Hold=5;
break;
case six:
Serial.println(“6″);
Hold=6;
break;
default:
Serial.println(“Record function undefined”);
break;
}
}
if(Hold>0){
MotorState(Hold);
Hold=0;
}
}
void MotorState(int State){
int LX,HX,LY,HY;
int MS1=0;
int MS2=0;
int X=0;
int Y=0;
boolean XST=LOW;
boolean YST=LOW;
while(State==1,2,3,4,5,6){
if(State==1){
LX=5;
HX=10;
LY=70;
HY=75;
XST=HIGH;
MS1=1;
break;
}
else if(State==2){
LX=10;
HX=15;
LY=70;
HY=75;
XST=HIGH;
MS2=1;
break;
}
else if(State==3){
LX=95;
HX=100;
LY=70;
HY=75;
XST=HIGH;
MS2=1;
break;
}
else if(State==4){
LX=5;
HX=10;
LY=0;
HY=5;
XST=HIGH;
MS1=1;
break;
}
else if(State==5){
LX=10;
HX=15;
LY=0;
HY=5;
XST=HIGH;
MS2=1;
break;
}
else if(State==6){
LX=95;
HX=100;
LY=0;
HY=5;
XST=HIGH;
MS2=1;
break;
}
}
while(XST==HIGH){
X=map(analogRead(S1),0,1023,0,115);
digitalWrite(SW1,LOW);
digitalWrite(SW2,HIGH);
if((LX<X)&&(X<HX)){
digitalWrite(EN1,LOW);
analogWrite(IN1,0);
XST=LOW;
YST=HIGH;
break;
}
else if(X>=HX){
digitalWrite(EN1,HIGH);
analogWrite(IN1,250);
}
else if(X<=LX){
digitalWrite(EN1,LOW);
analogWrite(IN1,250);
}
}
while(YST==HIGH){
Y=map(analogRead(S2),0,1023,0,116);
digitalWrite(SW1,HIGH);
digitalWrite(SW2,LOW);
if((LY<Y)&&(Y<HY)){
digitalWrite(EN2,LOW);
analogWrite(IN2,0);
YST=LOW;
servomotor.write(-(pos*MS1)+90);
servomotor1.write(pos*MS2+90);
break;
}
else if(Y>=HY){
digitalWrite(EN2,LOW);
analogWrite(IN2,250);
}
else if(Y<=LY){
digitalWrite(EN2,HIGH);
analogWrite(IN2,250);
}
}
delay(600);
servomotor.write(90);
servomotor1.write(90);
MS1,MS2=0;
return;
}
모터 슬라이더 포텐셔미터는 금속 슬라이더 탭에 전기적으로 직접 연결된 터치 센트 라인이 있어 슬라이더를 정전식 터치 회로에 인터페이스 할 수 있다.
본 모터 슬라이더는 미리 설정된 위치들로 점프하여 이동하거나 가상 컨트롤러에게서 물리적인 피드백을 얻고자할 때 유용하다.
위의 코딩은 모터 슬라이더 포텐셔미터의 위치를 설정해주는 것이다.
4. 단계별 제작과정
서랍장에 모터 슬라이드 포텐셔미터를 뒤쪽에 설치함 ▶ 글루건을 이용하여 고정 ▶ 필요한 전선 연결 ▶ 모터 슬라이드 포텐셔미터 및 서보모터 연결 ▶ 아두이노 및 음성 쉴드 부착 ▶ 아두이노및 음성 쉴드 수납장에 부착 ▶ 브래드보드에 서보모터와 아두이노 와이어 연결 및 납땜. ▶ 수납장에 외함 및 뚜껑 부착
4.1. 서보모터 및 모터 슬라이드 포텐셔미터 동작 확인
이번 작품의 핵심은 바로 모터 슬라이더 포텐셔미터와 서보모터입니다. 가변저항과 DC모터의 결합으로 이루어진 모터 슬라이더 포텐셔미터의 경우 x축과 y축 이동을 담당하며 서보모터의 경우에는 서랍이 나올 수 있도록 하는 역할입니다. 이를 확인해보기 위해서 DC모터 방향 제어하는 L293 Motor Shield를 이용하여 정상 동작을 확인하는 과정을 거쳤습니다.
4.2. 조립과정 : 모터 슬라이더 포텐셔미터 결합
서랍과 모터 슬라이더 포텐셔미터를 결합하는 과정입니다. 왼쪽 상단부터 1번이며 총 6번까지 존재하며 지정된 위치에 따라 x축과 y축으로 이동하는 역할을 담당한다.
4.3. 조립과정 : 서보모터 결합하기
모터 슬라이더 포텐셔미터를 이용하여 원하는 위치로 이동했다면 서보모터의 경우에는 지정된 위치 도달시 서랍을 밀어주는 역할을 합니다. 또한 서보모터로 적절히 밀어줄만한 막대가 필요했지만 원하는 부품을 구할 수 없었기 때문에 직접 Fusion360을 이용하여 설계 및 3D 프린터를 이용하여 출력한다.
4.4. 서랍 네이밍
의로 구분하기 위해 서랍에 번호를 부여함으로써 구분하게 쉽게 하는 과정이다. 녹음 과정 당시 1번, 2번 등으로 설정했지만 원한다면 다른 방법으로 설정해도 무관하다.
4.5. 외관 꾸미기
동작을 위해 사용한 Arduino와 각종 부품을 가리기 위해 외관을 제작해서 붙이는 과정입니다. 저희 조 이름인 ‘1등은 우리꺼조‘를 적은 모습이다.
4.6. 최종 시연
완성된 작품으로 몇 가지 테스트를 진행했습니다. 기획 당시 세운 목표는 다음과 같습니다.
이에 대한 테스트 결과 우선 인식을 한다면 매우 빠른 속도로 동작한다는 것을 확인할 수 있었으며 주위 소음 여부에 따른 인식률에 대해 실험을 진행했다.
위 실험은 1세트당 10번씩 진행 했으며 주위에 블루투스 스피커를 이용하여 노래를 틀거나 학교 앞 카페에서 측정하였습니다. 위 실험 결과를 바탕으로 어느 정도 시끄럽더라도 인식한다는 것을 알 수 있다.
5. 향후 개선방안
5.1. 시각적인 효과 추가
본 작품개발 초기 단계에 서랍이 열리면 그림과 같이 LED가 들어오게 함으로써 서랍의 개수가 늘어나더라도 어느 위치의 서랍이 열렸는지 정확히 알 수 있게 하려고 했다. 하지만 LED에 전원을 어떤식으로 공급할지, 선 정리는 어떻게 할지에 대한 문제에 직면하여 이번 작품에서는 제외하기로 했습니다. 따라서 향후 본 문제를 팀원과 회의를 통해 개선할 예정이다.
5.1.1. 시·청각 장애인을 위한 시스템
본 작품에 도입된 시스템을 응용하여 출력방식을 소리로, 입력방식을 음성에서 타이핑 형식으로 변경할 경우 시·청각 장애인들을 위한 물품탐색도 가능하다고 생각하였습니다. 따라서 추후 관련된 작품 역시 응용해서 제작할 예정이다.
5.2. 참고문헌
음성인식 기술 어디까지 왔나? : https://m.post.naver.com/viewer/postView.nhn?volumeNo=16706161&memberNo=39046504&vType=VERTICAL