t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

基板エッチング処理の廃液処理実験のために購入した道具

今回は銅張積層板(生基板)のエッチング処理実験のために購入した道具類をご紹介。
いいからさっさとやれよとツッコミをいただきそうなんだけど、化学反応を伴う作業なので当たって砕けろという訳にもいかない。

化学実験の場合、「砕ける」とは、を意味するケースがあるので。。
適当にYouTubeの情報とか鵜呑みにして間違いがあると取り返しのつかないことになる場合があるため、下調べや準備は入念に行いたい。

ということでいまだに本実験も開始できていないのだが、ああだこうだ悩んでるうちに豪勢な環境出来上がってしまったのでとりあえず記事にしてしまった。

当初考えていた装備がこちら。小さなタッパーとプラロート・キッチンスケールとコンビニスプーン。
f:id:t-hom:20211031005244p:plain

廃液処理にはもう少し液体の一時保存とか移し替え用に買い足さないといけないなと思っていた。
それこそ、100均でも行くかなと。

まぁでもお出かけが面倒くさくて多少高くてもいいやとAmazonでポチポチやってたら。。。

ででん!
f:id:t-hom:20211031004122p:plain

いやそうはならんやろ!

どうしてこうなった。恐るべき深夜テンション。

後列左から、ガラス漏斗、三角フラスコ、漏斗台、かくはん棒、ビーカー2つ、ガラスシャーレ(ペトリ皿)、洗浄ボトル、試験管。
前列左から、ろ紙、pH試験紙、青リトマス紙、赤リトマス紙、パラピン(薬包紙)、0.01gスケール、ミクロスパーテル(耳かきみたいなサイズのスプーン)、薬さじ3本、試験管ばさみ。
あと映ってないけど使い捨てのスポイトも購入した。

それ要るの?って言われるとまぁ100均でいくらでも代用品はあるし、ぶっちゃけ気分を上げるファッションでしかないんだけど、使わないものを買ったわけではない。

基板エッチングは銅を強酸性のエッチング液で溶かしてイオン化することで行われ、廃液処理では銅イオンにアルミニウムを入れて酸化銅を析出させ、酸性の廃液に重曹をまぜてpH調整し、さらに十分に希釈してから捨てるという工程を踏む。

パラピンと計量系の道具はエッチング液を作る際に使用し、試験管はごく少量の銅でエッチング実験をするのに使用し、漏斗台・ろ紙・三角フラスコは析出した銅をフィルターで取り除くのに使用し、シャーレとph試験紙はpH調整後のチェックで使用する。

あと材料もそろったのでさあいよいよ実験を!…と思ったんだけど、まぁ簡単で安全なところからやってみよう。

とりあえず重曹とクエン酸で中和実験。
そんなの掃除でもやってるよ!って言われそうだけど、まぁ今回は各種道具の使い方に慣れるという重要なミッションがあるのでこれくらいにしておいた。

右の試験管が重曹水(水5ml・重曹0.25g)、左の試験管がクエン酸水(水5ml・クエン酸0.14mg)。
ペトリ皿のpH試験紙は左から、クエン酸水(ph0?? 読み取りづらい。。ゼロってことはないだろうけど)、重曹水(pH10?)、水道水(pH6?)。
f:id:t-hom:20211031011651p:plain

この2つをビーカーにぶちまけると、激しく反応し、泡が出てくる。二酸化炭素らしい。
f:id:t-hom:20211031012058p:plain

中和後にも測ってみた。
f:id:t-hom:20211031012242p:plain
赤の左隣にある緑が中和後の値。あれ。。せいぜい10から9になったくらいか?
そのあとクエン酸をひとつまみ足しこんだのが濃い緑の左隣。pH4くらいの色になった。
ちょっと行き過ぎたなとおもって重曹を追加したのが一番左。pH5ってところかな。

pH調整って適当にやると結構難しい。
モル比とか使ってちゃんと分量計算すれば狙ったpH値にできるのかな。このあたりはもう少し勉強してみようと思う。

今日はジュンク堂書店へ行って化学の書籍をいくつか買ってきた。
f:id:t-hom:20211031012843p:plain

あれ?
結局外出するなら100均でよくね?

いやまぁ、いいんだ。
どのみち道楽なんだから、多少芝居がかった道具があったほうが楽しめる。

そう自分に言い聞かせて、今日もまたAmazonの奥地へ。

つづく。

Amazonでそろえたもの

他は東急ハンズ。

もはや何ブログか分からなくなってきたけど、いちおう電子工作タグ付けとくか。。

以上

レーザー加工機でプリント基板製作の前検証~金属の塗膜を剥離させる

今回はレーザー加工機で塗装した金属の塗膜を焼いてみる。
さくっとできたらわざわざ記事にすることもなかったんだけど、そこそこ調整に手間取ったので記事に残しておくことにした。

今回は実際の銅張積層板ではなくて、ホームセンターで買ってきた薄いステンレス板とアルミ板でテストした。

まずは塗装。レーザー光を吸収しやすい艶無しの黒が良いとの情報なので、タミヤのラッカースプレーで塗装した。
何度かテストすることになると思ったので、それぞれ両面塗装とした。
f:id:t-hom:20211025225900p:plain

塗装後の板がこちら。今回はどのみちテストなのでクリップではさんだところを省略したり、乾く前に触ったりと雑に扱ったのでところどころ欠落とか汚れがあるけど、きれいなマットブラックがある程度の面積確保できればそれで良い。
f:id:t-hom:20211025230655p:plain

そしてまずはステンレス板に小さいサンプルを35%出力で試してみることにした。
カメラで撮影してみたところ、木材を置いたときよりあきらかに反射光が少ない。やはり黒に吸収されているからだろう。
f:id:t-hom:20211025230924p:plain
ちなみに私は保護メガネを付けてるのでこの光景を直接見ているわけではない。これは画像だから大丈夫だけど、実際の反射光を見てしまったらおそらく眼科直行かなと。

印刷直後はこんな感じ。黒が際立って綺麗だけど、これは塗料が焼けてできたススなので乗ってるだけ。
f:id:t-hom:20211025231245p:plain

洗剤を使って洗い流すとこんな感じになる。下地のステンレスが見えているけど、出力不十分で塗膜がしっかり除去できていない。
f:id:t-hom:20211025231419p:plain

そのあと色々と調整を試すもののうまくいかなかったのだが、洗った後にティシューで強めに擦るとしっかりと金属光沢が出ることが分かった。(この作戦はこのあと失敗するのだが。)
f:id:t-hom:20211025231625p:plain

続いてアルミの方には実寸回路を焼き込み。
f:id:t-hom:20211025231849p:plain

しかし光沢を出そうと擦ってもなかなかうまくいかず、全く光沢が出ないかあるいはパターンごとティシューで掻き切ってしまう。
f:id:t-hom:20211025231941p:plain

そうだ、無水エタノールで力を入れずに磨いてみるのはどうだろう。



。。。




f:id:t-hom:20211025232113p:plain

うわぁぁぁぁぁぁ。

って思ったけど、あ、これひょっとしてエッチング後の塗膜除去に使えるなぁと気づいて実験としては結果オーライだった。

気を取り直して色々と出力を変えながら試すがうまくいかず、他の人がやってる動画をみて台所クレンジングが使えるというヒントを得た。

しかし料理しないのでクレンジングなんて持ってない。
買いに行くか?・・コンビニに売ってるのか?と悩んでいたところ、そういや3Dブリント造形物の磨き用に買ったコンパウンドが使えるのではと思い当たった。

いつぞやの、アレ。
f:id:t-hom:20211025232858p:plain


ビンゴ!
f:id:t-hom:20211025232943p:plain

恐る恐る仕上げ目から試したけど、結論から言って粗目でごしごしやって大丈夫だった。
綺麗に金属表面が出てくる。

出力何パーセントのを磨いたのか覚えてないんだけど、たぶん50%~100%くらいまでのどれでも同じようにできると思われる。

ということで今夜は実際の基盤を塗装して準備中。

ただ塗膜剥離してからしばらく置いてしまうと酸化被膜ができてエッチングがうまくいかないような気もするので、エッチングの準備が先。厳密にいえば廃液処理のテストが先になる。

廃液処理テストでは極少量の銅箔とエッチング液(オキシドール・クエン酸・塩を混ぜたもの)で模擬的に極少量のエッチング廃液を作って、アルミ箔を使った酸化銅の析出処理と濾過、重曹を使った中和処理をやる予定。

手に負えない量の廃液を出してしまったあとに処理に困るのでは洒落にならないので、石橋を叩いて渡るつもりで。

レーザー加工機で木材にお絵かき

先日我が家にレーザー加工機を導入したので試しに木材にお絵かきしてみた。

完成したのはこちら。
f:id:t-hom:20211024215550p:plain

この芸術、理解できますでしょうか?
そう、いわゆる抽象画。


なかなかサイズ合わせに苦労したけど、とりあえずうまくいった。
f:id:t-hom:20211024220044p:plain


本当はKiCADから解説してエッチング廃液処理までで1記事にしようかと思ったけどなかなか腰が重くて進まないので直近対応したレーザー加工だけでも書いてしまおうと思う。

データの準備

KiCADからsvgファイルをエクスポートすると、銅を残すところが黒くなったSVGファイルが出力されるので、白黒反転するためにInkscapeで開く。
f:id:t-hom:20211024221542p:plain

白黒反転と書いたが、実際のところは白ではなく透明になっているのですこし面倒である。

InkscapeのレイヤーメニューからBackgroundとForegroundの2つのレイヤーを作成する。
Ctrl+Aで画像を全部選択して右クリックメニューからForegroundレイヤーに移動する。

再度Ctrl+Aで全選択し、エクステンションメニュー→色→ネガを実行。
すると黒色が白に、白色が黒に変換される。しかし配線部は透明なのでややこしい。
f:id:t-hom:20211024221929p:plain

全選択しているとき、上部のバーに開始位置とサイズが表示されているので覚えるかメモる。
f:id:t-hom:20211024222059p:plain

Backgroundレイヤーを選択して矩形を描画し、位置とサイズをForegroundの画像と合わせる。
f:id:t-hom:20211024222556p:plain

レイヤーをドラッグっで入れ替えるとこの通り。
f:id:t-hom:20211024222819p:plain

ファイルメニューからPNG画像にエクスポートを選択。
画像を一度クリックするとエクスポートペインが選択範囲というタブに切り替わり、出力範囲情報が自動入力される。
f:id:t-hom:20211024222956p:plain

このまま出力すると選択した部分だけ出力されてしまう為、描画全体タブに切り替える。
一度画像を選択するのは出力範囲の情報を自動入力させるためである。

出力したい画像のサイズを入力する。
f:id:t-hom:20211024223708p:plain
私が購入したレーザー加工機NEJE Masterでは画像サイズは、実際に出力するサイズを0.075で割ったサイズを入力するらしい。
例えばこの基盤は横幅45.9mmなので45.9 / 0.075 = 612。

基板サイズの計算も結構面倒だった。
まずパワポで基準となる部品のサイズの矩形を作成して基盤の画像をそのサイズに合わせる。
f:id:t-hom:20211024224458p:plain

そして基盤を選択すると上部にサイズがcm単位で出てくるので10で割ってミリに直す。
f:id:t-hom:20211024224555p:plain

一旦適当なサイズでPNG出力してパワポで測り直してから適切なサイズで出しなおすという面倒な作業だった。
多分このあたりは、Inkscapeを使いこなしていればパワポなんて使わなくてもできてしまうんだろうな。

印刷

使用したレーザー加工機はこちら。

面倒なことにレーザー加工機を繋いで電源を入れておかないと加工ソフトを起動できない仕組みになっている。

起動したら中央にPNGファイルをドロップ。
f:id:t-hom:20211024224907p:plain

一応次の画面でサイズ調整ができるが、ここで設定するサイズは目安でしかないので注意。
f:id:t-hom:20211024225154p:plain

エフェクトを選べと出てくるので左端の画像をクリック。
f:id:t-hom:20211024225241p:plain

エディット画面はそのままOK。
f:id:t-hom:20211024225324p:plain

メイン画面に戻ってくるとなぜかサイズが微妙に変わっている。
むしろ最初の設定画面の表示がズレていて、メイン画面の方は計算通り612ピクセルが45.9ミリになっている。
f:id:t-hom:20211024230419p:plain

あとは印刷するだけ。

注意事項

部材に反射するレーザー光を絶対に保護メガネ無しで見ないこと。
試しにカメラで撮ってみたのがこちら。これは絶対にヤバい。目が死ぬ。
f:id:t-hom:20211024230714p:plain

ちなみに保護メガネごしだとこんな感じ。まぁそれでも見ないに越したことはない。
f:id:t-hom:20211024230936p:plain

あと木材に出力100%だとかなり焦げ臭いので火災感知器の近くだと反応するかもしれない。

やったほうが良いこと(私はやった)

  • 間違って机を掘らないようにホームセンターで薄いステンレス板(0.8ミリ厚 300x400)を買ってきて敷いた。

ただ鏡がNGという注意書きがあるため、鏡面反射する物質は良くないかもしれない。真似される方は自己責任で。

  • ハンディタイプの消化器を常備する。

電気火災に対応しているものが良い。

  • 作業場所はパーティションで区切って光が入らないようにする。

USBケーブルで接続する必要があるのであまりPCの遠くにはできないが、私は襖1枚隔てたDKで工作している。

  • 吸煙器を使う。

私はハンダ付けで使うHAKKOのFA-400という製品を流用している。

ただこれは健康の為ではなく、吸煙器を使わないと煙がそのままレンズに向かって立ち上り、レンズを早々に痛めてしまうため。
すぐに使えなくなったというレビューが多いけど、調べてみるとプロのレーザー加工現場でもレンズを煙から守らないと1~2年でダメになるらしい。
出力が大きいプロ用のレーザーでも壊れるので、ホビー用のレーザーだともっと弱いんじゃないかと思う。

煙を飛ばすだけの目的なら扇風機でも良いような気がするけどどうなんだろう。

出力ごとの出来栄え

木目が比較的均質な木材で試した結果。上の数字はレーザー出力。
f:id:t-hom:20211024232949p:plain
20%が最も綺麗に出ている。

ちなみに別の木材で20%でやってみたところ、木目の艶ではじかれたのか、全然ダメだった。
f:id:t-hom:20211024233116p:plain

そこで同じ木材で35%出力でやり直したのが冒頭でお見せしたこちら。
f:id:t-hom:20211024215550p:plain

次の展望

ホームセンターではがきサイズのステンレスとアルミを買ってきたのでこれを今から艶消し黒で塗装する。
乾いたら後日レーザー加工で塗膜をうまく焼き切れるか確認。ここでまたレーザー出力調整が必要になると思われる。
それがうまくいったら電子工作用の生基盤で同じことをしてエッチング処理して、最後にアセトンで残った塗膜をはがせば基盤の完成。

エッチングには必ず廃液処理が伴うので、しっかり下調べして公害を出さないようにしないといけない。
ここから先もまた腰が重いのでいつになるか分からないけど、とりあえず今回はここまで。

LED2個を使ってクロックとは何かを理解する ~ ASCIIコードでHelloと言わせてみた

最近データ通信におけるクロックの役割について記事を読んで、「ああ、そういうことか」と理解したので、自分でもクロックを使ったデータ表現をやってみた。
一般的にクロックというと時計をイメージすると思うが、どちらかといえばメトロノームとか手拍子をイメージすると分かりやすい。

たとえば人間にとって「あーー」と「あーーー」と「あーーーーー」はどれも意味的には「あー」である。
私は何回「あ」と言ったでしょう?って聞かれても他人には答えられない。
「あーあーあー」といったのか「あああああ」と言ったのか、それは本人がイメージするリズム次第で変わってしまう。

さて、このことがコンピューターでは大いに問題になってくる。
なんせ電気信号のONとOFFでしか情報を表現できないので、オンオンオンオンオフオフオフオフと言ったのか、オーーーンオーーーフと言ったのかでは全然データの意味が違ってくる。

そこで使われるのが一定周期でON/OFFを繰り返すクロック。
クロックが1回「オン/オフ」する間を1ビットと解釈することで、正確にデータを読み解くことができる。

 見た目:オーーーーンオフオーーンオーーフ
クロック:オンオフオンオフオンオフオンオフ
 データ:オンオンオンオフオンオンオフオフ

実際にArduinoを使って、ASCIIコードでHelloと表示してみたのがこちら。
f:id:t-hom:20211023103217g:plain
緑LEDがクロックで、赤LEDがデータである。

クロックに合わせて赤LEDを読み取ってメモすれば、一応人間でもデータを読み取ることができる。

(参考)ASCIIコード
www.ascii-code.com

コードは次のとおり。

const int CLOCK = 3;
const int DATA = 4;

void setup() {
  // put your setup code here, to run once:
  pinMode(CLOCK, OUTPUT);
  pinMode(DATA, OUTPUT);
}

void say(char x) {
  for(int i=7;i>=0;i--){
    digitalWrite(DATA,x >> i & 1);
    digitalWrite(CLOCK,HIGH);
    delay(200);
    digitalWrite(CLOCK,LOW);
    delay(200);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(CLOCK,LOW);
  digitalWrite(DATA,LOW);
  delay(5000);
  const char message[] = "Hello";
  for(int i =0; i < strlen(message); i++ ) {
    digitalWrite(CLOCK,LOW);
    digitalWrite(DATA,LOW);
    delay(1000);
    say(message[i]);
  }
}

メインループではmessageという文字型配列にセットしたHelloをfor文で一文字ずつ取り出してsay関数にパスしている。
say関数ではShift演算とANDマスクを使って1文字=8ビットから1ビットずつ取り出したものをデータLEDの出力としている。

シフトというのはずらすという意味で、たとえば01001000(文字H)を1ビット右シフトすると00100100となる。
左側の欠落した部分は0で埋められ、はみ出た部分は捨てられる。

これに00000001(数字の1の8ビット表現)をAND演算すると、各桁でAND演算が実施されるので右端以外は必然的に0、右端の1ビットは元データが1なら1、0なら0となる。こうやって右端のビットだけを取り出すことができる。

Arduinoでは1はHIGH(≒5V)、0がLOW(≒0V)となる為、データに応じてLEDが明滅する。


今回はsay関数のdelayを200としたけれど、分かりやすく500にすると、クロックのONが0.5秒、クロックのOFFが0.5秒、計1秒の間にデータを1ビット表現できる。1秒間に1クロックなので、1ヘルツである。

最近のCPUのクロック数は大体4ギガヘルツ前後なので、1秒間に4,000,000,000回ほどON/OFFを繰り返すことができるということかな。すげーなおい。

以上

9V電池駆動の騒音計を24時間稼働させる為の5V電源アダプタを3Dプリンターで作成

以前から近所の事業騒音に悩まされており、管理会社を通じて抗議を続けている。
ただ、「うるさい」という主張は極めて主観的なため、単に神経質なだけと思われては話が進まない。

そこで、騒音計でデータをロギングすることにした。
客観的な証拠を残すためには騒音が鳴っているときに騒音計を撮影した映像を記録することが有効だ。

このあと決定的瞬間をとらえるべくRaspberry Piを使って24時間録画システムを構築したいのだが、騒音計が電池駆動なのでつけっぱなしには限界がある。

そこで今回はラズパイから出力できる5V電源を使って騒音計を駆動するための電池型アダプターを自作してみた。

まず悩んだのはアダプターの端子である。
先日9V電池でよくあるパチっとはめるタイプを部品屋で買ってきたのだが。。
f:id:t-hom:20211022202639p:plain

フタを空けてみたらバネタイプ。
f:id:t-hom:20211022202827p:plain

ワニ口クリップでも斜めになって挟みづらいし、変に曲げてしまって電池で使えなくなるのもそれはそれで困る。

よって3Dプリンターで9V電池の形をしたアダプターを作成することにした。
このアダプターに5Vから9Vへ昇圧するためのDC-DCコンバーターも突っ込んでしまえばコンパクトにまとまる。

端子をどうするか悩んだが家にある棒状の金属を探してみつかったのがM3ネジ。
f:id:t-hom:20211022202547p:plain

鍋ネジの頭が端子にちょうど良さそうだったので電気抵抗をはかってみたところ使えると判断した。

そしてFusion 360で設計。昇圧コンバーターを埋めこむために四角くくりぬいて、端子部分はネジを取り付けるために3mmの穴を空けた。
f:id:t-hom:20211022202525p:plain

ネジは中の四角いくり抜きの部分まで貫通させてそこから銅線をはんだづけするか、ネジに括り付けるつもりだったんだけど、偶然にもネジの先端が導線クリップとして機能することに気づいた。
f:id:t-hom:20211022203532p:plain

とりあえず5Vを流してみて導通テスト成功。
f:id:t-hom:20211022203820p:plain

あとはDC-DCコンバーターに配線をはんだ付けしてネジでクリップして電圧調整した後にはめ込み、外れないようにポリイミドテープでぐるっとまきつけた。フタに配線を通す小さな穴をあけて完成。
f:id:t-hom:20211022203955p:plain

使用した昇圧コンバーターはこちら。

とりあえずテストでArduino内蔵ブレッドボードから5Vを供給して動作させてみたところ、無事に稼働が確認できた。
f:id:t-hom:20211022204344p:plain

あとはラズパイとWebカメラを使って24時間録画するのみ。

以上

ロジックICを使って半加算器を作ってみた

今回はロジックICを使って半加算器を作成してみた。
要するに足し算をする回路だ。この回路を使えば、2進数で以下の4パターンの計算を行うことができる。

0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 10

…それが何か?

まぁ普通の人はそう反応するだろう。
実際のところ、これ1つで何か約に立つものではない。

しかしこれはコンピューターの頭脳ともいえるCPUが計算をする際に使用される、基本中の基本ともいえる回路だ。半加算器2つとOR回路を使うと繰り上がり桁を処理できる1ビット計算器(全加算器)となり、これをn個接続すると二進数でn桁+n桁の計算を行うことができる。

CPUの動作原理を理解するための、はじめの一歩がこの加算器と言える。

作ったもの

実際に作ったものはこちら。
スイッチが2つあり、この2つを足し算した結果をLEDで表示させている。
※1枚目の画像にピンセットが写りこんでややこしいけど、1枚目の画像ではスイッチは押してない。
f:id:t-hom:20211014194125p:plain

LEDの色が1桁目(右、緑)と2桁目(左、赤)で違うのは、後から説明する為にあえて違う色のLEDを接続したため。フルカラーではなくて、どちらも単色の定電流LED(5V~20Vまで抵抗なしでぶっ挿しても壊れない特殊なやつ)だ。

必要な回路

Wikipediaによると、XOR回路とAND回路を組み合わせることで半加算器を作ることができる。
f:id:t-hom:20211014195826p:plain
ja.wikipedia.org

前回はトランジスタを使ってXOR回路を作った。
thom.hateblo.jp

あとはAND回路があれば作ることができる。
ANDはXORに比べれば遥かに簡単なのでわざわざ作って確かめるというようなことはせず、今回はXORもANDもロジックICを使ってさくっと実装した。
f:id:t-hom:20211014195420p:plain

結構苦労して作ったXORだったけど、XORのロジックICを買えばコンパクトなパッケージに4つも入っている。
f:id:t-hom:20211014195730p:plain

接続

ICを使えば回路自体はかなりシンプルになるが、それでも最初考えていたよりも随分とごちゃついた配線になってしまった。
f:id:t-hom:20211014202036p:plain

ぱっと見分かるのは、配線のだぶつき。
XORの時に使った線を使いまわしてるせいで線の長さが綺麗に切りそろえられていない。しかしここまでごちゃっとしているのは別の理由がある。

それは、CMOSで作成されたICはINPUTピンを必ずGNDかVCCに繋がないといけないという制約である。
どこにもつながない場合、電圧が中途半端にかかってしまい、LOW・HIGHの判定が乱れて誤動作する。

※CMOSはComplementary(補完的) metal–oxide–semiconductor(酸化金属半導体)の略で、N型MOSFETとP型MOSFETを補完的に組み合わせた回路のこと。
※MOSFETのFETはfield-effect(場の効果→電界効果) transistor(トランジスター)の略で、電流ではなくて電圧で制御するトランジスタ

よって未使用のINPUTピンを全部GNDに繋ぐ。
また、使用するINPUTピンも結局GNDに繋いでおかないとスイッチOFF時に誤動作する。

ただ直接GNDに繋ぐと、スイッチON時にも電流がGND方向に流れてしまいピンに電流を流すことができない。
f:id:t-hom:20211014203953p:plain

そこで使用するピンは1kΩの抵抗を使ってGNDに接続する。
そうするとスイッチOFF時にINPUTピンは抵抗を通じてGNDと同じ0Vまで電位が下がり、スイッチを入れると抵抗がないピン側へ電圧が印加される。
f:id:t-hom:20211014204934p:plain

ちなみに中身がMOSFETなのでINPUTピンには電圧が加わるだけで電流は流れていないのではないかと推測している。コンデンサと同じで一瞬電荷の移動はあるけど中にどんどん流れ込むわけではない理解。ただ言い切れるほど知識は無いので、MOSFETの理解は今後の課題である。

動作原理

なぜXORとANDで加算器になるのか、これまではあまり深く考えたことが無かった。
しかし作ってみて気づいたが、深く考えるまでもなく当たり前の事象だった。

もう一度さっきの画像で確認してみよう。
f:id:t-hom:20211014194125p:plain

1桁目(右、緑LED)に注目すると、これは単純にスイッチのXOR結果である。
そして2桁目(左、赤LED)に注目すると、これも単純にスイッチのAND結果である。

1桁目のXORと計算ロジックの対応

SW1 SW2 XOR 計算ロジック
0 0 0 何も足されないので0
0 1 1 0+1なので1
1 0 1 1+0なので1
1 1 0 繰り上がってしまうので0

2桁目のANDと計算ロジックの対応

SW1 SW2 AND 計算ロジック
0 0 0 2桁目まで繰り上がってこないので0
0 1 0 2桁目まで繰り上がってこないので0
1 0 0 2桁目まで繰り上がってこないので0
1 1 1 2桁目に繰り上がってくるので1

めちゃくちゃ単純だった。

終わりに

今回作ったものは特に何かの役に立つわけではないが、コンピューターの動作原理の一部自分で作ってみることで理解が深まり、知的好奇心が満たされる。
そしてロジックICを実際に使ってみたことでいくつかアイデアも湧いてきた。
例えばセンサーを2つ使っていて片方だけONの時に何か処理させたいときにマイコンのプログラムで処理することもできるけど、ロジックICのXORをIF文の代わりに使うこともできるんじゃないだろうか。

これまでソフトでしかできなかったことをハードで対応できるようになると、どっちでやるか選択に幅が生まれる。
そうすると何か将来複雑なものを作りたくなったときに、その複雑さをハードとソフトで分担させることができるのではないかと考えている。
これが私が今さら電子工作に熱を入れている理由である。

まぁ今考えた後付けの理由なんだけど、この考えは今後のモチベーション維持に一役買ってくれそうだ。
純粋な理由としては単に電気の仕組みを理解するのが楽しいからやってるというところか。

以上

トランジスタでXOR回路(NAND 4回路の合成タイプ)を作る

今回はトランジスタを使ってXOR回路を作ることに成功したのでご紹介。

前提の説明:そもそもXORとは

XORは、2つの命題(Yes/Noで回答できる問題)があったとき、片方がYes、もう片方がNoの場合のみ成立する論理演算である。
そう書くと難しそうだけど、日常生活でも割とよく登場する。

たとえば機内食で、チキンとビーフどっちか選べというシチュエーション。

命題1:チキンを選ぶ 命題2:ビーフを選ぶ 成立するか?
Yes Yes No
Yes No Yes
No Yes Yes
No No No

※あくまでイメージしやすくするための例であって、実生活ではNo/No = Yes(腹減ってないので断る)はあり得るし、ひょっとしたらYes/Yes = Yes(余ってるから差し上げます)もあり得るかもしれないけど、無視してほしい。

プログラミングではYesをTrue(真)・NoをFalse(偽)という値で扱うが、電子回路では電圧の高低よって判定され、YesをHIGH・NoをLOWとして扱うことが多い(逆の場合もある)。

作成の動機:基本情報技術者試験のMIL記号がモヤるので

基本情報技術者の試験では、MIL記号というものが登場する。
今回作るXORは次のMIL記号で表される。
f:id:t-hom:20211013080504p:plain

受験当時、問題は解けるものの何故3本線で回路になるのか意味が分からずモヤっとしていた。

電気が流れるにはプラス極とマイナス極が必要で、当時の私は次のような電気の流れを考えていた。
f:id:t-hom:20211013081839p:plain
注)これは間違い

この理解だとAに電流を流すには、ルート1かルート3しかない訳だけど、ルート1を選択した時点でCにもう電流流れてしまうので、AがTrueならCも必然的にTrueとなってしまう。ルート3を選択するとBに向かって電流が流れるのでBをTrueにすることはできなくなる。

実際電気回路を組んでみて分かるのは、MIL記号には電源のプラスとマイナスが省略されているということ。
本当の電気の流れは次のようになっている。
f:id:t-hom:20211013083219p:plain

電源は必ず必要だ。要るのが当たり前だから、わざわざ書かれない。論理回路を考える際には、電源のことは思考の外に追いやってしまったほうがシンプルに考えられるからである。この大前提を知らなかったので当時MIL記号が苦手だった。

私は疑問が出てくるとなかなか前に進めなくなる質で、試験は試験だと割りきって無意味な暗記に徹することが難しい。
この記事で同じ様なタイプの人間が少しでも救われると幸いである。

トランジスタでXOR回路を設計する

トランジスタとは

さて、ではこのMIL記号の中身はトランジスタという部品で作成することができる。
一般的なトランジスタは3本足の部品で、それぞれの足をエミッタ・コレクタ・ベースと呼び、ベースからエミッタへ弱い電流を流すとコレクタからエミッタへ大きな電流が流れるという部品だ。
f:id:t-hom:20211013085823p:plain

トランジスタのこの特性を「増幅」と呼ぶがこれも私が昔よくわかっていなかった概念である。
イメージとしてはコレクタ・エミッタ間の通路を広げてることで通れる電流を増やしているだけ。
増幅というとパワーアップしているようなイメージを持ってしまうが、もともとの電源が200mAしか持ってなかったら、それ以上に増えることはない。どちらかといえばベース・エミッタ間の電流によって、コレクタ・エミッタ間の電流を流量コントロールしているといったほうが誤解がないと思う。

トランジスタそのものの仕組みは良い動画があるのでご紹介。
youtu.be

XOR回路の構成

WikipediaによるとXOR回路は複数の作り方があり、例えばNAND回路4つを組み合わせて作ることができるようだ。
実際にNAND4つの組み合わせでXORと等価になるのかVBAでもやってみた。
f:id:t-hom:20211013092407p:plain
上記コードの、AとBのTrue/Falseを変えながら全組み合わせ試したところNANDで作成したQはA Xor Bと同じ結果になった。

NAND回路の回路図

NAND回路は次のような構成となる。
f:id:t-hom:20211013093419g:plain

電気は流れやすい方に沢山流れるので、スイッチを2つともONにするとトランジスタが2つとも開放されて、電流はほとんどそちらを通る。よってLEDにはほとんど電気が流れず消灯する。スイッチが片方でもOFFだと一方のトランジスタで電気がせき止められるので、電流はLED側に流れ込み、LEDが点灯する。これがNAND回路。

トランジスタのベースに繋がる1KΩはベースに電流を流しすぎて壊れないようにするベース保護抵抗なので、ロジックそのものに関係は無い。
上部の5Vの直後にある100Ωの抵抗はコレクタ抵抗と呼ばれ、電流の入場制限のようなものである。こちらはトランジスタのベース保護抵抗の1/10くらいが良いらしい。
いくらトランジスタのコレクタ・エミッタが開放されているとは言ってもこの入場制限がないと、大量に電流が流れこみすぎてトランジスタで渋滞し、溢れた電流がLED側へ流れてしまう。入ってきた電流がトランジスタで詰まらないように先手を打って入口で電流の勢いを殺すのがコレクタ抵抗である。

LEDの直前にある120ΩはLEDが壊れないようにする保護用である。
赤色LEDはだいたい0.02A~0.03Aで動作する。それ以上は壊れる。
オームの法則から、5V÷0.02A = 250Ω、5V÷0.03A ≒ 166.6Ωとなる。つまり250未満、166.6以上の抵抗を選択すれば正常にLEDを光らせることができる。
手持ちの抵抗でいつも220Ωを使うので、今回はそこからコレクタ抵抗を引いて120Ωとした。

回路設計に使ったのはWebベースの回路シミュレーター。
www.falstad.com
電流の流れが視覚的に把握できるのでかなり気に入っている。

XOR回路の回路図

先ほどのNANDを4つ組み合わせることでXOR回路を作ることができる。
f:id:t-hom:20211013094354g:plain

最初の頃、電源とGNDがそれぞれ切れた回路図も意味が分かってなかったので、一応、中学理科で習うような繋がった回路図も掲載しておく。
f:id:t-hom:20211013095419p:plain
※線の交差するところが分かりにくくなったのでオレンジの被膜を被せて接続ではなくて交差していることを示しておく。
今のところ私は、5Vは全部繋げてしまって良いしGNDも全部繋げてOKという雑な理解である。複雑な回路になると線の交差が増えてしまって逆に理解しにくくなってしまうので、今では先に紹介した5VとGNDが分離しているタイプの方が便利だと感じている。

ちなみにXOR回路の方ではベース保護抵抗とコレクタ抵抗のみで、LEDの保護抵抗は入れなかった。

理由は最近買った定電流LEDを使う為である。こちらは5Vから20Vまでの電源に直接ぶっさすだけで使えるという代物。
1個60円もするので普通のLEDを詰め合わせで買った場合に比べると10倍くらいの価格差となるが、部品を減らせるので検証用途ではとても楽だ。
f:id:t-hom:20211013101641p:plain

むしろコレクタ抵抗100Ωによって電圧が5Vを下回るので若干光量が落ちてしまうと思うが、気にしないことにする。

XOR回路のレイアウト

回路図をベースにブレッドボードに落とし込んでいく。これはちょっとしたパズルだ。
いきなりは難しいのでfritzing(フリッツィング)というツールでレイアウトを作る。
f:id:t-hom:20211013095857p:plain

NANDの入力1が青、入力2が緑、内部配線がオレンジ、出力が黄色、5Vが赤、GNDが黒という風に色分けした。
MIL記号と回路図の対応でイメージするとこんな感じ。
f:id:t-hom:20211013103725p:plain

XOR回路を実際にブレッドボード上で配線

若干、線の引き回しを変更したけど、概ね同じように配置できた。
f:id:t-hom:20211013103928p:plain

そしてちゃんと動いた。写真だとLED光ってないけど、押しボタンスイッチは2つともOFFなので、光ってなくて正しい。
動画で証明したかったけど、わざわざYouTubeに上げるほど大層なものではないし回路図シミュレーターで動作アニメーション作ったのであれで証明としておこう。

今後やりたいこと

XORとANDを組み合わせることで半加算器を作ることができる。半加算器を2つ組み合わせると1ビットの全加算器となり、この全加算器をN個用意すればNビット加算器となる。これは計算機つまりコンピューターの基本的な仕組みの部分となる。

今後の展望としては4ビット加算器を作ってみたいが、さすがにトランジスタで作るのはしんどいので、ロジックゲートICを買ってみようと思う。


例えば東芝のTC74HC00APはNAND回路が4つ入ったICである。
f:id:t-hom:20211013105242p:plain

他にもAND・OR・NOT・XORなどいろんなロジックがICとして販売されている。

なかにはトランジスタだけでCPUを作り上げてしまう猛者もいるようだけど、構造を理解したらあとはただの面倒くさい作業になってしまうので、毎回作るのではなく、より使いやすいパッケージに置き換えていく方が自分の好みに合っている。

こういう置き換えを活用しながら、いつかCPUそのものを作りながらその挙動を理解したい。
CPUの作り方自体は書籍が出てるので部品さえそろえてそのとおり配置すればできるはず。ただ意味を理解せずに部品を配置していく作業にはそれほど魅力を感じないので、今回トランジスタ回路から初めてみた次第。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。