7x7x7 LED 큐브 직접 만들기: 아두이노 단계별 가이드
부품 및 소모품
| 부품 |
수량 |
| 아두이노 우노 |
1 |
| 74HC574 (8비트 D 플립플롭) |
7 |
| 74HC138 (3-8 라인 디코더/디멀티플렉서) |
1 |
| 220Ω 저항 |
49 |
| 16MHz 크리스탈 |
1 |
필요 도구
프로젝트 소개
나만의 LED 큐브를 만들고 싶어 이 프로젝트를 공유합니다.
1단계: LED 매트릭스 제작
7x7 LED 매트릭스를 7개 만듭니다. 애노드와 캐소드를 행과 열로 나누어 납땜하여 각 매트릭스당 7개의 애노드와 7개의 캐소드를 만듭니다.
2단계: 하드웨어 회로 구성
전자 지식이 부족하면 가장 어려운 부분이지만, 명확히 설명하겠습니다.
- 74HC574 7개: 8비트 D 플립플롭으로 8비트 메모리 역할을 합니다. 7개 레이어 각각을 제어하기 위해 7개가 필요합니다.
- NPN 트랜지스터 7개: 어느 레이어를 켤지 결정합니다.
- 74LS138 1개: 3-8 라인 디코더/디멀티플렉서로, 3비트만으로 모든 플립플롭을 제어할 수 있습니다(데이터 저장을 위한 펄스도 필요).
멀티플렉싱 기법으로 큐브 전체에 이미지를 표시합니다. ATmega328P 단독 보드를 사용해 직접 회로를 제작했습니다.
3단계: 구조물 제작
나무 조각을 이용해 하드웨어와 LED 큐브를 지탱할 구조물을 만듭니다. 각 LED 매트릭스를 마주 보게 배치하고, 각 레이어의 캐소드를 같은 트랜지스터에 연결합니다.
4단계: 코드 작성
블록 다이어그램을 참고해 코드를 작성합니다. 연습하면 점점 쉬워집니다. 아래 코드는 가장 기본적인 애니메이션만 포함하며, 상상력을 더해 원하는 패턴을 만들 수 있습니다.
소스 코드
// LED 큐브 기본 애니메이션
int temp = 50, cont = 0;
void load_all(void) {
// 8개 레이어 순차 활성화 (A0, A1, A2 핀 조합)
for (int layer = 0; layer < 8; layer++) {
digitalWrite(A2, (layer & 4) ? HIGH : LOW);
digitalWrite(A1, (layer & 2) ? HIGH : LOW);
digitalWrite(A0, (layer & 1) ? HIGH : LOW);
delay(1);
}
}
void scrolling(int t) {
PORTB = 0x00;
for (int pin = 7; pin <= 13; pin++) {
digitalWrite(pin, HIGH);
delay(t);
digitalWrite(pin, LOW);
}
}
void one(void) {
PORTD = 0xff;
load_all();
while (1) {
scrolling(temp);
temp = temp - 2;
if (temp <= 0) {
temp = 1;
cont++;
if (cont == 1000) {
cont = 0;
temp = 100;
}
}
}
}
void setup() {
DDRD = 0xff; // PORTD 전체 출력
DDRB = 0xff; // PORTB 전체 출력
DDRC = 0xff; // PORTC 전체 출력
}
void loop() {
one();
}
회로도 및 CAD 파일
회로도와 부품 배치 이미지, 이글(Eagle) 회로도 파일(gestione_mankWMoVhz.sch)이 제공됩니다.