버섯돌이의 DIY 3*3*3 단색 LED 큐브2 - 제작, 동작원리, 코드 설명 |
들어가며..
안녕하세요 버섯돌이 유재성입니다.
지난 시간에 만들었던 3*3*3 LED 큐브 제작 과정에서 간단히 글로만 설명드렸던 부분에 대한 내용을 보완하며,
http://blog.naver.com/dev4unet/220773359667
기존 큐브는 이미 선물했기에 시간이 되면 간단한 제어 방식에 대한 강좌를 작성하려고 큐브를 하나 더 만들었습니다.
기존에 작성했던 공유된 글에는 이미지 첨부도 안 되고 기존 강좌도 내용이 충분히 길어서 별도의 글로 새로 작성합니다.
부득이 본 강좌에서 다루기에 쓸데없는 부분이나 내용이 길어지는 부분은 별도로 작성한 글의 링크를 제공하며
이전 글들로 옮겨 다니면서 읽으면 귀찮기 때문에 가급적 이 글만으로도 작업하는데 무리가 없도록 할 예정입니다.
큐브 외형을 작업하는 절차와 아주 간단한 원리에 대해서는 기존에 작성한 글들에도 미흡한 부분은
조금씩 보충한 면이 없잖아 있기에 본 글에서 부족한 부분은 기존 강좌와 병행하셔서 보시기 바랍니다.
본 강좌에서는 간단하게 큐브를 만들기 위한 내용과 함께 케이스를 활용(?)하는 방법과...
좀 더 쉽게 만들기 위해 저렴한 아두이노 호환 kIT에 대한 정보를 다룹니다.
만들 작품..
지난 시간에는 샌드위치 케이스를 사용했으나 이번에는 원래 사용하려고 했었던 아크릴 과자 케이스를 이용했습니다.
제과점에 보면 아이들이 좋아하는 아크릴 케이스에 담겨있는 비싼 쿠키들이 있습니다.ㅜㅜ
이번에는 가급적 큐브 외형 외에는 납땜을 자제하고, 아두이노와의 연결은 모두 헤더 핀을 이용하려다 보니 조금 지저분해졌네요.ㅜㅜ
준비물..
역시나 이번에도 큐브 연습용으로서 최소한의 부품만 사용하기 때문에 다른 분들은 참고만 하시기 바랍니다.^^;;;
- LED 27개 (초보자분들은 가급적 한 가지 색상을 사용하시기 바랍니다.)
- 각 LED에 사용할 저항 9개 (저는 생략했습니다만 사용하는 게 좋을 것 같습니다.)
- 각 층 제어에 사용할 저항 3개 (각자 사용하는 LED에 맞는 저항을 사용하시기 바랍니다. 아마? 100옴 전/후?)
- 아두이노 프로 미니 (아두이노 우노 등 어떤 것이든 무관)
- 인두기 & 납 & 배선(&점퍼선)
- 아크릴 케이스 (옵션)
저는 쿠키를 먹고 남은 55*63*95mm 사이즈의 과자 케이스를 사용했습니다.
저는 층별로 LED의 플러스 핀을 하나로 묶어서 아두이노의 아날로그 핀에 연결해서 원하는 층을 선택하는 용도로 사용하고,
LED의 마이너스 핀 9개를 아두이노의 디지털 핀에 직접 연결해서 개별 LED의 On/Off를 제어할 예정입니다.
이때, 동일한 위치에 속하는 각 LED의 마이너스 핀은 각각의 층과 하나로 연결되어있습니다.
(즉, 1층의 1번 LED, 2층의 1번 LED, 3층의 1번 LED는 마이너스 핀이 서로 연결합니다.)
따라서, 각층의 마이너스 핀 9개는 세로로 세워 놓고, 9개의 플러스 핀은 모두 눕혀서 서로 연결하면 됩니다.
즉, 플러스 핀은 같은 층의 LED끼리 모두 연결하고, 마이너스 핀은 같은 열(세로)의 LED끼리 층을 쌓아서 연결합니다.
이해가 안 되면 "큐브 쌓아 올리기.." 항목의 마지막 영상인 원리 설명 영상을 참고 하시기 바랍니다.
(영상을 먼저 보고 난 후 작업하시는 게 이해하기 더 쉬울 수도 있습니다.)
위와 같은 구조에서 아두이노에서의 제어 방법을 간단히 설명드리면...
층 선택에 사용된 LED 핀은 플러스 핀이며, 9개의 LED를 제어하기 위한 핀은 마이너스 핀입니다.
따라서, LED에 불이 켜지기 위해서는 아두이노의 층 선택 핀에 플러스를(즉, HIGH 상태)
불을 켜고 싶은 LED의 마이너스 핀에는 마이너스(즉, LOW 상태) 값을 설정하면 되겠죠?
(LED 하나를 아두이노로 켰다/껐다 하는 예제를 생각하시면 됩니다.)
하지만, 납땜 없이 만드는 방법처럼 LED와 LED 사이의 좁은 간격으로 인해 니퍼 사용을 많이 해야 해서...
니퍼를 최대한 사용하지 않기 위해 LED 다리의 끝부분이 좀 더 타이트하도록 PCB 구멍 8칸인 1.8Cm로 최종 결정하고
3개의 층 만들기..
LED의 경우 아래처럼 +와 -의 극성이 존재합니다.
보통은 그림에서 빨간 전구 안을 보시면 일직선으로 길쭉한 부분이 +이고 기역 자로 꺾여있는 부분이 -입니다만...
LED 다리의 길이나 전구 모양만으로는 100% 정확하지 않기 때문에 반드시 극성을 직접 확인하시기 바랍니다.
나중에 고생하므로 작업 전에 사용할 LED가 모두 정상 동작하는지도 확인해야 합니다.
극성 확인 및 동작 확인 작업은 시계 전지 또는 동전 전지로 불리는 동그란 코인셀을 이용하면 편하게 확인할 수 있습니다.
거리를 정확하게 직선으로 잘 맞췄으면 니퍼를 사용하지 않아도 딱 맞고 납땜도 편합니다만..
잘 보시면 저는 자를 이용해도 살짝 삐뚤어지져서 니퍼 작업이 일부 필요하거나 완성된 큐브가 조금 삐뚤어지더군요.
연필로 그은 선 때문에 LED 다리가 구분이 안 될 수 있어서 일부러 플래시를 터뜨려서 촬영했습니다만...
아래 사진의 화살표 방향과 극성을 참고 하셔서 구부리면 됩니다.
위에서 설명했듯이 LED의 플러스 핀은 전원 공급으로 사용하니 모두 연결하고 마이너스 핀은 그대로 세워 놓습니다.
쉽게 생각해서, 3*3*3 큐브라서 한 줄에 LED가 3개씩 들어가니 가로 줄은 전부 우측으로 연결한 상태에서
세로 줄은 각 라인에서 LED 한 개만 연결해도 LED 9개의 플러스 핀은 모두 연결된 상태가 됩니다.
각 LED가 촘촘하게 연결된 상태가 아니라서 여러 층으로 쌓아 올리면 빈 공간으로 인해 허약하겠죠?
필요하다면 연결되지 않은 빈 공간도 와이어를 이용해서 촘촘하게 납땜을 하셔도 됩니다만 필수는 아닙니다.
저는 나중에 아두이노를 분리하기 쉽도록 큐브 밑에서 아두이노와 연결되는 핀을 가급적 납땜보다는
헤더 핀을 사용해서 연결하고 큐브의 틀도 보강할 겸 각 층에 사용할 저항을 아래처럼 납땜했습니다.
But.. 저항값을 잘 못 사용해서 엄청나게 고생했다는....(상단 링크 참고)
꼭 저 위치에 저항을 납땜할 필요는 없으므로 미관이 중요하면 저항은 큐브 밑에 납땜하는 게 더 좋습니다.^^
특히나, 적절한 저항값을 잘 모르는 분들은 가급적 큐브에 납땜하기보다는 큐브가 완성된 후에 따로 납땜하시기 바랍니다.
모양이 중요한 분들은 층 선택용 핀과의 결선은 눈에 잘 안 보이는 에나멜 선으로 처리하는 것도 좋은 것 같습니다.
참고로, 작업하시기 전에 작업 틀에 넣었을 때 LED의 좌/우 세로가 반듯하게 정렬되었는지 확인하고 작업하시기 바랍니다.^^
LED 다리는 휘어도 상관없지만 LED 배치부터 휘어있으면 나중에 맞추기 귀찮아집니다.(저는 모양은 이미 포기..^^)
3*3*3의 3층짜리 큐브이므로 위와 같은 모양을 아래처럼 총 3개를 만들어야 합니다.
개별 큐브 상태 테스트..
큐브를 쌓아 올리면 사망한 LED를 수정하기 힘들어지기 때문에 큐브 모양을 완성하기 전에 LED가 정상인지 한 번 더 확인합니다.
저항 쪽에 플러스 전원을 공급하고 마이너스 전원으로 LED를 하나씩 선택하면서 확인하면 됩니다.
LED 구동 전압이 낮기 때문에 낮은 전압이 아니면 가급적 적당한 저항을 통해서 전압을 가하시기 바랍니다.
최종적으로 층 선택 핀에 저항을 연결하실 경우에는 사용 예정인 저항을 이용해서 테스트하시면 됩니다.
다시 촬영하지 않았으므로 기존 강좌에 올렸던 영상을 참고 하시기 바랍니다.
참고로, 테스터기가 있는 분들은 테스터기를 이용하시면 편하고 좋습니다.
기존에는 개별 LED만 테스트했었는데 LED 색상을 섞었더니 오동작 하는 경우가 있어서...
반드시, 9개의 LED가 모두 동시에 불이 켜지는지도 함께 테스트하시기 바랍니다.
브레드 보드에 연결해서 테스트하시면 수월하지만 브레드 보드가 없으면 준비물의 배선 그림에서
A 번에 해당하는 점퍼(듀폰) 케이블을 이용해서 원하는 LED를 하나로 묶어서 테스트하면 편합니다.
큐브 쌓아 올리기..
이제 가장 큰 고비인 3개로 분리된 각 층의 결과물을 한 층 한 층 쌓아 올릴 차례입니다.
층은 편하게 마이너스 핀 9개만 세로로 연결해서 쌓아 올리면 됩니다.
즉, 말 그대로 포개어 놓는다는 느낌으로 세로로 세워 놓고 뗌 질하면 됩니다
다만, 마이너스 핀을 그대로 세워 놓았기 때문에 층을 쌓을 때 아래층의 LED 몸통에 마이너스 핀이 걸립니다. ---;;
즉, 1층과 2층을 예로 들면, 1 층과 2 층의 마이너스 핀은 플러스 핀처럼 일직선상에 존재하지 않고
중간에 LED 몸통이 가로막고 있어서 예쁜 모양을 유지하면서 납땜 하는 게 쉽지 않을 것입니다.
이제, 마이너스 핀이 LED 몸통 밖으로 나가도록 'ㄱ'자 형태로 구부려서 모양을 잡아 놓으면 층을 쌓기도 수월합니다.
저는 외형은 크게 신경 쓰지 않아서 대충 했지만..
최종적으로 층을 쌓아 올리기 전에 마이너스 핀의 간격을 반듯하게 잘 맞추셔야 층을 쌓을 때 예쁘게 나옵니다.
각 LED 간격을 비롯해서 LED 다리가 올곧은지 맞추시기 바랍니다.
카메라 포커스 상태가 안 좋아서 최대한 편집을 했지만 도움이 될지 모르겠군요.
대충 이런 식으로 마이너스 핀을 꺾어 놓으면 층을 쌓을 때 납땜 공간도 생기고 세워 놓기도 편합니다.
바깥 면의 납땜할 다리 두 곳 정도를 테이프로 미리 고정하시면 납땜하기 쉽습니다.
테이프를 붙이기 귀찮으면 인두기에 납을 살짝 묻힌 후 두 곳 정도를 살짝 콕~ 찍으셔서 가볍게 붙인 후 작업해도 좋습니다.
지금처럼 마이너스 핀을 95도로 꺾는 작업이 귀찮다면 첫 번째 강좌처럼 납땜할 LED의 다리가 몸통을 비껴갈 수 있도록
마이너스 핀의 끝부분만 살짝 45도 각도로 꺾어서 납땜을 해도 되고,
대충 한쪽 다리를 먼저 납땜한 후 강제로 비틀어서 납땜을 하셔도 됩니다만 틀의 형태를 맞추는 게 쉽지는 않습니다.
작업이 가장 쉬웠던 방법은 역시 납땜 공간을 쉽게 확보할 수 있도록 마이너스 핀을 구부리는 방법이 가장 수월하더군요.
최종 완성된 모습은 대충 아래처럼 생겼습니다.
별도의 전류 증폭 작업이 없으므로 이제 아두이노와 연결만 하면 되므로 실질적인 큐브 작업은 이것으로 끝입니다.^^
기존에도 여러 번 설명했기에 어렵지 않으리라 봅니다만..
처음 접하시는 분들은 어려울 수 있으니 이번에도 여러 각도에서 촬영했으니 참고 하시기 바랍니다.
이번에도 앞의 과정과 동일하게 납땜하면서 사망한 LED는 없는지 모든 LED가 정상적으로 동작하는지 테스트합니다.
다시 촬영하기 귀찮아서 기존 강좌에서 테스트하는 영상을 일부 편집했습니다.
역시나 영상에는 없지만 전체 LED(9개)를 선택하고 모두 동시에 동작하는지 확인하시기 바랍니다.
계속 얘기하지만, 현재가 최종 형태라서 층을 제어하는 플러스 핀에 보호 저항을 이용하실 분들은...
테스트하는 층에 전원을 공급할 때 사용하실 저항을 연결해서 테스트하시기 바랍니다.
워낙 간단한 구조라서 문제 소지가 없지만 저항값을 잘 못 사용하면 나중에 큐브를 제어할 때...
프로그램의 버그인지... 큐브 설계상의 버그인지 원인을 찾는데 저처럼 엄청난 삽질을 해야 할 수 있습니다.ㅜㅜ
테스트 방법을 잘 모르시는 분들을 위해 제어 코드도 감안해서 간단하게 원리를 설명합니다.
영상을 참고하시면 조금은 도움이 되리라 봅니다.
아두이노와 연결 방법..
불을 켜고 싶은 LED의 마이너스 핀을 마이너스인 LOW 상태로 값을 설정하면 되겠죠?
큐브를 생각할 필요 없이 아두이노에 LED 하나를 연결했다고 생각하시면 이해가 쉽습니다.
처음에는 모든 LED의 불을 끄고 시작하니 대충 아래처럼 초기화하면 되겠죠..
//층 초기화
pinMode(A0, OUTPUT); digitalWrite(A0, LOW); //1층
pinMode(A1, OUTPUT); digitalWrite(A1, LOW); //2층
pinMode(A2, OUTPUT); digitalWrite(A2, LOW); //3층
pinMode(2, OUTPUT); digitalWrite(2, HIGH); // 1번 LED
. . . . .
. . . . .
. . . . .
pinMode(10, OUTPUT); digitalWrite(10, HIGH); // 9번 LED
핀맵으로 사용된 위 사진을 기준으로..
1층의 하얀색 LED인 1번 LED를 켜고 싶으면...
digitalWrite(A0, HIGH); digitalWrite(2, LOW); // 1번 LED
1층의 하얀색 LED인 1번, 2번, 3번 LED를 켜고 싶으면...
digitalWrite(A0, HIGH); // 1층 On
digitalWrite(2, LOW); // 1번 LED
digitalWrite(3, LOW); // 2번 LED
digitalWrite(4, LOW); // 2번 LED
1층, 2층, 3층의 하얀색 LED인 1번 LED를 켜고 싶으면...
digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); digitalWrite(A2, HIGH); digitalWrite(2, LOW);
큐브 케이스 작업..
기존에는 샌드위치 케이스를 사용했지만 이번에는 쿠키를 먹고 남은 55*63*95mm 사이즈의 과자 케이스를 사용했습니다.
작업상 케이스의 밑면이 상단을 향하고 있으므로 케이스 선정시 사진처럼 바닥면에 글씨가 써져있으면...
은근히 신경 쓰이고 미관상 안 좋을 수 있으니 가급적 글씨가 없는 제품이 좋으리라 봅니다.
샌드위치 케이스도 그랬지만 막상 큐브가 동작할 때에는 크게 신경 쓰이지는 않습니다.
케이스에 붙어있는 스티커를 제거하고 남은 끈적거리는 접착제는 지포 라이터 기름이나 스카치테이프로 제거하면 됩니다.
즉, 아두이노가 들어갈 수 있도록 아래와 같은 형태의 박스를 만듭니다.
잘 들어가는지 아크릴 케이스에 넣어 봅니다.
케이스 크기에 맞게 재단했으므로 밖으로 나가는 저항 다리도 구부려 줍니다.
납땜을 하지 않을 예정이라 가급적 견고하게 고정하기 위해 각 핀에 순간 접작체를 뿌렸습니다.
스티로폼 전용 풀이나 에폭시를 사용하려다 에폭시는 너무 귀찮아서 순간접착제를 사용했는데..
순간접착제가 투명 색이고 스티로폼이라 접착제 티가 안 날 것 같아서 사용했는데.. 살짝 망했네요..-_-;;
그리고 스티로폼 밑면에서 글루건으로 모든 핀을 단단하게 고정합니다.
아두이노와 연결 방법에서 설명했던 결선 방법대로 듀폰 케이블을 이용해서 편하게 연결합니다.
끝으로, 연결 단자 부분을 예쁘게 칼로 자르면 끝!!
완성된 큐브 테스트..
7,8,9번의 빨간색 LED와 연계 동작에 문제가 있었기에...
큐브가 정상적으로 동작하는 게 확인이 가능한 형태의 소스만 올린 후 가볍게 확인해 봤습니다.
밝은 곳에서 촬영
어두운 곳에서 촬영
손에 잡히는 아담한 사이즈에 아크릴 케이스에 보관되어 있어서 사용하기 편하고 좋네요.^^
4*4*4 RGB Kit..
단색이 아니라 RGB LED를 이용한 4*4*4 큐브를 상당히(?) 손쉽게 만들 수 있는 저렴한 아두이노 호환 KIT가 있더군요.
http://blog.naver.com/dev4unet/220804869359
잠깐 살펴보니 아크릴 케이스에 LED 제어 모듈이 기본 제공되며, RGB LED가 프레임에 납땜되어 있어서...
단순히, 가로/세로 프레임만 결합해서 납땜하면 되는 형태의 상당히 조립이 쉬운 제품으로 보입니다.
저렴한 가격이지만 자금 사정상 구매는 못하고 살펴보면서 자료를 수집했으니 관심 있는 분들은 참고하시기 바랍니다.
큐브를 직접 만드는 것보다는 완성도 높은 큐브를 이용해서 아두이노로 제어하고 싶은 분들에게는 유용해 보입니다.
마치며..
기존 강좌를 간단하게 보완하려다가 예상치 못한 일로 인해 몇 주 동안 삽질 했네요.
그래도 결과물이 아담한 게 마음에 드는군요.
큐브를 제어하는 아두이노 소스 쪽을 조금 더 다룰까 싶은데 귀차니즘과 다른 일들로 기약할 수 없습니다...
큐브에 관심 있는 분들께 조금이라도 도움이 되었길 바랍니다.
본문 수정 시 가급적 공유한 곳의 글 들도 함께 수정하려고 노력합니다만 누락되는 경우가 많습니다.^^;;;
[참고 자료]
'Arduino(아두이노)' 카테고리의 다른 글
[영상] ESP8266 모듈을 이용한 WIFI 날씨 정보 구현하기 (0) | 2016.10.24 |
---|---|
버섯돌이의 4*4*4 LED 큐브 키트 조립 (0) | 2016.09.09 |
[Arduino IoT] Picture The Weather - 멋진 일기 예보 그림 (0) | 2015.09.04 |
[버섯][Scratch] S4A ( Scratch for Arduino ) - 스크래치 for 아두이노 (0) | 2015.09.01 |
[버섯][Arduino] 아두이노용 PS2 키보드 라이브러리 - PS2Keyboard Library (0) | 2015.08.11 |