レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

片手で扱えるサイズのテンキー&ゲームパッド

2019年11月09日 | 電子工作

前にもちょっと書きましたが、こちらの小型の電卓はこの前作成した赤外線リモコンに使うつもりでした。



この電卓、キーのマトリックス回路から線を引っ張り出してLeonardoやPro Microにつなげはテンキーとして使えそうです。片手で扱えるサイズですので、寝転がったままブラウジングしたり電子書籍を読んだりするのにいいかもしれません。捨てておくのももったいないので、さっそく製作してみることにしました。

まずは分解して基板を見てみると、ベアチップ実装になっているICからキーにつながる線が11本出ていたので、ICに配線されているパターンを樹脂の縁あたりからカットし、赤外線リモコンのときのようにエナメル線を半田付けしてマトリックス回路を引き出しました。このとき基板上のコンデンサーなど不必要な部品も取り除きました。





引き出した線と基板のパターンが導通することをテスターで確認したら、これも前回同様に線が外れないようにグルーガンですぐに固定してしまいます。

引き出した線を電卓の外に取り出します。今回は液晶ディスプレイを取り外したスペースから引き出しました。



引き出したエナメル線にテスターをあてて電卓のボタンを押しながら、どの線がどのボタンとつながっているのか地道に調べていきます。この電卓のマトリックスは次のようになっていました。

     (16)  (14)   (6)   (5)   (4)
       2     3     7     8     9
 (9)   |     |     |     |     |
  4 -  0  -  √   -  3  -  2  -  1  -
 (8)   |     |     |     |     |
  5 - MRC -  .  -  6  -  5  -  4  -
 (7)   |     |     |     |     |
  6 -  7  -     -  -  -  9  -  8  -
 (3)   |     |     |     |     |
 10 -  =  -     -  X  -  ÷   - M+  -
 (2)   |     |     |     |     |
 11 -  %  -     -  +  - CE  - M-  -
       |     |     |     |     |
                   |
(10)               |
  1 -     -     - AC  -     -     -
                   |
()内の数字はArduinoとの接続ピン番号
()下の番号は上面左から割り振った端子番号
空白部分は配線なし

この電卓の場合、ACボタンがマトリックス回路の他のボタンとつながっていなかったので、引き出したエナメル線の近くにあったマトリックスのパターンと結線しました。

最後にエナメル線をArduino(今回はPro Microを使いました)につないで電卓を元に戻したら完了です。



今回も全てグルーガンで固定しました。6ピンのピンソケットはICSP書き込み用の端子です。普通Pro Microには不必要なものですが、ブートローダーを使わずに書き込んだほうが確実ですし使用できるメモリも多少は増える(と思う)ので、今はPro MicroでもISCP書き込みにしています。書き込み装置はLeonrdoです。

スケッチは以下の3つです。

MiniTenkey.ino


Keyboard.h

Keyboard.cpp

Keyboard.hとKeyboard.cppは元々のKeyboardライブラリを日本語キーボード対応にするのと、必要ない処理を省いたものです。
スケッチのキー入力の部分は赤外線リモコンのときとほぼ同じです。スキャンしたキーをキーマップでUSBキーコードに変換してKeyboardライブラリに渡しています。どのボタンにどのキーコードを割り当てるかは、スケッチのkeyMap[5][5]配列に収納したキーマップで定義してあります。

せっかくなので、片手で扱えるゲームパッドにもしてみました。使用したライブラリは以前より利用しているこちらのJoystickライブラリです。

MiniJoypad.ino

こちらはスケッチを簡素化するため23個のボタンだけのゲームパッドにしました。ただしよく利用するRaspberrypiのRetroPieではハットスイッチやXY軸が無いパッドをゲームパッドと見てくれないので、ダミーでXY2軸があるパッドとして定義しています。もちろん電卓のボタンをXY軸にみせるスケッチも出来るのですが、余分な処理が付加されシンプルなスケッチにならず、ほんの僅かでもレスポンスが悪くなるのがちょっと気持ち悪いので作りませんでした。したがってXY軸は見せかけだけで動きません。

この電卓のマトリックスでは、キーが配置されていない部分が3箇所あります。上記のテンキーのときはキースキャンの処理を簡単にするために配線の無いキーの部分もスキャンしてしまっていますが、ゲームパッドでは、きちんとキーのつながっている部分のみスキャンしています。

電卓のキーなのでボタンを押した時のキー入力のレスポンスにはあまり期待をしていなかったのですが、以外に素早く反応してくれて結構使い勝手のいいものになってくれました。床に寝転んでのPC操作だけでなく、床に立てかけて置いたパッドにつなげて寝転びながらの操作も出来るので、すっかりものぐさになってしまいました。

訂正

前回作成した赤外線リモコンの電卓機能で小数点以下の数字入力の対応を忘れていましたので、修正したスケッチを再アップしました。ただ今回使用しているSSD1306Asciiライブラリで小数点以下2桁以下の数字まで表示するとなるとsprintf()などを使うことになり、余計な手間とフラッシュメモリ使用量の増加につながりそうです。そこで手抜きとメモリ節約のため、SSD1306Asciiでなにも加工せずに表示される小数点2桁までの入力に限定しました。

ATmega328IRremocon.ino



最新の画像もっと見る

コメントを投稿