앰비라이트는 ambient lighting의 약자로 티비를 위한 간접 조명 시스템을 뜻한다.


쉽게 말해 화면의 가장자리에 있는 영상의 색을 LED로 밝혀서 마치 화면이 확장된듯한 느낌을 주도록 하는 조명 시스템으로 보면 된다. 필립스에서 처음 개발되었으나, 오픈소스 하드웨어의 발달로 만드는 방법에 대한 자료가 많아 개인도 비교적 쉽게 DIY가 가능하여 직접 제작하는 사람들도 많다.


기본 구현 원리는 다음과 같다.

  • 실시간으로 티비 영상의 가장자리edge 검출
  • 해당 섹션의 평균 색상 추출
  • 섹션의 평균 색상을 LED로 표현





LED 스트랩 테스트





티비 뒷면에 부착전 동작 테스트




실제 티비에 적용된 앰비라이트




번외 - 음악 반응형 LED 라이트


[Development Environment]
Main Chip : ATMEGA 128
Bluetooth Module : FB155BC
Tool Chain : IAR AVR 4.12A
Downloader : AVR Studio 4
Serial Monitor : Tera Term 4.73

Android Application : Bluetooth Chat(on the web)



[개요]
블루투스를 이용하여 안드로이드폰과 AVR이 데이터를 주고 받을 수 있도록 하는 방법에 대해 알아보자.

[블루투스]
블루투스에는 각 용도에 맞게 여러가지 profile을 제공하는데,  몇개의 주요 프로파일은 다음과 같다.
A2DP - 일반적으로 블루투스 헤드셋으로 노래들을 때 사용
AVRCP - 재생, 정지, 다음곡 등의 조작을 할 때 사용
HFP - 핸즈프리용 프로파일
SPP(Serial Port Profile) - 시리얼 통신용 프로파일
이중에서 우리가 사용할 프로파일은 SPP이며 UART 프로토콜로 데이터를 주고 받는다.
(안드로이드에도 SPP가 지원되며, 아쉽게도 아이폰에서는 지원을 안한다고 한다.)

Firmtech의 FB155BC이며 아래와 같이 생겼다.




구동전압은 3.3V이므로 5V 환경에서 사용하려면 3.3V regulator가 필요하다.
블루투스 환경세팅을 위한 interface board를 따로 판매하지만, 가격이 비싸므로
직접 회로를 구성하여 환경세팅을 할수 있도록 할 것이다.(회로가 간단하다)
Interface는 UART로 되어있으므로 AVR에서 사용하기가 아주 쉽다.

우선 아래 회로도대로 땜질을 완료하도록 하자.



사실 블루투스를 사용만하려면 전원(VCC, GND)과 UART(RXD, TXD)만 연결하면 된다.
하지만 우린 블루투스의 Configuration Setting도 해야하고, 블루투스 연결이 잘되었는지 등의 상태도 봐야하니 위의 회로를 모두 구성하는 것이 좋다.


회로를 구성하였으면 땜질이 잘되었는지, 블루투스가 잘 동작하는지 테스트를 해봐야한다.
Bluetooth와 AVR의 통신을 위해 Bluetooth의 RXD, TXD는 UART1에 연결하였고,
Bluetooth에 들어오고 나가는 데이터를 눈으로 보기위해 UART0은 PC에 Serial Cable로 연결하도록 하자. 하이퍼터미널 등의 Serial Monitor 프로그램을 실행하여 연결 COM Port, Baud rate 및 기타 설정값들을 AVR의 UART Setting과 같이 맞춰놓자.(여기 소스에서는 9600bps를 사용하였다)
이제 전원을 켜도록 하자. Status에 연결된 LED가 깜빡이면 뭔가를 대기중이라는 뜻이다. 일단 반은 성공했다고 보면 된다.
이제 Configuration Mode로 진입하기 위해, 블루투스의 전원을 제거한 상태에서 Reset Switch를 누르고 전원을 넣도록 하자.
그럼 아까 띄워놓은 터미널창에 아래와 같은 메시지가 나올 것이다.

0 DEVICE NAME FB155v1.0a
1 AUTHENTICATION DISABLE
2 REMOTE BD ADDRESS 000000000000
3 CONNECTION MODE MODE4
4 UART CONFIG 9600bps 8-N-1
5 STATUS MESSAGE ENABLE
6 POWER SAVE MODE DISABLE
7 ROLE SLAVE

이것저것 입력해보고, 입력이 된다면 땜질은 제대로 된것으로 봐도 무방하다.

Setting을 하나하나 대강 살펴보면,
Device Name은 폰에서 블루투스 검색시에 표시되는 이름이다.
Authentication은 암호화 여부인데, 폰과 연결시에는 Enable시 안됐던것 같다. 일단은 Disable로 하자.
Authentication에 들어가면 PIN code라는 것이 있는데, 블루투스 연결시 PIN Code가 일치해야 연결이 되므로, 0000 등의 임의의 값으로 설정해주자.(폰에서 블루투스 장치를 찾은 후 연결시도시에 Pin Code를 물어보게 되는데, 이 때 입력한 값을 넣어줘야 한다)
Remote BD Address는 전에 연결했던 장치의 고유번호인데, 일단 pass하고,
Connection Mode는 Slave로 사용할 것이므로 신경쓸 필요없다.(1 또는 2로 해주자)
Uart Config는 AVR과 주고 받을 UART의 Setting이다. 역시 AVR의 Setting 값과 맞춰준다.
Role은 블루투스의 경우 누가 찾을지, 연결요청을 할지 Master/Slave로 구분을 한다.
여기서는 폰을 Master로 사용하고, BT Module을 Slave로 한다.
이제 AVR쪽 세팅은 끝났다.


[Android Application]
출처 및 소스

Android SDK Example - BluetoothChat
http://developer.android.com/resources/samples/BluetoothChat/index.html

BuletoothChat을 Base로 SPP 연결이 되도록 수정한 소스
http://blog.naver.com/free2824?Redirect=Log&logNo=60108857440

// 아두이노 사용, 버튼으로 제어
http://web.suapapa.net:8080/wordpress/?p=474





연결방법

기울기 센서 -> 서보제어
화면 드래그 -> 서보제어
휘도센서 -> 뭐 제어
phone과 avr간 가속도, 기울기 차이 비교...







[아이디어]
 우리가 어렸을 때 즐겨하던 숫자퍼즐을 실시간으로 표시되는 카메라 영상을 이용하여 맞출 수 있도록 구현한 작품이다.




[블럭 다이어그램]
CMOS Image Sensor에서 RAM에 이미지 데이터를 올리면(VHDL)
임의로 리맵핑한 메모리 어드레스의 데이터를 화면에 표시함(Verilog) 
FPGA : Spartan2 



[장치 구성]
방향키를 이용하여 퍼즐을 움직이고, Select키를 누르면 힌트를 볼 수 있다. 



[구현 영상]