UNIX 時間を表示する時計(物理)があったら面白いのではなかろうか、と思い作ってみました。
物理世界の UNIX 時間時計というアイディアは僕が一番最初に考えたものではなく、 MobileHackerzさん などが、よりスマートに作った例があります。今回は、汎用的なパーツで作ってみました。秋月電子で買えるものしか使ってません。
使用したパーツはつぎの通りです。
- Arduino Pro Mini 互換機 x1
- 5V, 16Mhz のものです
- 今回のメイン
- SainSmart の RTC モジュール x1
- 横長のユニバーサル基板 x2
- 制御用のパーツ( Arduino と RTC モジュール等)を乗せるものと、7セグ表示器をのせるものの2枚使っています。
- ちょうどよく横長のユニバーサル基盤が秋月に売っていてラッキーでした。
- 74HC595 x1
- 12V AC アダプタ x1
- Arduino を駆動できるものならなんでもよかったですが、手元にあった 12V 1A のものを使いました。
- ブレッドボード用DCジャックDIP化キット x1
- AC アダプタをユニバーサル基板に繋げられればなんでもいいのですが、DIP 接続できるこれはけっこう便利でした。
- アクリルパネル 15cm x 4cm
- 今回は、秋月のアクリルパネル をPカッターで切って、ドリルで穴を開けて使いました。2mm くらいなら、Pカッターで切れますね。切断中にメガネ屋三みたいなにおいがします。
- だめだったらプロの加工屋さんに依頼しようと思ったのですが、手でいけてラッキーでした。
- 7セグ3桁表示器 x3
- 例に漏れず、秋月で売ってるの を使っています。
- カソードコモンです。
- 220Ωの抵抗 x8
- 3mm のスペーサーとナット、ネジ x適量
- 個人的な好みで樹脂製のものを使っています。
- ピンヘッダ x適量
作り方は、基本的に Arduinoで遊ぶ さんのページと、ブログの前の記事 を合体させるだけです。Arduino ピンのコンフリクトはしないようになっています。参考までに、組み上げ前の基板の写真をあげておきます。
時刻合わせについては、DS1307RTC の Github リポジトリ をそのまま Arduino IDE から書き込む形で行っています。なので、時刻合わせは PC がないとできないのですが、RTC もあるし、頻繁に時刻合わせはしないよなぁと思いこれでよいことにしました。
本体のスクリプトは Gist にあげてあります。デバッグ出力など残したままになっているので、参考程度にどうぞ。
いやはや、こんなシンプルなものでも、いざ作るとなるといろいろ考えなければいけないことが多発して面白いですね。例えば、Arduino では UNIX 時間を保持しようとすると long 型を使わなければいけないんですが、long 型を使うと動作が著しく遅くなる現象が発生してしまったりしたので、4 桁ごとの int 型に分けて処理したりしています。