ニキシー管付きキーボードを作ろう!
・はじめに
・使う物
・170Vを作る
・キットのはんだ付け
・点灯テスト
・1桁点灯
・2桁点灯
・スイッチを付けてHIDキーボードにする
・まとめ
■ はじめに
はじめましてパレットシステムのよっぴです。
軽く自己紹介をしますと今年の1月から自作キーボードのAZ-Macroを販売開始しまして、そこから自作キーボードにどんどんのめりこみ、最近はM5Stackを使用したAZ-M5orthoを作って販売しています。
今回はキーボードのアドカレですが、レトロなニキシー管の使い方を紹介したいと思います。
ニキシー管ってカッコイイけど高いし難しそうという先入観があると思いますが、細かく見て行けば分からないほどでは無いと思うので、記事を読んでニキシー管を触ってみたいと思って頂けたらと思います。
■ 使う物
使用するニキシー管用のパーツを紹介します。
この記事を見た方も試せるようにパーツをセットにした物をBOOTHに置きましたので、記事を読んで興味を持って頂けた方はこちらからパーツセットをご購入下さい。
https://booth.pm/ja/items/3486856
■ ニキシー管
ニキシー管の中でも比較的安く買えるIN-12Aを使用しました。
https://nixie-tube.com/shop/3_74.html
使い方も簡単で、Aに170Vを繋げて、K0~K9の点灯したい数字をGNDにつなげば光ります。
(170Vを用意するのが大変なのですが、、、)
■ ニキシー管ドライバ
ニキシー管を使う時には有名な K155ID1 の互換ICです。
こちらも使い方は簡単で0~9をニキシー管のK0~K9に接続して、制御用のA~Dに表示したい数字を二進数で渡すとその数字が表示されます。
電源も信号も5Vで動作します。
■ DCDCコンバータ
ニキシー管を使う最大の難関となる170Vを作るモジュールです。
今回はAliexpressで比較的安価に手に入ってちゃんとしてそうなモジュールを選びました。5V→170Vに昇圧してくれます。
https://ja.aliexpress.com/item/32926686168.html?spm=a2g0s.9042311.0.0.27424c4dguzEy8
■ ニキシー管制御用PCB
去年作ってずっと放置していたニキシー管、ドライバ、フォトカプラを繋げるだけの簡単な基板です。
最初ニキシー管用のソケットを買って1本1本手はんだをしていたのですがニキシー管は足の本数が多いので死ぬと思って基板を作りました。
回路図
■ 170Vを作る
キーボードにしたいので皆さんよくご存じかと思いますProMicroの5Vから170Vを作りたいと思います。
ProMicro DCDCコンバータ 測定器
VCC → VCC
GND → GND
HV → +
GND → ー
で接続し、USBケーブルをさします。
(高電圧なので通電中に触ると感電しますので気を付けて下さい。マジで。
僕は熱を持ったりしてないよな、、とか思って安易に触って感電しました。死にはしないかもしれませんがとても痛いです( ;∀;)
そして通電してみたのですが、、ProMicroからの給電では電流が足りず75V程度までしか上がりませんでした。。。( ;∀;)
(試したのはスイッチサイエンスのProMicroなので、他のProMicroだったら行けたりするのかもしれません。。)
(あと、ドータボードなどから給電すれば行ける気がします)
ダメかぁ、、と思いながら部屋に転がっていたSeeeduino XIAOが目に入ったのでダメ元で繋いでみた所160V近くまで出たので、SeeeduinoXIAOを使って制御する事にします。
■ キットのはんだ付け
ニキシー管と10Kの抵抗は直接はんだ付けしますが、フォトカプラとドライバーは接続をミスるとスグ壊れてしまうのでソケットをはんだ付けします。
パーツは全て表から差し込んで裏側をはんだ付けします。
ピンヘッダだけ裏から差し込んで表側をはんだ付けします。
はんだ付けが終わったらフォトカプラとドライバを差し込んで完成です。
■ 点灯テスト
それでは早速使ってみましょう!
キットに拡張用のコネクタがたくさん用意されているのですが、J1のみでニキシー管を制御する事ができます。
J1-1 → GND
J1-2 → 5V(Seeeduino XIAO の VCC)
J1-3 → DCDCコンバータの HV
J1-4 → GND
J1-5 → GND
J1-6 → GND
J1-7 → 10KΩ抵抗 → 5V(Seeeduino XIAO の VCC)
J1-8 → 10KΩ抵抗 → 5V(Seeeduino XIAO の VCC)
J1-9 → GND
※ J1-4 ~ J1-7 でLOWにしたいピンはGNDに接続しないと点灯しないので気を付けて下さい。
※ HIGHにするピンは必ず抵抗を通してから接続して下さい。5Vを直接接続するとフォトカプラ、ドライバが一瞬で壊れます。
※ 通電したままピンを抜き差しすると感電したり、ワイヤーのピンが高電圧の所に触れたりしてパーツを壊してしまう可能性があるので、ピンを抜き差しする時はUSBを抜いた状態で作業して下さい。
※ USBを抜いても数秒間高電圧の状態が続きます。USBを抜いて少し待ってから作業して下さい。
つきましたああぁぁぁぁ!!!!
(これだけ準備してつかなかったらどうしようと
内心ドキドキしていましたw)
この状態でドライバA~ドライバDの所のLOW、HIGHを変えれば好きな数字が表示できます。
■ 1桁点灯
無事点灯したのでSeeeduino XIAOに繋げて数字を制御して行きます。
この記事ではArduinoIDEを使用して作成します。環境の作成方法などは「arduino seeeduino xiao」などで検索して下さい。
SeeeduinoXIAO ニキシーキット
GPIO 0 → J1-4 (ドライバ D)
GPIO 1 → J1-5 (ドライバ C)
GPIO 2 → J1-6 (ドライバ B)
GPIO 3 → J1-7 (ドライバ A)
GPIO 4 → J1-8 (N1)
GPIO 5 → J1-9 (N2)
1桁表示コード
// 初期処理
void setup() {
pinMode(0, OUTPUT); // K155ID1 D
pinMode(1, OUTPUT); // K155ID1 C
pinMode(2, OUTPUT); // K155ID1 B
pinMode(3, OUTPUT); // K155ID1 A
pinMode(4, OUTPUT); // NIXI 1
pinMode(5, OUTPUT); // NIXI 2
}
// ニキシー管に数字を表示
void nixiView(int nix, int num) {
digitalWrite(4, nix & 0x01); // NIXI 1
digitalWrite(5, nix & 0x02); // NIXI 2
digitalWrite(0, num & 0x08); // K155ID1 D
digitalWrite(1, num & 0x04); // K155ID1 C
digitalWrite(2, num & 0x02); // K155ID1 B
digitalWrite(3, num & 0x01); // K155ID1 A
}
// カウント処理
void loop() {
int i;
for (i=0; i<10; i++) {
nixiView(1, i);
delay(1000);
}
}
このコードで左側のニキシー管だけ1秒に1ずつカウントして行き、10になったら0に戻ります。
■ 2桁表示
1桁は割と簡単なコードで制御できるのですが、2桁にするにはドライバが1つしか付いていないので、2桁を同時に表示する事ができません。
どうするかというと、目に見えない速度で両方とも点滅させながら片方ずつ表示します。
理解しるよりもとりあえずコードを書いて動かしましょう。
(setup と nixiView の内容は1桁の時のソースと一緒です)
コード
void loop() {
int i, j;
for (i=0; i<100; i++) {
for (j=0; j<50; j++) {
if (j % 2) {
nixiView(1, i / 10);
} else {
nixiView(2, i % 10);
}
delay(20);
}
}
}
i で0~99をカウントして行き、jで点滅します。j % 2 で1桁目か2桁目か判定しています。
■ スイッチを付けてHIDキーボードにする
ニキシー管楽しすぎて忘れていたのですが、自作キーボードアドカレなのでせっかくニキシー管が点灯してもキーボードとして動かなければ意味が無い!
という事でコードにキーボードのコードを追加していきます。
とは言ってもSeeeduino XIAOをキーボードにする記事はネット上に沢山上がっているので今回は ↓こちら↓ の記事を参考にさせて頂きました。
XIAOでMacのスクリーンショット専用USBキーを作るDIY
https://hack.gpl.jp/2021/03/01/make-mac-sskey-xiao/
(ライブラリのインストール方法などは記事を参考にして下さい)
ニキシー管点灯に試したブレッドボードにスイッチの接続を追加します。
SeeeduinoXIAO GPIO7 → タクトスイッチ → GND
キーボード機能を追加したコード
#include <TinyUSB_Mouse_and_Keyboard.h>
int key_last_stat;
// 初期処理
void setup() {
pinMode(0, OUTPUT); // K155ID1 D
pinMode(1, OUTPUT); // K155ID1 C
pinMode(2, OUTPUT); // K155ID1 B
pinMode(3, OUTPUT); // K155ID1 A
pinMode(4, OUTPUT); // NIXI 1
pinMode(5, OUTPUT); // NIXI 2
pinMode(7, INPUT_PULLUP); // KEY
Keyboard.begin();
key_last_stat = 1;
}
// ニキシー管に数字を表示
void nixiView(int nix, int num) {
digitalWrite(4, nix & 0x01); // NIXI 1
digitalWrite(5, nix & 0x02); // NIXI 2
digitalWrite(0, num & 0x08); // K155ID1 D
digitalWrite(1, num & 0x04); // K155ID1 C
digitalWrite(2, num & 0x02); // K155ID1 B
digitalWrite(3, num & 0x01); // K155ID1 A
}
void loop() {
int i, j, k;
for (i=0; i<100; i++) {
for (j=0; j<50; j++) {
if (j % 2) {
nixiView(1, i / 10);
} else {
nixiView(2, i % 10);
}
k = digitalRead(7);
if (key_last_stat != k) {
if (k) {
Keyboard.releaseAll();
} else {
Keyboard.write('a');
}
key_last_stat = k;
}
delay(20);
}
}
}
ちょっと強引ですがニキシー管の点滅のループの中でキー情報を取得してステータスが変わったらキーコード 'a' を送信する様にしました。
まとめ
いかたでしたでしょうか。
急ぎ足にはなりましたがニキシー管の点灯をして、キーボードとしても認識できる物が作成できました。(動いてよかったと内心ホッとしてますw
今はニキシー管の表示内容は数字のカウントだけですが、キーの打鍵数とか表示出来たら面白いかなと思っています^^
この記事を読んでニキシー管触ってみたいって思って頂けていたら幸いです^^
この記事が気に入ったらサポートをしてみませんか?