[Arduinoのすすめ][ArduinoConf][ArduinoMonitor][iArduino]

NTPで合わせるニキシー管時計

概要

ニキシー管には前から興味があったのですが、amazonでニキシー管とドライバICを売っていることが分かったので作ってみました。 秒の桁はない、時分表示の4桁です。 7セグメントLEDで作ったNTP時計と同じように とWifi モジュール ESP-WROOM-02 を使って NTP で時刻合わせをします。 ニキシー管は IN-12、ドライバは 74141 互換のICでスタティック点灯です。 74141に対して AtMega328 (Arduino Uno互換) から信号を送って時計を構成していて、 ESP-WROOM-02 から NTP で得た時刻を送ります。

回路

上記の通り、ニキシー管 IN-12 を4桁、ドライバは 74141 互換ICで、それを AtMega328 で制御します。AtMega328 は Arduino Uno のブートローダを入れておき Arduino IDE で開発できるようにしています。USB シリアルは、時計側にはもたず、外付けにしました。WiFi モジュールは ESP-WROOM-02 です。

回路図(きれいにするのは手抜き)は次のファイルです:

電源の検討

この構成で、ESP-WROOM-02 用の 3.3V、74141 の 5V、ニキシー管の170Vが必要です。74141が5V動作のため、AtMega328の電源は 5V にします。 消費電流が大きい(実測で 2.9W)ので電池動作ではなく、商用電源を使うことにします。問題は 170V ですが、DC-DCのキットがあったので、それを使うことにし、それに合わせて 12V DC を時計の電源にし、内部で 170V, 5V, 3.3V を作ることにします。 170V は実測 6.3mA、5V は 100mA〜120mA、3.3V は 30mA (スリープを使うので変動が大きい, 三端子レギュレータで 5V から作るので 5Vに必要な電流に追加になる)が必要です。5V の消費電流が多いのは 74141 の消費電流が約16mAと大きいからです。古い IC だから仕方ないですね。

170V はaitendo の高電圧出力昇圧DC-DCコンバータ [AKIT-150V34063]で12Vから作ります。 5V は100円ショップのセリアで買ってきた、シガーライタ USB 電源の基板を使います。 3.3V は 5V から三端子レギュレータ(メイン基板上)で作ります。


電源とメイン基板をつないでニキシー管を点灯している様子 (高電圧DC-DCのコイルは交換前)

プログラム

基本的には7セグメントLEDで作ったNTP時計と同じです。

AtMega328側単体でも時計として機能するようにしてあります。 ニキシー管4本に対して 74141 を4つ使ってスタティック点灯をします。 74141はBCD入力なので、4桁でAtMega328のピンを16本使います。 シリアルポート(115.2kbps)から表示の切り替え(時:分(M0<LF>), 月:日(M1<LF>), 分:秒(M2<LF>))と時刻合わせができます。 時刻合わせは、hhmmss<LF>もしくはYYYYMMDDhhmmss<LF>を受け取ると、その時刻に切り替わります(<LF>を受け取ったタイミングで指定された時刻(1秒以下は0)に設定する, 15bytesなので通信にかかる時間は2msぐらいなので無視)。

ESP-WROOM-02 (ESP8266EX) 側はサンプルベースに作りました。 ESP-WROOM-02内で時計を持ち、それを更新する形にしています。 更新時には受け取った時刻(tとする, NTPサーバの送信時の時刻, 1秒以下の桁もある)をそのままセットするのではなく、パケットを送ってから受け取るまでの時間(Δt)の半分だけずれた値(t+Δt)で更新するようにしています。また、更新のタイミングを少し調整して、NTPサーバ(同一ネットワーク内にある)との差が見た目に1秒以内になるようにしています。

検索すると、NTP で時刻合わせする時計を作られている方は大勢見つかるのですが、こういう1秒以内のNTPサーバとのずれについて考慮されていないようでした。NTPサーバが同一ネットワーク内にないとずれに気づかないかもしれませんが、気になったので合わせてみました。

ダウンロード

いずれも Time ライブラリを使っているので、Arduino IDEから扱えるようにしておきます。

作る

基板

メイン基板(130mm×50mm)は KiCad で設計して PCBway に頼んでみました。5枚で約3000円でした。DC-DCのモジュールはメイン基板の上にアクリル板を載せ、その上に両面テープで固定します。ニキシー管は、専用のソケットをアクリル板に固定します。


PCBway で作った基板


全体の構成(高電圧DC-DCのコイルは交換前)

モジュールの改造

aitendo の DC-DC コンバータキットに付属していたコイルは、スイッチング周波数にあっていないのか、発熱が大きかったので、セリアでシガーライタ USB 電源を追加で買ってきて、そこに載っていたコイルと交換しました。交換後で入力 12V, 150mA (1.8W)で出力 170V, 6.3mA (1.1W), 効率 59% ぐらいです。交換前は 効率 45% でした。


セリアの シガーライタ USB 電源の基板からコイルを外したところ

セリアで買ってきた、シガーライタ USB 電源は出力にスパイクが大きめに乗っているように見えたので LC フィルタを追加しました。

ESP-WROOM-02はピッチ変換基板(スイッチサイエンスのESP-WROOM-02ピッチ変換済みモジュール《シンプル版》)の裏面で IO15 を GND に接続(購入時から)、EN, RST, IO0, IO2 をプルアップしています。EN, RSTはR1, R2に1608サイズの10kΩ程度のチップ抵抗をつければOKです。IO0, IO2はSJ2, SJ3の片方のパッドにチップ抵抗をつけ、チップ抵抗の片方を3.3VへUEW線へつなぎました。プログラムの書き込み時は、IO0をGNDにつなぎ、リセットを掛けてから、USBシリアル(3.3V)などを使って書き込みます。

ケース

乳白色の2mm厚のアクリル板を使ってケースを作ってみました。

少し弱い感じがした(白だと違ったかも)のでカバーをかけてみます(紙, コクヨのA4レポート用紙の表紙です)。

雰囲気が変わることが分かります。IN-12は電卓用で上から眺めるような使い方が本来なのだと思うのですが、机の上に置くと数字が見にくくなってしまいます。それで表示面を傾けられるようにしてみます。

これで完成です。表面には東急ハンズで買ってきた木目調シートを貼ってあります。

お一つ作ってみませんか。

履歴


Arduinoのすすめ
Copyright (c) 2016, Noriaki Mitsunaga