マイクロビットをつかって「ピンボールゲーム」をつくりたいと考えています。
木製のボード上にビー玉を転がし、それをフリッパーではじいてターゲットに当てることで点数を獲得するゲームです。
ターゲットとしては、ビー玉が当たるとクルクル回転し、回転数に応じて加点されるようなものを用意したいと思っています。点数のカウントや表示にマイクロビットを使います。
今回はピンボールゲームをつくるための前準備として、このターゲットの部分について検討します。
クルクル回転していることを検知するしくみとして「フォトインタラプタ」という部品を使うことにします。
「フォトインタラプタ」は、発光部(赤外線LED)と受光部(フォトトランジスタ)が一体になった部品です。発光部と受光部が向かい合わせに配置されており、両者の間に障害物があるかどうかを判断します。スリットのあいた円板を発光部と受光部の間に取り付け、それをクルクル回すことで回転を検知できます。
「フォトインタラプタ」は、以前 こちら の記事で紹介した「フォトリフレクタ」とほぼ同じしくみの部品です。ただ、「フォトリフレクタ」では発光部と受光部が横並びになっており、発光部から出た赤外線は対象物で反射して受光部に届くため、対象物との距離や材質により得られる値がアナログ的に変わるのに対し、「フォトインタラプタ」は発光部と受光部が近接して向かい合っているため、両者の間が遮られているかどうかの情報を、よりデジタル的に得ることができます。
今回はパナソニックの「CNZ1023」というフォトインタラプタを使うことにします(秋月電子の販売コード:109668)。また、マイクロビットとの接続には「KEYESTUDIOモータードライバー拡張ボード(KS4033)」を使おうと考えているので、電源はこのボードの「3V」端子(電圧:3.3V)から供給することにします。
フォトインタラプタは、以下のような回路を組んで使用します。
このうち、「R1」「R2」の抵抗値について決定する必要がありますので、今回はこれらの値を検討していきたいと思います。
まずは「R1」についてです。
「R1」は「フォトインタラプタ」内の「赤外線LED」に流れる電流を制御します。
データシートによると、LEDの順電流「IF」の絶対最大定格(上限値)は「50mA」、また他の特性値を示す際に条件として記載されている IF の値は「10mA」や「20mA」が多いので、今回は「20mA」程度の電流を流すことにします。データシートより「IF = 20mA」のときの「VF」は「1.25V@typ」です。
その場合、
R1 = (VCC - VF) / IF = (3.3V - 1.25V) / 20mA ≒ 100Ω
となります。これより「R1 = 100Ω」とします。
次に「R2」についてですが、こちらは実際に実験してみたいと思います。「R2」を「1kΩ」「10kΩ」「100kΩ」と変化させ、検知される値を確認します。
ブレッドボードで回路を組み、電源、グランド、検知信号の各端子を「モータードライバー拡張ボード」の「3V」「GND」「0」端子にそれぞれつなぎます。
マイクロビットには、「フォトリフレクタ」の調査(こちら)のときに使ったのと同じ、以下のプログラムを書き込みます。
MakeCodeエディタで「データを表示 デバイス」をクリックし、フォトインタラプタの検知信号「P0」の値を確認します。
フォトインタラプタの発光部と受光部の間に、うすいゴム板を入れたり出したりして、閉じているときと開いているときのアナログ値を調べます。結果は以下のようになりました。
R2 | アナログ値(閉) | アナログ値(開) |
---|---|---|
1kΩ | 1 | 965 |
10kΩ | 2 | 1000 |
100kΩ | 15 | 1015 |
検知信号の電圧値が0Vのときにアナログ値は「0」、3.3Vのときにアナログ値は「1023」になりますので、検知信号はR2の値によらず、ほぼ0Vと3.3Vで変動することがわかりました。今回は「R2 = 10kΩ」を採用することにします。
小さいユニバーサル基板であらためて回路をつくります。「モータードライバー拡張ボード」につなぎやすいように、各端子にはメスのコネクタを取り付けておきます。
実験のための「スリットのあいた円板」として、手元にあったプラスチック製の歯車を暫定的に使うことにします。スリットの代わりに歯車に穴を開け、以下のようにフォトインタラプタに取り付けます。フォトインタラプタの検知信号は、「モータードライバー拡張ボード」の「12」端子につなぐことにします。
マイクロビットには以下のようなプログラムを書き込みます。
フォトインタラプタの検知信号は「0V程度」←→「3.3V程度」とデジタル的に変化するので、マイクロビットではデジタル信号として扱っています。「12」端子に「正パルス(L→H→L の信号変化)が入ったとき、音を鳴らし、得点(cnt)を加算し、LED画面に特点を表示します。2桁の特点を表示するために「WhaleySans Font」という拡張機能をつかっています。
動作させた結果は以下のようになります。
いい感じに動いています。
この歯車の部分を、ビー玉が当たると回るような羽根に取り替え、ピンボールのボードに設置すれば、クルクル回転するタイプのターゲットとして使えそうです。