월마트의 3.88달러 아날로그 시계를 ESP8266 기반 Wi-Fi 시계로 변환
(github.com/jim11662418)- 저가형 아날로그 쿼츠 시계를 ESP8266 모듈과 Arduino 스케치로 제어해 인터넷 시간에 동기화하는 프로젝트
- NTP 서버에서 15분마다 시간을 받아 정확도를 유지하며, 서머타임 자동 조정 기능을 포함
- 시계의 Lavet 스테핑 모터 코일을 분리해 ESP8266이 제어할 수 있도록 개조하고, EERAM 칩을 이용해 전원 차단 시에도 시침·분침·초침 위치를 저장
- 초기 설정 시 ESP8266이 제공하는 웹 페이지 인터페이스를 통해 시계 바늘 위치를 지정하고, 이후에는 상태 페이지에서 SVG 또는 HTML Canvas로 시계 상태를 시각화
- 저가 하드웨어를 활용해 정확한 네트워크 동기화 시계를 구현할 수 있는 오픈소스 예시로, 임베디드 IoT 제어 기술의 실용적 응용을 보여줌
프로젝트 개요
-
ESP8266 WiFi Analog Clock은 WEMOS D1 Mini ESP8266 모듈과 Arduino 스케치를 사용해 NTP(Network Time Protocol) 서버에서 지역 시간을 자동으로 받아 표시하는 시스템
- 15분마다 NTP 서버에 재연결해 시계의 정확도를 유지
- 서머타임(Daylight Saving Time) 자동 조정 기능 포함
- 프로젝트는 저가형 아날로그 쿼츠 시계를 기반으로 하며, 하드웨어 개조와 소프트웨어 제어를 결합
하드웨어 구성
- 사용된 시계는 월마트에서 3.88달러에 구입한 아날로그 쿼츠 시계
- 시계의 쿼츠 무브먼트를 열어 내부 Lavet 스테핑 모터 코일을 쿼츠 오실레이터로부터 분리하고, 각 리드선에 ESP8266 연결용 와이어를 납땜
- 대부분의 무브먼트는 나사 없이 스냅 방식으로 조립되어 있음
- 코일의 선은 머리카락보다 가늘어 매우 취급에 주의 필요
- 완성된 회로는 EERAM IC와 기타 부품을 퍼포보드(perfboard) 위에 구성
소프트웨어 동작
-
AnalogClock.ino 스케치는 ESP8266이 초당 10회 실제 시간과 시계 표시 시간을 비교
- 시계가 늦으면 초침을 빠르게 이동시켜 동기화
- 시계가 빠르면 실제 시간이 따라잡을 때까지 대기
- 초침 이동은 양극성 펄스(bipolar pulse) 를 Lavet 모터 코일에 인가해 이루어짐
- 모터 특성에 따라 PULSETIME 상수를 조정해야 하며, 실험적으로 30ms가 적합
- 저가형 시계에는 바늘 위치 피드백이 없어 전원 차단 시 위치 정보가 손실됨
- 이를 해결하기 위해 Microchip 47L04 Serial EERAM(4Kbit SRAM + EEPROM 백업) 을 사용
- 시침·분침·초침 위치를 매초 저장하고, 재전원 시 복원
초기 설정 및 웹 인터페이스
- 스케치 최초 실행 시 ESP8266이 간단한 웹 페이지를 제공해 사용자가 시계 바늘의 초기 위치를 지정
- 이후 ESP8266은 EERAM에 저장된 데이터를 이용해 바늘 위치를 기억
- 작동 중에는 상태 페이지(status page) 를 제공하며, 다음 세 가지 표시 모드를 지원
- SVG 기반 시계판 그래픽 표시
- HTML Canvas 기반 시계판 표시
- 텍스트 전용 상태 표시
라이선스 및 기술 정보
- 프로젝트는 MIT 라이선스로 공개
- 주요 언어 구성은 C++ 64.1% , C 35.9%
- GitHub 저장소는 252개의 스타(star) 와 2개의 포크(fork) 를 보유
- 관련 주제 태그: arduino, esp8266, clock, analog-clock, ntp, hardware-construction
의의
- 저가형 시계를 Wi-Fi 동기화형 스마트 시계로 전환하는 실용적 예시
- ESP8266과 Arduino 환경을 활용한 정밀 시간 제어 및 웹 기반 인터페이스 구현 사례
- IoT 하드웨어 개조 및 펌웨어 동기화 기술을 학습하기 위한 오픈소스 참고 자료
Hacker News 의견들
- 정말 멋진 프로젝트임
특히 흥미로웠던 부분은 “SRAM with EEPROM backup” 칩이었음
이 칩은 시계 바늘의 위치를 이동할 때마다 영구적으로 저장할 수 있게 해주는데, 일반 EEPROM처럼 쓰기 수명을 소모하지 않음
단가도 1달러 미만이라 취미나 소규모 프로젝트에 유용한 부품임- 이 칩의 작동 원리를 정리해보면 이렇다고 생각함
SRAM과 EEPROM이 하나의 패키지 안에 컨트롤러와 함께 들어 있고, 근처에 작은 커패시터(4.7µF) 가 있음
SRAM은 전원이 유지되는 동안 데이터를 보존하고, EEPROM은 전원이 꺼져도 데이터를 영구 저장하지만 쓰기 횟수 제한이 있음
컨트롤러는 전압이 낮아지는 걸 감지하면 SRAM의 내용을 EEPROM으로 즉시 덤프함
커패시터는 이 순간 EEPROM에 데이터를 쓸 수 있도록 전력을 공급함
전원이 복구되면 EEPROM의 데이터를 다시 SRAM으로 복사함
단점은 용량이 4킬로비트로 작다는 점이지만, 1달러로 이런 문제를 해결할 수 있다면 충분히 가치 있음 - 비슷한 기술인지는 확실치 않지만, Adafruit의 제품 링크도 흥미로움
- 나는 FRAM도 이런 용도로 좋아함
특히 디버그 로그를 링 버퍼 형태로 저장해두면, 개발용 PC에 연결되지 않아도 임베디드 시스템의 크래시 로그를 남길 수 있어서 유용함
- 이 칩의 작동 원리를 정리해보면 이렇다고 생각함
- Walmart의 가격이 $3.88로 보이지만, 지역·사용자별 동적 가격 정책 때문에 내 지역에서는 $5.92로 표시됨
제품 링크 - 우리 집에는 WWVB 신호로 자동 시간 보정을 기대하는 Seiko 원자시계가 있음
하지만 지금 사는 곳에서는 신호가 너무 약해서 수동 설정이 매우 번거로움
그래서 ESP32와 NTP 서버를 이용해 전 세계 원자시계 신호를 에뮬레이션하는 Arduino 코드를 직접 만들었음
각국의 원자시계 방송 신호의 역사와 차이를 알아보는 것도 꽤 흥미로움- 단, WWVB와 같은 주파수로 송신하는 것은 불법일 가능성이 높으니 주의해야 함
- 누군가 이런 프로젝션 시계를 개조하는 걸 보고 싶음
빨간색 프로젝션 밝기가 밤에 딱 좋지만, Wi-Fi 동기화가 안 돼서 NTP나 GPS로 시간을 맞출 수 없음
프로젝터 부분이 리본 케이블로 본체에 연결돼 있어서 리버스 엔지니어링하면 재미있을 듯함
이상적으로는 천장에 LED 매트릭스로 시간 외의 정보도 표시되면 좋겠음
그런 제품이 있긴 하지만 buyfrixos.com처럼 매우 비쌈- 밝기 낮은 버전을 직접 만든 적 있음
내 제작기 링크 - 링크된 제품은 “Atomic Time” 기능이 있어서 WWVB 신호로 동기화되는 듯함
나도 이런 저가형 벽시계를 여러 개 쓰는데, 시간 오차가 거의 없음
NTP보다 지터가 적을 수도 있다고 생각함 - 나도 WWV/WWVB 시계를 좋아함
한 번도 시간을 맞출 필요가 없고, NTP 시계와도 1초 이내로 일치함
다만 오븐이나 전자레인지 시계는 꺼버리고 싶음 - 사실 이런 개조를 하다 보면 부품값과 시간 때문에 결과적으로 기성품 가격이 합리적이라는 결론에 이르게 됨
- Temu에서 산 디지털 시계 몇 개가 있는데, 시간이 점점 빨라지는 문제가 있음
한 달이면 1분 정도 앞서서 Wi-Fi 동기화 기능이 있었으면 좋겠음
- 밝기 낮은 버전을 직접 만든 적 있음
- 이런 해킹 감성이 너무 좋음
요즘 제품들이 점점 폐쇄적으로 변하면서, 단순하고 해킹 가능한 물건을 직접 만드는 게 그리워졌음
언젠가 생업에서 벗어나면, 단순하고 신뢰성 높으며 해커 친화적인 가전제품을 직접 만들고 싶음
이런 프로젝트를 보면 정말 감탄스러움 - 손을 덜 더럽히고 싶다면 Crazy Clock을 추천함
딸을 위해 샀는데, 불규칙한 똑딱거림이 공부할 때 방해돼서 지금은 쉬고 있음
그래도 꽤 즐거운 경험이었음- “Early clock” 모드는 시계를 0~10분 빠르게 유지해서 지각 방지용으로 좋음
다만 집안에 시계가 여러 개 있으면 하나만 쓰기로 마음먹어야 효과가 있음
- “Early clock” 모드는 시계를 0~10분 빠르게 유지해서 지각 방지용으로 좋음
- 예산이 좀 더 있다면, 30초마다 ‘쿵’ 소리가 나는 대형 시계도 있음
Gents Turret Movement 소개
나는 이걸 이용해 튜닝 포크 기반 전자기 시계를 만들었음
정밀한 시간원 대신 튜닝 포크와 74xx 로직으로 구동함- 이런 튜닝 포크 시계는 정말 멋짐
왜 Accutron이 아직도 이런 시계를 만들지 않는지 의문임
공진 주파수를 이용하는 방식이 쿼츠 시계와 유사하지만 시각적으로 더 매력적임
- 이런 튜닝 포크 시계는 정말 멋짐
- 스테퍼 모터용 H-브리지 회로를 설계할 때는 역전류를 반드시 고려해야 함
그렇지 않으면 스파이크로 오동작하거나 마이크로컨트롤러가 손상될 수 있음
옵토 트랜지스터로 게이트 전압을 분리하고, 모터 전원은 별도로 공급하는 게 이상적임 - “€0짜리 폐기물로 €400짜리 영상 편집 데크 만들기”라는 YouTube 영상을 봤음
GitHub 프로젝트도 있음-
VCR 컨트롤러를 디지털 입력 장치로 재활용하는 아이디어가 훌륭함
예전 덱이나 LANC 컨트롤러가 아직 많이 남아 있어서 활용 가치가 큼
-
VCR 컨트롤러를 디지털 입력 장치로 재활용하는 아이디어가 훌륭함
- 이 프로젝트는 멋지지만, 시간 드리프트가 생길 가능성이 있어 보임
시계가 정확한 시간을 알고 있어도, 실제 구동 속도가 조금씩 어긋나면 누적 오차가 커질 수 있음
특히 PULSETIME 상수를 1ms만 잘못 설정해도 하루 만에 차이가 생길 수 있음
물론 Lavet 스테퍼 모터는 이론적으로 일정한 진동수 기반 스텝을 유지하지만, 마모나 노이즈로 인한 편향이 생길 수도 있음
다만 벽시계 수준에서는 무시할 만한 오차일 수도 있음-
Lavet형 스테퍼 모터는 펄스 수로 동작이 제어되므로, 펄스 폭보다는 개수가 중요함
Wikipedia 설명을 참고하면 이해가 쉬움 - pulsetime은 단순히 한 스텝을 전진시키는 시간일 뿐임
스텝이 누락되지 않는 한 누적 오차는 발생하지 않음
즉, 스텝 카운트를 정확히 유지하면 충분함
-
Lavet형 스테퍼 모터는 펄스 수로 동작이 제어되므로, 펄스 폭보다는 개수가 중요함