환상적인 3x5 LED 매트릭스: Tscircuit로 만드는 DIY 프로젝트
2025-04-02 11:58:463x5 LED 매트릭스 프로젝트 개요
LED 매트릭스는 다양한 방식으로 활용될 수 있는 매력적인 전자 부품입니다. 이 블로그에서는 Tscircuit와 Raspberry Pi Pico를 활용하여 3x5 LED 매트릭스를 만드는 방법에 대해 자세히 설명합니다. 이번 프로젝트는 IT 및 전자공학에 관심이 있는 분들이라면 누구나 도전해볼 만한 프로젝트입니다.
프로젝트 목표
이 프로젝트의 주요 목적은 다음과 같습니다:
- 간단한 간판 및 광고판 제작: 여러 색의 LED를 이용해 독특한 빛을 내는 간판을 제작할 수 있습니다.
- 데이터 시각화 도구: GitHub 기여도, 웹사이트 트래픽, 온도 계측 등의 실시간 데이터를 컬러 표시로 표현할 수 있습니다.
- 인터랙티브 알림 시스템: 이메일, 소셜 미디어, 캘린더 이벤트 등을 시각적 알림으로 제공하여 사용자 경험을 향상시킵니다.
LED 매트릭스 요구사항
매트릭스를 제작하기 위해 필요한 조건은 다음과 같습니다:
- WiFi 조작 가능: Raspberry Pi Pico W를 사용하여 무선으로 LED를 제어할 수 있어야 합니다.
- 격자 형태의 레이아웃: 3x5 크기의 Grid로 배치됩니다.
- 각 LED의 독립 조작 가능: 각 LED의 밝기와 색상을 개별적으로 조절 가능해야 합니다.
시스템 아키텍처 이해하기
해당 LED 매트릭스는 규칙적으로 배열되어 Raspberry Pi Pico에 연결됩니다. Pico는 PICO_W 모듈을 통해 WiFi에 연결됨으로써 전체 시스템의 중심 역할을 합니다.
주요 부품
- Raspberry Pi Pico W: WiFi 기능을 탑재한 마이크로컨트롤러입니다.
- WS2812B: IC가 내장된 RGB LED로 별도의 드라이버 칩 없이도 제어 가능하며, 단순한 배선으로 전체 시스템을 구성할 수 있습니다.
- 웹 인터페이스: 원격으로 LED 매트릭스를 제어할 수 있는 인터페이스를 제공합니다.
LED 배선도 및 구조
WS2812B LED는 내장 RGB 및 제어 칩과 함께 제공됩니다. 주요 특징은 다음과 같습니다:
- 간편한 배선: 전통적인 RGB LED보다 적은 핀 수로 사용 가능합니다.
- 직렬 통신 방식: 데이터 핀 하나를 통해 여러 LED를 체인으로 연결할 수 있습니다.
- 개별 제어: 각 LED의 색과 밝기를 독립적으로 제어할 수 있습니다.
Tscircuit로 회로 구성하기
Tscircuit를 활용하여 LED를 체인으로 연결하는 방법에 대해 알아보겠습니다. 아래의 코드를 통해 두 개의 WS2812B LED를 연결합니다:
import { WS2812B_2020 as LedWithIc } from "@tsci/seveibar.WS2812B_2020";
export default () => (
<board>
<LedWithIc schX={0} schY={0} name={"LED1"} />
<LedWithIc schX={5} schY={0} name={"LED2"} />
<trace from={".LED1 .GND"} to="net.GND" />
<trace from={".LED1 .VDD"} to="net.V5" />
<trace from={".LED2 .GND"} to="net.GND" />
<trace from={".LED2 .VDD"} to="net.V5" />
<trace from={".LED1 .DO"} to={".LED2 .DI"} />
</board>
)
이 코드는 두 WS2812B LED를 체인 형태로 연결합니다. 각 LED의 데이터 출력(DO)은 다음 LED의 데이터 입력(DI)으로 전달됩니다.
LED 매트릭스 제작하기
3x5 LED 매트릭스를 빠르고 손쉽게 구축하기 위해 Tscircuit의 grid 기능을 활용합니다. 다음은 관련 코드입니다:
import { WS2812B_2020 as LedWithIc } from "@tsci/seveibar.WS2812B_2020"
import { grid } from "@tscircuit/math-utils"
export default () => {
return (
<board width="65mm" height="52mm" routingDisabled>
{grid({ cols: 3, rows: 5, xSpacing: 8, ySpacing: 5, offsetX: 20, offsetY: 5 }).map(
({ center, index }) => {
const ledName = "LED" + (index + 1)
const prevLedName = index > 0 ? "LED" + (index) : null
return (
<>
<LedWithIc schX={center.x / 2} schY={5 + center.y / 2} name={ledName} />
<trace from={".LED" + (index + 1) + " .GND"} to="net.GND" />
<trace from={".LED" + (index + 1) + " .VDD"} to="net.V5" />
{prevLedName && <trace from={".LED" + index + " .DO"} to={".LED" + (index + 1) + " .DI"} />}
</>
)
}
)}
</board>
)
}
이 코드는 3x5 Grid를 자동 생성하고 각 LED를 체인 형식으로 연결합니다. LED는 체인 내에서 개별적으로 전원 및 GND 라인으로 연결됩니다.
RPi Pico와 LED 매트릭스 연결
매트릭스를 완성한 후 이를 Raspberry Pi Pico에 연결하여 제어합니다. 다음은 그 예입니다:
import { usePICO_W } from "@tsci/seveibar.PICO_W"
import { WS2812B_2020 as LedWithIc } from "@tsci/seveibar.WS2812B_2020"
import { grid } from "@tscircuit/math-utils"
export default () => {
const U1 = usePICO_W("U1")
return (
<board width="60mm" height="60mm" routingDisabled>
<U1 />
{grid({ cols: 3, rows: 5, xSpacing: 8, ySpacing: 5, offsetX: 20 }).map(
({ center, index }) => {
const ledName = "LED" + (index + 1)
const prevLedName = index > 0 ? "LED" + (index) : null
return (
<>
<LedWithIc schX={center.x / 2} schY={5 + center.y / 2} name={ledName} />
<trace from={".LED" + (index + 1) + " .GND"} to="net.GND" />
<trace from={".LED" + (index + 1) + " .VDD"} to="net.V5" />
{prevLedName && <trace from={".LED" + index + " .DO"} to={".LED" + (index + 1) + " .DI"} />}
</>
)
}
)}
</board>
)
}
위 코드는 GP6 핀을 활용해 매트릭스를 제어하는 방법을 보여줍니다.
결론
이 블로그 글을 통해 Tscircuit와 Raspberry Pi Pico 사용하여 3x5 LED 매트릭스를 제어하는 방법을 학습할 수 있었습니다. 각 단계를 따라 직접 프로젝트에 적용해 보시기 바랍니다. 이 프로젝트를 통해 더욱 다양한 전자공학 프로젝트로 확장할 수 있는 기틀을 마련하실 수 있을 것입니다.
참고 자료
이 외에도 다양한 자료를 바탕으로 더 창조적인 프로젝트를 시도해보세요!