NEOPIXEL을 사용하여 LED 배지 제작하기

Posted on

NeoPixel은 Adafruit Industries에서 WS2812를 사용하하여 제작하는 RGB LED 스트립/매트릭스 브랜드 이름입니다. 이번에는 NeoPixel을 사용해서 원하는 그림을 출력해주는 LED배지를 제작해볼 생각입니다. 이유는 간단합니다. 제 마음에 드는 배지를 찾기가 매우 힘들었거든요.

뚝딱뚝딱, 만들기 시간!

재료 준비하기

배지 제작에 필요한 재료들은 3V to 5V DC-DC 변압기, 아두이노, 배터리 충전 모듈, 배터리, 구리 전선, 네오픽셀 패널, ON/OFF 스위치와 고정용 핀입니다. 준비하셔야 할 도구들은 납땜용 인두, 땜납 및 납땜 기술입니다. 납땜을 할 줄 모르면 납땜을 못 하므로 납땜 기술이란 매우 중요하다고 할 수 있습니다. 이외의 다른 부품 또한 선택적으로 추가하셔도 좋습니다.

소지하고 계신 아두이노 나노 보드의 핀에 헤더가 납땜되어있는 경우 핀에 있는 헤더들을 제거하시는 것을 권장해드립니다. 땜납 제거 작업에는 납 흡착기 및 납 플럭스, 납땜용 인두 등이 필요합니다.

제품 설계하기

대략적으로 부품들의 위치를 잡아줍니다. 제가 제작할 배지의 부품들은 대충 이러한 느낌으로 배치될 것입니다. 부품 배치 후 miniUSB 포트의 공간 차지가 마음에 들지 않는다는 생각이 들고 작업실에도 miniUSB 케이블이 별로 없는 상황이라서 추가적으로 USB-C 포트를 장착하기로 결정했습니다. 인터넷에 찾아보시면 의외로 쉽게 구할 수 있습니다.

USB-C 포트까지 배치할 시 대충 이렇게 배치될 것입니다. 이제 본격적으로 배선 작업에 들어갈 것입니다. 구리 전선과 땜납을 준비해줍시다.

회로 연결하기

아두이노 보드를 USB-C 포트에 연결해줍니다. 해당 USB-C 포트는 충전, 전원 공급 및 포트 연결을 전부 담당할 것입니다. +극과 -극의 연결에 주의해주십시오. 추가로 USB 포트를 장착하시는 게 아니라면 이 과정을 생략하십시오.

배터리를 배터리 충전 모듈에 연결해줍니다. 이후에는 배터리 충전 모듈을 USB-C 포트와 연결해줍니다. 이렇게 하면 배터리 충전 및 아두이노 프로그래밍 준비는 끝입니다. 물론, 추가 장착하시는 USB 포트가 없을 경우 이 과졍 역시 생략됩니다.

배터리 출력 모둘의 전원 공급 핀을 3V to 5V 변압기에 연결해줍니다. NeoPixel과 아두이노에 공급되는 전력의 전압은 5V 정도여야 하므로 배터리로 전원 공급을 할 시에는 3V에서 5V로 승압해줄 필요가 있기 때문입니다. ON/OFF 스위치는 승압기와 충전 모듈 사이에 장착할 것입니다. 승압 모듈이 지속적으로 활성화되어 배터리 전력 소모량이 많아지는 것을 방지하기 위함입니다.

ON/OFF 스위치 및 5V 전원 공급 수단이 전부 준비되었다면 이제 나머지 핀을 연결하고 마무리할 시간! 네오픽셀 모듈의 DIN 핀은 아두이노 6번 핀, +5V 핀은 아두이노 VCC 핀, GND 핀은 GND 핀에 연결해주십시오. 승압 모듈의 전원 출력 핀 또한 +극은 VCC, -극은 GND핀에 연결해줍니다. 연결이 마무리되면 글루건으로 부품들을 서로 붙여줍니다. 사이좋게 꼭 붙어있어야 한다, 알았지?

회로가 완성되었다면 마무리로 고정 핀도 장착해주세요. 합선 방지 차원에서 글루건 떡칠도 해줍니다.

Hello, world! 프로그램 준비!

시작하기에 앞서, 아두이노를 이용해 NeoPixel을 제어하는 코드를 작성하기 위해서는 NeoPixel 전용 라이브러리를 별도로 설치하셔야 합니다. 설치 방법에 대해서는 여기를 참조해주십시오.

라이브러리 설치가 끝났다면 여기에서 제 프로젝트 코드를 받아서 원하시는 부분을 수정하신 뒤 아두이노 보드로 업로드하시면 됩니다.

이후에는 코드 내용에 대해서 간단히 설명드리겠습니다.

프로젝트 폴더 안에는 하위 폴더 하나와 .ino 파일이 있습니다. 아두이노IDE를 통해 .ino 파일을 열어주십시오.

numLED 값은 네오픽셀 LED 개수를 나타내는 값입니다. 사용하신 모듈의 LED 개수가 다를 경우 이 값을 조정해주십시오.

pixelChangeTime은 DotToDot 애니메이션을 사용할 때 1픽셀이 나타나는데 걸리는 시간 값입니다. 기본은 numLED 밀리초입니다.

FadeInSpeed는 이미지 Fade In 또는 Fade Out을 할 때 소모되는 시간입니다. 이미지가 더 빠르게 나타나기를 원하실 경우 이 값을 조정해주십시오.

LEDBrightness는 화면 밝기 값입니다. 밝기 조정은 여기서 해주십시오.

paint[numLED][3] 배열은 네오픽셀 모듈에 표시할 그림을 저장해둔 배열입니다. 다른 이미지를 표시하고 싶으실 경으 이 배열 내 값을 수정해주세요. {0,0,0}은 해당 픽셀의 RGB 값이 0,0,0이라는 의미, 즉 불이 들어오지 않는다는 뜻입니다.

setup() 함수는 잔원이 켜지고 나서의 초기 설정입니다. 저는 처음 1초간 아무것도 표시되지 않도록 하였습니다.

loop() 함수는 setup()함수 실행 이후 반복적으로 실행되는 함수의 이름입니다. 기본 코드는 그림 페이드 인, 1초 멈춤, 그림 페이드 아웃입니다. 제가 미리 만들어놓은 애니메이션 함수를 사용하시거나 원하시는함수를 직접 제작하시면 됩니다. 그림 나타내기용 함수는 picIncodeFadeIn(), picIncodeDotToDot(), picIncodeInstant() 가 있으며 그림이 사라지게 하는 함수는 imgDisappearFadeOut(), imgDisappearDotToDot(), screenBlank() 가 있습니다.

그림 그리기 함수 목록

  • picIncodeFadeIn() 함수는 그림이 서서히 나타나게 해주는 함수입니다.
  • picIncodeDotToDot() 함수는 그림이 1픽셀씩 나타나게 하는 함수입니다.
  • picIncodeInstant() 함수는 그림이 번쩍 나타나게 합니다.

그림 사라지게 하기 함수 목록

  • imgDisappearFadeOut() 함수는 그림이 서서히 사라지게 합니다.
  • imgDisappearDotToDot() 함수는 그림이 1픽셀씩 사라지게 합니다.
  • screenBlank() 함수는 네오픽셀 패널의 모든 LED를 꺼버립니다.

기호에 따라서 마음대로 효과를 배열해보시면 됩니다. 픽셀아트 예제 일부는 PixelArt Example 폴더 내 텍스트 파일에 있습니다.

마무리

아무래도 재료값이 좀 들긴 했지만 그래도 결과물은 만족스러웠습니다.

긱블같은 곳에서 나 섭외해줬으면 좋겠다. 예산 걱정 없이 만들고 싶은 거 다 만들게…

3 Replies to “NEOPIXEL을 사용하여 LED 배지 제작하기”

  1. 안녕하세요 지나가는 문돌이입니다 이과는 정말 재밌게 혼자서 놀 수 있군요 문과는 혼자서 재밌게못놉니다 그래서 필요하다 친구.그렇지만 나없다 친구

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다