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

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만 사용하도록 상당히 자린고비 코딩을 해야 했습니다.

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.3V, GND -> GND, TX -> D2, RX -> 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를 재시작해서 빌드해보시기 바랍니다.)

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); //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 생성자 코드는 링크를 참고하세요.

 

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

 

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 님께서 만드신 걸작품

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 츌력용 하드 케이스 파일 :  

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

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

Retro Watch app 사용방법

 

Post Author: TORTUGA

TORTUGA
궁금하신 점은 새로 개편한 홈페이지의 QnA 게시판을 이용해주세요!!!!!!! http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=qna

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

    […] reference http://www.hardcopyworld.com/ngine/aduino/index.php/archives/376 […]

    spearsky

    (2014년 2월 7일 - 2:12 오전)

    잘 배우고 갑니다.^^
    멋지네요.
    먼가 도전욕구가 용솟음치는..ㅎㅎ

    화이팅!!

    nanda

    (2014년 4월 10일 - 12:45 오전)

    멋지네요 😀

    김상진

    (2014년 4월 19일 - 12:57 오후)

    BT까지는 잘 따라했는데..
    OLED display는 잘 따라한것 같은데..
    전원도 안들어오네요… 갑갑합니다.

    혹시 도움 받을수 있을까 하여 메일 드렸습니다.
    바쁘시겠지만 짧게라도 도움말좀 주시면 감사하겠습니다.
    워낙 문외한인지라…기초적인 실수일지도 모릅니다. (_ _

      TORTUGA

      TORTUGA

      (2014년 4월 20일 - 1:57 오후)

      답장 메일로 보내드릴께요.

    김민주

    (2014년 4월 22일 - 1:43 오후)

    Adafruit_SSD1306.cpp파일이 문제가 있는 듯 합니다.
    컴파일 에러…ㅠㅠ 아두이노 버전 때문일까요ㅠㅠ
    ‘SPI’, ‘SPI_CLOCK_DIV2’가 was not declared in this scope라는 에러가…

    어떻게 해야 할까요…

    김민주

    (2014년 4월 22일 - 1:45 오후)

    오홋!
    #include
    을 추가하니 컴파일까진 성공이네요 🙂

      TORTUGA

      TORTUGA

      (2014년 4월 24일 - 3:32 오전)

      네 제 경우에는 이런 에러가 발생을 안했는데.. 개발환경에 따라서 SPI 에러가 나는 것 같습니다. 사용하진 않더라도 #import 추가하면 에러 없어집니다.

    김경택

    (2014년 4월 25일 - 10:12 오전)

    안녕하세요. 올려주신 안드 프로젝트는 잘 보고 있습니다 🙂
    다름이 아니라 잘 안되는 부분이 있어서 문의드립니다.

    각 Fragment에서 생성자를 만들어 넣었는데

    public MyFragment (Context c, IFragmentListener l) {
    mContext = c;
    mFragmentListener = l;
    }

    이렇게 생성자를 만드니 ‘This fragment should provide a default constructor’ 란 에러가 뜹니다. 검색을 해보니 프래그먼트 기본 생성자가 없는 경우 발생하는 에러라는데 올려주신 코드에는 이 부분을 어떻게 처리 했는지 이해할 수가 없어서요.

    안토노브

    (2014년 4월 26일 - 10:39 오후)

    혹시….블루투스가 마스터 모듈이어야 되나요 슬레이브야 되나요

      TORTUGA

      TORTUGA

      (2014년 4월 30일 - 6:23 오후)

      폰과 붙어야 하므로 슬레이브 모듈로 마련하셔야 합니다~

    TORTUGA

    TORTUGA

    (2014년 4월 30일 - 6:23 오후)

    가급적 질문은 메일로 보내주세요!!!!! 댓글은 늦게 봐서 답변이 느립니다. ㅜㅜ

    진홍우

    (2014년 5월 9일 - 10:55 오전)

    정말 멋지시네요. 저는 아이들을 위한 미아 방지용 팔찌를 만들어보고 싶은데, 좋은 내용을 보고, 먼저 이 내용 시도해보고, 추후에 응용을 해보겠습니다. 궁금한 사항이 있으면 여기에 글 올려도 될까요?

      TORTUGA

      TORTUGA

      (2014년 5월 9일 - 11:15 오전)

      안녕하세요. 여기에 글 올리셔도 되는데 제가 보는게 좀 늦을 수 있으니 메일로 주시면 좀 더 빠르게 답변이 될 듯 합니다

    데니

    (2014년 6월 8일 - 11:45 오후)

    흠.. 멋지네요.
    한번 똑같이 따라해봐야겠습니다^^

    데니

    (2014년 6월 10일 - 4:00 오후)

    충전 하려면,
    http://www.hardcopyworld.com/ngine/aduino/index.php/archives/752
    위의 충전 모듈을 더 설치해야하는건가요?
    아님 USB to UART로 USB 충전이 가능하나요?

      TORTUGA

      TORTUGA

      (2014년 6월 10일 - 5:30 오후)

      네 맞습니다. 저도 구매해서 해 봤는데.. 느리지만 충전이 되긴합니다. 대신 아두이노 보드로 전원 공급하는 선에 스위치를 달아두고 충전 중에는 스위치를 꺼두시는게 좋을 것 같습니다. 해외 포럼에서 충전과 전원공급을 동시에 하는 것은 문제의 여지가 있다고 하더라구요. 전 그냥 사용하긴 합니다만..

        데니

        (2014년 6월 13일 - 10:11 오전)

        충전모듈을 없이 따로 배터리만 직접 충전 할 수 있을텐데요.
        어떤 방법으로 충전 할 수 있을까요?
        충전을 못하면 한번 쓰고 버려야 하는 사태가,,,,

          TORTUGA

          TORTUGA

          (2014년 6월 16일 - 12:42 오후)

          전 배터리 +,- 라인에 소켓을 달아두고 종종 빼서 충전하고 다시 달도록 해서 씁니다.

    ARGAN

    (2014년 6월 26일 - 8:47 오전)

    TORTUGA님 혹시
    몇명 모집해서
    공방식으로
    하루만..잡아서 해보실 생각없으신가요 ㅎㅎ..
    재료비 + 25000원
    한 5명한다 치고..
    더 올거같은데..제 생가엔
    음.. 시간이 오래걸리면 더 받아야 하겠지요..
    생각있으시면 전 바로할생가있습니다..

      TORTUGA

      TORTUGA

      (2014년 6월 27일 - 10:11 오전)

      안녕하세요. 요청하시는 분이 계시다면 워크샵? 세미나? 형식으로 가능할 것 같습니다. 재밌기도 할 것 같아요.
      아마도 하게 된다면 1달여 정도 준비기간이 필요할 것 같고, 시간은 4~5 시간 정도는 걸릴 것 같습니다. 문제는 인원이겠네요. 장소를 대여해야 하니 적당한 인원이 모여야만 가능할 것 같습니다.

    홍예브

    (2014년 7월 25일 - 3:38 오후)

    배터리 충전은 따로 하시는건가요?

      TORTUGA

      TORTUGA

      (2014년 7월 29일 - 1:16 오후)

      네 배터리는 소켓을 달아서 분리할 수 있게 만든 다음 따로 충전해서 쓰고 있습니다. 배터리 충전 모듈을 넣으니 좀 두꺼워져서요.

    김기성

    (2014년 7월 29일 - 12:13 오전)

    으..어렵네요 아두이노IDE켜니깐 라이브러리 폴더에 공백과 특수기호가 있으면 안됀다고 하여서
    이름을 Adafruit_SSD1306, Adafruit_GFX_Library로 바꿔서 컴파일했더니

    RetroWatchArduino.ino:43:2: error: #error (“Height incorrect, please fix Adafruit_SSD1306.h!”);
    RetroWatchArduino:40: error: ‘Adafruit_SSD1306’ does not name a type
    RetroWatchArduino.ino: In function ‘void setup()’:
    RetroWatchArduino:168: error: ‘display’ was not declared in this scope
    RetroWatchArduino:168: error: ‘SSD1306_SWITCHCAPVCC’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawIndicator()’:
    RetroWatchArduino:667: error: ‘display’ was not declared in this scope
    RetroWatchArduino:667: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino:676: error: ‘display’ was not declared in this scope
    RetroWatchArduino:676: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawStartUp()’:
    RetroWatchArduino:688: error: ‘display’ was not declared in this scope
    RetroWatchArduino:690: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawEmergency()’:
    RetroWatchArduino:711: error: ‘display’ was not declared in this scope
    RetroWatchArduino:721: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawMessage()’:
    RetroWatchArduino:737: error: ‘display’ was not declared in this scope
    RetroWatchArduino:747: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawClock()’:
    RetroWatchArduino:764: error: ‘display’ was not declared in this scope
    RetroWatchArduino:772: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino:793: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino:817: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawIdleClock()’:
    RetroWatchArduino:830: error: ‘display’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void showTimePin(int, int, double, double, double)’:
    RetroWatchArduino:884: error: ‘display’ was not declared in this scope
    RetroWatchArduino:884: error: ‘WHITE’ was not declared in this scope
    RetroWatchArduino.ino: In function ‘void drawIcon(int, int, int)’:
    RetroWatchArduino:892: error: ‘display’ was not declared in this scope
    RetroWatchArduino:892: error: ‘WHITE’ was not declared in this scope
    라고 에러가 계속뜨네요;; 어떻게 해야하는지 알려주실수있나요

      TORTUGA

      TORTUGA

      (2014년 7월 29일 - 1:19 오후)

      (아두이노 설치폴더-libraries) 폴더로 가셔서 라이브러리 폴더명을 Adafruit_SSD1306, Adafruit_GFX_Library으로 바꾸세요. 그리고 스케치에서도 동일하게
      #include “Adafruit_SSD1306”
      #include “Adafruit_GFX_Library”
      이렇게 한번 시도해보세요.

        gmail

        (2015년 10월 2일 - 3:00 오후)

        폴더명을 Adafruit_GFX_Library, Adafruit_SSD1306으로
        바꾸고
        #include “Adafruit_SSD1306″
        #include “Adafruit_GFX_Library”
        이렇게 바꾸어서 실행했더니
        아두이노:1.6.3 (Windows 7), 보드:”Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)”

        retro2.ino:32:10: error: #include expects “FILENAME” or

        retro2.ino:33:10: error: #include expects “FILENAME” or

        retro2.ino:43:2: error: #error (“Height incorrect, please fix Adafruit_SSD1306.h!”);

        In file included from retro2.ino:35:0:

        bitmap.h:1269:43: error: variable ‘bitmap_array’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

        PROGMEM const unsigned char* bitmap_array[] = {

        ^

        retro2.ino:40:1: error: ‘Adafruit_SSD1306’ does not name a type

        retro2.ino:118:32: error: variable ‘weekString’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

        retro2.ino:119:32: error: variable ‘ampmString’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

        retro2.ino: In function ‘void setup()’:

        retro2.ino:168:3: error: ‘display’ was not declared in this scope

        retro2.ino:168:17: error: ‘SSD1306_SWITCHCAPVCC’ was not declared in this scope

        retro2.ino: In function ‘void drawIndicator()’:

        retro2.ino:671:7: error: ‘display’ was not declared in this scope

        retro2.ino:671:63: error: ‘WHITE’ was not declared in this scope

        retro2.ino:680:7: error: ‘display’ was not declared in this scope

        retro2.ino:680:91: error: ‘WHITE’ was not declared in this scope

        retro2.ino: In function ‘void drawStartUp()’:

        retro2.ino:692:3: error: ‘display’ was not declared in this scope

        retro2.ino:694:54: error: ‘WHITE’ was not declared in this scope

        retro2.ino: In function ‘void drawEmergency()’:

        retro2.ino:715:3: error: ‘display’ was not declared in this scope

        retro2.ino:725:24: error: ‘WHITE’ was not declared in this scope

        retro2.ino: In function ‘void drawMessage()’:

        retro2.ino:741:3: error: ‘display’ was not declared in this scope

        retro2.ino:751:24: error: ‘WHITE’ was not declared in this scope

        retro2.ino: In function ‘void drawClock()’:

        retro2.ino:768:3: error: ‘display’ was not declared in this scope

        retro2.ino:776:26: error: ‘WHITE’ was not declared in this scope

        retro2.ino:797:55: error: ‘WHITE’ was not declared in this scope

        retro2.ino:821:51: error: ‘WHITE’ was not declared in this scope

        retro2.ino: In function ‘void drawIdleClock()’:

        retro2.ino:834:5: error: ‘display’ was not declared in this scope

        retro2.ino: In function ‘void showTimePin(int, int, double, double, double)’:

        retro2.ino:888:3: error: ‘display’ was not declared in this scope

        retro2.ino:888:56: error: ‘WHITE’ was not declared in this scope

        retro2.ino: In function ‘void drawIcon(int, int, int)’:

        retro2.ino:896:3: error: ‘display’ was not declared in this scope

        retro2.ino:896:106: error: ‘WHITE’ was not declared in this scope

        컴파일 오류 발생.

        이 리포트는 많은 정보를 포함합니다
        “컴파일하는 동안 상세 출력 보이기”
        파일 > 설정에 사용가능하게 됨

        라고 에러가 계속뜨는데 어떻게해야 하는지 알수있을까요?

    rkddnjsqls

    (2014년 9월 13일 - 5:57 오전)

    다운을 받는데 자꾸 컴파일 오류가 뜨네요.
    이거 어떻게 해야죠?
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp: In constructor ‘RobotControl::RobotControl()’:
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:8: error: ‘LCD_CS’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:8: error: ‘DC_LCD’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:8: error: ‘RST_LCD’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp: In member function ‘void RobotControl::begin()’:
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: ‘MUXA’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: ‘MUXB’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: ‘MUXC’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: ‘MUXD’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:19: error: ‘MUX_IN’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:22: error: ‘BUZZ’ was not declared in this scope
    C:\Users\car audio\Desktop\강원빈\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:25: error: ‘Serial1’ was not declared in this scope

      TORTUGA

      TORTUGA

      (2014년 9월 13일 - 10:05 오전)

      라이브러리 폴더에서 Robot_ 으로 시작하는 라이브러리들을 백업해두고 삭제하세요. 다른 라이브러리와 충돌이 나는 경우가 있습니다.

    rkddnjsqls

    (2014년 9월 13일 - 7:22 오전)

    배터리 전류를 950mah로 해도 되나요? 과전압 떄문인지 선뜻 나서기가 어렵내요.

      TORTUGA

      TORTUGA

      (2014년 9월 13일 - 10:05 오전)

      3.7v LiPo를 사용하시는게 맞나요? 그럼 사용하셔도 상관 없을듯 합니다.

    rkddnjsqls

    (2014년 9월 13일 - 5:20 오후)

    rkddnjsqls

    (2014년 9월 14일 - 7:03 오후)
      TORTUGA

      TORTUGA

      (2014년 9월 15일 - 4:47 오후)

      네 이 모듈 쓰시면 될 듯 합니다.

    나그네

    (2014년 9월 15일 - 4:19 오후)

    ‘SPI’, ‘SPI_CLOCK_DIV2′가 was not declared in this scope라는 에러 나시는분은

    소스에 다음을 인크루드하시면 에러 크리어됩니다.

    #include

    SPI는 반드시 대문자로..

      나그네

      (2014년 9월 15일 - 4:23 오후)

      댓글에 글자가 안나타나네요 -_-

      SPI.h를 소스에 include 하세요

      TORTUGA

      TORTUGA

      (2014년 9월 15일 - 4:49 오후)

      이게 무슨 에런지 모르겠네요. 제가 개발할 때 쓰던 아두이노 IDE 에서는 발생을 안했는데 요즘은 버전에서 나는 것 같고… GitHub에 올려놓은 소스에도 수정을 해야할까봅니다.

    rkddnjsqls

    (2014년 9월 17일 - 10:57 오후)

    저 죄송한데, oled 0.96 12C 화면 큰거 파는데 url 알려주시면 않되나요?

      TORTUGA

      TORTUGA

      (2014년 9월 17일 - 11:17 오후)

      전 ebay.com 에서 구매했는데, OLED I2c 등으로 검색해보시면 여러종류 구경하실 수 있습니다.

    rkddnjsqls

    (2014년 9월 18일 - 9:12 오후)

    저 1.3 도 될까요?

      익명

      (2014년 9월 18일 - 10:12 오후)

      Oled 12c 1.3 도될까요?

      TORTUGA

      TORTUGA

      (2014년 9월 22일 - 9:18 오전)

      1.3” OLED 말씀하시는거죠? 화면 크기는 상관이 없습니다~ 라이브러리와 I2C 인터페이스만 맞으면 됩니다

    Takatoshi Nao

    (2014년 9월 20일 - 9:57 오후)

    감사합니당…완성했습니닷…^^

      TORTUGA

      TORTUGA

      (2014년 9월 22일 - 9:28 오전)

      멋지네요!! 이제 케이스도 한번 입히셔야죠! (완성하신 작품 이미지 소개 좀 해도 될까요?)

    윤재덕

    (2014년 9월 21일 - 9:56 오후)

    보드 빼고 모든부품이 해외 배송 상품인가요??

      TORTUGA

      TORTUGA

      (2014년 9월 22일 - 9:20 오전)

      전 해외에서 모두 구매했는데 국내에도 위 부품들은 판매합니다. 포털에서 모델명으로 검색해 보시면 됩니다.

      TORTUGA

      TORTUGA

      (2014년 9월 22일 - 2:45 오후)

      가격이 싼게 의심스럽군요. 드라이버 칩셋이 포함되어 있는건지 판매자한테 문의해봐야 합니다. 싼거 잘못사면 저처럼 드라이버 칩셋이 없이 순수한 액정만 있어서 동작 안되는 걸 받으실수도 있습니다;; 그래서 사전에 필요한 내용들을 판매자에게 이메일 보내서 확인을 해야합니다. 제가 구매한건 아래 링크 제품(1.3”)을 판매하는 판매자입니다.
      http://www.ebay.com/itm/161296012021?ru=http%3A%2F%2Fwww.ebay.com%2Fsch%2Fi.html%3F_from%3DR40%26_sacat%3D0%26_nkw%3D161296012021%26_rdc%3D1
      그리고 시중에 판매하는 제품들은 제가 일일이 되는지 확인이 불가합니다. 아래 사항들을 직접 체크해 보시고 구매를 하셔야 합니다.
      – I2C 인터페이스를 지원여부 / I2C 연결은 어떻게 하는지 (제품에 따라 4~6핀 까지 연결 방법이 다양)
      – SSD1306 드라이버 칩셋이 포함되어 있는 제품인지
      – Adafruit GFX 라이브러리 사용이 가능한지

    라인트레이서

    (2014년 9월 28일 - 8:45 오전)

    감사합니다 성공했습니다 ㅎㅎ 코드오류가 있었긴한데 위에 조언대로 #include랑 라이브러리 폴더2개 빼니까 바로 되네요

      TORTUGA

      TORTUGA

      (2014년 9월 29일 - 11:01 오전)

      축하드려요! 완성되시면 이쁘게 사진한장 찍으셔서 홈페이지 주소와 함께 메일로 보내주세요. 완성작 리스트에 소개할께요.

    익명

    (2014년 10월 28일 - 8:37 오후)

    Tortuga님이 구매하신 블루투스 모듈은 어디서 구매하셨나요?
    Url을 알려주세요.

    익명

    (2015년 4월 30일 - 4:20 오후)

    retro wacth를 모방해보려 하는데, 각 자바파일이 어떤기능을 하는건지 알려주실 수 있나요?

    HKL

    (2015년 5월 16일 - 8:14 오후)

    제가 터치기능까지 추가하려고 터치 LCD를 샀습니다
    BD663474 이제품으로 하려는데 SPI 연결이였는데
    연결 방법조차 몰라서 몇시간째 헤매고있다가 질문올려봐요
    arduino pro mini에 어떻게 연결하고 이 lcd에 라이브러리가 있나요?

      TORTUGA

      TORTUGA

      (2015년 5월 19일 - 11:35 오후)

      일단 아래 링크 참고해 보시구요…
      http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_etc&wr_id=10
      위 링크는 터치 LCD 사용하기 위한 라이브러리 모아둔건데 터치 LCD는 제품마다 사용법이 다양해서 정확하게 이 방법이다라고 말씀드리기 힘드네요. 가장 좋은 방법은 셀러에게 아두이노 관련 코드와 사용법을 문의해 보는 것입니다. 그리고 이 프로젝트는 LCD 모듈과의 연결은 고려되어 있지 않습니다. 직접 u8glib 등을 적용해서 사용이 가능한지 알아보셔야 합니다.

    JJA

    (2015년 8월 16일 - 12:20 오전)

    안녕하세요!
    비록 문과 고교생 이지만 전자기기DIY에 도전해보고싶은 한 여학생입니다. 전 스마트 워치에 메모기능만 있는 디바이스를 한번 도전해보고 싶은데요
    블로그 포스팅을 보고 결례가 되시지 않으시다면 조언이나 도움을 구해보고 싶습니다!
    제 연락처는 01079425524예요 시간나면 연락주세요ㅎ

    익명

    (2015년 10월 12일 - 1:22 오후)

    . 시계용 아두이노 소스 컴파일, 업로드 자세히좀 아려주세요 켑처좀해주세요

    익명

    (2015년 10월 28일 - 11:50 오후)

    안녕하세요 위의 예제대로 4번을 실행했는데 계속 에러가 뜨네요 다른건 건든것도 없는데
    혹시 가능하시다면 문제가 정확히 뭔지 확인해주실수 있나요?
    개인적으로 조언을 메일로 주고 받고싶습니다.

    연락기다리겠습니다.

      TORTUGA

      TORTUGA

      (2015년 11월 10일 - 12:47 오후)

      QnA 게시판에 에러 상황과 에러 메시지를 함께 적어서 올려주세요. 말씀주신 내용만으로는 상황 파악이 안되네요.

    유민준

    (2015년 11월 20일 - 9:52 오후)

    안녕하세요?? 이 프로젝트에 도전하려하는 초6학생입니다..
    궁금한점이 있어서 질문 드리는데, 충전은 USB to UART 모듈로 하나요??
    가능해도 엄청 느릴것같은데…

      TORTUGA

      TORTUGA

      (2015년 11월 24일 - 9:34 오전)

      아뇨 충전을 위해서는 별도의 충전 모듈을 써야 합니다. USB to UART는 아두이노 프로 미니 보드에 소스 업로드 용으로 사용하는데.. 테스트 도중에는 이 모듈을 통해 전원 공급받아서 씁니다.

    익명

    (2015년 11월 25일 - 9:44 오후)

    안녕하세요?
    이번에 기회가 생겨서 개발자님께서 만드신 소스를 이용해서 똑같이 만들어 보려 하고 있습니다.
    그런데 오류가 계속 발생해서 문제 해결을 여쭙고자 댓글 남깁니다.

    exit status 1
    #error (“Height incorrect, please fix Adafruit_SSD1306.h!”);

    이런 에러가 계속 나는데 무엇이 문제인지 알 수 있을까요?

    4.1,2,3을보고 그대로 따라 했습니다.
    그리고
    4.2에서 [아두이노 설치폴더\Arduino\hardware\libraries\RetroWatch] 경로에 bitmap.h를 넣으라고 했는데 hadware하위폴더에 아무것도 없어서 나머지 폴더를 생성하는 것은 맞는지 여쭙고 싶습니다.

      TORTUGA

      TORTUGA

      (2015년 11월 26일 - 11:04 오후)

      bitmap.h 파일은 RetroWatch_xxx.ino 파일과 같은 곳에 넣어둬도 됩니다. RetroWatch_xxx.ino 파일을 더블클릭해서 열면 됩니다.
      그리고 위 에러는… 라이브러리가 제대로 설치되지 않아서 발생하는 에러입니다. Adafruit 그래픽 라이브러리를 사용하기 위해서는 2개의 라이브러리를 설치해야 합니다. Adafruit_SSD1306, Adafruit_GFX 라이브러리 모두 설치하세요.

    익명

    (2015년 12월 19일 - 2:54 오후)

    안녕하세요?
    Watch를 만들어 보려고 하고있습니다.
    다름이 아니라 컴파일에서는 문제가 없는데 업로느를 하면 이런 문제가 생깁니다. 뭐가 문제 인지 알 수 있을까요?
    잘못된 라이브러리가 C:\Program Files\Arduino\libraries\Adafruit-GFX-Library-master에서 발견: C:\Program Files\Arduino\libraries\Adafruit-GFX-Library-master
    잘못된 라이브러리가 C:\Program Files\Arduino\libraries\Adafruit_SSD1306-master에서 발견: C:\Program Files\Arduino\libraries\Adafruit_SSD1306-master

      TORTUGA

      TORTUGA

      (2015년 12월 22일 - 10:15 오전)

      업로드 오류가 아니라 컴파일 오류인것 같습니다. 라이브러리 폴더명이 잘못 지정되어 있네요. 폴더명을 Adafruit-GFX, Adafruit_SSD1306 으로 변경하고 아두이노 IDE를 모두 끄고 재시작해서 시도해보세요.
      라이브러리 폴더 이름은 내부의 Adafruit-GFX.cpp, Adafruit-GFX.h 등 메인이 되는 cpp/h 파일과 이름이 반드시 같아야 합니다.

    박현규

    (2016년 6월 2일 - 7:47 오후)

    경고: ‘Adafruit SSD1306’ 라이브러리에 .github 허위 폴더
    C:\Users\phk0218\Desktop\retrowatch-master\RetroWatch_Arduino\RetroWatchArduino\RetroWatchArduino.ino:38:20: fatal error: bitmap.h: No such file or directory

    #include “bitmap.h”

    ^

    compilation terminated.

    exit status 1
    보드 Arduino Pro or Pro Mini 컴파일 에러.

    ————————————————————————————————–
    위와 같이 컴파일 에러가 뜨는데
    라이브러리 이름도 맞는것 같고
    C:\Program Files (x86)\Arduino\hardware\ 하위폴더에
    libraries/RetroWatch 폴더가 없어서 폴더를 만들고
    그 폴더에 bitmap.h를 넣었습니다.

    라이브러리 이름도 맞추었고, 제가 생각한 범위내에서
    시도는 다 해봤는데 아직 잘 모르겠습니다.
    혹시 도움을 받을 수 있을까요 ㅠ?

    배상원

    (2016년 6월 7일 - 1:49 오후)

    Pro mini를 안사고 Pro micro를 샀는데..조립에 문제 있을까요?

    김규엽

    (2016년 6월 19일 - 4:45 오후)

    #error(“Height incorrect, please fix Adafruit_SSD1306.h!”);
    에서 애러가 뜹니다.

    오류 내용:

    exit status 1
    #error (“Height incorrect, please fix Adafruit_SSD1306.h!”);

    하창우

    (2016년 7월 28일 - 5:14 오후)

    소스는 https://github.com/godstale/retrowatch/tree/master/RetroWatch_Arduino/RetroWatchArduino_u8glib 이걸 사용하였구요. 블루투스는 인터페이스보드가 포함된 모듈을 사용하였고 아두이노는 우노보드를 사용하였습니다. 스케치는 1.5.4를 사용하여 컴파일과 업로드까지 무사히 되었고, 레트로왓치 안드로이드앱을 사용하여 시계정보 전송까지 되었습니다. 근데 문제는 5번핀에 연결된 버튼을 동일하게 구성하였음에도 전혀 반응하지 않는다는것입니다. 배터리는 아직 연결하지 않고 PC에 USB로만 연결된 상태입니다. 무슨문제일까요…

      익명

      (2016년 7월 28일 - 10:14 오후)

      어플에서 메시지 활성화 해주면 넘어갑니다

    qqq

    (2017년 7월 21일 - 9:45 오후)

    아두이노:1.8.3 (Windows 10), 보드:”Arduino Nano, ATmega328″

    In file included from C:\Users\user\Desktop\retrowatch-master\retrowatch-master\RetroWatch_Arduino\RetroWatchArduino\RetroWatchArduino.ino:35:0:

    bitmap.h:1269: error: variable ‘bitmap_array’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    PROGMEM const unsigned char* bitmap_array[] = {

    ^

    RetroWatchArduino:118: error: variable ‘weekString’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    PROGMEM const char* weekString[] = {“”, “Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”};

    ^

    RetroWatchArduino:119: error: variable ‘ampmString’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    PROGMEM const char* ampmString[] = {“AM”, “PM”};

    ^

    exit status 1
    variable ‘bitmap_array’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    이 리포트는 파일 -> 환경설정에 “컴파일중 자세한 출력보이기”를
    활성화하여 더 많은 정보를
    보이게 할 수 있습니다.
    이 오류가 떠요

댓글 남기기

이메일은 공개되지 않습니다.