フィラメント管時計 (+時刻補正)

時計を作った

昼の時計 昼の時計

時計って家にあります? 私,引っ越したので無かったんです。

PCかスマホ見ればいいですし,時計を持ってない人は多いかも。 しかし,朝はギリギリまで寝ているので,スマホをわざわざポケットから取り出す時間すら勿体なかったりします。

時計が欲しい! しかもなるべくカッコイイ時計が欲しい!

で,欲求を整理した結果,自分が欲しい時計がamazonでは見つかりませんでした。なんてこった!! そんなわけで時計を作りました。

作ったの半年くらい前なんですけどね。作り方をざっくり紹介します。

欲求の整理

時計を作るにあたって,求める機能を羅列していきます。

  • 見た目をカッコよくしたい → 木材で枠を作る。フィラメント菅を使用。
  • 電池交換したくない → コンセントから給電
  • 手動で時間を合わせるのが面倒 → 電波等で時間を公正

ニキシー菅を使って作りたかったけど,ニキシー菅はかなり高電圧らしい。5Vで作れた方が安心なので,フィラメント菅に変更しました。敗北 +1。

全体の構想と,仕様追加

また,基本的な部品はこれを使用。これにGPSをくっつけます。 6桁表示・フィラメント管時計キット -nixie-tube.com さん

コントローラ(マイコン)部分は私が慣れているRaspberry Pi Picoを使用します。

全体の構成はこんな感じ。

コンポーネント コンポーネント

電波で公正ですが,なるべく簡単に作りたいという気持ちがあり,GPSでやります。

GPS受信キット 1PPS出力尽き 「みちびき」2機受信対応

GPSから時刻を取得して時刻表示を更新するタイミングは下記にします。

  • 電源投入時
  • スイッチ(SW)押下時
  • 内部で持っている時刻が12時0分0秒の時

開発環境

  • 開発PC: windows
  • 開発対象: Raspberry Pi Pico
  • 言語: MicroPython
  • 開発環境: Thonny
  • その他: Mini GPS_r1.20 (GPSの設定に使う)
  • その他: Power GPS_r1.00 (GPSの設定に使う)

回路の部品一覧

NAME Quantity memo URL
Raspberry Pi Pico 1 https://akizukidenshi.com/catalog/g/gM-16132/
IV-9 6 フィラメント菅 https://nixie-tube.com/shop/1_76.html
5V2A 1 1Aで十分 https://akizukidenshi.com/catalog/g/gM-01801/
DCジャック 1 2.1mm https://akizukidenshi.com/catalog/g/gC-09408/
タクトスイッチ 4 色は何でも https://akizukidenshi.com/catalog/g/gP-03647/
ボタン電池 1 1.5V https://www.amazon.co.jp/dp/B003X5WJR6?tag=amz-mkt-edg-jp-22
電池ホルダ(LR44用) 1 https://akizukidenshi.com/catalog/g/gP-08208/
ICソケット18pin 1 https://akizukidenshi.com/catalog/g/gP-00008/
ICソケット8pin 1 https://akizukidenshi.com/catalog/g/gP-00017/
ICソケット28pin 3 https://akizukidenshi.com/catalog/g/gP-00013/
DS1307+ 1 RTC(タイムキーパー) https://akizukidenshi.com/catalog/g/gI-06949/
MCP23017 3 I/Oエキスパンダー https://akizukidenshi.com/catalog/g/gI-09486/
水晶発振子32.768kHz 1 https://akizukidenshi.com/catalog/g/gP-04005/
10kΩ 5 https://akizukidenshi.com/catalog/g/gR-25103/
1kΩ 2 I2Cバス用 https://akizukidenshi.com/catalog/g/gR-25102/
15Ω 6 https://akizukidenshi.com/catalog/g/gR-09429/
0.1µF 6 https://akizukidenshi.com/catalog/g/gP-00090/
M3ねじ 適量
スペーサー 適量
GOS受信機キット 1 https://akizukidenshi.com/catalog/g/gK-09991/
ボタン電池 1 予備 https://amzn.to/3oIKaik
基板 1 PCBwayでプリントしてもらいました。

過不足あるかもしれないけど御愛嬌。

回路とソースコード

私のgithubで公開したはず

公開したはず

回路は watch.pdfです。

タイマモジュール

DS1307+を使います。どうやら内部のメモリに格納された値が時間の初期値で,そこからカウントアップしていく感じらしいですね。

時間を合わせるには,このメモリに時間を上書きしてあげます。

書き込みなどは下記のgithubの関数を使うのが簡単です。

micropython-tinyrtc-i2c -github

使い方は簡単,「ds1307.py」をクローンして,picoに保存してあげましょう。それで準備完了。あとは main.py 内でインクルードしたりして,普通に関数をコールすればOK。

下記も参照。

https://www.iotstarters.com/diy-digital-clock-with-rtc-ds1307-and-raspberry-pi-pico/

注意点ですが,タイマモジュールに時間を書き込むときは2進化10進法表記の整数にしないといけません。この後出てくるGPSはASCIIで時刻を取得するので,変換してあげましょう。

なお,メモリの値は,電源供給が絶えると消えてしまいます。が,私の設計ではGPSで取得して上書きするので,電池追加等はしていません。

GPS

下記を設定

  • 5Hzで時刻を受信
  • GPZDAモード

GPZDAモードは日付と時刻だけが流れてきます。受信データはASCIIコード。 ホットスタンバイで,ずーっと受信します。消費電力など知るか。

下記の3つの条件が一つでも満たされたとき,GPS情報を読み込みます。

  • 電源投入時
  • realtime clock が保持している時刻が0時0分0秒のとき
  • push switch が押下されたとき

GPSの使い方

GPSは色々と受信できます(位置情報とか)が,日付と時刻のみのモードに設定します。ボーレートや更新周波数も設定します。

GPS受信キット 1PPS出力尽き 「みちびき」2機受信対応

秋月のサイトに,GPS設定用ソフトのリンクが張ってあります。

受信するデータの形状はこんな感じの33文字です。ただし,時間は本初子午線基準なので,日本時間にするためには 9 時間足してあげる必要があります。

$GPZDA,131003.400,28,10,2022,,*5B

githubで共有した302行目でGPSを読み込んでいます。 次の行のcorrect_time(buff, rtc_write)の引数ですが,buffは302行目で読み込んだ値,rtc_writeは書き込み先(つまりタイマモジュールに対応するオブジェクト)です。

IOエキスパンダ―

GPIOピンを増やすICです。下記のようにI2Cで結線してあげればOKです。

I2C I2C

expander expander

A0, A1, A2 の3ピンでスレーブアドレスを指定できます。Highが1, Lowが 0で,3bitなので最大で8個のMCP23017が繋げるってことですね。 (A0, A1, A2)=(0,0,0)の時,アドレスは0x20になります。

フィラメント菅の使い方

※フィラメント菅の回路図記号が分からなかったので(存在するんですか?)代わりに7セグで作りました。

フィラメント菅 フィラメント菅

フィラメント菅には制御ピン8本と電源ピン(コモン)1本の計9ピンあります。

電源は5VでOK。コモンに5Vを供給しておいて,制御ピン(IOエキスパンダ―MCP23017に繋いである)を0Vにすると,電流が流れて対応するセグメントが光ります。

フィラメント菅 フィラメント菅

タイマモジュールの使い方

Micropythonで簡単に使えるライブラリがgithubに上がってるので使わせていただく。

githubからクローンした「ds1307.py」を pico に保存します。

main.py と名前のつくファイルの main 関数から実行されます。その中で ds1307.py の関数を呼び出してあげればOK。

https://github.com/mcauser/micropython-tinyrtc-i2c/blob/master/ds1307.py

木の枠

やっぱり3Dプリンタより木の方がカッコイイよね。

ところで,趣味で CAD 使う時って皆さん何を使ってるんですか?

こんなに単純ならCAD要らんやろって? CADなしで物を作るなどありえん……

自分は oneshapeを使ってみました。 インストール不要ですし,履歴型なので操作感がsolidworksに似ていて使いやすい。長さの測定方法がよく分からなかったのでそこだけイマイチでした。

多分下記リンクで飛べば,自分が作ったデータが見れるはず。

onshape

フィラメント菅 フィラメント菅

これに合わせて切っていきました。切る/穴を空ける/削る。 ドリルとのこぎりと,ガラスカッターが必要です。

水溶性ニス(ダークブラウン) ガラス切る

ガラスはガラスカッターで傷を付けた後,板チョコのように割って加工するんですが,上手くカットできませんでした。当然です,板チョコですら上手く割れないじゃないですか。

木の枠 木の枠 木の枠 木の枠 木の枠 木の枠 木の枠 木の枠

自分はホームセンターで全部買いました。

ガラスカッターはコレ。使いやすかったかと言われると微妙。普通なのでは。

ニスはコレ。二度塗りしました。塗って乾かすだけなので楽でした。色も良い感じ。

ドリルはこれを買いました。ドリルって何が良いんだか分からないのでとりあえず BOSCH にしました。小さい木材を削る分には全く問題無い,使い勝手がいいドリルと言う印象でした。自分はドリルスタンドに固定してボール盤みたいにして使ってます。小さい木材を固定するのはちょっと工夫が必要ですが,まぁ大丈夫でしょう。

金が溜まったら卓上フライスが欲しい。

回路発注

PCBway で注文しました。注文時にオペレーターにチャットで繋がって基板チェックが入って,新鮮でした。後でメールでやり取りとかしないんだなぁと。一発OKだったのでほぼ会話なしでしたし,届くまでも1週間しなかったので,かなり良かったです。 ただし,たしか 5枚 $30 くらいだったんですが,ちょうど円安の時期だったので5500円くらいに…。

んで,出来た。

回路 回路 回路2 回路2

完成!

部品 値段
プリント基板 5493
フィラメント菅時計キット 11600
GPS受信機キット 2200
木材・ハケ・ニス・ガラス 1526
合計 13419

他にのこぎりとかドリルとか買ったので結構な額が動いた。

夜の姿はこんな感じ。

夜の時計 夜の時計

雑記

利用させてもらった ds1307.py は MITライセンス。こういう無償で公開しているコードってすごく有難いですし有難すぎて投げ銭したい気持ち。github さんスパチャ機能を実装してくれないかな。