koheiのおもちゃ修理記録

宇部おもちゃ病院 毎月第2土曜日 13:00~16:00
宇部新天町の西の端、市民活動センターで開院してます。

11/29 8×8×8 LED Cube改造

2020-11-29 | PIC・電子工作
数年前に作った「8×8×8 LED-Cube」ですが、改善したいところ等もあったのと機能追加で、バージョンアップしましたw。
前の記事は3年前の「11/5 8×8×8 LED-Cube作りました」です。

とりあえず、見た目はこうなりました。

このLED-Cube、イベントの時のイルミネーションとして時々持って行ってたのですが、言ってみればこれは「ディスプレイ(表示機)」。せっかく苦労して作った表示機があるので、ちょっとしたゲームもできるようにしたら、もちょっと子どもたちの目を引くかな~と思って、スーファミのコントローラを繋いで操作できるようにしました。

ゲームとして、
・ランダムな位置にターゲットが出る。
・自分のドットを操作して、ターゲットに当てる。
・ターゲットに当たると、自分の長さが1ドット増えて、だんだんヘビの様に長くなっていく。
・長さが10まで行くと終了。
というゲームにしてみました。
とりあえず、「動画はこちら」から。(音も出るようにしました。ちょっと録画音量が小さいので、聞きたい人はボリューム上げて下さいw。)

ハードの前回から今回への改造点は、
①制御マイコンを、ルネサスエレクトロニクスの「GR-SAKURA」から、同じくルネサスの「RX621ボード」に変更。
②ケース変更
③基板配線整理(裏面ビニール線を全部表側に移した)
④スーファミコントローラ追加
⑤スピーカ追加(1-Trアンプ・ボリュームも追加)

それぞれ理由・背景は、
①ピンヘッダに安物ピンコードで刺してたボード→LED基板間の配線の信頼性が非常に低く、時々抜き差ししてやらないと接触不良を起こす。ハンダ付けしてしまえばいいけど、せっかくかわいいボードのSAKURAちゃんは、汎用として他の用途にも使いたい。
どのマイコンボード使おうか悩んだけど、秋月にクロックが同じ(96MHz)で同じルネサスのRX621ボードがそこそこの値段(2,700円)であったので、メーカ同じで移植もしやすいかも、と購入してみた。(このRX621ボードの詳細ついては「6/5 マイコンボードいっぱい買った②~RX621マイコンボード動作確認」を見てね。)
②ケースが微妙に小さくて、配線等に無理があった。(また、見えそで見えない微妙な半透明だったのもいまいちw。)
③底のないケースを使ってるので、裏面にビニール線で配線してると、被覆が傷んでショートの可能性があるかも。
④SWでコントローラを自作するより、市販ゲーム機のコントローラを使った方が早いかな?古いゲーム機の方が単純と思う。家にスーファミのコントローラが1個あったので、これにしてみた。
⑤ゲームなら、ちょっと音がした方が気分が出るかな?(周りの状況で必要な音量が変わるので、音量は調整できるようにした。)

さて、SAKURA→RX621への移植は、結論はあまり難しい作業ではなかったのですが、辿り着くまでかなりの時間を浪費しました。
移植前に久しぶりに動作確認すると、なんか表示がおかしい…。LEDの不良があると意図しない所が点灯してしまうので、LED不良を疑ってかなり長時間調べたけど、結局GNDラインにハンダ付け不良があって、そこそこ動くのに微妙にいまいちになってました。
それから移植後、sqrtを使ってる所の表示が変になって、いつも親切なルネサスのフォーラムに相談して皆さんにご迷惑をお掛けしましたが、randの使い方が間違ってて表示用配列の定義の範囲外に書き込みをしたせいでスタック?(sqrt計算に使うテーブルでもあるのかな?)が書き換えられて計算がおかしくなってたのでした。(これもだいぶ時間を浪費。BASICだとエラー出してくれるんだろうけどね~)
移植自体は、SAKURAがArduino準拠に対して、RX621はCで作るので、若干Arduino関数の書き換えがあったぐらいです。(degitalWrite等はほとんど使ってなかったけど、bitSetやbitReadの書き換えが必要だった。)

②の配線整理は、表はこうなりました。(1-Trアンプ部分の追加はまだの状態)

裏はこんな。

「before」は、前の2017/11/5の記事を見て下さい。
(ほぼ「初めての大きなデジタル作品」なので、汚いとかVccラインとGNDラインの引き回しが悪いとかは、目をつぶって下さいw。)
だいぶ前に作ったので、今作るなら、層選択のダーリントン接続TrはFETにしたいし、いっぱいあるLED電流制限抵抗はSMD抵抗にしてもっとコンパクトに作りたいですね…。
基板のピンヘッダからLED-Cubeを繋げるのに、8×9=72本のビニール線が繋がるので、ケーシング内は「ビニール線の塊w」みたいになってます。せっかくのスケルトンケースなのに、回路は全然見えませんw。LEDを基板に直付けすればLEDの駆動は基板上の配線だけで済むのですが、LEDと基板を別にしたので、間に配線が必要となってしまいました。
これを機に基板も作り直したい気もしますが、どうかなぁ、やるかなぁ…w。

③のケース変更は、前のSAKURAは、ボードを固定せずに外に宙ぶらりんにしてたのですが、今回はマジメに固定しました。

プログラム書き換えにDIPスイッチの変更が必要なので、ケース上面に穴をあけて、このままの状態でUSBケーブル刺して書き換えができます。

④のスーファミコントローラは、RX621への一旦の移植が終わってから、あいたSAKURAでテストしました。

コントローラのコネクタとの接続は、ジャックなんて売ってないし、ジャンクから取ったりしても金掛るので、部品のリード線の先端を折り曲げてコネクタに突っ込んでます。それを直角に曲げて、ユニバーサル基板で受けてます。

スーファミコントローラの仕様はネット上に情報多いので他の人に任せますが、不正確な情報も多いようです。
イネーブルにせずともクロックを送らずとも、最初のデータ(Bボタン)は、常にDATA端子に出てます。イネーブルにしてクロックを送ると、2個目(Yボタン)に進む、もう1個のクロックで3個目(Selectボタン)に進む…という順で進んでいきます。(ボタン操作のデータは12個までありますが、途中でイネーブルを切れば、途中までの読み込みにもできます。)
SAKURAのテストで、まあ一発ではありませんが、そこそこ簡単に操作読み込みできました。

ついでにこのSAKURAで、RXマイコンでのPWMによる音階出力までやっておきました。SAKURAのRX63N→RX621への移植は、レジスタがほぼ同じで、まあまあ簡単でした。
平日にぼちぼちプログラム考えて、この土日で本体プログラムに組み込んで動作確認。再々動作確認・デバッグしては書き込んで、なんとか今週、一応完成しました。
小学校(~中学校)の頃に、N-BASICでプログラム作った頃のことを思い出しながら作りましたw。その頃も似たような「ヘビがだんだん長くなる」プログラムを作った記憶がありますが、10ドットぐらいになると、相当遅くなってしまう。まあクロックというよりも、BASICインタプリタとCコンパイラの差でしょうね~。長くなっても目で見て実行に何の差も出ませんねw。

息子(大学1年)と奥さんにやってみてもらったところ、息子は「そこそこおもしろい」、奥さんは「操作が難しくて言う事聞かない」との感想でしたw。
キューブの表面・中をドットが動きながら、左右に曲がる・キューブの中に入っていく方向に曲がる、といった動きをどう操作・表現するか、ロジックをよ~く考えてルールを決めましたが、操作をちゃんと理屈で理解するのはけっこう大変ですw。
(ちっちゃい人がキューブ表面を歩いてる時に、足と顔がどっち向いてるか、を基準にして、左右に曲がる方向が変わるんですね。)
(まあ、よ~~~く考えたロジックなのですが、誰も参考にしないと思うので、ストレージにもプログラムは載せませんw。全体で1,100行、ゲームの部分だけでも400行ぐらいになるので、直接貼り付けはできないし。もし見たい人が居たら、個人的に連絡してね。)

という事で、冒頭の動画の様に、とりあえず出来上がりました。あと、コントローラをもう1個付けて2人対戦プレイが出来るようにして、1P/2Pの選択・どっちが勝ったのかの終了表示の追加、あたりを、気が向いたらするかもな~~w。
コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 11/29 BD/DVDデッキ:S... | トップ | 12/6 デジタル顕微鏡 購... »

コメントを投稿