코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-04 13:18:45
해변가에서 불꽃을 들고 한사람씩 해당하는 글자를 허공에 반복적으로 그려넣고
이를 장노출로 사진을 찍으면 하나의 단어나 문장이 만들어지는 기념사진을 찍어본 경험도
바로 이같은 빛의 잔상을 이용한 방법입니다.
이를 응용하여, 자전거 바퀴에 적용하면
달리는 동안 바퀴에 이미지를 만들어 낼수 있습니다.
이처럼 모터와 연동하여 허공의 빛으로 입체 패턴을 표현할수 있는
3D POV를 만들수도 있습니다.
이번 프로젝트에서는 LED 5개를 이용하여 간단한 문자를 출력해 보겠습니다.
이를 응용하여 콘서트장에서 가수이 이름을 새긴 막대를 흔들어 뮤지션의 관심을 끌거나,
더 많은 LED를 연결하여 고해상도 POV를 만들어보세요.
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 프로 미니 3.3v | 1 | 아두이노호환보드 |
2 | 브레드보드 | 1 | 브레드보드 |
3 | 1kΩ 저항 | 5 | 저항 |
4 | 점퍼 케이블 | 12 | 점퍼 케이블 |
5 | LED | 5 | LED |
6 | 3.3v 베터리 | 1 | 베터리 |
부품명 | 아두이노 프로 미니 3.3v | 브레드보드 | 점퍼케이블 | LED | 1kΩ 저항 저항 |
파트 | x1 | x1 | x12 | x5 | x5 |
부품명 | 3.3v 베터리 |
파트 | x1 |
아래의 코드를 아두이노에 업로드 합니다.
// 출처 : an project done by Glen p yeldho
// for more info and updates https://www.facebook.com/glenp.yeldho
// 수정 : www.kocoafab.cc
// 알파벳마다의 표기방법을 미리 설정합니다.
int _[] = {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};
int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1};
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0};
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1};
int D[] = {1,1,1,1,1, 1,0,0,0,1, 0,1,1,1,0};
int E[] = {1,1,1,1,1, 1,0,1,0,1, 1,0,1,0,1};
int F[] = {1,1,1,1,1, 1,0,1,0,0, 1,0,1,0,0};
int G[] = {0,1,1,1,0, 1,0,1,0,1, 0,0,1,1,0};
int H[] = {1,1,1,1,1, 0,0,1,0,0, 1,1,1,1,1};
int I[] = {0,0,0,0,1, 1,0,1,1,1, 0,0,0,0,1};
int J[] = {1,0,0,0,0, 1,0,0,0,1, 1,1,1,1,1};
int K[] = {1,1,1,1,1, 0,0,1,0,0, 0,1,0,1,1};
int L[] = {1,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1};
int M[] = {1,1,1,1,1, 0,1,1,0,0, 0,1,1,1,1};
int N[] = {1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1};
int O[] = {0,1,1,1,0, 1,0,0,0,1, 0,1,1,1,0};
int P[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,0,0};
int Q[] = {0,1,1,1,1, 1,0,0,1,1, 0,1,1,1,1};
int R[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,1,1};
int S[] = {0,1,0,0,1, 1,0,1,0,1, 1,0,0,1,0};
int T[] = {1,0,0,0,0, 1,1,1,1,1, 1,0,0,0,0};
int U[] = {1,1,1,1,1, 0,0,0,0,1, 1,1,1,1,1};
int V[] = {1,1,1,1,0, 0,0,0,0,1, 1,1,1,1,0};
int W[] = {1,1,1,1,0, 0,0,1,1,0, 1,1,1,1,0};
int X[] = {1,1,0,1,1, 0,0,1,0,0, 1,1,0,1,1};
int Y[] = {1,1,0,0,0, 0,0,1,0,0, 1,1,1,1,1};
int Z[] = {1,0,0,1,1, 1,0,1,0,1, 1,1,0,0,1};
int letterSpace;
int dotTime;
void setup()
{
// 2-6번핀의 LED를 출력으로 설정합니다.
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
// 글자 사이에 공간을 생성합니다.(단위:ms)
letterSpace = 6;
// 각 도트(LED)가 나타날 시간을 설정합니다. (단위:ms)
dotTime = 3;
}
void printLetter(int letter[])
{
int y;
// 첫번째 y열을 출력합니다.
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y]);
}
delay(dotTime);
// 2번째 y열을 출력합니다.
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+5]);
}
delay(dotTime);
//3번째 y열을 출력합니다.
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+10]);
}
delay(dotTime);
// 문자 사이의 공간을 출력합니다.
for (y=0; y<5; y++)
{
digitalWrite(y+2, 0);
}
delay(letterSpace);
}
void loop()
{
// 출력하기를 원하는 문자를 순차적으로 입력합니다. 언더바는 공백을 의미합니다.
printLetter(K);
printLetter(O);
printLetter(C);
printLetter(O);
printLetter(A);
printLetter(_);
printLetter(F);
printLetter(A);
printLetter(B);
}
1.하드웨어 설명
아두이노 호환 보드인 아두이노 pro mini를 사용하였습니다.
무선으로 작동하기 위해 작은 보드를 선택한것으로,
일반적으로 많이 쓰이는 Arduino UNO로도 가능합니다.
2.스케치설명
알파벳 'E'의 경우 LED 5개를 모두 켯다가 해당 밀리 초만큼 대기후
1,3,5만 켜고 이를 한번 더 반복하게 됩니다.
이로써 사람의 '눈'이 가지고 있는 착시를 이용하여
0.04초 이전의 사물과 현재의 사물을 합성하여 하나의 글자로 인식되게 됩니다.
// 글자 사이에 공간을 생성합니다.(단위:ms)
letterSpace = 6;
// 각 도트(LED)가 나타날 시간을 설정합니다. (단위:ms)
dotTime = 3;
}
void printLetter(int letter[])
{
int y;
// 첫번째 y열을 출력합니다.
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y]);
}
delay(dotTime);
// 2번째 y열을 출력합니다.
for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+5]);
}
delay(dotTime);
}
글자사이의 공간과 글자가 출력되는 시간을 미리 설정하고,
배열된 알파벳마다 LED의 켜고 꺼짐을 설정해두었기 때문에
void loop()에서 해당 알파벳을 호출하는 것만으로 LED설정이 완료됩니다.
hihyo