phillowcompilerのアイコン画像
phillowcompiler 2021年02月26日作成 (2021年02月26日更新)
製作品 製作品 閲覧数 4527
phillowcompiler 2021年02月26日作成 (2021年02月26日更新) 製作品 製作品 閲覧数 4527

マウスホイールを使ってレトロゲーム機を作った話

マウスホイールを使ってレトロゲーム機を作った話

ぼくのなつやすみのこうさく。

…的な何か。を、壊れたマウスから「ホイール」部分を取り出して簡単なゲーム機を作りました。。。いかにも、なつやすみ中遊び呆けていて、最終日になって慌ててやっつけで作ったような感じです(笑)

使用マイコンは Seeeduino XIAO。Cortex-M0+ の省電力マイコンなので乾電池でも余裕で動くことでしょう。

事の発端

知人のマウスが動かなくなってしまい、「捨てる」と言うので、サルベージした。
USB + 光学マウスで、ホイールも付いていたものの、かなり年季が入っていたものである。

(注記)わざわざこんな書き方をしても、若い方には通じないかもしれません。かつてマウスというものは「ボール」が入っていて(今で言うトラックボールが下側に入っている感じ)、「PS/2インターフェイス」で動くものだったからです。左右ボタンの間のスクロールホイールというものもありませんでした。

そして分解。
うん。古いですねー

ヒューマンインターフェイスというものは、得てして原始的な作りだったりするのだ。

マウスホイールのしくみ

よく知られている話ですが、マウスホイールは電子工作erにとっては、もっとも身近な「ロータリーエンコーダ」ということになります。

だからマウスが壊れて使い物にならなくなったら、捨てる前に、マウスホイールだけでも部品取りしておきましょう(笑)

ロータリーエンコーダは基本的に3本の信号線が出てるものですが、どうやって回転方向を検知しているのか。ということについてはググる先生に聞いて下さい。

キャプションを入力できます

さらに、このマウスホイールを押し込むとスイッチが押下される仕組みにもなっているので、スイッチも部品取りしておきます。

レトロゲーム機を作ろう!

このマウスホイールを使って、片手で操作できる&乾電池で動くゲーム機を作ってみることにしました。

ゲームはキャラクターを左右に動かすだけ、あとはせいぜいボタン押下でショットを放つ程度…なので、インベーダーゲームのような単純なものに限られるかもしれませんが(^_^;

そこで、マウスホイールの他に以下のものを用意しておく。

使用した部品

  • マイコン:Seeeduino XIAO(Cortex-M0+)
    従来の Arduino Uno などが積んでいるような ATMEGA328P マイコンと比較すると、圧倒的大容量のメモリを積んでいたりします。そして省電力でコンパクト、Arduinoでサクっと開発できる。しかも安い!(←ここ重要)。とても扱いやすいマイコンボードです。秋月あたりで580円くらいで売っている。

  • TFT-LCDモジュール
    AliExpress でセールの時とかにいろんなサイズをいくつか買っておくと良い。大抵はSPI通信でサクっと制御できたりする。今回、筆者が使ったのは 1.44inch の 解像度 240x240 IPS 液晶でコントローラに ST7789v2 を積んだモジュールだ。Ali だとアホのように安い値段で売っている。

あとは電池ボックスとか、ユニバーサルとか、ピンソケットやらケーブルなどの細々としたもの。

それらを適当に配線。手書き(!)の回路図で十分である(!?)。

キャプションを入力できます

筆者が使用した ST7789 LCDモジュールは CS 信号が無い。BLKにPWMパルスを送り込めば明るさを調整できるのだけど、その必要がなければ特にNCでも構わない。電源+四本の信号があれば良いのでとても扱いが楽である。

また乾電池から電源を取るので、おまじない的にショットキーバリアダイオードをかましておいた。

こうしてユニバーサル上で組みあげたのがコレ。

キャプションを入力できます

ファームウェアの作成

Seeeduino XIAO はサクッと Arduino で開発できて、ファームも USB ケーブル一本あればアップロードできるので、たいへん便利ですね。環境セットアップなどはググる先生に聞くべし。

LCDの制御

ST7789 は SPI 通信で手軽に扱えます。 github に Arduino_ST7789_Fast という便利なライブラリがあるので、拝借して、ありがたく活用させていただきましょう。

COMPATIBILITY_MODE および CS_ALWAYS_LOW を定義しておくのと、TFT_DC および TFT_RST で使用するピンの番号をきちんと定義すれば、Seeeduino XIAO でも問題なく動きます。

ロータリーエンコーダの検知

基本的に、Common(GND) 以外の2本の信号線の変化を割り込みで検知してマウスホイールの回転方向を検知することになります。

Arduino では、setup() あたりでこんな感じで割り込みハンドラを定義しておけますね。

pinMode(RIN_A, INPUT_PULLUP);
pinMode(RIN_B, INPUT_PULLUP);

attachInterrupt(RIN_A, ENC_READ, CHANGE);
attachInterrupt(RIN_B, ENC_READ, CHANGE);

割り込みハンドラ内で、どうやって回転方向を検知するかは、「ロータリーエンコーダ Arduino」でググるとザクザクと出てくるので、そういったソースを参考に作りましょう!

ここまで出来たら!

あとは「左右にキャラクタを動かして、ショットを撃つ」的なゲームでも作りましょう~。

筐体を作ろう!

電子工作の一番の悩みって、結局筐体(ケース)なんですよね…。

ちょうどいいケースが無かったりするので、100均でタッパーとか買って、カッターで穴開けて使ったりするものです。

ただ、最近は3Dプリンターで作る方も増えましたね。

しかし、筆者は3Dプリンターというものを持っていない(あっても使えないだろう)ので、今回はセリアで売っている PPシートを使いました。こいつを適当に切り開いて、折って接着剤でくっつけたり、半田ごてでプラスチック溶接をやったりして箱型にしたものです。

PPシートはアクリルカッターのようなものでいくらか溝を掘ってから、ゆっくり曲げていくと綺麗に折れます。「ゆっくり」じゃなくて、焦って グッ と曲げると折れてしまいます(´;ω;`)

不器用さんなので、なんかいびつで、見てくれが悪い…

そんなわけで完成!

キャプションを入力できます

キャプションを入力できます

動画は こちら

乾電池でも動くおもちゃってなんかいいですよね。

今後の課題

Seeeduino XIAO は DAC も付いているようなので、圧電ブザーを付けて音が鳴るようにしたい…(えっ、付いていなかったの!?)

[了]

3
ログインしてコメントを投稿する