?>

Hard Copy World

HCW

HardCopy project

Home > Project >

HardCopy project

오픈소스 스마트 워치 Retro Watch 만들기 (DIY how to)

페이지 정보

작성자 최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일14-10-04 23:07 조회24,014회 댓글8건

본문

 

Translated in English => Here!!

 

해마다 트렌드라는게 있었고 항상 변해 오더니 지금은 웨어러블이 트렌드네요. 하지만 아직 설익은 스마트 워치들이 난립하는 와중이라 선뜻 이 비싼 제품을 고르기는 힘듭니다. 그래서 직접 만들어서 얼리 어댑터가 되어보려 합니다. 그리고 트렌드에 맞게 오픈소스로. 이름하여 RetroWatch: 오픈소스 스마트 워치 프로젝트 되겠습니다. 이전에 시도했던 [$45 스마트 워치 만들기 DIY] 를 발판삼아 한껏 성숙해진 결과를 기대하며...

Release note

Updated (2015.01.12) : u8glib 라이브러리를 지원합니다. 이제 다양한 종류의 디스플레이를 RetroWatch 프로젝트에 적용하실 수 있습니다. U8glib는 더 적은 메모리를 사용하고 안정적이며 다양한 폰트등을 적용할 수 있습니다. 대신 화면 갱신이 약간 느려집니다. 깃허브 링크를 통해 u8glib 용 소스코드가 공유되어 있습니다. GitHub.

 

1. 구조

만들고자 하는 RetroWatch는 리눅스나 안드로이드 OS가 올라간 거창한 시계가 아닙니다. 취미 개발자, 아티스트, 디자이너와 같은 비 전공자도 쉽게 사용할 수 있는 오픈 하드웨어 플랫폼인 아두이노 보드와 안드로이드 앱을 이용한 비교적 심플한 시스템입니다. 전체적인 구조는 다음과 같습니다.

hardware_structure

손목에 올릴 매우 작은 컴퓨터를 만든다고 생각하시면 됩니다. 아두이노 보드가 메인보드 및 저장장치 역할을 하고 유일한 입력 장치인 버튼 하나, 통신 모듈인 블루투스와 전원용 배터리를 조합할 겁니다.

안드로이드에서는 Notification 과 다양한 시스템 정보, RSS 정보를 수집하고 편집할 수 있는 앱을 올릴 겁니다. 아두이노 보드는 극히 제한적인 자원만 운용할 수 있으므로 컨텐츠 처리는 모두 안드로이드 앱에서 합니다.

 

2. 준비물

손목에 올릴려면 운용 가능한 최소 사이즈의 부품들로 구비해야 합니다. 다양한 조합이 있을 수 있겠지만 Retro Watch v1.x 에서는 범용적으로 많이 사용되고 비교적 저렴한 부품들로 선택했습니다. 아래 구성품들을 다른 부품들로 대체해도 상관 없으며 아두이노 호환 보드를 사용하기만 한다면 소스 코드도 그대로 사용하실 수 있습니다. 다만 부품을 연결한 핀 번호 등은 직접 수정하셔야겠죠.

 

2.1 시계 HW 준비물

2.1.1 아두이노 보드

arduino pro mini아두이노 보드도 종류가 많지만 그 중 가장 작은 사이즈인 Pro mini 버전을 사용 했습니다. 아두이노 Pro mini 는 국민 보드인 UNO R3 의 다이어트 형이라 생각하시면 됩니다. 가격과 사이즈 절감을 위해 USB 칩이 빠져있고, 동작전압에 따라 3.3v/5v 버전 두 종류가 있습니다. 헤더 핀을 같이 주기는 하지만 일일이 다 납땜해야 하는 번거로움은 있습니다. Size: 33mm x 18 mm x 6mm

FT232-USB-UART-Board-Type-A-2USB 변화 칩이 없으므로 PC 연결 후 소스 업로드를 위해서는 별도의 변환 모듈이 필요합니다. FTDI 혹은 USB to UART(Serial) 변환 모듈이라 부르는데 이 모듈을 같이 준비해야 합니다. 아두이노 Pro mini 호환 보드가 이베이에서 개당 4$ 이하로 구매가 가능하므로 Pro mini 보드 여러개와 USB 모듈 하나를 조합해서 사용하면 경제적입니다. 자세한 사용법은 링크를 참조하세요. [USB to UART 모듈 사용법]

그리고 3.3v/5v 버전 중 3.3v 버전을 사용했습니다. 보드와 연결될 블루투스, 디스플레이 모듈이 모두 3.3v를 지원하고 배터리와의 궁합도 좋았습니다. 3.3v 는 8MHz로 동작하고 5v 버전은 16MHz 로 동작하지만 8MHz 로도 우리가 원하는 성능은 내줍니다.

결론은... Arduino Pro Mini 3.3v + USB to UART 모듈을 준비한다.

주의!! : 아두이노 메인 칩인 ATmega328 의 경우 RAM을 2KByte 탑재하고 있지만 ATmega128 의 경우 RAM 1KByte 입니다. RAM 이 워낙 제한적이라 ATmega128 에서는 돌아가질 않습니다. 대부분 판매중인 보드는 ATmega328 을 쓰던데 그래도 확인하고 구입이 필요합니다.

 

2.1.2 블루투스

Bluetooth module블루투스 모듈은 보통 HC-06 블루투스 메인 모듈, 또는 여기에 Interface base board 가 달린 것 두 가지로 판매합니다. 인터페이스 보드가 달려 있는 모듈이 리셋버튼, 동작상태 LED, 3.3v~5v 지원 등 일반적으로 사용하기에 더 편리합니다만... 사이즈가 크고, 우리에게 불필요한 LED가 전류를 잡아 먹고, 약간 더 비쌉니다. 그래서 인터페이스 보드 없이 HC-06 모듈만 사용할겁니다. 이베이에서 5~6$ 정도??

size: 28mm x 15 mm x 2.35mm (35.7mm x 15.2mm  with base board)

 

2.1.3 Display

아마도 가장 핵심이 되는 모듈은 디스플레이가 아닐까 합니다. 얼마나 작고 저전력의 디스플레이를 구하느냐가 스마트 워치 다워지기 위한 가장 큰 요소입니다. 이베이를 뒤진 끝에 내린 결론은 바로 0.96'' OLED Display. 

size: 26.7mm x 19.26mm x ??

oled

사이즈도 0.96'', 1.3'' 등 다양하고 저전력 OLED 사용, 영문 폰트와 이미지를 출력 가능하며 I2C, SPI 등의 통신 인터페이스를 지원해서 아두이노와의 연결도 간단합니다. 가장 큰 장점이자 단점이 Graphic library 입니다. 도형이나 폰트, 이미지를 그리기 위한 라이브러리를 제공합니다만.. 이게 2KB 에 불과한 RAM을 너무 잡아먹습니다.(그래픽 버퍼 때문인듯) 그래서 최소한의 RAM만 사용하도록 상당히 자린고비 코딩을 해야 했습니다.

주의!! 이 문서는 SSD1306 driver chip을 사용하는 128x64 OLED를 기준으로 합니다. Adafruit library가 사용 가능한 OLED 모듈만 해당됩니다. 다른 드라이버 칩을 사용하거나 사이즈가 틀린 경우 이 문서에서 제공하는 소스코드와 호환되지 않습니다. 직접 소스코드를 수정하셔야 합니다. 따라서 OLED 모듈을 선택, 구매하실 때 반드시 확인하세요.

Updated (2015.01.12) : RetroWatch 가 u8glib를 지원합니다. 이제 다양한 종류의 디스플레이를 사용할 수 있습니다. 지원하는 디스플레이 종류는 링크를 참고하세요link

 

2.1.4 Battery

처음에는 시중에 파는 작은 사이즈의 1회용 배터리로 어떻게 해볼려다 삽질임을 깨닫고 급히 LiPo(리튬 폴리머) 배터리로 교체 했습니다. LiPo 배터리 1셀 타입이 3.7v를 출력해줘서 아두이노 프로 미니 보드의 3.3v와 궁합도 좋고 무엇보다 다양한 사이즈와 용량을 지원해줍니다. 저, 중, 고용량 다양하게 구비해서 테스트 해보고 선택하시는게 좋을 듯 합니다. 전 [501430 - 170mAh], [302030 - 140mAh], [552036 - 350mAh] 를 구해서 테스트 했습니다. (모델명 앞 두 자리는 두께, 중간 두 자리는 폭, 뒤 두 자리는 길이:  ex> 501430 = 5.0mm x 14mm x 30mm) 배터리 가격은 3$ ~ 10$ 미만 정도로 다양합니다.

battery

특별한 버튼 사용없이 BT 연결된 상태에서 30분 간격으로 업데이트만 주기적으로 하는 상태에서 테스트를 해봤습니다. (이때 Emergency 메시지가 sync 되어서 화면 전환은 주기적으로 계속 됩니다. 많은 시간동안 시계 화면과 Idle 화면인 상태입니다.) 140mAh 가 7시간이 조금 못미치게 버텼고, 170mAh 배터리는 7시간 30분 정도를 버텼습니다. 결론적으로 가장 이상적인 배터리는 자신이 만들고자 하는 사이즈에 맞는 초박형 (3mm 미만)에 400mAh 이상인 배터리가 되겠습니다. 그 정도면 하루 이상 버텨주겠죠. 충전은 1~2 시간이면 충분히 될 듯 합니다.

주의!! : 사이즈가 작더라도 100 mAh 미만은 전원 유지에 어려움이 있을 가능성이 크고, 너무 낮을 경우 부팅조차 불가합니다. 배터리는 보호회로가 장착되어 있는 제품을 추천하며 (과방전, 과충전 방지) 끝에 소켓이 부착되어 탈착 할 수 있는 것이 좋습니다. 이 소켓과 결합할 수 있는 female 소켓도 추가로 구하고 구매할 때 USB 또는 220v 충전기를 함께 구매하는 것이 편하겠죠. 전 국내 배터리 전문 몰에 주문하면서 필요한 내용을 통화로 말씀드려서 관련지식이 부좀함에도 수월하게 구했습니다.

 

2.1.5 기타

부품들을 연결할 전선들, 인두기 세트, 유일한 입력 장치인 작은 스위치와 여기에 연결할 10K 저항, 배터리 잭 등등을 준비하고 조립과 관련된 매뉴얼 등을 바로 볼 수 있게 해둡니다.

 

2.2 안드로이드 준비물

Notification 정보를 앱에서 가져오기 위해서 사용하는 서비스가 안드로이드 4.3 부터 지원됩니다. 이 매뉴얼에서 제공하는 RetroWatch 안드로이드 앱도 4.3 버전을 기준으로 작성되어 있습니다. 4.3 이하의 버전을 쓰시는 분을 위해 Notification 정보 가져오는 기능만 제거된 앱도 별도로 준비했습니다. 매뉴얼 하단에 제공된 링크를 통해 직접 소스를 다운로드 받으시고 빌드하셔서 설치하셔도 되고, Google 마켓에서 다운로드 받으셔도 됩니다.

 

 

3. 시계 조립

아두이노나 Physical computing에 이미 익숙한 분들 께서는 쉽게 진행 하시겠지만 그렇지 않은 분들 께서는 바로 아두이노 프로 미니 보드를 조립하지 마시고, UNO 보드 처럼 연결과 사용이 쉬운 보드를 이용해서 먼저 프로토타입을 만들어 보는 것이 좋습니다. 스키 초보자가 엉덩이 멀쩡하게 내려가기 힘들잖아요. 시계 조립은 아래와 같이 합니다.

assembly

아래 주요 부품들 실사진과 비교해 보세요. 합선 조심하시고 3개의 레이어 사이에 절연 되도록 얇은 테이프 등으로 분리해 주시면 좋겠습니다.

before assembly

 

3.1 아두이노 - 블루투스 연결

일반적인 아두이노와 블루투스 연결 및 테스트 방법은 [여기를] 참고하세요. 일단 링크의 내용을 참고하셔서 장치 이름이나 비번 등을 재설정 하시고 진행하셔도 되고.. 전 귀찮아서 그냥 기본 장치명과 비번을 그대로 사용 했습니다. 링크의 내용은 인터페이스 보드가 결합된 블루투스 모듈인데 연결 방법은 거의 유사합니다. VCC, GND, TXD, RXD 핀을 똑같이 연결해주면 됩니다. VCC -> 3.3VGND -> GND, TX -> D2RX -> D3. 블루투스 모듈은 다른 전도성 물체에 칩이나 안테나가 닿으면 수신이 잘 안되는 현상이 발생한다는 보고가 있으니 조심.

BT_pin

 

3.2 아두이노 - OLED display 연결

제가 구입한 OLED display 는 I2C 통신을 사용해서 아두이노 보드와 통신합니다. 아래는 일반적인 I2C 인터페이스 연결 방법으로 이 순서대로 연결하면 됩니다.

OLED Arduino Pro mini
GND GND
VCC VCC
SDA A4 (아날로그 4번핀)
SCL A5 (아날로그 5번핀)

만약 구입한 디스플레이가 SPI 통신 인터페이스를 가진 경우는 아래를 참고하세요. 다만 이 경우 코드상에 약간의 수정이 필요합니다. (SPI 로 연결되는 핀을 설정하는 초기화 부분)

http://learn.adafruit.com/monochrome-oled-breakouts/wiring-128×32-spi-oled-display

3.3 아두이노 - 버튼 연결

스마트 워치에 어울릴만한 작은 버튼과 10k옴 저항을 아래와 같이 연결해 줍니다. 편하신대로 디지털 핀을 선택해서 연결하면 되며, 소스상에서 buttonPin 으로 정의된 부분에 연결한 핀 번호를 수정해줍니다. 여기서는 디지털 5번 핀을 사용 했습니다. 버튼 컨트롤에 대한 내용은 [메카솔루션 아두이노 튜토리얼] 문서의 스위치 예제를 보면 쉽게 설명되어 있습니다

circuit_button

3.4 아두이노 - Battery 연결

배터리는 간단히 (+) -> RAW, (-) -> GND로 연결하면 됩니다. LiPo 충전지를 사용할 예정이니까 미리 두 가닥의 선을 빼서 female 소켓을 달아둡니다. 주의할 점은 외부 배터리와 같은 전원 입력을 사용할 경우 (+) 라인을 RAW 핀에 넣어줘야 합니다. 그렇지 않을 경우 보드에 손상을 초래할 수도 있습니다.

3.5 아두이노 - USB to UART 모듈 연결

USB 시리얼 통신으로 소스코드 업로딩을 하기 위해 USB to UART 변환 모듈을 연결합니다. [여기서] 상세 내용을 확인하실 수 있습니다. 아래와 같이 연결하면 됩니다. 보통 RX-TX 를 엇갈리게 연결합니다.

USB to UART 모듈 아두이노 (Pro mini)
3.3V VCC
TXD RXD
RXD TXD
GND GND

3.6 연결 확인

최종 배선이 끝난 모습은 아래와 같습니다. 일견 복잡해 보이지만 모듈 하나씩 작업하면 그리 어렵지 않습니다. 크기가 작아서 세심한 납땜질과 배선이 필요할 뿐..

RetroWatch_circuit_all

이제 연결이 제대로 됐는지 확인이 필요합니다. 왼쪽 맨 위에 있는 FTDI 모듈(USB to UART) 을 PC에 연결해서 아두이노 보드에 불이 들어오면 일단 부팅은 정상.

아래는 이번 장에서 설명한 조립 과정과 조립을 모두 마친 RetroWatch 의 모습입니다.

assembly_process

 

 

4. 시계용 아두이노 소스 컴파일, 업로드

RetroWatch Arduino 소스는 아래 GitHub 페이지에서 받으실 수 있습니다.

https://github.com/godstale/retrowatch

페이지 오른쪽 하단의 [Download ZIP] 버튼을 눌러 파일을 받고 압축을 풀어줍니다. 아두이노 보드에 올릴 소스는 [RetroWatchArduino] 폴더에 있습니다. 먼저 소스 컴파일을 위한 몇 가지 사전작업을 해보죠.

 

4.1 그래픽 드라이버 설치

OLED 디스플레이 모듈에 이미지와 도형, 폰트 출력을 위해서는 그래픽 라이브러리가 필요합니다. 그래픽 라이브러리를 사용하기 위해서는 [Adafruit_SSD1306], [Adafruit-GFX-Library두 개의 라이브러리를 설치해야 합니다. 위 링크에서 우측 아래에 있는 [download ZIP] 버튼으로 다운로드 받고 안에 있는 라이브러리 폴더를 [아두이노 설치폴더/libraries/] 아래에 복사해 줍니다. 좀 더 상세한 내용은 [여기서] 확인하세요.

(Adafruit 라이브러리를 설치하고 컴파일하면 Robot_xxx 라이브러리와 충돌이 발생해서 에러가 나는 경우가 많습니다. 이 경우는 아두이노 라이브러리 폴더에서 Robot_xxx 라이브러리를 백업하고 삭제한 다음, 아두이노 IDE를 재시작해서 빌드해보시기 바랍니다.)

주의!! SH1106 드라이버를 사용하는 OLED의 경우 아래 링크에서 SH1106 용 드라이버를 받아서 사용하세요. Wonho 님께서 Adafruit_SSD1306 드라이버를 수정해서 만들어 주셨습니다.

https://github.com/wonho-maker/Adafruit_SH1106

이 경우는 아래 코드의 수정이 필요합니다.

#include <Adafruit_SH1106.h>
...
SoftwareSerial BTSerial(9, 8); // Bluetooth TX, RX connection
...
int buttonPin = 5;  // Button pin
...
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // OLED I2C address. Use your own settings

Updated (2015.01.12) : RetroWatch가 u8glib를 지원합니다. 본문에서 사용된 것과 다른 디스플레이를 사용하신다면 u8glib 를 사용하세요. U8glib 라이브러리는 더 작은 메모리를 차지하고 다양한 디스플레이를 지원합니다. 공식 홈페이지에서 라이브러리를 다운로드 받아 설치하세요. official homepage.

 

4.2 비트맵 이미지 헤더 파일 복사

비트맵 이미지를 담고 있는 헤더 파일을 불러와서 쓸 수 있도록 복사해 줘야 합니다. RetroWatchArduino 폴더에 있는 bitmap.h 파일을 [아두이노 설치폴더\Arduino\hardware\libraries\RetroWatch] 경로에 넣어줍니다. 폴더가 없으면 만드어주면 됩니다.

 

4.3 소스 수정

아두이노 IDE 개발 툴을 열어서 [RetroWatchArduino.ino] 파일을 불러옵니다. 시계 HW를 연결할 때 사용했던 핀 번호들을 설정해줍니다. 여기서 사용했던 아두이노 핀 들을 그대로 사용했다면 수정이 필요 없겠지만 다르게 했다면 아래 소스들을 자신의 작업 내용에 맞게 수정해주세요.

SoftwareSerial BTSerial(2, 3); // 블루투스 RX, TX 핀 입력
...
int buttonPin = 5;  // 버튼 핀 입력
...
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // Ox3D 을 자신의 I2C address 로 바꿔서 입력. 디스플레이 판매자 웹 사이트에서 확인하세요.

 

수정 전 수정 후
SoftwareSerial BTSerial(2, 3); //Connect HC-06, RX, TX SoftwareSerial BTSerial(x, x); // 자신의 블루투스 TX, RX 핀 번호를 입력
int buttonPin = 5; int buttonPin = x;  // 자신의 버튼 핀 번호를 입력

Updated (2015.01.12) : U8glib 를 사용하는 경우 RetroWatchArduino_u8glib.ino 파일을 사용하시면 됩니다. 아래 코드를 수정해주세요. 첫번째 라인은 디스플레이 종류에 따라 수정해줘야 합니다. 디스플레이 종류에 따른 u8g 생성자 코드는 링크를 참고하세요.

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);	// change this line according to your display
...
SoftwareSerialBTSerial(2,3); // Input your TX, RX pin numbers
...
int buttonPin = 5;       // Input your button pin number

 

일단 소스코드 컴파일, 업로드 과정까지 완료하기 전까지는 소스코드 수정을 하지 않는 것이 좋습니다.

 

4.4 컴파일/업로드

여기까지 설정이 완료됐으면 이제 소스 코드를 컴파일 합니다. 그리고 이 과정에서 문제가 발생한다면 에러 메시지를 보시고 4.1~4.3 까지의 과정을 확인해야 합니다. 에러 메시지를 구글링 해 보시고, 관련된 모듈들에 대해 자세히 설명한 페이지를 확인하시는 것도 좋겠습니다. [블루투스 모듈 예제] [OLED Display 모듈 예제] [USB to UART 모듈 사용법] [아두이노 통신 방법과 핀 정리]

컴파일이 완료되면 아두이노 보드에 업로드 합니다. 업로드 할 때 아두이노 IDE 하단을 자세히 보시면 [컴파일...] 메시지가 보이다가 pregress bar 가 잠시 멈추면서 [업로딩...] 으로 바뀝니다. 이 타이밍에 아두이노 프로 미니 보드에 있는 리셋 버튼을 눌러줘야 정상적으로 [업로딩 완료] 메시지가 출력됩니다. 업로딩에 실패하면 아래와 같은 에러 메시지가 출력 될 것입니다.

avrdude: stk500_getsync(): not in sync: resp=0×00

이 메시지가 계속 보이면서 업로딩을 못하는 경우라면 [USB to UART 모듈 사용법] 여기를 참고하셔서 문제를 해결하세요.

정상적으로 업로딩이 완료되면 OLED 디스플레이에 OLED 제작사인 Adafruit 로고와 RetroWatch Adruino 로고가 표시되어야 합니다. 화면에 아무것도 표시되지 않는다면 Reset 버튼을 눌러 리셋을 한 번 해주세요. 그래도 뜨지 않는다면 OLED 디스플레이와 보드 사이의 배선을 확인해야 합니다. 로고 화면이 지나가고 00:00 으로 시계화면이 표시되면 초기화 과정까지 정상적으로 된겁니다.

boot_test

블루투스를 확인 할 차례입니다. 안드로이드 폰에서 [설정 > 블루투스] 에 진입해서 블루투스를 on 상태로 바꿉니다. 이후 기기를 검색하고 RetroWatch 로 연결한 블루투스 모듈이 보여야 합니다. 모듈이 보이지 않는다면 VCC, GND 배선이 잘못됐을 가능성이 큽니다. 전원만 들어가면 TX, RX 핀이 잘못 연결 되더라도 블루투스 모듈은 자체적으로 동작합니다. 블루투스 모듈이 정상적으로 보이면 pairing 단계를 진행할 수 있고 비밀번호 4자리(보통 초기값이 1234) 입력 후 연결됩니다.

 

 

5. 안드로이드 앱 설치 & 소스 다운로드 

안드로이드 소스 컴파일 및 수정 방법은 이 문서의 범위를 넘어서는 방대한 양이므로 다루지 않겠습니다. 하지만 RetroWatch Android 소스 전체는 GitHub 에서 자유롭게 받으실 수 있고 수정, 배포도 자유롭습니다. 단지 소스에 포함된 LICENSE 단락만 유지해 주시면 됩니다. 아래 GitHub 페에지에서 받은 소스에서 [RetroWatch_Android\RetroWatch] 폴더를 보시면 됩니다.

https://github.com/godstale/retrowatch

마켓에도 앱을 등록했으므로 폰에서 직접 설치하셔도 됩니다. (RetroWatch, RetroWatch LE 로 검색)

안드로이드 v4.3 이상 : https://play.google.com/store/apps/details?id=com.hardcopy.retrowatch

안드로이드 v4.0 ~ v4.3 : https://play.google.com/store/apps/details?id=com.hardcopy.retrowatchle

아래 과정에 따라 RetroWatch 동작을 확인하세요.

  1. 앱이 설치 되었다면 먼저 블루투스의 전원을 on 시킵니다.(설정 > 블루투스) 이후 페어링 과정까지 완료하세요.
  2. 이제 RetroWatch 앱을 실행합니다.
  3. 상단 액션바에 등록된 두 번째 메뉴 [알림 액세스] 를 선택해서 RetroWatch 앱에 Notification 접근 권한을 설정해 줍니다.
  4. 액션바 첫 번째 메뉴 [연결할 장치 선택] 을 눌러서 페어링 된 아두이노를 선택합니다. 보이지 않는 경우 아두이노의 전원을 확인하고 블루투스 모듈을 확인합니다. [장치 스캔] 메뉴로 수동 스캔을 시도합니다.
  5. 장치가 연결되면 최하단 장치 연결상태 표시영역에 "연결됨" 이 표시됩니다. 액션바 [...] 메뉴를 눌러 [시계로 데이터 전송] 메뉴를 선택합니다. 이 메뉴는 블루투스를 통해 시계에 표시할 데이터와 시간 정보를 전송합니다. 시계의 블루투스 모듈이 아두이노 보드와 정상적으로 연결 되었다면 시간 정보가 현재 시간으로 바뀌어 표시될 것입니다. 블루투스 연결은 정상이지만 시간이 표시되지 않는다면 TX, RX 배선을 확인하세요.

이제 나만의 스마트 워치 RetroWatch 를 활용할 모든 준비가 완료 되었습니다!! 아래는 여기까지 작업이 완료된 RetroWatch 의 모습입니다.

parts_work_well

 

 

6. Retro Watch 동작 구조

6.1 RetroWatch 안드로이드 앱

RetroWatch 에서는 비록 자체 성능은 제한적이지만 다양한 데이터를 사용자에게 보여줄 수 있도록 몇 가지 장치를 마련했습니다. 그 중 가장 큰 특징은 사용자가 직접 시계로 보낼 메시지들을 필터링 할 수 있다는 점입니다. 또한 RSS 피드 기능을 추가해서 다양한 분야의 정보를 활용할 수 있도록 했습니다. 4개의 탭을 전환하면서 각각의 기능들을 테스트 해보세요.

FVCP0TAHRPBJRQ0.MEDIUM

  1. 메시지 목록 탭 : 메시지는 앱에서 수집하는 각각의 정보들 입니다. 긴급한 메시지 일부를 제외한 모든 메시지는 비활성화 상태로 설정됩니다. 비 활성화 상태에서는 시계로 메시지가 전송되지 않습니다. 필터링을 통해서 활성화 상태로 바꿀 수 있습니다. 각각의 메시지를 선택하면 활성화 할 수 있는 메뉴가 뜹니다.
  2. 필터 설정 탭 : RetroWatch 안드로이드 앱에서는 모든 메시지를 필터를 통해 제어합니다. 이 탭에서 필터를 등록, 수정, 삭제할 수 있습니다. 필터를 통해 메시지의 문자열을 바꿀 수 있고 (시계가 영문만을 지원하므로 한글 -> 영문으로 바꾼다던지..) 메시지가 보이지 않도록 삭제할 수 있으며, 문자열 변경 없이 활성화만 시킬 수도 있습니다.
  3. RSS  탭 :  이 탭에서 RSS 를 등록하고 관리할 수 있습니다. RSS 피드를 통해 시계에 다양한 정보를  표시할 수 있습니다. 예를들어 날씨 정보를 보내주는 RSS를 등록하고 필터를 통해 문자열을 다듬으면 날씨 알림을 시계에서 받아 보실 수 있습니다!! RSS 등록을 편리하게 할 수 있도록 자체 제작한 RSS 검색 웹 페이지에 접속해서 RSS 를 검색하고 바로 앱에 등록 할 수 있습니다.
  4. 시계 컨트롤 탭 : 앱과 시계의 Style 과 기능을 제어할 수 있습니다. Gmail 계정을 여기서 적어주면 읽지 않은 메시지 갯수가 메시지 리스트에 등록됩니다. 여기서 Clock style 과 시계 indicator 표시 여부를 변경 할 수 있습니다. (절전을 위해 Display 간격이 조정되어 있으므로 시간차를 두고 적용됩니다.)

arduino_clock_style

RetroWatch 안드로이드 앱에서는 크게 3가지 데이터를 수집합니다.

  • Notification : 안드로이드 indicator bar에 등록되는 notification 입니다. 앱에서 Notification을 수집하기 위해서는 Notification service를 이용하는데 이게 안드로이드 버전 4.3 이상에서만 지원됩니다. 4.3 미만의 버전의 안드로이드 에서는 RetwoWatch LE 앱을 받으세요. LE 앱에서는 Notification 수집 기능이 빠집니다.
  • System info : 배터리 상태, RF(LTE, 3G) 연결 상태, WiFi 연결 상태, 충전 상태 등 시스템이 제공하는 정보를 수집합니다. 추가로 Gmail 계정을 설정하면 Gmail 에서 읽지 않은 메일을 카운트 해줍니다.
  • RSS feed : RSS 제목과 URL을 설정하면 RSS 피드 데이터를 주기적으로 읽어옵니다.

그 외의 특징은 아래와 같습니다.

  • 시계로 메시지를 보낼 때 Emergency message, Normal message 두 가지 종류로 구분해서 보냅니다. 하지만 사용자가 직접 메시지 종류를 지정할 수는 없습니다.
  • Filtering 을 할 때 시계에서 표시할 icon을 지정할 수 있습니다. 65 개의 아이콘을 사용할 수 있습니다.
  • 30분에 한 번씩 메시지를 모두 시계로 업데이트 합니다.
  • 앱을 종료 하더라도 백그라운드로 RetroWatch 서비스는 동작합니다.

RetroWatch의 필터링 및 상세한 사용방법은 아래 링크에서 확인하세요.

http://www.hardcopyworld.com/ngine/android/index.php/archives/192

 

6.2 RetroWatch 아두이노 시계

RetroWatch 시계는 아래와 같은 Mode를 순환하며 동작합니다.

  • 시작 화면 : 아두이노가 부팅될 때 로고가 표시되는 단계입니다.
  • 시계 화면 : 시간 정보를 표시하는 기본 화면입니다. 안드로이드 앱에서 시계 스타일을 변경 할 수 있습니다. 현재 Analog, Digital, Mixed 3가지 스타일을 지원합니다. 이 화면에서 버튼을 누르는 경우 Emergency message 화면으로 바로 전환됩니다. 메시지 화면에서 10분간 데이터 업데이트가 없는 경우에는 Idle 화면으로 전환됩니다.
  • Emergency message 화면 : 시계 화면에서 사용자가 버튼을 누르거나 Emergency 메시지를 새로 수신하면 이 화면으로 전환됩니다. 사용자가 버튼을 누르거나 10초간 메시지를 출력하면 다음 메시지로 전환됩니다. 모든 메시지가 출력 되었다면 Normal message 화면으로 전환됩니다.
  • Normal message 화면 : Emergency message 화면 출력이 끝나거나 사용자가 버튼을 누르면 이 화면으로 전환됩니다. 역시 버튼을 누르거나 5초의 메시지 출력 간격 후에 다음 메시지로 전환됩니다. 마지막 메시지를 출력하면 시계 화면으로 돌아갑니다.
  • Idle 화면 : 시계 화면에서 사용자의 입력이나 메시지 업데이트 없이 10분이 경과하면 Idle 화면으로 전환됩니다. Indicator 와 시:분 만을 표시하면 최소 전력으로 동작하도록 화면 업데이트 간격 등이 조정됩니다. 새로운 메시지를 수신하거나 사용자가 버튼을 누르는 경우 시계 화면으로 돌아갑니다.

arduino_mode

RetroWatch 시계는 아래와 같은 특징이 있습니다.

  • Emergency message는 총 3개를 저장합니다. 3개를 초과할 경우 먼저 받은 메시지부터 지워집니다. RAM 2KByte로 운용하다보니 그렇게 됐습니다.
  • Normal message 는 총 7개를 저장합니다. 마찬가지로 초과할 경우 먼저 받은 메시지부터 지워집니다.
  • 시계 스타일을 자신이 좋아하는 형태로 바꿀 수 있습니다. 물론 소스코드를 수정해서 직접 만들 수도 있습니다.
  • 65개의 아이콘을 탑재하고 있어서 안드로이드 앱에서 다양한 아이콘을 활용한 메시지를 보낼 수 있습니다. 물론 이 아이콘들도 직접 추가할 수 있습니다.
  • 인디케이터 표시 여부를 안드로이드 앱에서 변경 할 수 있습니다.
  • 내장 배터리는 얇은 140mAh 로 일반적인 상황에서 약 7시간을 버텨줍니다. 소스를 절전형으로 가다듬으면 좀 더 오래 버틸 수 있을 것 같습니다.

 

RetroWatch 최종 스펙:

  • 프로세서 : ATmega328 - 3.3v (8MHz)
  • 32KB Flash (2KB is shared for Bootloader), 2KB RAM, 1KB EEPROM
  • 크기 : Width x Height x Depth = 34mm x 32mm x 12mm
  • 배터리 : LiPo 140mAh (대기시간 7시간, 충전 1-2 시간)
  • 안드로이드 전용 앱과 연결 (v4.3 이상 지원)
  • Notification, 시스템 정보, RSS 피드 지원
  • 메시지 필터링 지원
  • Open source

 

 

 

8. 패키징 

RetroWatch Android, Arduino 모듈이 모두 완성되었고 동작에 문제가 없다면 마지막 단계는 패키징일 것입니다. 시계를 정말 시계답게 만드는 과정. 네 전 실패했습니다.

cover_image_small

전 가죽 공예가 아니라 3D 프린터를 시도했어야 합니다. 아래는 박경래님께서 3D 프린터로 만들어주신 RetroWatch 전용 하드케이스 입니다.

F74PQL3HRPNAC2H_small

아래는 Wonho 님께서 만드신 스마트 워치 사례입니다. 기능도 뭐 하나 빠짐이 없고 디자인도 굉장한 수준입니다. 3D 모델링 파일은 링크에서 받으세요. 상세 제작내용은 Wonho님 블로그에서 확인하실 수 있습니다.

arduSwatch_small

 

 

9. 마치며 

RetroWatch 부품들의 가격을 따지면 35$ 정도일 겁니다. 하지만 이건 이론상의 가격이고 실제로 아두이노를 공부하고 이런 저런 관련 부품들 사서 실험해보느라 그보다는 훨씬 많은 돈과, 그 이상의 시간을 들였습니다.

스마트 워치 DIY 하면서 가장 인상 깊었던 점은 오픈소스와 오픈 하드웨어의 경이로움 이었습니다. 공개된 기술로 저렴한 가격의 하드웨어들과 수 많은 사람들의 삽질과 성공담이 공유되어 이젠 전문가가 아니더라도 자신의 아이디어를 직접 실현해 낼 수 있는 조건들이 갖춰졌습니다.

2013년 마지막을 하얗게 불태워야 했던 이 프로젝트의 소스들과 삽질의 결과물이 누군가의 아이디어가 세상에 나오는데 도움이 된다면 더할 나위가 없을 겁니다.

늦었지만 새해 복 많이 받으세요.

2014. 01. 12.

 

RetroWatch Android 는 Apache license, RetroWatch Arduino 는 GPL v3.0 을 따릅니다. 소스 상단의 라이센스 영역을 유지해 주세요. 최신 업데이트 버전과 문서로 바로 연결될 수 있는 링크를 포함하고 있습니다.

데모 동영상YouTube link.

소스 다운로드 : GitHub RetroWatch page

3D printer 츌력용 하드 케이스 파일 :  [wpdm_file id=29]

RetroWatch 안드로이드 앱 (v4.3 or over) 

RetroWatch LE 안드로이드 앱 (v4.0 ~ v4.3, Notification 서비스 삭제된 버전)

Retro Watch app 사용방법

Retro Watch 응용 작품 모음

 

이 문서는 폴란드어(by Sebastian) 및 영어로 번역되어 있습니다. 문서 번역을 해주셨다면 제게 번역자 정보와 함께 메일 부탁 드립니다. 스마트 워치를 직접 제작하신 경우 완성된 사진을 아이디, 홈페이지와 함께 보내주시면 작품 사례집에 게시하도록 하겠습니다.

 

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

오인서님의 댓글

오인서 이름으로 검색 댓글의 댓글 작성일

저걸로는 코드랑 라이브러리 좀 고쳐야 합니다.. SSD1331 컨트롤러라 방식이 달라요.. 저 쇼핑몰에서 좀더 찾아보시면 http://www.devicemart.co.kr/1076847 이런게 있는데..
VCC-3.3V, GND-GND, SDA-SDA, SCL-SCL, D/C-GND, RES-디지털핀 8번 이런식으로 연결하면 될겁니다..

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

아마도 라이브러리에 설정이 잘못되어 있는듯합니다. Adafruit 그래픽 라이브러리를 열어서 내용을 보시면 128x64 해상도와 128x32 해상도 중 하나를 선택하는 #define 구문이 있을겁니다. 여기서 128x64 해상도가 설정되도록 수정해주세요.

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

아래 링크에서 setup() 함수와 drawStartUp() 함수에 사용된 delay() 시간을 줄이면 됩니다.
https://github.com/godstale/retrowatch/blob/master/RetroWatch_Arduino/RetroWatchArduino/RetroWatchArduino.ino