電子サイコロを作りました(製作期間:2009年1月6日〜2月14日、4月18日〜19日、8月18日)
「7.製作」完成: 全体回路図掲載しました
2009年8月19日
訂正: デコーダー&LEDドライバのトランジスタの名前訂正(正:2SC1815-Y、誤:2SC1915-Y) 2009年7月16日
電子工作の初級工作としてよく取り上げられる電子サイコロですが、以下にこだわって作ってみました。
実はこの「こだわり」が間違いの元でした。特に2と3にこだわったせいで、回路が面倒なことになり、たぶん再現性が著しく悪くなってしまったのではないかと思います(詳細は後述)。
最初は、電子サイコロの数字を変えるタイミングを作る発振回路です。
左の回路図で、SW1がONになるとC1が充電されると同時に発振回路が動作開始します。SW1をOFFにしてもC1に充電された電気が放電されるまで、発振回路は動作を動作を続けます。C1の電圧が下がるとともに、発振回路の発振周期が長くなります。これによって、SW1をONしている間は、電子サイコロの目の数字が高速で変わり、SW1をOFFすると徐々に目の変化が遅くなって、最後には停止するという動作をさせることができます。
発振回路は弛張発振回路と呼ばれる回路の一種です。弛張発振回路としてはあまり見かけない回路になっています。いろいろな弛張発振回路を試してみて、最終的にこの回路に落ち着きましたが、出力に出てくるパルスは非常に細いパルスになります。実際には、Q1,Q2のスイッチング時間程度の長さのパルス(おそらく数nSec)になります。パルスというよりは、ヒゲというべきで、普通は電子回路の誤動作の原因(グリッチ)として嫌われるたぐいのパルスです。
この回路は、出力パルスの電圧を比較的自由に設定できたため、採用しました。しかしながら、実は、このパルスの細さのため、動作音を出す時間が不足して、動作音だけのためにパルス幅を広げる回路を追加することになってしまいました。
弛張発振回路の実験 |
弛張発振回路の出力パルスの幅が非常に狭いため、電子サイコロとして動作音の発信音の継続時間が短すぎて音になりません。そこで、パルス幅を伸張する回路を入れることにしました。左の回路図は、全体の回路図から切り出したため、部品番号が飛び飛びになっています(全体の回路図で連番になっています)。
NANDの出力に非常に時定数の長いCRの微分回路とでもいうものを付けて、その出力を反転してNANDのもう一方の入力に戻します。この結果、C3に充電された電荷がR5を通じて徐々に放電される間、パルスが継続するようになります。CRは微分回路と同じなので、立下りの部分でマイナス電圧のパルスが出ますが、これはD1を通じて放電され、HCMOSの入力を保護しています。
CRの値(図のC3とR5の値)は、HC132のスレッショルド電圧から計算することもできますが、実験で波形を見ながらカットアンドトライで決めました。
ブレッドボードで作成した実験回路で、図のA点とB点の波形を測定している様子を示します。
パルス幅伸張回路の実験 |
A点の波形 |
A点の波形(拡大) |
B点の波形 |
こだわりの5に書いたように、動作音を出すために、電子サイコロの目が変化するのに合わせてビープ音を発生させます。
ごく普通の発振回路です。U1のピン2が"H"の時にビープ音が発生しますので、上述のパルス幅伸張回路のA点の信号をつなぎます。パルス幅伸張回路で余ったシュミット入力のHC132を使用しているところがミソで、A点のスロープ状の信号がそのまま使えます。B点の信号では、論理が逆になってしまいます(もっとも、B点の信号を使って、音を聴いてみたところ、それほど違和感はありませんでした)。
|
ビープ音の周波数はR6とC4の値で決まります。これもちゃんと計算できるのですが、実験で決めてしまいます。C4を1μFとして、R6の値を変化させたところ、発振周波数は上の表のようになりました。聴いた感じが良い周波数を選びます。
電子サイコロ動作の要となるカウンタ回路です。
正式には、6ビットのリングカウンタ回路ということになります。6個のDフリップフロップを直列に接続することで、パルスがひとつ入力されるごとに、出力が1ビットシフトする構造です。最初の入力が6パルスごとに1になるようにすれば、6ビットのうち1ビットだけが1の状態が、1ビットずつシフトして行くことになります。「6パルスごとに1」という状態を作り出すためには、6ビットの出力のうち、5ビットのNORを取ってやれば、「5ビットのうちどこかが1のときは0」つまり「5ビット全部が0のときだけ1」になる信号を作り出すことができます。
74HC174にはちょうど良い具合に6ビット分のDフリップフロップが内蔵されています(まるで電子サイコロ回路のために設計されたみたいです)。「6パルスごとに1」の信号を作るためには、本来であれば、多ビット入力のOR(74HC4078とか)を使うべきところを、D2〜D6のダイオードロジックを使ってICを節約しています。
下の写真は、Q1〜Q6にLEDを接続して動作確認を行っているところです。
リングカウンタ回路の実験 |
電子サイコロで目のパターンでLEDを点灯するためには、リングカウンタで得られる、6ビットのうち、どれか1ビットが1という信号をサイコロの目になるような信号に変換(一応「デコード」ということにしておきます)する必要があります。
まずは出力のどのビットをどの目に対応させるか考えます。単純に考えれば「Q1=1, Q2=2,・・・Q6=6」ということになりますが、実際のサイコロが転がるときには、このように順序良く目が変わるわけではないので、ひと工夫します。本物のサイコロと同じ順序というわけには行きませんが、なんとなく規則性がわかりにくいように、以下のような対応にしてみました。
・・・ → Q1=1 → Q2=5 → Q3=4 → Q4=6 → Q5=3 → Q6=2 → ・・・
規則的な順序であることに、変わりはありませんが、一見不規則に見えるところがミソです。
次に、電子サイコロの目の表示パターンですが、7つの目のうち、下左図のように、中央の1つを除くと、他は2つずつペアで点灯します。そこで、LEDを点灯させるために用意する信号は4つあればよいことがわかります。この4つの信号の組合せと、Q1〜Q6の信号の対応関係を表にすると、下右図のようになります。「○」印がLEDを点灯させることを示します。
サイコロの目の出るパターンの規則性を利用する |
サイコロの「2」と「3」では、点灯させるLEDの方向を変えてあります(両方とも「a-f」を点灯しても良いのですが、これも見た目の規則性を無くすためです)。
この信号の対応関係を作る「デコーダ回路」は以下のようになります。
実は、ここで最初に書いた「こだわり」が災いしてしまいました。そもそも乾電池2本の3V動作で、青色LEDを点灯しようとすること自体が、規格外なのですが(青色LEDの順方向電圧は普通3V以上)、電流を絞ればかなり低い電圧でも青色LEDを点灯させることができます(デバイスの特性によって異なるので、実験で確認する必要があります)。電流が少ない場合には、74HC174の出力で、直接LEDを点灯させることができるのですが、信号の組合せパターンを実現するためにダイオードロジックを使うと(回路図のD7〜D18)、この部分の電圧降下(約0.6V)が加わるので、さすがに電圧不足になってしまいました。そこで、ダイオードロジックの後にトランジスタのドライバが必要になり、回路が複雑になってしまいました。
使用した青色LED | LEDを点灯させたところ |
ちなみに、今回使用した青色LEDは高輝度タイプなので、まともに電流を流すと(1mAぐらいでも)直視できないぐらい明るく輝きます。上に書いたように、電源電圧の制限で電流を絞っていますが、輝度の面でも電流は絞る必要がありました(直視できない電子サイコロなんて使い物になりませんので (^^;; )。