ニキシー管時計を作った話

高校生の時にニキシー管という存在を知り、厨二心をくすぐられ欲しくなりました。
ニキシー管時計の完成品は高く手を出せなかったのですが、自作キットなら完成品より安価で済むので作ってみました。
回路から自作することも考えましたが、そこまでの知識と技量がないのでキットを使用し、プログラムだけ自作のものに変えました。

同じものはもうありませんでしたがキットは[nixie-tube](https://nixie-tube.com)というサイト、ニキシー管はAmazonで購入しました。


# ニキシー管とは
ニキシー管とは1950年代から1960年代後半頃に電光掲示板や家電製品などでよく使われていた放電管です。
人気ゲーム・アニメ「STEINS;GATE」のダイバージェンスメーターに使われているやつ、といえば伝わる方もいるんじゃないでしょうか。
  
ニキシー管はガラス管の中に0~9までの電極が前後に並べられており、現在普及している7セグメントとは違い表示に奥行きがあります。
ガラス管にはガスが封入されており約170Vの高い電圧をかけることでグロー放電を起こし発光します。寿命は約20万時間です。
[*グロー放電とは](https://www.matsusada.co.jp/case/ps/glow-discharge.html)

作成に使用したのはIN-14という1番人気の型で、ガラス管の高さが46mm, 直径は17mmです。
以下の画像がIN-14です。
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520502/922c3cfa-8d4a-94e2-7ab6-7d32ac760557.png">

そんなニキシー管ですが、7セグメントの普及により1990年年代までに全てのメーカーで生産終了しています。
現在ではニキシー管は中々レアな存在になっているのではないでしょうか。

*生産は小規模で再開されていて、国内でも2021年にニキシー管復活プロジェクトのクラウドファンディングがされており目標金額300%を達成していました。

[ニキシー管って何？よくある質問と答え](https://q61.org/blog/2019/08/28/what-is-a-nixie-tube-nixie-tube-faq/#Q9)

# 組み立て
組み立て自体はそんなに難しいものでもなく、ひたすら基板に部品を半田付けしていきました。
ただ、ニキシー管の足が真っ直ぐにならず基板に通すことが中々苦戦しました。
足を螺旋状に切ると入れやすいらしいです。

最初の動作確認で動かず焦りましたが、レギュレータの足が折れていただけで新しいものに取り替えるとしっかり動きました。


半田ごてと半田、ニッパーがあれば作成できますが、部品を仮固定するためにマスキングテープなどがある方がやりやすいです。
また、半田吸い取り機があると心に余裕ができます。(やり直せるので)

# プログラム
制御にはPICマイコン、言語はC、開発ツールはMPLAB X IDEを使用しました。
PICは16F886です。
プログラムでは[1秒の生成]、[時刻,日付の計算]、[ニキシー管への表示]の3つを行っています。
計算と表示については説明するようなものがないので、1秒の生成についてのみ後述で説明します。

#### 機能
・年月日(年は下２桁), 時刻の設定
・年月日の表示
・時刻の表示
・時刻の12時間/24時間表示の切り替え
・全点灯

#### 1秒の生成
生成にはタイマー０割り込みを使用しました。
クロックは8MHz,プリスケーラレートは256に設定しています。
クロックとプリスケーラレートからタイマー０割り込みが約33msで発生することがわかるので、割り込み30回で1秒を生成しています。
(正確な1秒は作れていないので時間が経つほど誤差が生じます)


:::note
**カウント回数の計算**
カウント回数 = 作りたい秒数(s) ÷ タイマー0割り込み(s)
タイマー0割り込み(s) = 1命令サイクル(s)×プリスケーラレート×256
1命令サイクル(s) = 1クロック(s)× 4<font color="Gray">(PICの命令サイクル数)</font>
<font color="Gray">1クロック(s) = 1(s) ÷ クロック(Hz)</font>
:::


#### コード
(表示,時間の計算などについては省略しています)
``` nixie.c
#include <16f886.h>
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOLVP,NOMCLR
#use delay(clock=8000000) //内部クロックを8MHzに設定
/*
変数宣言
*/

#int_timer0　//タイマー0割り込みルーチン宣言
void intval() {
    counter++;
    //カウンタ30で1s
	if(counter > 29) {
        counter = 0; //カウンタの初期化
        /*
        時刻,日付の計算、変数に格納
        */
    }
}

int count_up(void) {
	set_timer0(0); //次回タイマーの設定値を0にする
    enable_interrupts(INT_TIMER0); //タイマー0の割り込みを許可
    enable_interrupts(GLOBAL); //グローバル割り込みを許可

    /*
    表示処理
    */
}

int main(void){
   set_tris_a(0x00);
   set_tris_b(0x03);
   set_tris_c(0xF0);

   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); //タイマー0の初期設定(内部クロックとプリスケーラレート256を設定)
   while(1){
      count_up();
      disable_interrupts(GLOBAL); //全ての割り込みを不許可
   }
}

```

# 完成品
![完成品.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520502/da436bb4-3194-c97a-928e-a030d312c52a.jpeg)
<iframe width="560" height="315" src="https://www.youtube.com/embed/u0ojEb8nbak" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
こんな感じに完成しました。
外枠はキットにはついておらずアルミの箱に自分で穴を開けて作りました。


# 感想
色々雑な部分はありますがそこそこな物は作れたんじゃないかと思います。
キットを使えば半田付けするだけで完成するので、ニキシー管に興味が出た方は是非作ってみてください。
動作確認中に1度だけ感電したのですが、めちゃくちゃ痛くてしばらく腕が痺れました。
電子工作をする際はみなさん気をつけてください。

また、今の時代PICを触ることなんて滅多にないと思うので、いい経験ができたのではないかと思います。
半田付けをしなくてもブレッドボードがあれば簡単に回路が組めるので、PICに興味が出たらPIC,PICライター,ブレッドボード,その他電子部品をそろえて遊んでみてください。
中々楽しいと思います。

新品で状態のいいIN-14をまだ6本所持しているので機会があれば今度はRaspberryPiかArduinoあたりで何か作れたら楽しそうだな〜って思ってます。

# 余談
制作費はニキシー管が新品6本で約8,000円、キットが約5,000円でした。
今Amazonを見るとニキシー管単体で売られているのはあまり見ないですね。
オークションサイトやメルカリでも状態のいいIN-14はめちゃくちゃ高額で取引されているようです。
年々金額が上がっているようなので、欲しいな〜と思ったら早めに買うのが良いかもですね。