レトロでハードな物語

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

赤外線リモコンを作ってみる その2

2019年11月03日 | 電子工作

前回、赤外線リモコンのハードが完成したので次はスケッチの作成です。基本は赤外線リモコンとして使うのですが、テンキーの付いたATmega328Pをそれだけに使うのはなんだかもったいないので、ちょっと便利な機能も追加しようと思います。

すぐに思いついたのが電卓です。ちょっとした四則演算をする時に、わざわざ関数電卓などを取り出さなくてすみます。それとよく使うのが10進16進の変換です。これも関数電卓を使うことが多いのですが、単純な変換だけならすぐに使える物があれば便利です。
その他にも幾つか思いつくものはあったのですが、前からちょっと作ってみたいと思っていたものがあったので今回それを作成してみることにしました。

それは復刻版も販売されたCASIOのゲーム電卓のデジタルインベーダーです。復刻版があることを知った時に久しぶりに遊んでみたくなりました。たしか昔に買った記憶はあるのですが、どこにいってしまったのか全く分かりません。わざわざ再購入するほどのことでもないので、自分で作ってしまおうと思ったわけです。
詳しいゲーム内容はCASIOのホームページにありますし、昔のパソコンやポケコンにも同じようなゲームがあったのでこれらを参考に作ってみることにしました。

さっそくスケッチ作成に移ります。赤外線リモコンは前回も書いたように、IRremoteライブラリのおかげでとても簡単に実現できました。電卓などは簡易的なものなのですぐに作成できましたが、デジタルインベーダーは思ったより手間がかかりました。でもその甲斐あってなんとか遊べるものは出来たと思います。

作成したスケッチはこちらになります。

ATmega328IRremocon.ino

使用しているライブラリは上記にもあるように赤外線はIRremote、I2C接続のOLEDにはSSD1306Asciiライブラリを使いました。

このスケッチで一番のキモはキーボードマトリックス回路を扱う部分ですね。マトリックスの処理はgetkey()です。前回のブログに載せたマトリックスの表で縦のラインをプルアップして入力、横のラインを出力にしました。(たまたまそうしただけで縦横逆でも構いません)この状態でキースキャンしたい横ラインのピン1つをLOWにして縦ラインのピンを順番に調べていくと、押されているキーがあればそのキーにつながっているピンがLOWになっているはずです。
ここで重要なのが、スキャンしていない横ラインのピン全てをINPUT状態にすることです。こうすることでハイインピーダンス状態になり電流が殆ど流れなくなります。
もしOUTPUTのままだと(マトリックス回路にもよりますが)電流が回り込んでしまうことがあり、正しくスキャンできなくなります。以前MACのテンキーをPCにつないだ時にこの問題でかなり悩みました。

getkey()では、スキャンしたキーの状態を配列keyStat[5][4]に保存しておいて、変化のあったときにキー番号を返すようになっています。入力がプルアップなので、値が0(LOW)の時にキーが押され、1(HIGH)のときにリリースです。ただし今回のスケッチではキーのリリースは読み取りませんでした。
キーの番号は適当です。マトリックスの表の左上から右下へ0から順番に番号を割り振っただけです。

キースキャンが出来れば、元々の目的である赤外線リモコンを作るのは簡単です。今回リモコンで操作したいテレビ兼PCモニターはSONY製で、IRremoteのサンプルスケッチIRecvDumpかIRecvDumpV2で赤外線モジュールを使いリモコンの信号を読み取らせると、ちゃんとSONYの赤外線コードを認識して出力してくれます。これをメモしておき、スケッチでキーを押した時にIRremoteのirsend.sendSony()に値を渡してやれば赤外線LEDから目的の信号が出力されます。

テンキーから引き出すマトリックス回路の配線は製品や線の引き出し方よって異なるので、今回のスケッチ内のキーの扱いについては特に説明しません。また、赤外線リモコン以外に追加した電卓や16進変換は最低限の機能を実現しただけの簡単なものなので、これも特に説明はいらないでしょう。必要ならスケッチで確認してみて下さい。
デジタルインベーダーについては実機のゲームを完全に再現したものではなく、それらしく動くという程度のものです。まあ、息抜き程度に利用するなら結構楽しめるものにはなっていると思います。

ただ、せっかく作成したスケッチなので見た目だけでも簡単に紹介してみます。

まず、赤外線リモコンの電源を入れると最初にメニューが表示されるようになっています。



ここでは今回作成した4つの機能、赤外線リモコン・電卓・16進変換・デジタルインベーダーのどれかをテンキー選べるようになっています。

メニューからリモコンを選ぶとすぐに赤外線リモコンとして使えるようになり、テンキーのキーを押すと自分の好きなように登録したリモコン信号が送信されます。OLEDの画面には送信した信号の内容が表示されるようにしました。



机の上での使用を想定していたので赤外線の到達距離は数十センチでよかったのですが、試してみると2,3メートルの距離でも届きました。もしかするとこのリモコンではなくSONYのテレビが優秀なだけなのかもしれませんけど。
テンキーはキーの数が多いので普段使用する以外の赤外線信号も登録することが出来ました。リモコンのボタンと違ってテンキーのボタンは押しやすいので、とっても快適に操作できます。もうテレビ付属のリモコンは使わないかもしれません。

電卓は四則演算だけの簡単なものです。



複雑な計算には向いていませんが、普段の利用はこれで十分です。

16進変換は10・16・2を交互に変換できるもので、それぞれの進数表示の時に10進数なら0〜9の値を16進数なら0〜Fを2進数なら0と1の値だけを入力することが出来るようになっています。

  

入力できる数値は16ビット符号なしのサイズで、16進数ならFFFF、10進数なら65535までです。

デジタルインベーダーは本家のものと同じルールで遊びます。詳しくはCASIOのゲーム電卓紹介サイトで確認して下さい。



ちょっと手抜きなスケッチになっているので、もしかするとまだ確認できていないバグがあるかもしれません。

もともと今回のリモコンデバイスは手のひらサイズの小さなものを想定していて、ベースにするものをハードオフで購入していました。



片手で扱えそうなサイズの小型の電卓です。100円でした。捨てておくのももったいないので、また後で何かに利用しましょう。

最終的に作成したリモコンは少し大きめのサイズになってしまいましたが、利用する頻度も高いのですぐに手の届くところに置いてあります。いっそ赤外線受信モジュールをPCにつないで送受信することで赤外線接続のテンキーにしてしまえば、机の上に据え置きに出来ていいかもしれませんね。



最新の画像もっと見る

コメントを投稿