2020年3月21日土曜日

電池でニキシー管を点灯させる

秋月でリチウム電池CR1225がやけに安かったので思いつきました。1個4円て。

真面目な実験ではないです。子供の頃から一度やってみたかった。後悔はしていない。

なおちっこいリチウム電池といえども山程つかえばそれなりの電圧はでます。感電などの事故や廃棄時の火災などには十分気をつけてください。

点灯中の写真取る前にバラしてしまった……


■回路■

SN74141互換のKM155ID1でニキシー管をドライブし、Seeeduno XIAOで制御します。XIAO用の電源はそのままUSBから取ります。ニキシー管駆動電圧はCR1225を44-45本直列にして約145Vを発生させます。

電池のGNDとマイコンとKM155ID1のGNDが浮かないようにしっかり配線すること以外は特に注意することはないです。KM155ID1のABCDとXIAOのGPIO4本を接続します。KM155ID1のVCCはXIAOの5Vピンと接続します。XIAOは3.3V動作ですが、XIAOからの出力電圧は、KM155ID1の入力スレッショルド電圧より充分高いので問題ありません。

KM155ID1が勿体ないので16ピンのICソケットを使っています。ニキシー管IN-12Bは今6本で3-4000円ぐらいでしょうか。ニキシー管用ソケットKM155ID1はアマゾンで買いました。IN-12Bはウクライナの業者さんから500本買ったうちの1本です。これもアマゾンでも買えます

XIOAは基板にピンソケットを取り付け、XIAOにはピンヘッダをはんだ付けしています。なんかソケットだらけの基板ですわ。

■電池ボックス■

Orange 30で出力しました。SK水洗いレジンを使ってます。このレジンは少し厚くなりやすいので、電池の直径の12mmに0.5mmプラスした筒を作り、両端にカバーを作りM3のネジ穴をあけ、上をカバーで覆っています。手で電池を入れるとあぶないので、セラミックピンセットが通る隙間を立てに開け、中心付近からも電池を入れられるスリットを作りました。

私にしては珍しく出力一発目で完璧でしたっ



STLデーターこちらからダウンロードできます。

SK水洗いレジンに限りませんが、SLA方式3DプリンタでのM3, M4などの細いネジをモデル化した場合、一応ネジっぽいものが出力されますが、ネジを通すとカスが大量にでます。タップを買っておいて、中仕上げと仕上げを通しておきましょう。タップハンドルなくても手で回せますし(ただ刃で手を切らないように気をつけて)、金属にねじ山を切るときのように1/2回して1/4戻す、とやらなくても大丈夫です。これだけでネジがするっと入るようになりますし、ネジ山崩れにくくなります。まぁ……力入れすぎるとボリって崩壊しますけども。そのためにスプリングワッシャーで「ギリギリ強く締めなくても緩みにくい」ようにしておきましょう。


■配線■

秋月のD基板上に配線します。

最近またジュンフロン使ってます。ちょっと前まで架橋ポリエチレン被覆を使っていたのですが、ジュンフロン被覆はワイヤストリッパー要らないんですよね。


  1. ハンダゴテに少し多目にハンダを乗せる。
  2. ハンダゴテの表面に垂直にジュンフロン線を当てて2-3秒
  3. ジュンフロン被覆がツーッと縮んで1〜1.5mmぐらい導線が出てくる
  4. フラックスを塗って、改めてハンダメッキする


これだけで使えます。熱で縮んだ分だけ末端が少し太くなりますが。



電池は電池ケース両端のネジ穴にM3のネジを通して電線を巻きつけました。スプリングワッシャを入れて電線を押さえつつ、電池を潰さない程度に押さえます。

くれぐれも感電しないよう気をつけてください。GNDとつみあがった電池の中間付近でも70V出ていますので結構ビリっとくるはずです(私はやらかしませんでした。感電こわい)。

■ソフト■

ソフト呼ぶのも恥ずかしいほど簡単ですな。ビットが順番に並んでいないのは、KM155ID1/SN74141のABCDが順番に並んでいないためです。

私はこういう場合、配線がGPIOとピン並びが平行になることを優先します。プログラムの処理が複雑にならない場合は、ぱっと配線を見て確認できる方が間違えも少なくなりますし、基板にしたときも簡単です。まぁこれ基板起こすことないと思うけども。

void setup() {
  // put your setup code here, to run once:

  Serial.begin(115200);
  pinMode( 7, OUTPUT);
  pinMode( 8, OUTPUT);
  pinMode( 9, OUTPUT);
  pinMode(10, OUTPUT);  
}

int num = 0;


void loop() {

  digitalWrite(10, (num & 1) ? HIGH : LOW);
  digitalWrite( 9, (num & 8) ? HIGH : LOW);
  digitalWrite( 8, (num & 2) ? HIGH : LOW);
  digitalWrite( 7, (num & 4) ? HIGH : LOW);

  num++;
  if (num > 9) num = 0;           
   
  delay(200);
}

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。