編集履歴一覧に戻る
phillowcompilerのアイコン画像

phillowcompiler が 2021年02月26日22時37分48秒 に編集

コメント無し

本文の変更

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

-

![キャプションを入力できます](https://camo.elchika.com/2c34bcf96b3c30df667eab6efb907435068c774f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f32633639643334322d633839352d343561632d616265612d623466373038366132333362/)

…的な何か。を、壊れたマウスから「ホイール」部分を取り出して簡単なゲーム機を作りました。。。いかにも、なつやすみ中遊び呆けていて、最終日になって慌ててやっつけで作ったような感じです(笑) 使用マイコンは **Seeeduino XIAO**。Cortex-M0+ の省電力マイコンなので乾電池でも余裕で動くことでしょう。 # 事の発端 知人のマウスが動かなくなってしまい、「捨てる」と言うので、サルベージした。 USB + 光学マウスで、ホイールも付いていたものの、かなり年季が入っていたものである。 *(注記)わざわざこんな書き方をしても、若い方には通じないかもしれません。かつてマウスというものは「ボール」が入っていて(今で言うトラックボールが下側に入っている感じ)、「PS/2インターフェイス」で動くものだったからです。左右ボタンの間のスクロールホイールというものもありませんでした。* そして分解。 ![うん。古いですねー](https://camo.elchika.com/1357fab9f9cafc831be2b01dc9aa0f12f039c2c9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f33343334643536362d643461372d343739662d626233622d616164643833373066306337/) ヒューマンインターフェイスというものは、得てして原始的な作りだったりするのだ。 # マウスホイールのしくみ よく知られている話ですが、マウスホイールは電子工作erにとっては、もっとも身近な「**ロータリーエンコーダ**」ということになります。 だからマウスが壊れて使い物にならなくなったら、捨てる前に、マウスホイールだけでも部品取りしておきましょう(笑) ロータリーエンコーダは基本的に**3本の信号線**が出てるものですが、どうやって回転方向を検知しているのか。ということについてはググる先生に聞いて下さい。 ![キャプションを入力できます](https://camo.elchika.com/c11e2a245f1bed03a58d839371614e2553ef00e3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f66346363643133322d323038322d343834372d393865392d373934306135373363373737/) さらに、このマウスホイールを押し込むとスイッチが押下される仕組みにもなっているので、スイッチも部品取りしておきます。 # レトロゲーム機を作ろう! このマウスホイールを使って、片手で操作できる&乾電池で動くゲーム機を作ってみることにしました。 ゲームはキャラクターを左右に動かすだけ、あとはせいぜいボタン押下でショットを放つ程度…なので、インベーダーゲームのような単純なものに限られるかもしれませんが(^_^; そこで、マウスホイールの他に以下のものを用意しておく。 ![使用した部品](https://camo.elchika.com/8e0fc4e49c8672932c1e6cb2b776468ec7539d00/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f31316563313161342d646365632d346531652d626435632d346162326163393237663134/) - **マイコン:Seeduino XIAO(Cortex-M0+)** 従来の Arduino Uno などが積んでいるような ATMEGA328P マイコンと比較すると、圧倒的大容量のメモリを積んでいたりします。そして省電力でコンパクト、Arduinoでサクっと開発できる。しかも安い!(←ここ重要)。とても扱いやすいマイコンボードです。秋月あたりで580円くらいで売っている。 - **TFT-LCDモジュール** AliExpress でセールの時とかにいろんなサイズをいくつか買っておくと良い。大抵はSPI通信でサクっと制御できたりする。今回、筆者が使ったのは 1.44inch の **解像度 240x240** IPS 液晶でコントローラに **ST7789v2** を積んだモジュールだ。Ali だとアホのように安い値段で売っている。 あとは電池ボックスとか、ユニバーサルとか、ピンソケットやらケーブルなどの細々としたもの。 それらを適当に配線。手書き(!)の回路図で十分である(!?)。 ![キャプションを入力できます](https://camo.elchika.com/f7fa88f7d40dcba28a51f2669bd8b497b0c588a6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f62633932303563352d363164372d343937372d623434302d666434343466656665613637/) 筆者が使用した ST7789 LCDモジュールは CS 信号が無い。BLKにPWMパルスを送り込めば明るさを調整できるのだけど、その必要がなければ特にNCでも構わない。電源+四本の信号があれば良いのでとても扱いが楽である。 また乾電池から電源を取るので、おまじない的にショットキーバリアダイオードをかましておいた。 こうしてユニバーサル上で組みあげたのがコレ。 ![キャプションを入力できます](https://camo.elchika.com/6c5a1510787cddc144640ed5e8b4578336f0995b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f63643335343362312d333034372d343765622d616235622d383462643061323331643162/) # ファームウェアの作成 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://camo.elchika.com/000f8c45c4d840bb1406ec29b3eeca9fbc2d5dd5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f64373833313234352d376363342d343233622d396465652d646235616139613234623834/) # そんなわけで完成! ![キャプションを入力できます](https://camo.elchika.com/aac888a6743d7a5413c82a1749e12cebab2a10b2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f64383439316463382d616530352d343366362d613836362d376438666262326435616239/) ![キャプションを入力できます](https://camo.elchika.com/2a433d074bf33e6ddea06080d2246ce23dd96065/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313764656334332d306636352d343839302d613535332d6561313564643134363637312f39396536663739612d383238302d343931312d613933362d613235666137616130376264/) 動画は [こちら](https://youtu.be/RZ9XoP89K-Y)。 乾電池でも動くおもちゃってなんかいいですよね。 ## 今後の課題 Seeeduino XIAO は DAC も付いているようなので、圧電ブザーを付けて音が鳴るようにしたい…(えっ、付いていなかったの!?) [了]