Blinky: 스마트 악세사리 만들기
작년에 한창 스마트 워치가 쏟아져 나올 때, 킥스타터에서는 반지 혹은 악세사리 형태의 웨어러블 장치들도 심심찮게 올라오곤 했습니다. 특히나 스마트 반지같은 것은 정말 저게 가능할까 싶을 정도였죠. 직접 만들어보고 싶은 장치 중 하나였습니다.
그럼 현실적으로 DIY 할 수 있는 가장 작은 웨어러블 장치를 만들려면 어떻게 해야할까? 개인적으로 관심있는 주제이기도 하고, 작년에 [스마트 워치 DIY] 를 만들어서 공개한 후 이런 종류의 질문을 몇 번 받기도 했는데 명쾌한 대답을 내놓기에는 제가 아는게 너무 없었습니다. 블루투스, 아두이노, LED, 배터리 등등… 각종 장치를 더하면 ‘웨어러블’한 사이즈는 나오질 않더라구요.
한동안 이 주제를 잊고 지내다가 근래에 블루투스 4.0(이하 BLE) 모듈로 이것저것 해보면서 이제 어느 정도 근사한 답을 내놓을 수 있을 것 같아서 실제 제작에 도전해 봤습니다. 일명 “Blinky: 스마트 악세사리 만들기” 입니다.
.
Blinky: 스마트 악세사리 !!
개인이 DIY 하는 수준에서, 작은 사이즈에 다양한 센서나 기능을 넣는다는 것은 너무 어려운 문제였습니다. 그래서 블루투스(BLE) 모듈에 가장 단순한 전자 부품인 LED와 버튼 하나만을 더했습니다. Blinky는 LED로 내가 원하는 알림이 있다는 것을 알려주고, 버튼을 누르면 핸드폰에서 자동으로 특정 작업이 수행되도록 해주는 스마트 악세사리 입니다.
단순한 대신 사이즈가 작으므로 어디든 부착할 수 있습니다. 옷, 넥타이, 벨트, 밴드, 장갑, 신발 등등… 직경 2cm 정도의 코인 배터리 사이즈가 부담스럽지 않다면 손가락위에 반지처럼 올리셔도 됩니다. 어디든 부착해서 내가 원하는 메시지가 있음을 알려주는 스마트 악세사리로 만들 수 있습니다.
.
Blinky: 어떻게 동작하는 건가?
대부분의 작업 – 폰과의 연결 및 데이터 송수신은 모두 블루투스 모듈이 알아서 처리합니다. 블루투스 모듈은 버튼의 상태가 바뀌면(버튼 클릭) 폰에 알려주고, 폰에서 특정 이벤트를 받으면 LED 상태를 바꿔줍니다.
실질적으로 Blinky를 컨트롤하는 것은 폰에 설치해서 사용하는 전용 앱 입니다. Blinky 안드로이드 앱은 핸드폰에서 발생하는 notification (알림 메시지, 휴대폰 최상단에 앱에서 띄우는 메시지)을 수집할 수 있습니다. Blinky 앱에서 특정 앱이 띄우는 알림 메시지를 활성화 해두면, 이후 그 앱의 메시지가 뜰 때마다 Blinky 장치의 LED 상태를 바꿔줍니다. 예를들어 페이스북 메시지를 활성화 해두면, 페이스북 알림이 올 때마다 Blinky의 LED가 켜지게 되는겁니다. 메시지를 확인하고 알림 메시지가 삭제되면 Blinky LED 도 꺼집니다.
그리고 버튼 매크로를 설정할 수 있습니다. Blinky 장치의 버튼을 누르면 폰으로 특정 데이터가 전송됩니다. 이때 자동으로 실행될 작업을 매크로로 만들어 둘 수 있습니다. 예를들어 진동-벨소리 모드를 변환 한다던지, WiFi on-off 상태를 바꾼다던지 등등… 핸드폰을 만지지 않고도 버튼을 눌러 원하는 작업을 할 수 있습니다.
.
Blinky: DIY 준비물
BLE 모듈(HM-11 또는 HM-10), LED, 버튼, 저항x2(470 ohm, 1K ohm), 코인배터리와 홀더, 기타(점퍼선, 납땜 도구들…)
여기에 추가로 FTDI(USB to UART) 모듈이 필요합니다. FTDI 모듈은 블루투스 모듈의 설정을 바꾸기 위해 사용되며, 제작이 진행되는 동안 블루투스에 전원을 공급해줍니다.
Android v4.3 이상의 BLE 가능한 폰 (아이폰은… 아직 앱 만들 준비가 안되어 있습니다;;;). 안드로이드에서는 v4.3 이상에서만 BLE를 지원합니다.
.
Blinky: 제작 과정
BLE 모듈 중 가장 일반적으로 사용되는 모듈이 HM-10 입니다. 전 크기를 최대한 작게 만들기 위해 HM-10과 유사한 기능들을 제공하지만 더 작은 HM-11 모듈을 사용했습니다. 아래 사진에서 지름이 20mm 인 CR2025 코인배터리와 사이즈를 비교해보세요.
1. BLE 모듈의 모드 설정 :
일반적으로 HM-10, HM-11 모듈을 구입하면 Mode-0 으로 설정되어 있습니다. Mode-0 에서는 폰(혹은 다른 장치)과 연결되지 않은 상태에서 모듈의 UART 포트를 통해 들어오는 특별한 문자열, AT command를 인식합니다. 이 AT command 를 통해 블루투스의 각종 설정을 바꾸고 동작을 제어할 수 있습니다. 그런데 Mode-0 에서는 폰과 페어링되면 AT command를 더 이상 인식하지 않습니다.
그래서 Mode-1 (PIO Collection Mode)으로 바꿔줘야 합니다. Mode-1 에서는 폰과 페어링 된 뒤에도 폰에서 AT command 에 해당하는 문자열을 보내면 인식 하거든요. 그리고 Mode-1에서는 자동으로 특정 핀의 on-off (5V-0V, 여기서는 버튼 on-off 상태) 상태를 체크해서 연결된 폰으로 전송해줍니다. 즉 Mode-1으로 바꾸면 AT 커맨드를 통해 LED 상태를 바꾸고, 버튼의 입력 상태를 받아볼 수 있게 됩니다.
Mode-1 으로 바꾸기 위해서는 앞서 말했듯이 UART 핀을 통해 AT command를 넣어줘야 합니다. 이런 작업을 위해서는 FTDI (USB to UART) 모듈을 이용해서 PC에 붙인 후 PC에서 전용앱을 이용할 수 있습니다. 일단 아래와 같이 HM-10 모듈을 FTDI 모듈에 연결해줍니다. 반드시 VCC 핀을 FTDI 모듈의 3.3V 핀에 연결해야 합니다. 혹은 FTDI 모듈을 3.3V 상태로 점퍼를 설정하고 VCC를 연결해줘야 합니다.
연결을 마쳤으면 FTDI 모듈을 PC에 연결합니다. 그리고 아래 링크의 왼편 메뉴에서 PC ComAssistant 링크를 클릭해서 프로그램을 다운로드 받아 설치합니다.
http://www.jnhuamao.cn/index_en.asp?ID=1
프로그램을 실행해서 아래와 같은 순서로 AT Command를 보낼 수 있습니다.
아래 AT command 를 통해 모드를 바꿔줍니다. 정상적으로 모드가 바뀌면 OK+MODE1 응답을 보내줍니다.
AT+MODE1
이거 하나 하자고 그 복잡한 과정을 거친 겁니다 -_-;;
일단 이 과정이 끝나면 UART 통신용 2개의 선(TX, RX)은 필요가 없습니다만.. 여러가지 설정 변경이 필요할 수도 있으므로 최종 테스트를 마칠 때 까진 남겨두시길 권장합니다. VCC, GND 라인은 남겨둬서 블루투스 모듈에 전원을 공급하도록 합니다.
2. LED, 버튼 결합
Mode-1 상태에서 HM-10 모듈과 HM-11 모듈에서 제어할 수 있는 핀이 틀립니다. 자세하게는 아래와 같습니다.
- HM-11 : PIO2 (output 제어, LED on-off 컨트롤 가능), PIO3 (read only, 입력 상태를 체크해서 on(HIGH, 3V) 상태인 경우 10초에 한 번 알려줌)
- HM-10 : PIO2~3 (output 제어, LED on-off 컨트롤 가능), PIO4~11 (read only, 입력 상태를 체크해서 on(HIGH, 3V) 상태인 경우 10초에 한 번 알려줌)
HM-10 모듈의 경우 버튼과 LED를 아래와 같이 연결합니다.
PIO2 를 통해 470ohm 저항 – LED가 연결되어 있습니다. 따라서 안드로이드 폰에서 PIO2를 제어하는 AT command를 보내주면 LED를 on/off 할 수 있습니다.
버튼은 pull-down 저항(1K ohm)을 사용해서 눌러지지 않았을 때 0V, 눌렀을 때 3V 상태가 되도록 해줍니다. 이렇게 연결해줘야 HM-10 모듈에서 버튼의 on/off 여부를 자동으로 읽어 보내줍니다.
더 작은 사이즈인 HM-11 모듈을 사용하기 위해서는 PIO2 (LED), PIO3(Button) 를 위와 같이 연결하면 됩니다. Blinky 안드로이드 앱에서 블루투스 모듈의 종류를 설정하면 자동으로 PIO 번호를 조절해줍니다.
3. 코인 배터리 결합
코인배터리를 지금 단계에서 연결할 필요는 없습니다. FTDI 모듈을 통해 전원을 공급 받을 수 있는 상태라면 마지막 테스트가 완료된 후 코인배터리를 연결하면 됩니다.
CR2032 또는 CR2025 코인 배터리가 적당해 보입니다만, 사이즈를 위해 더 작은 배터리를 선택할 수도 있습니다. 사이즈를 희생하면 수명이 길어질 것이고, 사이즈를 선택하면 수명이 짧아질 것입니다. 보통 CR2032를 BLE 장치용으로 많이 사용하는 것 같습니다.
4. 앱 다운로드
전용 안드로이드 앱인 Blinky 를 다운로드 합니다. 안드로이드 v4.3 이상만 지원합니다.
앱을 실행하면 먼저 우측 상단의 눈(Eye) 모양 아이콘을 눌러서 주변 블루투스 기기를 스캔합니다. 내 기기가 보이면 선택해서 pairing 하세요. 그리고 우측 상단의 [i] 아이콘을 클릭합니다. 팝업창에서 Blinky 앱이 notification을 수집할 수 있도록 권한을 부여해주세요.
Blinky 앱은 메시지, 필터, 매크로, 설정, logbox 탭으로 구성되어 있습니다.
- 메시지 : notification 수집 권한을 얻었다면 현재 수집된 notification 메시지 들이 리스트로 보입니다. 아직 각각의 메시지들은 활성화 되지 않았습니다. 원하는 메시지를 클릭해서 뜨는 메뉴를 통해 특정 앱이 만드는 메시지 (혹은 특정 메시지만)를 활성화 할 수 있습니다. 이 과정을 거치면 자동으로 필터가 생성됩니다. 이제 새로운 notification이 등록되면 filter와 대조한 뒤 일치하면 자동으로 활성화 할 것입니다. 만약 활성화 된 메시지가 하나라도 있다면 LED를 on 하기 위해 신호(AT command)를 Blinky 장치로 보내줍니다.
- 필터 : 현재 등록된 필터들을 보여줍니다. on 시키고 싶은 LED를 여기서 바꿀수도 있습니다.(2개 이상의 LED를 사용하는 경우에 한함) 여기서 필터를 삭제하면 해당 메시지가 disable 되는 효과가 발생합니다.
- 매크로 : Blinky 장치에서 버튼이 눌러졌을 때 수행할 작업을 만들 수 있습니다. 여러개를 등록해서 한꺼번에 수행하도록 할 수도 있습니다.
- 설정 : 몇 가지 유용한 설정들을 바꿉니다. ‘백그라운드로 실행’ 항목은 특히 유용합니다. 앱을 종료해도 계속 작업을 수행하거든요.
- logbox : 폰과 Blinky 장치가 주고받은 메시지를 표시해줍니다.
.
동작 확인
자 이제 Blinky 앱에서 메시지를 활성화 시키고 매크로를 만들어서 LED와 버튼이 잘 동작하는지 확인해 봅니다!
.
작게 더 작게
이런 스마트 악세사리는 사이즈가 관건이겠죠. 어려운 납땜 작업을 거쳐야 하긴 하지만, 최대한 줄이면 HM-11 모듈을 이용해서 코인 배터리보다 약간 큰 정도의 사이즈로 만들 수 있습니다. (그런데 HM-11 모듈은 버튼 동작이 아직 검증되진 않은 상태입니다.)
마치며
이름은 “Blinky: 스마트 악세사리”라고 거창하게 지었지만 사실 단순한 장치입니다. 특정 메시지가 있으면 LED를 켜주고 꺼주는거죠. 작고 단순한 만큼 여러가지 용도로 활용하기는 더 좋으리라 생각됩니다. 본인의 아이디어에 따라 다양한 용도로 활용해 보시길 권해드립니다.
개인적인 생각으로 제작 난이도는 중급 이상이라고 생각됩니다. 사이즈를 작게 만들기 위해 작은 부품들을 세밀하게 납땜 해야 한다는 점, 그리고 모드를 변경하기 위한 사전 작업을 해줘야 한다는 점 등은 초심자가 하기에는 좀 어렵기도 하고 사전 지식도 필요한 것 같습니다.
참고자료 :
- Bluetooth 4.0 살펴보기
- Bluetooth 4.0 살펴보기
- HM-10, HM-11 datasheet
- HM-10, HM-11 모듈 관련 자료 다운로드
- 비컨 DIY (HM-10 모듈 이용)
- Blinky 앱 다운로드 (Google Play Store)
- Blinky 앱 소스 다운로드 (앱이 불안정하고 막코딩해서 소스가 개판입니다. 정리가 되면 GitHub를 통해 공유하겠습니다.)