世界を動かす技術を、日本語で。

Walmartの$3.88アナログ時計をESP8266ベースのWi-Fi時計に改造する

概要

  • ESP8266 を使ったアナログ時計の自動時刻補正プロジェクト
  • NTPサーバー から時刻を取得し、時計を常に正確に保つ仕組み
  • Lavetモーター制御 のためのクォーツ時計改造方法
  • 電源断対策として EERAM に針位置を保存
  • 初期設定や状態確認のための Webインターフェース 提供

ESP8266 WiFi アナログ時計の概要

  • WEMOS D1 Mini ESP8266モジュール とArduinoスケッチによる構成
  • NTP(Network Time Protocol)サーバー から自動でローカル時刻を取得
  • 15分ごとにサーバーへ再接続し、常に 高精度な時刻表示 を実現
  • サマータイム(DST)自動調整 対応
  • 安価なアナログクォーツ時計を制御対象

ハードウェア構成と時計改造

  • Walmartで購入した クォーツムーブメントアナログ時計 利用例
  • アナログ時計のクォーツムーブメントを分解し、内部の Lavetステッピングモーターコイル を切り離し
  • コイルのリード線にワイヤーを半田付けし、 ESP8266との接続端子 を作成
  • コイルのワイヤーは非常に細く、 取り扱い注意
  • 他の事例もWebで検索可能

ソフトウェアと動作概要

  • Arduinoスケッチ「 AnalogClock.ino」による制御
  • 1秒間に10回、 アナログ時計の時刻とNTP取得時刻を比較
  • 時計が遅れていれば、 ESP8266が秒針を進めて補正
  • 時計が進みすぎている場合は、 実時刻が追いつくまで待機
  • 秒針制御は Lavetモーターコイルにバイポーラパルス を送信
  • 時計機構によって PULSETIME定数 (パルス幅)は調整が必要(例:30msが推奨値)
  • 針位置のフィードバック機構がないため、 電源断時の針位置ロスト問題

針位置記憶と復旧

  • Microchip 47L04 Serial EERAM(4Kbit SRAM+EEPROMバックアップ) 利用
  • 時計の針位置(時・分・秒)を毎秒EERAMに保存
  • 電源再投入時に 最後の針位置をEERAMから復元
  • 初回起動時は Webページで針の初期位置設定 が必要

Webインターフェースと状態表示

  • ESP8266は 簡易Webサーバー としても動作
  • 時計の状態表示ページを提供
  • 状態ページでは
    • SVG(Scalable Vector Graphics)による時計盤描画
    • HTML Canvasによる時計盤描画
    • テキストのみの表示
    • などのオプションを選択可能
  • セットアップページ時計状態のグラフィカル表示 が可能

注意点・補足

  • 安価なアナログ時計の改造は 自己責任
  • コイルの扱いに細心の注意
  • 電源断時の復旧策 としてEERAMの活用が重要
  • Webインターフェース によりユーザーの利便性向上

Hackerたちの意見

いいプロジェクトだね!個人的に一番面白いのは「EEPROMバックアップ付きSRAM」チップだと思う。これを使うと、時計の針の位置を動かすたびに持続的に保存できるんだ。普通のEEPROMの書き込み耐久性を消耗せずに済むし、単品だと1ドル以下で手に入る。知っておくと便利な製品だね。

これが同じ技術かはわからないけど、どちらにしてもクールだね!https://www.adafruit.com/product/1897

それは本当に面白いね。今日学んだ。これがどう機能するかというと、SRAMとEEPROMが一つのパッケージに入っていて、両者と通信するコントローラーがあって、その近くに小さなコンデンサー(この時計は4.7μFを使ってる)もあるんだ。SRAM部分は普通のSRAMの機能を果たしていて、読み書きしても劣化しないし、電源がある限りデータを保持する。EEPROMは普通のEEPROMの機能を果たしていて、データを永遠に保存する(個人の人間のスケールで言えばね)、でも書き込みサイクルはちょっと制限されてる。コントローラーは、低電圧を検知すると「やばい!」ってなって、すぐにSRAMの内容をEEPROMにダンプする。これでEEPROMの書き込みサイクルを節約できる。電源イベントがなければ、EEPROMは全く書き込まれない。一方、コンデンサーは「やばい!」イベントが起きたときにEEPROM書き込みを行うための電力を供給する。電源が戻ったら、EEPROMのデータがSRAMに戻される。--- 欠点は?この47L04は4キロビットしか保持できない。利点は?ホビー用プロジェクトや限られた生産において、問題を解決するために1ドル使うのはほとんど何でもないよね。 :)

これが好きだけど、あまり手を汚したくないなら、Crazy Clockをチェックしてみて!https://www.tindie.com/products/nsayer/crazy-clock/ 娘のために買ったんだけど、変な音が勉強の邪魔になっちゃったから、今はお休み中。だけど、すごく楽しめたよ。

早めの時計 - 時間が0分から10分早く進む。遅れないように時計を進めるのが好きな人向け。この時計は「補正」しようとするのを防いでくれるから、今がどれくらい早いかわからない。ADHDタイプの人にはかなり賢いアイデアだね。唯一の問題は、現代の家庭にはたくさんの時計が見えるから、それらを設定しないと決めないといけないこと。

こんな感じの安いプロジェクション時計を改造してる人を見てみたいな。https://www.homedepot.com/p/La-Crosse-Technology-5-in-Color-... 赤い投影は夜にちょうどいい明るさなんだけど、Wi-Fi対応じゃないのが残念。NTP同期もできないし、GPS受信機も接続できない。時計のプロジェクター部分はリボンケーブルで接続された別のデバイスなんだ。自分で逆アセンブルしたいけど、時間がないんだよね。理想は、天井にLEDのマトリックスを投影して、時間だけじゃなくてもっと情報が得られること。そういう時計はあるけど、めっちゃ高いんだよね!例: https://buyfrixos.com/

HNの精神を損なうことになるけど、数時間ハッキングしてパーツを買ったら、その価格はそんなに悪くないかもね。

+1 テムからデジタル時計をいくつか持ってるけど、見た目はいいのに正確な時間が保てないんだ。徐々に早くなって、1ヶ月後には約1分進んでる。時計を修正するのが面倒だし、Wi-Fi接続のソースから時間を取れたらいいのに。

明るさが低いものを探してるなら、僕が作ったのがあるよ!https://www.stavros.io/posts/i-made-another-little-bedside-c...

あなたがリンクしたやつは「原子時計」って言ってるけど、普通はWWV/WWVBからのラジオ同期を意味するよね。俺もこういう安い壁時計をいくつか持ってるけど(プロジェクター付きのはないけど)、見た感じいつも正確だし、ずれも感じたことないよ。あの特定のやつを試して、精度がイマイチだったの?原則的には、コンピューターネットワークを使ったNTPよりもこの方法の方がジッターが少ないはずだと思うんだけど。

部屋の暗さによっては、普通の明るいLCDスクリーンとカメラレンズでなんとかなるかも。アマゾンとかでよく見かける240x240pxの1インチ四方のTFTディスプレイから始めるのがいいかもね。

これって、例えばこれとどれくらい違うの?: https://www.amazon.com/ihreesy-Movement-Mechanism-Silent-Rep...

そういえば、あれは36ドルだね。

ほんとにすごいハッキングだね!こういうのを見るのが大好きなんだ。ここ10年くらい、どんどんロックダウンされてハッカーに優しくないものが増えてきて、シンプルなものをハックしたいって思うようになった。もし働かなくてもいい状況になったら、小さなガジェットから大きな家電まで、シンプルで信頼性があってハック可能なものを作りたいな。家電がフルコンピュータを搭載してるのにアクセスできないのがもどかしいよ。素晴らしい仕事と素晴らしい記事に拍手を送りたい!

本当に欲しいのは、GPSで動くやつなんだ。信号に時間が無料で含まれてるし、位置情報からタイムゾーンも導き出せる。そうすれば、夏時間も自動で調整されるし、Wi-Fiに頼る必要もない。これなら本当にゼロ設定で、常に正確だね。

NISTのWWVBラジオ局から電波で時間を受信する時計が結構あるよ。[0] もしあなたの地域が夏時間を観測するかどうかのスイッチが裏に付いてることが多い。 [0] - https://www.nist.gov/pml/time-and-frequency-division/time-di...

何かしらの設定は必要だよ。DSTの開始日は年によって変わるから、GPSの時間信号にはそれが反映されてないんだ。

GPSもそんなに難しくないよ。受信機は安いし(ここで役立つ精度なら5ドルから10ドルくらい)、NMEA文字列やPPSを解析して超正確な内部時計にするのも簡単。GPSをESPみたいなMCUやRaspberry PiみたいなSBCに統合するのは、接続とアンテナを数本用意するだけでOK。ほんと、ハードウェアはめちゃくちゃ簡単だよ。難しいのはコードだけど、この投稿を見れば、時計を動かす部分はすでに書かれてて使えるってわかるよね。NTPの部分をGPSに置き換えて、必要ならDSTや位置のルールを追加して送信すればいい。もしコードが難しそうに感じても、ちゃんとしたボットを持ってる集中力のある人なら、コーヒー一杯か二杯でまとめられる仕事だよ。Cがわからなくても全然大丈夫。ここでボットをバカにするのが流行ってるかもしれないけど、助けを借りるのは全然OKだよ。楽しむことや学ぶこと、面白いものを作ることを妨げるようなプライドは捨てよう。仕立屋が綿織機の発明を嘆くことはないからね。

それに関して言うと、€0のスクラップを€400のビデオ編集デッキに変えるってやつだね。 https://www.youtube.com/shorts/KlWYC6mzVkQ https://github.com/timonoko/Jogwheel

いいアイデアだね。古いVCRのコントロールをデジタル制御にアップサイクルするなんて!あの古いデッキやLANCデッキコントローラーがたくさん余ってるからね…

これいいけど、ドリフトしやすい気がするな。つまり、正しい時間は「知ってる」けど、動きが速すぎたり遅すぎたりしてることに気づく手段がないってこと。最終的には、バッテリーで動かすのと変わらなくなっちゃうよね。著者も指摘してるけど、安い水晶機構には針の位置を報告する手段がないし(針そのもの以外には)、PULSETIME定数を正しいミリ秒数で設定しなきゃいけない。たとえ1ミリ秒ずれても、すぐに蓄積して一日でも違いが出るよね。編集:指摘されてるように、Lavetステッパーは理論的にはこれを考慮していて、一定の振動数の後にちょうど1ティック進むんだ。その振動数は変わらないから、そこだけ正しくすればいい。ただ、各ステップが正確に1/60円でない場合や、部品が摩耗したり粘ったり、アナログノイズが入ったりすると、検出できないバイアスドリフトの原因が残るかもしれない。でも、壁時計にはその影響が小さすぎて問題にならないかもね。

pulsetimeは時計の機構を一歩進めるためだけのもので、固定されてるんだ。機構によって進むのは離散的だから、カウントを追跡していればドリフトは蓄積しないよ。調整はそのステッピングをうまく動かすためのもので、ステップを逃さなければ大丈夫。

エスケープメントは「同期式」で、動きは時間に対してモーターに加えられるパルスの数で制御されてるんだ。各パルスの持続時間や幅ではない。私の理解では、pulsetime定数は駆動回路との機械的/アナログの違いを調整するためのものだよ。

大企業の顧客がいて、敵対的なIT部門がある場合、定期的に時間と日付を取得する最良の方法は何?

GPSユニット

俺が何度も使った素晴らしい解決策は、google.comみたいなウェブサイトに問い合わせることだね。LinuxのノートパソコンのRTCがリセットされたときに使ってる(履歴に残ってる限りだけど。そうじゃなければ手動で設定するよ)。 https://unix.stackexchange.com/a/400176

車の計器パネル用にデュアルコアキシャルシャフトステッパー(X40)を買えるよ。開けてハードストップを外せばOK。小さなマグネットと2つのホールセンサーがあれば、エンドストップができるよ。