본문 바로가기
▩ DIY ▩

필립스 휴 조명은 가라~~~ 티비 엠비언트 라이트 만들기 1부

by 씩씩방탕 2021. 2. 22.
반응형

안녕하세요?

요즘 집에서 영화를 보거나 TV를 시청하시는 분들이 많으시죠?

저도 요즘 들어 집에 있는 시간이 많다 보니 이것저것 유튜브를 보다가 우연히 TV ambient light라는 것을 알게 되었습니다.

 

youtu.be/S9 D8 ZsmBKnQ

 

위에서 보는 것 같이 제대로 눈뽕이 오고 말았습니다.

구입하려고 알아봤는데 금액이 30만 원이 넘는 어마어마한 가격이더군요.

그래서 좀 더 알아보니 직접 제작도 가능하며, 금액도 훨씬 저렴하게 구현이 가능할 거 같아서 만들어 봤습니다.

일단 필요한 기기부터 설명드리겠습니다.

  1. LED WS2812 3미터 ( 저는 40″ 모니터에 장착했습니다.)
  2. 5V 10a 파워 서플라이 ( ws2812 기준 1미터당 led 개수 60, led 하나당 60ma 소비)
  3. 사요미 미 박스입니다 (입력 소스는 사용자 선택)
  4. HDMI 분배기 (하나의 기기에서 동시에 두 개 이상으로 출력)
  5. USB 허브 (라즈베리파이 제로 사용 시만 필요)
  6. HDMI 캡처보드
  7. 라즈베리 파이 제로
  8. HDMI 선택기 (여러 HDMI 장비 사용 시 필요)
  9. 아두이노 나노 (LED 제어에 사용 )

위와 같은 준비물이 필요합니다.

모두 국내에서 구입한 부품으로 구입했습니다.

알리익스프레스를 사용하면 비용은 좀 저렴해질 수 있으나 큰 가격차이가 아니면 국내에서 구입하는 편입니다.

  • led ws2812 구입처는 네이버 쇼핑에서 구입했습니다. (아래 링크는 WS2812 입니다. WS2812B로 구입하시는게 더 좋습니다.)

아두이노 5V WS2812 RGB LED 스트립 1미터 블랙 60등 규격 비방수 : 송파 메이커 스페이스 (naver.com)

저는 ws2812 60으로 구입했는데 30으로 사용해도 크게 문제가 될 것 같지는 않습니다. 60은 1미터에 led 60개 30은 1미터에 led 30개입니다.

 

오픈아이디어 (openidea.co.kr)

 

5V WS2812 RGB 30 LED 튜브 방수 스트립 5M/1롤 [OPEN-FA001-014]

오픈아이디어

openidea.co.kr:443

 

  • 5V 10A 전원 아답터

민웰 SMPS LRS 50-5 [5V 10A] 파워서플라이 : FA마켓 (naver.com)

아답터는 만드실 길이에 사용될 led의 전력 소모를 계산하셔서 구입하시면 됩니다.

저는 사용 led개수가 160개 여서 60ma x 160= 9.6a가 필요해서 10a 파워를 구입했습니다.

  • 샤오미 미 박스 – 기존 사용품

샤오미 미 박스는 지존에 사용하던 장비이며, 영상 플레이 소스가 있으시면 됩니다.

  • HDMI 분배기

리버 네트워크 넥시 NX-4 K0102 SPM : 네이버 쇼핑 (naver.com)

제가 사용하는 장비입니다. 네이버나 여러 쇼핑몰에 여러 가지 장비가 많으니 검색하셔서 구입하시면 됩니다.

HDMI SPLITTER로 검색하셔도 됩니다.

  • USB 허브

USB 허브는 제가 라즈베리파이 제로를 위해 사용했습니다. 라즈베리파이 1,2,3 사용자 분들은 USB가 라즈베리 파이에 있으니 없어도 무방 합니다.

  • HDMI 캡처보드

4K 입력 HDMI to USB 캡처보드 게임 동영상 편집 닌텐도 스위치 캡처 녹화 영상 PC 노트북 연결 : 제이피엘 플라자 (naver.com)

제가 구입한 제품은 크기가 작아서 선택했습니다. 최대한 양덕분들의 글들을 봐가면서 비슷한 모양의 제품을 구입했습니다.

  • 라즈베리파이 제로

Raspberry Pi Zero W / 디바이스 마트 (devicemart.co.kr)

라즈베리파이 제로 W입니다. 설정 변경 등의 부분을 네트워크로 하다 보니 무선랜 되는 모델로 구입했습니다.

  • HDMI 선택기

케이엘 시스템 케이 엘컴 5:1 HDMI 선택기 : 네이버 쇼핑 (naver.com)

여러 HDMI장비를 사용할 때 편하도록 사용했습니다.

  • 아두이노 나노

아두이노 나노 보드 Nano Board, 헤더 비 납땜 : 송파 메이커 스페이스 (naver.com)

준비물이 좀 많지요? 여기에 HDMI 케이블도 4개 정도 필요합니다.

일단 연결도를 설명드리면, 영상 재생기기에서 HDMI 출력을 HDMI 분배기를 통해 동일한 영상을 두 개로 출력을 보내 하나는 모니터나 TV로 바로 출력 보내고 다른 하나는 HDMI 캡처보드를 통해 라즈베리파이로 보내고 이것을 아두이노가 연결된 LED로 신호화 해서 LED를 작동하는 것입니다.

참 쉽죠 ㅋㅋㅋㅋ.

참고한 영상은 아래와 같습니다.

 

 

youtu.be/hpBRKZ_2aYo

 

영어로 머라 머라 하는 데 그냥 따라 하시면 됩니다.

이제 슬슬 작업을 시작해 볼게요

먼저 LED를 TV나 모니터에 부착합니다.

사용되는 LED 개수를 파악하기 위함입니다.

 

 

 

 

코너 부분은 절단 후 연결

 

같은 쪽에 배선으로 코너를 마무리합니다.

 

요런 식으로 진행합니다.

 

전체적으로 이런 식으로 진행

위와 같이 led를 장착하신 후 led가 몇 개인지 파악해 두세요!!

이제 아두이노에 프로그램을 설치하시면 됩니다.

https://www.arduino.cc/en/software

위 사이트에서 자신에 맞는 운영체제용를 다운로드합니다.

just download로 다운로드

다운로드한 파일을 설치 후 실행합니다.

GitHub – shrocky2/Hyperion: Hyperion Ambient Light Project

위 사이트에 ArduinoCode를 보면 다음과 같습니다.

 

#include "FastLED.h"
 
// How many leds in your strip?
#define NUM_LEDS 110
 
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 6
#define CLOCK_PIN 13
 
#define COLOR_ORDER RGB
 
// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
 
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 500000
// #define serialRate 460800 
 
// Define the array of leds
CRGB leds[NUM_LEDS];
 
void setup() {
      // Uncomment/edit one of the following lines for your leds arrangement.
      // FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
         FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
      // FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
     
      // FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);
 
      // FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
     
        // initial RGB flash
        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"); // Send "Magic Word" string to host
 
}
 
void loop() {
  // wait for first byte of Magic Word
  for(i = 0; i < sizeof prefix; ++i) {
    waitLoop: while (!Serial.available()) ;;
    // Check next byte in Magic Word
    if(prefix[i] == Serial.read()) continue;
    // otherwise, start over
    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 checksum does not match go back to wait
  if (chk != (hi ^ lo ^ 0x55))
  {
    i=0;
    goto waitLoop;
  }
 
  memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
  // read the transmission data and set LED values
  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;
  }
  // shows new values
 FastLED.show();

    }

 

 

참 복잡하죠?????

어려울 것은 없습니다. 우리가 변경해야 될 것은 딱 두 개입니다.

define NUM_LEDS 110 부분에서 110 부분을 자신이 사용한 LED 개수로 변경

ex : define NUM_LEDS 160

define DATA_PIN 6 부분을 자신이 연결할 데이터 통신용 아두이노 pin번호

(그냥 아두이노 6번 사용하시면 됩니다.)

위 코드를 전부 복사해서 실행한 스케치 프로그램에 붙여 놓으면 됩니다.

 

밑줄 부분은 자신에 맞게 수정

 

상단의 툴 클릭 후 라이브러리 관리 클릭

 

fastled를 검색 후 설치합니다.

 

그 후 다시 툴 메뉴에서 보드 선택 후 구입하신 아두이노 모델 선택

 

그 후 다시 툴에서 프로세서를 old bootloader 선택

 

다시 한번 툴에서 포트를 선택 후 아두이노 보드 선택

 

이제 완료가 되었습니다. 프로그램을 아두이노에 업로드하면 됩니다.

 

상단의 -> 표시를 선택하여 업로드하면 됩니다.

 

여기까지 글 쓰는 시간이 장비 완성하는 시간보다 거 걸린 거 같아요 ㅡㅡ;

 

1부는 여기서 마무리하고 2부에서 이어서 작성하겠습니다.

 

여기까지 완료하셨다면 반은 완료된 상태입니다.

 

2부는 여기서 필립스 휴 조명은 가라~~~ 2부 (tistory.com) 확인하세요!

 

그럼 오늘은 여기까지 ^^?

 
 
 
반응형

댓글