ESP32でニキシー管時計を作る part 0：事前学習＆準備編

# はじめに

ニキシー管時計づくりにチャレンジしてみました。
part 0 として、着手するまでに勉強したり考えたことをまとめます。


>制作についてだけ知りたい方はこちらから
>- [part 1：昇圧チョッパ制作編](https://qiita.com/Gen-Gen-0504/items/9f885674f90cadf54797)
>- [part 2：ニキシー管点灯編](https://qiita.com/Gen-Gen-0504/items/8547e912f89edc2cce9d)
>- [part 3：NTPとRTCで時間管理編](https://qiita.com/Gen-Gen-0504/items/b6a2d755978719bf9be1)
>- [part 4：プログラム完成編](https://qiita.com/Gen-Gen-0504/items/ccbd5b7e18c817d844bd)
>- part 5：comming soon...(？)

# ニキシー管とは


<img width="400" alt="part000-ニキシー管.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/bda49f9d-82a3-438f-30c6-55e3ce11853b.jpeg">


7セグが普及する以前に、数字の表示などに使われていました。

構造は非常にシンプルで、ガラス管の中に、0～9 までの数字型の金属板と、メッシュ状の金属が入っています。
このアナクロな構造と、独特の光り方が魅力ですね。


#### 光らせ方

メッシュと数字型の金属との間に高電圧をかけることで電子が放出され、グロー放電によって数字型の金属の周囲がぼんやりと光ります。

<img width="800" alt="part000-ニキシー管の光らせ方.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/db592ecf-d10b-37e1-19ce-1fe6695d9af9.png">

例えば、メッシュに電圧をかけた状態で「9」に対応するピンを Low にすれば、「9」が光ります。

**この電子を飛ばすための電圧がおよそ 140V 以上と高圧です。**
幸い要求される電流はかなり小さい（数mA～数十mA）ため、USB やACアダプタの出力を昇圧することが多いようです（電力=電圧×電流なので、電圧:大でも電流:小なら電力はそれほど大きくならない）。


#### デコーダ IC について

ニキシー管は基本的にメッシュにつながるアノードピン 1 本と、0 ～ 9 の数字用のカソードピン 10 本を持ちます。
マイコンでカソードの High / Low を選択して光らせるとなれば、そのままではニキシー管 1 つで 10 ピンが占有されてしまいます。

しかし光らせるのは常に 1 つの極（数字）であり、同時に光らせることはありません。10 状態のために 10 ピン（ 10 bit ）は冗長です。

そこで一般的にデコーダ IC が使われます。
デコーダを通すことで、4 ピンですべての数字の点灯を制御できます（ 4 bit = 16 状態）。
高圧に耐えられるデコーダICには、代表的なものに K155ID1 などがあります。

<img width="900" alt="part000-デコーダICの使い方.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/57a15414-93c7-d321-4499-dceed750440d.png">


>ニキシー管の基礎知識や光らせ方、およびデコード IC については「[最新のチップで動かすニキシー管 増補版](https://booth.pm/ja/items/1154485)」（黒井宏一）を大いに参考にさせていただきました。
点灯には高圧を用いるため、少しのミスが事故につながります。
ニキシー管初心者の自分にとって、特性の説明や回路構成の指針はとてもありがたかったです。
><img width="200" alt="part000-最新のチップで動かすニキシー管.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/5a6b8108-8b38-660f-e010-536627a1b1c5.jpeg">





#### スタティック点灯 VS ダイナミック点灯

デコーダ IC を使うことにより 4 ピンで 1 つのニキシー管の点灯を制御できることがわかりました。
2 つのニキシー管を制御するには 4×2=8 ピンを使い、2 つのドライバを通して制御すればいいですよね。

このような制御は「**スタティック点灯**」と呼ばれます。
しかしスタティック点灯には以下のようなデメリットがあります。

- 複数のニキシー管を同時に光らせるので消費電力が大きい
- ドライバを複数使用するため回路が比較的大規模＆使用するピンの数が多い

当然この問題はニキシー管を増やすほど深刻になります。
「いやデメリットと言われても、複数のニキシー管を点灯させるのに、消費電力を抑えて、さらに回路をシンプルにできる方法なんてないでしょ！」
そう思っていた時期が私にもありました。

このデメリットを解消できるのが「**ダイナミック点灯**」です。

スタティック点灯では、すべての管を同時に光らせ、カソードの制御もすべての管で同時に行っていました。
対してダイナミック点灯では、マイコンからフォトカプラ等を通してアノードを制御し、光らせるニキシー管を**1つだけ**にします。
「つまり複数の管を同時に光らせないってこと！？意味ないじゃん！！」と思うかもしれません。ひとまず以下の図をご覧ください。

<img width="900" alt="part000-スタティック点灯とダイナミック点灯.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/2634ba2e-5c7a-ff74-e90e-112c2748b83b.png">

アノードの電圧を制御して管を1つだけ点灯させ、同時に表示させたい数字をデコーダを介して指定します。
これを、複数のニキシー管で順に行います。**人間の目の分解能を超える速さで次々と光らせることで、すべての管が同時に光っているように見せる**ことができます。

これが、「 1 つだけ」光らせることによって複数の管を点灯させるダイナミック点灯です。
ダイナミック点灯では、ニキシー管を「同時に」光らせるわけではないので、常に 1 つの管を点灯させているのと変わらない電力消費です（正確には、切り替え時に消灯するタイミングがあるため、1 つの管を点灯させ続けるよりも消費電力は下がります）。
カソード回路を共用するため回路全体もシンプルになり、必要なマイコンのピン数も大きく減らすことができます。

「省電力で回路も簡単！！ニキシー管はダイナミック点灯に限るね！」

...**というわけではありません**。当然別のデメリットも発生します。主に

- プログラムが複雑になる
- 点灯・消灯を繰り返すため、チラついたり、暗く見える
- 適切に制御しないと「ゴースト」が発生する

という点です。

デコーダ回路を共用することで回路が簡単になった分、点灯させる管の選択するためのプログラムが複雑になります。
また、1 つ目のニキシー管を点灯 → 消灯 → 2 つ目のニキシー管を点灯 → 消灯 → …とする中で、適切な点灯・消灯時間を指定する必要があります。

ニキシー管 1 つあたりの点灯時間が長いと、1 周するまでに時間がかかるので、点滅して見えてしまいます。
また、たとえ周期を短くして点灯しているように見せても、消えている時間は存在するため、常に点灯させるスタティック点灯のような明るさは出せません（ PWM のような原理）。
（※定格を超えるエネルギーを与えるという手もあるようですが、ニキシー管の寿命が短くなるのでリスクが高いです）

さらにデコーダ IC は共用のため、アノードでの点灯制御が遅延すると、違うニキシー管の数字がうっすら表示されてしまいます。
これが「**ゴースト**」と呼ばれる現象です。
ゴーストを防止するためには消灯時間を一定確保しないとならないため、周期が長くなりやはり見ばえが落ちます。

スタティックとダイナミック、どちらの方式を採用するかは、何を重視するかで決まります。


# 時刻を扱う

最終的な目標は現在時刻を表示させる時計です。
時計を作ったことがないので、時間をどうやって取得・保持するのかも勉強しました。


#### NTP（Network Time Protocol）

オンラインで現在時刻を取得できるプロトコルです。
ネットワーク環境があれば時刻の取得はできそうです。

#### RTC（Real Time Clock）

時刻を保持するためのデバイスです。
マイコンで通信すれば時刻を保存できます。また電力を供給しているうちは内部で時間を進めておいてくれます。
ボタン電池などでバックアップしておくことで、ネットワークに接続できずに時間が更新できなくても安心です。

***

NTP のメリットは、正確な時間を取得できることです。またデメリットは、ネットワークに接続できなければ時間を取得できないことです。

RTC のメリットは、（正しい時間が記録されており、電池が切れていない限り）いつでも時間を取得できることです。デメリットは、長期間保存された時刻は精度が落ちることです。

これを踏まえ、一般的に両者を組み合わせて運用されることが多いようです。
つまり、
- 基本的に RTC から時刻を取得し表示時間を更新
- 定期的に NTP で現在時刻を取得し、RTC の情報を上書き

というように使用します。



# 目標

#### 点灯について

あまり目障りにはしたくないので、秒の表示はしません。4 桁の時と分だけの時計にします（ HH MM の形式）。

また、点灯にはダイナミック点灯を採用します。
理由は、回路をなるべく小型化したいことと、消費電力を抑えたいからです。

#### 時刻管理について

電源投入時にのみ Wi-Fi に接続し、NTP で時刻を取得します。
その時刻を RTC に保存し、動作中は RTC から読み出した時刻を表示するとします。

#### その他

制作する時計はそれほど消費電力が大きくない予定ですので、USB 駆動も可能です。しかし PC の USB ポートを塞ぎたくないのでコンセントから電源をとろうと思います。

また、他にボタン等を付けて操作等は行いません。ただ時刻を表示するシンプルな時計を目指します。


# 基幹部品

ニキシー管、デコーダ IC 、マイコン、RTC については以下のものを使用することにしました。

#### ニキシー管:  IN-12B

<img width="400" alt="part000-IN-12B.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/5a5fba26-2d93-eca7-fa77-9a00732c02e8.jpeg">

>リンク（nixie-tube.com）： [IN-12B](https://nixie-tube.com/shop/3_23.html)


ニキシー管には IN-12B を使います。理由は、ニキシー管全体が高騰＆品薄の中、比較的安価で入手できたからです。よく似たものに IN-12A がありますが、違いはドットがあるかどうかです。B にはドットがありますが、今回は光らせません。

一般に高圧が必要なニキシー管ですが、IN-12B の場合もやはり 170～200V が必要です。電圧源の準備が最初の課題です。


#### デコーダ IC ：K155ID1

<img width="400" alt="part000-K155ID1.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/e11951ee-25ef-3c54-9105-8744a91be4c3.jpeg">

>リンク（Amazon）：[K155ID1](https://www.amazon.co.jp/gp/product/B00B9PI5CK/ref=ox_sc_act_title_1?smid=AOHU5QYYFWJT&psc=1)

ニキシー管点灯によく使われる、74141 という IC の互換品です。
対応するピンにニキシー管のカソードを繋ぐだけでとても簡単に点灯を制御できます。

#### マイコン:  ESP-WROOM-32D


<img width="400" alt="part000-ESP32-WROOM-32D開発ボード.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/b556d079-0912-d50c-3ef2-a6e2ed4df278.jpeg">

>リンク（秋月）：[ESP-WROOM-32D開発ボード](https://akizukidenshi.com/catalog/g/gM-13628/)

ニキシー管と組み合わせた作例が多いです。また Arduino IDE 上で、Arduino と同じ言語で開発ができることも魅力です。

さらに ESP-WROOM-32D は Wi-Fi モジュールを搭載しています（技適マーク付き）。ESP32 にもいろいろ種類がありますが、今回は NTP による時刻合わせをしたかったので、こちらを選びました。


#### RTC：RX8900

<img width="400" alt="part000-RX8900.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/7a292016-f0c4-48b1-79be-62ebd10e4d88.jpeg">

>リンク（秋月）： [RX8900](https://akizukidenshi.com/catalog/g/gK-13009/)

RTC には RX8900 を選びました。これは月差 9 秒（一か月間動かし続けて生じる誤差が ±9 秒）という高精度な RTC です。

一応 ESP32 も内部に RTC を持ちますが、精度が低いらしく、ひどいときは一日に数分の誤差が生じるとか。
作る時計の表示は分単位ですが、一応時計ですので精度にはある程度こだわりたいです。

さらに、主電源（マイコンからの給電等）がオフになると、自動的にバックアップ電源（ボタン電池等）に切り替わるという点もありがたいです。

***

他の部品は、各部の制作記事で詳しく説明します。


# ブロック図

最後に、ざっくりとした全体のブロック図を考えました。

データ通信や制御はグレーの線で、電源供給は色のついた線で示しています。

<img width="700" alt="part00-全体構成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821099/6f77b6d1-25c2-b629-4067-e7f322f24e00.png">

電源は 12V のACアダプタを使います。出力された DC12V を、三端子レギュレータと昇圧チョッパに入力します。


昇圧チョッパでは 12V を 170～200V へ引き上げ、ニキシー管を点灯させるアノード制御回路（主にフォトカプラ）に入力しておきます。

三端子レギュレータでは 12V を 5V にし、マイコンボードの電源にします。

マイコンボードでは、RTC と NTP による時刻の管理と、ニキシー管点灯の制御を行います。




# おわりに

part 0 って何？

そんな思いの中、数か月前の私のような人のために書きました。

次回から、実際にニキシー管時計の制作が始まります。まずは昇圧チョッパの作成です。


次回：[ESP32でニキシー管時計を作る part 1：昇圧チョッパ編](https://qiita.com/Gen-Gen-0504/items/9f885674f90cadf54797)