아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
부품 및 소모품
| 아두이노 나노 R3 (Arduino Nano R3) |
1개 |
| 아두이노 우노 (Arduino UNO) |
1개 |
| WS2812B 주소 지정 가능 LED 스트립 (50개 이상) |
1세트 |
앱 및 온라인 서비스
- 아두이노 IDE
- Ambibox 소프트웨어 (Windows 전용, 무료)
프로젝트 소개
PC 모니터 뒤에 LED 스트립을 부착하고, 화면 색상에 맞춰 LED가 실시간으로 반응하는 앰비라이트 시스템을 구축합니다. 전체 비용은 약 $16 수준으로 저렴합니다.
주의사항
- Windows만 지원: Ambibox가 Windows 전용입니다. (리눅스/맥은 라즈베리파이 기반 대안 필요)
- 전체 화면 게임에서는 화면 캡처가 안 될 수 있음 → 테두리 없는 창 모드(Borderless) 권장 (CPU ~5% 추가 소모)
- 영화/데스크톱에서는 지연 없이 잘 작동
1단계: 필요한 재료
- WS2812B LED 스트립
- 아두이노 나노
- 미니 브레드보드, 점퍼 와이어
- 터미널-DC 잭, 미니 USB 케이블
- LED용 5V 전원 어댑터 (아두이노 USB 전원만으로는 부족)
- PC, 아두이노 IDE, 프로그래밍 케이블
2단계: RGB LED 이해하기
이 프로젝트의 핵심은 개별 제어 가능한 RGB LED입니다. FastLED 라이브러리 지원 칩이면 무엇이든 가능하지만, WS2811/WS2812가 저렴하고 널리 쓰입니다.
- 단일 구슬 타입: 간격 자유 조절 가능, 모니터 부착 별도 필요
- 스트립 타입: 접착제 부착, 고정 간격(30/60 LED/m), 설치 편리
3단계: 모니터에 LED 스트립 부착
- 모니터 뒷면 크기 측정 (가장자리 1cm 여유)
- 표시된 절단점에서 스트립 자르기
- 4면을 연결해 하나의 연속된 스트립으로 만들기 (+5V, DIN, GND 납땜)
- 중요: 화살표 방향(데이터 흐름)이 일관되게 이어지도록 확인
4단계: 아두이노 연결
- LED 스트립 DIN → 아두이노 디지털 핀 4 (코드에서 정의)
- GND 공통 연결 (별도 전원 사용 시 아두이노 GND와 파워서플라이 GND 연결 권장)
- 아두이노를 PC에 USB 연결
5단계: 배선 요약
WS2811/12 LED는 3선만 연결: 5V, GND, DATA (아두이노 디지털 핀)
6단계: 소프트웨어 설정
- FastLED 라이브러리 설치 (라이브러리 관리자에서 검색)
- 아래 Adalight 코드를 아두이노 IDE에서 열기
- 코드 상단에서
DATA_PIN (예: 4), NUM_LEDS (예: 60) 수정
- 컴파일 및 업로드
- Ambibox 실행 → 설정 마법사 따라 화면 영역 매핑, 색상 보정
- RGB 테스트 영상 재생으로 확인
코드 (Adalight 프로토콜용)
#include "FastLED.h"
#define NUM_LEDS 240
#define DATA_PIN 6
#define serialRate 115200
// Adalight 매직 워드
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
// 시작 시 RGB 플래시
LEDS.showColor(CRGB(255, 0, 0)); delay(500);
LEDS.showColor(CRGB(0, 255, 0)); delay(500);
LEDS.showColor(CRGB(0, 0, 255)); delay(500);
LEDS.showColor(CRGB(0, 0, 0));
Serial.begin(serialRate);
Serial.print("Ada\n"); // 호스트에 준비 완료 알림
}
void loop() {
// 매직 워드 수신 대기
for (i = 0; i < sizeof prefix; ++i) {
waitLoop:
while (!Serial.available());
if (prefix[i] == Serial.read()) continue;
i = 0; goto waitLoop;
}
// Hi, Lo, Checksum 수신
while (!Serial.available()); hi = Serial.read();
while (!Serial.available()); lo = Serial.read();
while (!Serial.available()); chk = Serial.read();
// 체크섬 검증
if (chk != (hi ^ lo ^ 0x55)) { i = 0; goto waitLoop; }
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
// 픽셀 데이터 수신 및 설정
for (uint8_t i = 0; i < NUM_LEDS; i++) {
byte r, g, b;
while (!Serial.available()); r = Serial.read();
while (!Serial.available()); g = Serial.read();
while (!Serial.available()); b = Serial.read();
leds[i].r = r; leds[i].g = g; leds[i].b = b;
}
FastLED.show();
}
회로도

추가 기능
Ambibox에는 사운드 반응 모드도 있어 음악에 맞춰 LED가 깜빡입니다.