[테크월드=선연수 기자] 이 글에서는 저전력 블루투스(BLE, Bluetooth Low Energy) 모듈을 사용해, 각 컬러 LED의 색 강도와 RGBA 명도 혼합을 조절해 여러 가지 색을 만들어 내는 방법에 대해 설명한다.

 

 

RGBA 컬러 혼합 제어

8비트 마이크로컨트롤러(MCU)와 블루투스 4.1(Bluetooth 4.1) 저전력 모듈을 사용해 RGBA(Red, Green, Blue, Alpha) 색 공간을 제어함으로써, 발광 다이오드(LED)의 색 밸런스를 무선으로 정확히 제어할 수 있다.

[그림 1]의 데모 보드에는 빨강, 초록, 파랑, 황색 등 총 4개의 LED가 있다. 각 LED의 밝기는 PWM(Pulse Width Modulation) 듀티 사이클(Duty Cycle)을 통해 제어된다. 이는 LED 구동에 사용되는 16 비트 PWM이 4개 장착된 마이크로칩 PIC16F1579 MCU를 통해 구현된다. 16 비트 PWM으로 각 컬러 LED의 색 강도와 RGBA 명도 혼합을 정확하게 제어해 여러 가지 색을 만들어 낸다.

 

[그림 1] RGBA 컬러 혼합 데모 보드 구조

mTouch 정전용량식 터치(Capacitive Touch) 센싱 기술을 적용해 정전식 터치 슬라이더 2개를 동작시킬 수 있다. 내장 RN4020 블루투스 모듈은 BLE 통신을 사용하는 안드로이드(Android) 모바일 애플리케이션이나 데스크톱 프로그램에서 PWM 값 수신용으로 쓰인다. 보드로의 전원 공급은 1.5V AAA 배터리 하나로 공급된다.

 

점등

LED에서 발생하는 빛은 몇 가지 요인에 따라 달라진다. 밝기의 측정 단위는 루멘(Lumen)으로, LED 유형에 따라 다르며 같은 유형의 LED일지라도 다를 수 있다. 컬러 LED는 특정 색을 색도값으로 측정할 때 LED마다 값이 달라진다.

특정 LED 브랜드의 작은 샘플단위로 측정해 밝기와 색도 프로파일을 구성한 다음, 그 값을 하드웨어 설계와 소프트웨어 색도 계산에 대표값으로 사용했다. 이 과정을 색 보정이라고 부른다. 각 컬러가 동일한 루멘값을 내도록 저항값을 고정하면, LED 시리즈 저항값은 빨강 820Ω, 파랑 400Ω, 초록 500Ω, 황색 500Ω이다.

 

동작 모드

동작 모드로는 HSVW(채도+백색), 명도 슬라이더 모드와 BLE를 사용한 색도 셀렉터(Chromaticity Selector) 2가지 방식이 있다.

보드는 먼저 첫 번째 모드로 동작된다. 보드에는 정전식 터치 슬라이더 두 개가 장착돼 있는데, 하나는 컬러 입력용이고 다른 하나는 밝기 조절용이다. 슬라이더 모드에서 첫 번째 슬라이더를 터치하면 슬라이더에서 선택된 색이 LED로 출력된다. 다른 입력값이 수신될 때까지 선택된 색이 표시된다. 특정 색의 밝기는 다른 슬라이더로 조정할 수 있다.

두 번째 모드의 경우, 안드로이드 기반 모바일 앱이나 윈도우 기반 데스크톱 애플리케이션을 통해 컬러값(PWM)을 선택한 다음, 블루투스를 연결해 각각의 PWM 값을 보드로 전송한다. 애플리케이션은 CIE 1931 XY 색도표(Chromaticity Chart)를 사용한다[그림 2]. 선택된 색과 밝기 정도에 대한 PWM 값을 계산 후 블루투스 연결을 통해 RGBA 보드로 전송한다. 그 다음 보드의 블루투스 모듈이 RGBA 보드 펌웨어에서 선택한 색 표시에 사용되는 PWM 값을 수신한다.

 

[그림 2] RGBA LED 색 영역을 표시한 CIE 1931 색 공간

색도 셀렉터 애플리케이션 GUI(Graphical User Interface)는 CIE 1931 XY 색도표로 구성된다. CIE 1931 색 공간은 색도(x)와 휘도(y)를 기준으로 다양한 색을 보여 준다. 빨강, 초록, 파랑의 LED 색과 밝기를 CIE 색 공간에 매핑하면 3가지 디바이스 출력으로 생성할 수 있는 모든 색을 포함한 삼각형이 도출된다. 이를 색 영역(Color Gamut)이라고 한다.

색의 범위를 더욱 확대하기 위해 황색 LED를 추가하고 황색 LED의 XY 데이터를 CIE 1931 XY 색 공간에 매핑하면 빨강, 황색, 초록색 좌표 간에 삼각형이 하나 더 생성된다. 빨강, 황색, 초록색을 서로 다른 비율로 혼합하면 [그림 2]의 색 영역 안에서 여러 가지 색이 도출된다.

이 모드에서 사용된 PC GUI와 안드로이드 앱은 컬러 혼합 알고리듬을 실행해 원하는 색을 만들기 위해 필요한 PWM 듀티 사이클을 계산한다.

색도 셀렉터 애플리케이션은 블루투스 연결을 통해 PWM값을 전송한다. 연결 모듈은 블루투스 4.0이나 그 이상 버전의 트랜시버를 갖춘 휴대폰, PC와 통신할 수 있다. 이 모듈은 주로 색도 셀렉터 애플리케이션을 구동하는 마스터 디바이스에서 듀티 사이클값을 수신하는 용도로 사용된다. [그림 3]은 MCU와 BLE 모듈 간 핀투핀 설정(Pin-to-Pin Configuration)을 보여준다.

 

[그림 3] BLE 모듈(좌측)과 MCU(우측) 간 인터페이스

 

블루투스 통신

블루투스 디바이스에는 블루투스 클래식과 BLE 두 가지 종류가 있다. BLE 디바이스는 다른 BLE 디바이스나, 클래식 기능과 저전력 기능을 모두 가진 블루투스 듀얼 모드 디바이스하고만 통신할 수 있다. RGBA 보드에서 사용되는 RN4020 모듈과 통신하기 위해서는 마스터 호스트 디바이스가 BLE 디바이스이거나 블루투스 이중 모드 상태여야 한다.

모듈은 블루투스 코어 4.1 사양을 따르며, 입출력 라인과 UART 인터페이스를 통해 사용자의 제어를 받는다. UART는 ASCII 명령을 지원해 애플리케이션 기반 요건에 맞도록 모듈을 제어하거나 구성한다.

 

클래스별 작동 방식

두 번째 모드(색도 셀렉터 방식)에서 보드가 동작할 경우, 데스크톱이나 안드로이드의 RGBA 색 혼합 앱의 색도 셀렉터 애플리케이션에 포함된 색도표에서 원하는 LED 색을 선택한다. 애플리케이션은 빨강, 파랑, 초록, 황색 PWM 듀티 사이클을 계산하고, BLE 연결을 통해 결과 값을 보드로 전달한다. 데스크톱 애플리케이션은 비주얼 스튜디오 C#.NET으로 개발됐으며 애플리케이션은 다양한 클래스를 적용해 MVC(Model, View, Controller) 원칙을 따른다.

RGBA 뷰 컨트롤러 클래스는 애플리케이션의 GUI, 뷰 매니저, 컨트롤러 역할을 수행한다. 뷰 컨트롤러 클래스는 새로운 클래스 오브젝트를 생성하고, 의존성 주입(Dependency Injection)을 수행하는 계층 구조(Hierarchy)의 최상단에 위치한다. 또한 모든 GUI 이벤트를 처리하고 적절한 메소드도 호출한다.

RGBA 계산 클래스는 선택된 포인트가 RGB 삼각형 안에 있는지, 아니면 RGA 삼각형 안에 있는지를 파악하고 LED의 컬러별 듀티 사이클을 계산한다.

3×3 행렬 클래스는 역행렬, 행렬식, 전치, 여인수(Co-factor), 곱셈 등 모든 3×3 행렬 수학 연산을 수행한다. 벡터 3 클래스는 3×3 행렬 클래스의 행렬 계산에서 사용할 3열 벡터를 실행하고, RGBA 데이터 클래스는 컬러별 듀티 사이클값을 저장하는 사용자 지정 데이터(Custom Data) 유형이다.

무선 통신 래퍼(Wrapper) 클래스는 RGBA 애플리케이션을 실행하기 위해 무선 통신에서 요구하는 모든 메서드가 인터페이스에 포함돼 있으며, 저전력 블루투스와 블루투스 클래식 등 모든 무선 통신 메서드는 이 인터페이스를 사용할 수 있다. RGBA 보드를 대상으로 인터페이스를 실행해 RS232 통신으로 RN4020 PICtail 카드를 이용해 BLE 통신을 실행한다.

프로그래머는 비주얼 스튜디오에 내장된 BLE 라이브러리나 다른 외부 업체의 라이브러리를 통해 무선 통신 실행용 클래스를 새로 만들어낸다. 이 인터페이스는 실제 컨트롤러에서 통신 실행 부분을 분리함으로써 새로운 통신 실행 시 뷰 컨트롤러와 그 외 클래스들이 변경되지 않도록 한다.

 

RN4020 디바이스 클래스를 통한 RGBA BLE 통신은 RGBA 보드와의 BLE 통신용 무선 통신 래퍼 인터페이스를 실행하고, PICtail 카드는 UART나 RS232 포트를 통해 PC에 연결한다. 시리얼 통신을 구축해 BLE 통신 명령을 전송한다.

BLE 디바이스 정보 클래스는 원격 연결 디바이스에 대해 명칭, 주소, 지원되는 서버 서비스와 같은 기본 정보를 저장한다. 이 정보는 원격 디바이스를 식별·연결하는 데 사용된다.

검색 결과 위임(Delegate) 클래스의 ‘Delegate’는 디바이스 검색이 끝나면 BLE 클래스에서 검색 결과 이벤트를 제공해, 해당 디바이스 목록을 표시하게 되며 검색 작업에 10초 정도의 시간이 필요하다. 연결 상태 변경 Delegate 클래스를 통해 Delegate는 BLE 클래스에서 마스터 PICtail 카드와 원격 디바이스의 연결 여부를 판단해 현재 연결 상태를 표시하는 이벤트를 제공한다.

상수 클래스는 RN4020 모듈 명령어와 응답, 서비스, 특성 UUID 등 애플리케이션에 필요한 상수를 모두 저장한다.

안드로이드용 자바(Java) 애플리케이션 클래스는 데스크톱 애플리케이션과 구조적으로 유사한 안드로이드 액티비티 클래스를 사용해 MVC 원칙을 엄밀하게 준수한다. 반면, 안드로이드 애플리케이션은 안드로이드 폰에 내장된 BLE 하드웨어를 사용한다. 안드로이드 운영시스템은 필요한 모든 이벤트와 콜백을 비롯해 BLE 통신에 필요한 모든 라이브러리를 제공한다.

RGBA 뷰 액티비티 클래스는 GUI 컨트롤을 제외한 데스크톱의 뷰 컨트롤러 클래스와 유사하다. GUI 컨트롤은 클래스가 아닌 XML 파일에 정의돼 있다.

 

결론

이번 글에서는 16 비트 PWM으로 어떻게 LED의 강도를 정확하게 조절할 수 있는지에 대해 설명했다. RGBA LED 컬러 혼합 보드에는 색 입력과 밝기 조절 기능이 있는 슬라이더 정전식 터치 버튼이 있고, 저전력 블루투스 4.1 모듈로 통신을 실행해 사용자는 PWM 값을 RGBA 보드에 전송하고 원하는 색을 출력하는 방식이다. 윈도우 기반 데스크톱이나 안드로이드 기반 휴대폰의 색도 셀렉터 애플리케이션에서 선택해 출력할 수 있다.

 

글: 스와티 스리드하르(Swathi Sridhar), 남라타 달비(Namrata Dalvi)
자료제공: 마이크로칩테크놀로지

- 이 글은 테크월드가 발행하는 월간 <EPNC 電子部品> 2020년 6월 호에 게재된 기사입니다.

이 기사를 공유합니다
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지
이 기사와 관련된 기사