June 16, 2019

디바이스마트 미디어:

[24호]DIY프로젝트 공모전 – 돈돈

Cap 2014-07-25 17-07-07-546

심사평
NTREX Lab 기술적 난이도를 가지는 작품은 아니지만, 아이디어가 참신하고, 특히 DIY의 본래 취지에 부합해서 고려하면 좋은 컨셉의 작품으로 판단됩니다.
싱크웍스 재미있는 작품인 것 같다. 기술성 평가에 7을 주었는데 이것은 전자기술에만 준 것이 아니라 기구물적으로 돼지모양을 제작한 공로(?)를 인정한 것이다. 전자기술만 놓고 본다면 한 5점~ 전자기술을 모두가 한번 웃어볼 수 있는데 사용한 것에 대해서 창의성을 높게 평가하였다.
펌테크 작품자체가 단조롭고 단순한 느낌이 듭니다. 부가적인 기능이 더욱 보완되어야 할 것으로 생각됩니다.
JK전자 재미있는 작품이지만 실용성과 기술성 면에서는 조금 약한것 같습니다.

작품개요

농자천하자지대본이라고 일컬어진 우리의 농경사회에서 귀하게 여겨지던 소를 먹을 수 없던 우리 사회에서는 상대적으로 흔하게 먹을 수 있는 것이 개와 돼지였다. 그 중 한눈에 봐도 푸근한 인상을 주는 돼지는 새로운 사업을 하거나 풍작을 기원할 때도 제사상에 반드시 올라가게 되는 참으로 우리에게 친근한 동물이다.
현대로 나아오면서 이러한 전통은 계속 이어졌다. 새로운 혁신을 기대하고 상황의 변화를 기대하며 돼지 머리를 고사상에 올리는 전통이 계속 되었고 우리는 이와 같은 전통을 공대인으로서 이어가기로 했다. 연구방 동아리에서는 1년마다 창립제를 지내는데, 여기에 올라가게 될 돼지 머리를 전자회로를 이용한 모습으로 변화시켜, 미래를 주도하고 변화시킬 공대인의 자존심을 치켜 세우기로 하였다.

작품설명

철사로 이루어진 뼈대에 종이테이프, 락커로 살을 붙였고, 회로와 코드로 동작을 구현하였다. 삶은 무미건조한 돼지머리와는 달리 ‘돈돈’ 이는 돈을 받으면 웃음으로 반응해줄 줄 알아, 밝은 미래를 상징하는 돼지머리로서의 자격을 좀 더 갖추었다.

주요 동작 및 특징
인식 대기 상태에서 ‘돈돈’이는 아래쪽에 배치된 LED로 구현한 무표정한 눈이 떠져있다. 입 속에 설치된 센서에서 돈 봉투가 인식이 되면 양 귀를 앞 뒤로 흔들고, 웃는 눈이 되며, 콧구멍에 불이 깜빡인다.

전체 시스템 구성

Cap 2014-07-25 17-03-03-015
돈돈은 오른쪽과 같은 알고리즘으로 작동된다.

돈돈 주요 부품 소개
적외선센서- 적외선 수·발광센서
적외선이 들어오면 저항이 무한대에서 어느 정도 낮아지게 된다. 평소 풀다운 저항에 의해 GND 값을 갖지만 적외선이 들어오게 되면 전압이 올라가게 된다. 돈 봉투가 흰색이기에 들어오면 적외선 반사를 가장 많이 하는 것을 이용하여 적외선 센서감지를 하였다.

모터- 서보모터를 사용
일정한 펄스에 듀티비를 통해 정해진 각도로 이동하는 모터. 귀를 움직이기 위해 사용하였다.

ATmega8
Atmel사의 8bit MCU Atmega8을 이용하였으며 사용한 기능은 아래와 같다.
·ADC Analog to Digital Converter : 아날로그의 값을 디지털값으로 바꾸어 준다. ADC의 기준 전압으로 비교하여 값을 정하며 16bit ADC이기 때문에 총 0 ~ 216-1 까지의 값이 나온다. 여기서는 봉투가 들어왔나 확인하기 위해 사용된 적외선 센서의 값을 처리하는데 사용하였다.
·TIMER : MCU 내부에서 숫자를 세는 기능. 8비트 카운터는 0 ~255까지 10비트 카운터는 0 ~ 1023까지 숫자를 센다. 여기서는 서보모터의 펄스 듀티비를 조절하기 위해 10비트 카운터를 사용하였다.

개발 환경
WinAVR 프로그램을 이용하여 C언어로 코딩하였다.

단계별 제작 과정

1. 아이디어 구상
지면 상에 기대하는 모습과 필요한 재료 구매 비용을 생각하였다.

2. 회로 구성
모형 제작에 앞서 회로를 만들고 코드를 짰다.

2.1 전원부 제작
2개의 서보모터와 다수의 LED를 작동시키기 위해서는 전류가 많이 필요하기 떄문에 3A까지 가능한 LM2576 소자를 이용하여 전원부를 제작하였다.

IMG_0363 CAM00159 CAM00163

 

2.2 눈 만들기
LED를 눈 모양으로 배치시켜 한 기판 안에 두 가지의 표정을 넣었다.

IMG_0494 IMG_0497

2.3 귀뼈 만들기

서보모터를 이용하여 귀가 앞뒤로 움직이도록 했다.

3. 뼈대 제작
두 가지 종류에 두께의 철사를 이용하여 기본이 되는 돼지 얼굴의 뼈대를 만들었다.

IMG_0435 IMG_0455

4. 살 붙이기

Masking Tape를 덧붙여 돼지 피부의 질감을 표현하였다.

IMG_0481

5. 귀 만들기
철사로 이루어진 뼈대에 Masking Tape 로 제작하였다.

IMG_0458 IMG_0481

6. 코 만들기

휴지심을 휘어서 돼지 코 모양으로 만들었다.

IMG_0457

7. 센서 위치 잡기
휴지심으로 입을 만들어서 종이봉투를 잘 인식할 수 있는 위치를 찾아 센서를 고정시켰다. 센서는 적외선 센서를 사용하였고, 적외선이 반사되어 돌아오는 값을 디지털 값으로 변환하여 경계값 이상일때 돈봉투가 들어왔다는 것으로 인식하였다.

IMG_0488 DSCF2681 DSCF2687

8. 색 입히기

Ivory 락카로 1차 색을 입히고, Pastel Pink 락카로 돼지의 피부색을 칠하고, 빨간 색 락카로 입을 칠했다.

CAM00189

완성된 모습

Cap 2014-04-16 15-23-59-750 Cap 2014-04-16 15-23-34-828

 

동영상 보기

http://www.youtube.com/watch?v=5ovRtrF4msg

 

기타(회로도, 소스코드, 참고문헌 등)

소스코드

소스코드 

#include <avr/io.h>
#include <avr/interrupt.h>

#define L_Angle 114 //왼쪽서보모터 기본각도
#define R_Angle 66 //오른쫏서보모터 기본각도
#define ADC_Th 80 //센서 판별 기준값

unsigned char smile;
unsigned int OVF_Count;
unsigned char count;
unsigned char ADC_Count;

ISR(TIMER2_OVF_vect) //타이머2 오버플로우 인터럽트
{
if(OVF_Count == 10){ //오버플로우 인터럽트가 열번째걸릴때
OVF_Count = OCR1AL;
OCR1AL = OCR1BL;
OCR1BL = temp;
OVF_Count = 0;
count++;
PORTD = 0x6f;//0110 1111; //눈 웃는표정
PORTC = PORTC ^ 0x0f; //콧구멍 LED Toggle;

}
OVF_Count++;

if(count == 10){ //오버플로우 인터러브가 100번째 걸릴때(웃는시간)
TIMSK &= ~(1<<6); //모터 정지
PORTD = 0xB7; // 1011 0111; //눈 보통표정;
count = 0;
PORTC = 0x0f; //콧구멍 기본상태
}

}

ISR(ADC_vect) //ADC 완료 인터럽트
{

if((ADCH > ADC_Th) && (smile == 0)){ //웃지 않으면서 센서값이 기준보다 클때
smile = 1;
TIMSK |= (1<<6); //타이머 인터럽트 작동;
PORTC = 0×05; //코 웃는 모양변경;
}

if(ADCH < ADC_Th){ //센서값이 기준보다 작을때
ADC_Count++;
if(ADC_Count > 40){ //진동등으로 떨리는것을 막기위해 다음반응까지 일정시간 고려
smile = 0;
ADC_Count = 0;
}
}
ADCSRA |= (1<<6); //ADC 시작
}

int main(void)
{
cli();
//PWM 레지스터 설정
TCCR1A = 0xa1; //1010 0001
TCCR1B = 0x0c; //0000 1011
TCNT1H = 0;
TCNT1L = 0;
OCR1AH = 1;
OCR1AL = L_Angle;
OCR1BH = 1;
OCR1BL = R_Angle;

//ADC 레지스터 설정
ADMUX = 0×24; //0010 0100
ADCSRA = 0xDF;//1110 1111

//Timer2 레지스터 설정
TCCR2 = 0×07;
TIMSK = 1<<6;

//귀 관련 포트설정
DDRB = (1<<2) | (1<<1);
PORTB = 0;

//눈 관련 포트설정
DDRD = (1<<7) | (1<<6) | (1<<4) | (1<<3);
PORTD = 0xB7; // 1011 0111; //Not Smile;

//코 관련 포트설정
DDRC = 0xaf; //1011 1111
PORTC = 0x0f; //Initial State;

sei();

TIMSK &= ~(1<<6); //타이머 인터럽트 중지

while(1);
return 0;
}

 

회로도 다운하기

[24호] DIY 프로젝트 공모전 - 돈돈

참고문헌

윤덕용, “ATmega128 마스터”, 2004,Ohm사
ATmega8 Datasheet

 

 

 

우수상을 수상하신 단국대학교 김재현님 외 세분께 진심으로 축하의 말씀을 드립니다. 수상하신 팀에게는 적립금 25만원과 함께 싱크웍스에서 제공해드리는 소정의 경품이 제공되었습니다. 다음호에는 명지대 기계공학과 김병조 외 4명의 “차선 인식을 통한 차량의 능동적 안전시스템 개발”이 소개될 예정입니다.

 

 

Leave A Comment

*