1P by GN⁺ 4시간전 | ★ favorite | 댓글 1개
  • 저가형 아날로그 쿼츠 시계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분 빠르게 유지해서 지각 방지용으로 좋음
      다만 집안에 시계가 여러 개 있으면 하나만 쓰기로 마음먹어야 효과가 있음
  • 예산이 좀 더 있다면, 30초마다 ‘쿵’ 소리가 나는 대형 시계도 있음
    Gents Turret Movement 소개
    나는 이걸 이용해 튜닝 포크 기반 전자기 시계를 만들었음
    정밀한 시간원 대신 튜닝 포크와 74xx 로직으로 구동함
    • 이런 튜닝 포크 시계는 정말 멋짐
      왜 Accutron이 아직도 이런 시계를 만들지 않는지 의문임
      공진 주파수를 이용하는 방식이 쿼츠 시계와 유사하지만 시각적으로 더 매력적
  • 스테퍼 모터용 H-브리지 회로를 설계할 때는 역전류를 반드시 고려해야 함
    그렇지 않으면 스파이크로 오동작하거나 마이크로컨트롤러가 손상될 수 있음
    옵토 트랜지스터로 게이트 전압을 분리하고, 모터 전원은 별도로 공급하는 게 이상적임
  • “€0짜리 폐기물로 €400짜리 영상 편집 데크 만들기”라는 YouTube 영상을 봤음
    GitHub 프로젝트도 있음
    • VCR 컨트롤러를 디지털 입력 장치로 재활용하는 아이디어가 훌륭함
      예전 덱이나 LANC 컨트롤러가 아직 많이 남아 있어서 활용 가치가 큼
  • 이 프로젝트는 멋지지만, 시간 드리프트가 생길 가능성이 있어 보임
    시계가 정확한 시간을 알고 있어도, 실제 구동 속도가 조금씩 어긋나면 누적 오차가 커질 수 있음
    특히 PULSETIME 상수를 1ms만 잘못 설정해도 하루 만에 차이가 생길 수 있음
    물론 Lavet 스테퍼 모터는 이론적으로 일정한 진동수 기반 스텝을 유지하지만, 마모나 노이즈로 인한 편향이 생길 수도 있음
    다만 벽시계 수준에서는 무시할 만한 오차일 수도 있음
    • Lavet형 스테퍼 모터는 펄스 수로 동작이 제어되므로, 펄스 폭보다는 개수가 중요함
      Wikipedia 설명을 참고하면 이해가 쉬움
    • pulsetime은 단순히 한 스텝을 전진시키는 시간일 뿐임
      스텝이 누락되지 않는 한 누적 오차는 발생하지 않음
      즉, 스텝 카운트를 정확히 유지하면 충분함