phillowcompiler が 2021年02月26日23時02分59秒 に編集
コメント無し
記事種類の変更
製作品
本文の変更
**ぼくのなつやすみのこうさく。** …的な何か。を、壊れたマウスから「ホイール」部分を取り出して簡単なゲーム機を作りました。。。いかにも、なつやすみ中遊び呆けていて、最終日になって慌ててやっつけで作ったような感じです(笑) 使用マイコンは **Seeeduino XIAO**。Cortex-M0+ の省電力マイコンなので乾電池でも余裕で動くことでしょう。 # 事の発端 知人のマウスが動かなくなってしまい、「捨てる」と言うので、サルベージした。 USB + 光学マウスで、ホイールも付いていたものの、かなり年季が入っていたものである。 *(注記)わざわざこんな書き方をしても、若い方には通じないかもしれません。かつてマウスというものは「ボール」が入っていて(今で言うトラックボールが下側に入っている感じ)、「PS/2インターフェイス」で動くものだったからです。左右ボタンの間のスクロールホイールというものもありませんでした。* そして分解。  ヒューマンインターフェイスというものは、得てして原始的な作りだったりするのだ。 # マウスホイールのしくみ よく知られている話ですが、マウスホイールは電子工作erにとっては、もっとも身近な「**ロータリーエンコーダ**」ということになります。 だからマウスが壊れて使い物にならなくなったら、捨てる前に、マウスホイールだけでも部品取りしておきましょう(笑) ロータリーエンコーダは基本的に**3本の信号線**が出てるものですが、どうやって回転方向を検知しているのか。ということについてはググる先生に聞いて下さい。  さらに、このマウスホイールを押し込むとスイッチが押下される仕組みにもなっているので、スイッチも部品取りしておきます。 # レトロゲーム機を作ろう! このマウスホイールを使って、片手で操作できる&乾電池で動くゲーム機を作ってみることにしました。 ゲームはキャラクターを左右に動かすだけ、あとはせいぜいボタン押下でショットを放つ程度…なので、インベーダーゲームのような単純なものに限られるかもしれませんが(^_^; そこで、マウスホイールの他に以下のものを用意しておく。 
- **マイコン:Seeduino XIAO(Cortex-M0+)**
- **マイコン: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](https://github.com/cbm80amiga/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シートはアクリルカッターのようなものでいくらか溝を掘ってから、ゆっくり曲げていくと綺麗に折れます。「ゆっくり」じゃなくて、焦って **グッ** と曲げると折れてしまいます(´;ω;`)  # そんなわけで完成!   動画は [こちら](https://youtu.be/RZ9XoP89K-Y)。 乾電池でも動くおもちゃってなんかいいですよね。 ## 今後の課題 Seeeduino XIAO は DAC も付いているようなので、圧電ブザーを付けて音が鳴るようにしたい…(えっ、付いていなかったの!?) [了]