나만의 스마트 워치를 만들어 보자

by 하민정 | 2017-01-24 16:25
diy RetroWatch 스마트워치 웨어러블 디바이스

재료

  • 인두기 세트 1개
  • 배터리 잭 1개
  • 아두이노 보드 PRO mini 1개
  • LiPo 배터리 1개
  • 작은 스위치 1개
  • 블루투스 모듈 HC-06 1개
  • 점퍼 와이어 1개
  • 10k 저항 1개
  • 0.96'' OLED 디스플레이 모듈 1개

                                         

※ 이 프로젝트는 instructables 에서 나만의 스마트 워치 만들기 프로젝트로 다음을 참고하여 작성되었습니다. 


이전까지 이미 출시된 웨어러블 기기에 다른 기능들을 추가했다면, 

이번 프로젝트를 통해서는 나만의 스마트 워치 RETRO WATCH 를 만들어 봅시다. 


Retro Watch 는 다른 스마트 워치와 같이 리눅스나 안드로이드 OS 가 올라간 거창한 시계가 아닌,

취미 개발자들, 아티스트들, 디자이너들 과 같이 비 전공자들이 쉽게 이용할 수 있도록 만들 것으로, 

오픈 하드웨어 플랫폼인 아두이노 보드와 안드로이드 앱을 이용한 간단한 시스템만을 갖추고 있습니다. 


여기서는 다음과 같은 구조를 갖게 되며, 아두이노 보드가 메인보드 및 저장장치 역할을 하고, 

유일한 입력 장치인 버튼 하나, 통신 모듈인 블루투스와 전원용 배터리를 이용해 구성될 것 입니다.

                           

이후 안드로이드를 통해 Notification 과 다양한 시스템 정보, RSS 정보를 수집하고 편집할 수 있는 앱을

Retro Watch 에 올릴 것 입니다. 




Step 1. 준비물 


- 아두이노 보드 Pro mini 

- 블루투스 HC-06 

- 12C 0.96'' OLED 디스플레이 모듈 

   ( * 이때 SSD 1306 driver chip 을 사용하는 128 x 64 OLED 를 기준으로,
    Adafruit library 가 사용 가능한 OLED 모듈만 해당합니다. 이를 OLED 모듈 구매 시 확인 필요 ) 

- LiPo 배터리 

   ( * 배터리 사이즈가 작더라도 100 mAh 미만은 전원 유지에 어려움이 있을 가능성이 큽니다.
   따라서 배터리는 보호회로가 장착 되어 있는 제품으로, 끝에 소켓이 부착되어 탈착 할 수 있는 것이 
   필요 ) 

- 점퍼 와이어 

- 인두기 세트

- 작은 스위치 

- 10 K 저항 

- 배터리 잭 




Step 2. 메이킹 


1. 시계 조립 


※  아두이노나 Physical computing 에 이미 익숙한 분들이 아니라면, 바로 아두이노 프로 미니 보드에 조립하는 것 보다, 우선 UNO 보드에서 프로토타입을 만들어 놓고 시작하는 것이 좋습니다. 


시계 조립은 위와 같이 Bottom Layer, Middle Layer, Top Layer 의 순서로 합니다. 

                              

* 이때 3개의 레이어 사이에는 절연 되도록 얇은 테이프를 이용해 분리해 주는 것이 좋습니다. 


2. 아두이노 - 블루투스 연결 

다음 링크를 참고해 일반적인 아두이노와 블루투스 연결 및 테스트 방법을 알아 볼 수 있습니다. 

링크의 내용은 인터페이스 보드가 결합된 블루투스 모듈인데, 

이 프로젝트에서 연결방법과 거의 유사합니다. 


VCC, GND, TXD, RXD 핀을 링크에서와 같이 연결해 줍니다. 

                                                                 

블루투스 모듈       아두이노 
VCC3.3 V 
GNDGND 
TXD2 
RXD3 


3. 아두이노 - OLED 디스플레이 연결 

OLED 디스플레이는 I2C 통신을 사용해서 아두이노 보드와 통신하게 됩니다. 

    OLED  Display아두이노 프로미니
GNDGND
VCCVCC
SDAA4
SCLA5 

만약 OLED 디스플레이가 SPI 통신 인터페이스를 가질 경우 다음을 참조합니다. 


4. 아두이노 - 버튼 연결 

                            


스마트 워치에 어울릴 작은 버튼을 10K 옴 저항과 함께 위의 회로도와 같이 연결해 줍니다. 

여기서는 디지털 5번 핀을 선택해서 버튼과 연결했습니다. 

이외에 다른 핀을 버튼으로 연결한 경우 소스에서 buttonPin 으로 정의된 부분에 연결한 핀 번호로 수정해 줍니다. 


5. 아두이노 - 배터리 연결 

배터리는 간단히 < '+' - RAW > ,<  '-' - GND > 로 연결합니다.

LiPo 배터리를 사용할 것 이므로, 미리 두 가닥의 선을 빼서 female 소켓을 달아 둡니다. 

* 외부 배터리와 같은 전원 입력을 사용하는 경우 '+' 라인을 RAW 핀에 넣어 줘야 합니다. 


6. 아두이노 - USB TO UART 모듈 연결 

USB 시리얼 통신으로 소스코드 업로딩을 하기 위해 USB to UART 변환 모듈을 연결합니다. 

보톤 RX - TX 를 엇갈리게 연결합니다. 

USB to UART 아두이노 프로미니
3.3 VVCC
TXDRXD
RXDTXD
GNDGND


7. 최종 연결 확인 

최종 배선이 끝난 모습은 다음과 같습니다. 

        

이제 연결이 제대로 됐는지 확인을 해 줍니다. 

USB to UART 의 왼쪽 맨 위에 있는 FTDI 모듈을 PC 에 연결해서 아두이노 보드에 불이 들어오면 

일단 부팅은 정상적으로 작동하는 것 입니다. 


다음은 위에서 설명한 조립 과정과 조립을 모두 마친 RetroWatch 의 모습입니다. 

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

다음의 링크에서 RetroWatch 의 아두이노 소스를 받을 수 있습니다. 

링크에서 오른쪽 하단에 있는 < Download ZIP >  버튼을 눌러 다운받고 압축을 풀어 줍니다. 

아두이노 보드에 올릴 소스는 < RetroWatchArduino > 폴더에 있습니다. 


9. 그래픽 드라이버 설치 

OLED 디스플레이 모듈에 이미지와 도형, 폰트 출력을 위해 그래픽 라이브러리가 필요합니다. 

그래픽 라이브러리를 사용하기 위해 < Adafruit_SSD1306 > < Adafruit-GFX-Library > 

두 개의 라이브러리를 설치합니다. 


링크의 우측 아래에 있는 < Download ZIP > 버튼을 눌러 다운 받고, 

안에 있는 라이브러리 폴더를 " 아두이노 설치폴더 / library /  " 아래에 복사해 줍니다. 

* 좀 더 상세한 내용은 여기서 참고하세요. 

 SH1106 드라이버를 사용하는 OLED 의 경우 다음 링크에서 SH1106 용 드라이버를 받아서 사용합니다. 

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

1
2
3
4
5
6
7
8
9
#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
 
 
cs


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

비트맵 이미지를 담고 있는 헤더 파일을 불러와 쓸 수 있도록 복사합니다. 

RetroWatchArduino 폴더에 있는 bitmap.h 파일을

" 아두이노 설치폴더/ Arduino / hardware / libraries / RetroWatch " 경로에 넣어 줍니다. 

* 위와 같은 폴더가 없는 경우 만들어 줍니다. 


11. 소스 수정 

아두이노 IDE 개발 툴을 열어 < RetroWatchArduino.ino > 파일을 불러 옵니다. 

시계 HW 를 연결할 때 사용했던 핀 번호들로 설정해 줍니다. 

* 위 과정에서 사용했던 아두이노 핀 들을 그대로 따라 했다면, 수정이 필요 없습니다. 

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


* U8glib 를 사용하는 경우 RetroWatchArduino_u8glib.ino 파일을 사용합니다. 

여기서 아래에 있는 부분을 수정해 줍니다. 

1
2
3
4
5
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
cs


첫번째 라인은 디스플레이 종류에 따라 수정해 줍니다. 

디스플레이 종류에 따른 u8g 생성자 코드는 다음을 참고합니다. 

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


12. 컴파일 & 업로드 

 여기까지 완료 되었다면, 이제 소스 코드를 컴파일 합니다. 

이 과정에서 문제가 생긴 경우 에러 메시지를 확인한 뒤, 위의 8 - 11 번 과정들을 다시 확인합니다. 

                  

컴파일이 완료 되었다면, 아두이노 보드에 업로드 합니다. 

정상적으로 업로딩이 완료되면 OLED 디스플레이에 OLED 제작사인 Adafruit 로고와 RetroWatch Arduino 로고가 표시 되어야 합니다. 

화면에 아무것도 표시되지 않는다면 Reset 버튼을 눌러 리셋을 한 번 해줍니다. 

로고 화면이 지나가고 " 00 : 00 " 으로 시계 화면이 표시되면 초기화 과정까지 정상적으로 된 것 입니다. 


 블루투스를 확인합니다. 

안드로이드 핸드폰에서 " 설정 / 블루투스 " 에 진입해 블루투스를 "on" 상태로 바꿉니다. 

이후 기기를 검색하고 RetroWatch 로 연결한 블루투스 모듈이 보여야 합니다. 

모듈이 보이지 않는다면 VCC, GND 배선이 잘못됐을 가능성이 있습니다. 

전원만 들어가는 경우 TX, RX 핀이 잘못 연결 되더라도 블루투스 모듈은 자체적으로 동작하게 됩니다. 

블루투스 모듈이 정상적으로 보이면 페어링 단계를 진행할 수 있고, 

비밀번호 4자리 ( 보통 초깃값 1234 로 설정 되어 있음 ) 를 입력하고 연결 됩니다. 


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

구글 Play 스토어에 앱이 등록되어 있으므로 핸드폰으로 직접 RetroWatch 혹은 RetroWatch LE 로 검색하여
설치해도 됩니다. 

안드로이드 v 4.3 이상의 경우 다음에서 다운 받고, v 4.0 - v 4.3 의 경우 다음에서 다운 받습니다. 


다음을 통해 RetroWatch 동작을 확인해 봅니다. 

① 앱이 설치되었다면, 먼저 블루투스의 전원을 "on" 시킵니다. " 설정/ 블루투스" 이후 페어링 연결

 이제 RetroWatch 앱을 실행 

 상단 액션바에 등록된 두번째 메뉴 < 알림 엑세스 > 를 선택해서 RetroWatch 앱에 Notification 접근 권한 부여

④ 액션바 첫번째 메뉴인 < 연결할 장치 선택 > 을 눌러 페어링 된 아두이노를 선택, 보이지 않는 경우 아두이노 전원을 다시 확인하고, 블루투스 모듈을 확인합니다.  < 장치 스캔 > 메뉴로 수동 스캔을 다시 시도합니다. 

 장치가 연결되면 최하단 장치 연결상태 표시 영역에 "연결됨" 이 표시 됩니다.
액션바에서 < ... > 메뉴를 눌러 < 시계로 데이터 전송 > 메뉴를 선택합니다.
이 메뉴는 블루투스를 통해 시계에 표시할 데이터와 시간 정보를 전송합니다.
시계의 블루투스 모듈이 아두이노 보드와 정상적으로 연결 되었다면, 시간 정보가 현재 시간으로 바뀌어 표시



다음은 여기까지 작업이 완료된 RetroWatch 의 모습입니다. 

14. RetroWatch 안드로이드 앱 

RetroWatch 는 제한적인 성능을 가지지만, 몇가지 장치들이 마련되어 있습니다. 

그 중 가장 큰 특징은 사용자가 직접 시계로 보낼 메시지들을 필터링 할 수 있다는 점 입니다. 

또한 RSS 피드 기능을 추가해서 다양한 분야의 정보를 활용할 수 있도록 했습니다. 

                        

① 메시지 목록 탭 

메시지는 앱에서 수집하는 각각의 정보들 입니다. 

긴급한 메시지 일부를 제외한 모든 메시지는 비활성화 상태로 설정됩니다. 

이런 비활성화 상태에서는 시계로 메시지가 전송되지 않습니다. 

필터링을 통해 비활성화 상태를 활성화 상태로 바꿀 수 있습니다. 

각각의 메시지를 선택하면 활성화 할 수 있는 메뉴가 뜹니다. 


② 필터 설정 탭 

RetroWatch 안드로이드 앱에서는 모든 메시지를 필터를 통해 제어합니다. 

이 탭을 통해 필터를 등록, 수정, 그리고 삭제 할 수 있습니다. 

필터를 통해 메시지의 문자열을 바꿀 수 있고, 메시지가 보이지 않도록 삭제할 수 있으며, 

문자열 변경 없이 활성화만 시킬 수도 있습니다. 


 RSS 탭 

이 탭을 통해서 RSS 를 등록하고 관리할 수 있습니다. 

RSS 피드를 통해 시계에 다양한 정보를 표시할 수 있습니다. 

예를 들어, 날씨 정보를 보내주는 RSS 를 등록하고 필터를 통해 문자열을 다듬으면 날씨 알림을
시계에서 받아 볼 수 있습니다. 

RSS 등록을 편리하게 할 수 있도록 자체 제작한 RSS 검색 웹 페이지에 접속해서 RSS 를 검색하고 

바로 앱에 등록할 수 있습니다. 


시계 컨트롤 탭 

앱과 시계의 Style 과 기능을 제어할 수 있습니다. 

Gmail 계정을 여기서 적어주면 읽지 않은 메시지 갯수가 메시지 리스트에 등록 됩니다. 

여기서 Clock Style 과 시계 indicator 표시 여부를 변경할 수 있습니다. 

* 절전을 위해 Display 간격이 조정되어 있으므로 시간차를 두고 적용 됩니다. 

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

 Notification 

안드로이드 indicator bar 에 등록되는 notification 입니다. 

앱에서 Notification 을 수집하기 위해서 Notification service 를 이용하는데, 이것은 안드로이드 버전 4.3 이상에서만 지원됩니다. 4.3 미만의 버전의 안드로이드인 경우 RetroWatch 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 의 필터링 및 상세한 사용방법은 다음을 참조하세요. 


16. 패키징 

패키징을 통해 완벽한 나만의 RetroWatch 를 만들 수 있습니다. 




Step 3. 수행 결과 


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

- 시작화면 :

     아두이노가 부팅될 때 로고가 표시되는 단계 입니다. 

- 시계화면 :

    시간 정보를 표시하는 기본 화면입니다. 

    안드로이드 앱을 통해 시계 스타일을 변경할 수 있습니다. 

    현재 Analog, Digital, Mixed 로 3가지 스타일을 지원합니다. 

    이 화면에서 버튼을 누르는 경우 Emergency message 화면으로 바로 전환됩니다. 

    메시지 화면에서 10분간 업데이트가 없는 경우 idle 화면으로 전환됩니다.

- Emergency message 화면 : 

    시계 화면에서 사용자가 버튼을 누르거나 Emergency 메시지를 새로 수신하면 이 화면으로 전환됩니다. 

    사용자가 버튼을 누르거나 10초간 메시지를 출력하면 다음 메시지로 전환 됩니다. 

- Normal message 화면 : 

    Emergency message 화면 출력이 끝나거나 사용자가 버튼을 누르면 이 화면으로 전환 됩니다. 

    역시 버튼을 누르거나 5초의 메시지 출력 간격 후에 다음 메시지로 전환 됩니다. 

    마지막 메시지를 출력하면 시계 화면으로 돌아갑니다. 

- Idle 화면 : 

    시계 화면에서 사용자의 입력이나 메시지 업데이트 없이 10분이 경과하면 Idle 화면으로 전환 됩니다. 

    Indicator 와 시:분 만을 표시하면, 최소 전력으로 동작하도록 화면 업데이트 간격 등이 조정됩니다. 

    새로운 메시지를 수신하거나 사용자가 버튼을 누르는 경우 시계 화면으로 돌아갑니다. 


RetroWatch 시계는 다음과 같은 특징을 갖고 있습니다. 

- Emergency message 는 총 3개를 저장합니다. RAM 2KByte 로 운영하여, 3개를 초과할 경우 먼저 받은 메시지
 부터 지워집니다. 

- Normal message 는 총 7개를 저장합니다. 마찬가지로 초과할 경우 먼저 받은 메시지부터 지워집니다. 

- 시계 스타일을 자신이 좋아하는 형태로 바꿀 수 있습니다. 물론 소스코드를 수정해 자신만의 스타일로 만들 수
 있습니다. 

- 65 개의 아이콘을 탑재하고 있어서 안드로이드 앱에서 다양한 아이콘을 활용한 메시지를 보낼 수 있습니다.
물론 이 아이콘들도 직접 추가할 수 있습니다. 

- Indicator 표시 여부를 안드로이드 앱에서 변경할 수 있습니다. 

- 내장 배터리는 얇은 140 mAh 로 일반적인 상황에서 약 7시간을 버텨줍니다. 


               

                                                                                            [ 최종 스펙 ] 

                                             - 프로세서 : 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 시간 ) 

                                             - 안드로이드 전용 앱과 연결 ( V 4.3 이상 지원 ) 

                                             - Notification, 시스템 정보, RSS 피드 지원

                                             - 메시지 필터링 지원

                                             - 오픈 소스 



댓글 0

MADE BY

나만의 스마트 워치를 만들어 보자 현재글 헬스 밴드를 만들어 보자 이전글