- ATtiny85で動かすミニゲーム機TinyConsoleの製作その① [ケース・基板設計]
- ATtiny85で動かすミニゲーム機TinyConsoleの製作その② [基板実装・ゲームデータの書き込み]
- ATtiny85で動かすミニゲーム機TinyConsoleの製作その③ [修正ケースが来ました]
電子工作で自作基板(PCB)の製作にも少し慣れてきたこともあり、JLCPCB(JLC3DP)で製造する3Dプリントパーツの精度の良さと合わせると自宅の3Dプリンタとの組み合わせでは製作が困難となるものも作れそうなのでチャレンジしてみることに・・・。
具体的にはPCBとケースとの組み合わせで何か製作する場合、サイズが小さなものになってくるとPCBの設計もそうなのですがケース側のモデリングも難しくなってきます。
適切な壁厚やビス穴径などを確保するのが困難になる場合が多くなり、自宅の3Dプリンタでの造形では上手く機能するものを作るのが難しく、またサポート面のことも考えると綺麗に造形できる形状で設計するのも結構難しくなってきます。
このような3Dプリンタ側の問題は、これまでJLC3DPを何度か利用してみて精度的な問題や仕上がりなどはクリア出来ることが分かったので、PCBとケースとの組み合わせでこれまで作りたかったけど実現するのが難しかったものを製作してみることにしました。
いくつか作ってみたかったものはあるのですが、今回は100均で売ってそうなミニゲーム機を自作してみることにしました。
この投稿をInstagramで見る
目次
【Tiny Joypad】ATtiny85で動かすミニゲーム機TinyConsoleの製作
100均で売ってそうな片手に収まるサイズ感のミニゲーム機を自作するとなると基板(PCB)の設計もそうなのですが、それと組み合わせるケースのモデリングも難しくなってくると思います。
PCBを設計しそれに合うケースを後から設計するという流れでは想定しているサイズ感のものを作るのが困難となる場合が多くなることから、ハードウェア構成で使用する主要パーツを配置したPCBモデルと組み合わせるケースを含めた全体のCADモデルを3D CAD上で設計してからPCBの設計へと移りました。
そして片手サイズに収まる基板で100均で売られているようなテトリスやアルカノイドといったミニゲームをプレイ出来るもの・・・と言えば、以前製作したことがある『Tiny Joypad』というプロジェクトが使えそうです。
Tiny Joypadはオープンソースで公開されているプロジェクトで、コアにATtiny85を使って制御し0.96インチのディスプレイ(単色)に表示させゲームをプレイするミニゲームコンソールです。
Tiny Joypad用に作られたミニゲームや「Arduboy」といった別のプロジェクトから移植されたゲームなど多数公開されています。
このプロジェクトを利用しカスタムさせたものなら今回想定している基板サイズに収めることが出来そうで、ケースも作成すれば自作ミニゲーム機として製作することが出来そうです。
全体のCADモデルの作成
100均で販売されているようなミニゲーム機サイズで製作したいので、全体サイズは60mm角以内に収めたいところです。
このサイズでも十分小さいのですが、3Dプリンタで何度か試作し片手サイズに収まり、さらにミニゲーム機として使いやすいサイズ感となるとケースを含めた全体サイズを50mmくらいまでに収めることが出来れば、非常にコンパクトで見た目も可愛いミニゲーム機として製作出来そうですが・・・
このサイズのケースを作ろうと考えると、基板や実装されているパーツの干渉などを考慮し形状を作り込むのが非常に大変となってきます。
自宅の3Dプリンタでは壁厚による強度の問題から適切の厚みを確保出来なかったり、またサポート面の荒れ等により狙った寸法を再現するのも難しくなり、それがさらに干渉等にも繋がりやすくなります。
3Dプリンタでの造形時にケース外部にサポートを入れると内部の寸法や形状などそのあたりは上手く再現することは可能ですが、実際に見えるケース表面にサポートが入ってしまうため実物の見た目はそれほど綺麗なものを作ることが出来なくなってしまいます。
自宅の3Dプリンタ(FDM機)で製作する場合そのような問題があるのですが、今回PCB及びケースはJLCPCBの3Dプリントサービスとなる『JLC3DP』に発注することを前提で設計していくことにしました。
JLC3DPは安価にも関わらずサンディングやオイルスプレーといった後処理もやってくれるので、綺麗な仕上がりで製作することが出来ます。
レジンを使った強度もこれまで試した感じではこのサイズの造形物でも問題になることはないと思います。
JLC3DPでこれまで製作したものはこちらでまとめています。
興味ある方は、あわせて見て頂ければと思います!
そしてPCBを設計する前にハードウェアの構成からケースに干渉するような端子やスイッチ、サイズの大きなパーツを3D CAD上で配置しJLC3DPで製造出来る規定ライン(壁厚など)になるようにケースをモデリングしていきました。
次で紹介するハードウェア構成ではケースを含めた全体サイズを約40mm×50mmまで小さくすることが出来そうで、このサイズなら持った時に可愛くミニゲーム機としては非常にいいサイズ感のものが作れそうです。
当然基板サイズはこれよりも小さなサイズとなるため極力表面実装タイプのパーツ構成で作りたいところですが、電源スイッチはケースの壁厚があるのでノブが長いスルーホールパーツを使う必要があり、またプログラム書き込み用端子(ICSP)も同様となってきました。
スルーホールパーツを使うと基板の反対面にホールが開くため実装面積が限られたこのような小さな基板設計ではパーツの配置がかなり大変でした。
またはんだ付けした際にパッド部分の出っ張りがケースと干渉もしやすくなります。
最終的にこのような形状のケースとなりました。(PCB設計後にさらに修正しています)
JLC3DPの[8001 Resin]を使い透明ケースとして発注しました。
ミニゲーム機としては操作しやすく小さくまとまっていると思いますが、先述の通り形状的に自宅の3Dプリンタでは綺麗に造形するのが難しい形状となります。
同時に設計していた基板外形をKiCadに持っていき、次に基板設計に移ります。
ハードウェア構成
Tiny JoypadはAVR好きならご存知の方も多いと思われるオープンソースプロジェクトです。
コアにATtiny85を使ったミニゲームコンソールで、Tiny Joypad用に多くのミニゲームが公開されています。
Arduboyから移植されたゲームも結構ありますね!
プログラムが得意な方ならTiny Joypad上で動くゲームを自作するといったことも出来ると思います。
本家Tiny Joypadのハードウェア構成は比較的簡単なので、ブレッドボードで組んで遊ぶことも出来ます。
興味ある方はこちらの記事で詳しく紹介しているのであわせて見て頂ければと思います。
Tiny Joypadの基本となるハードウェアはこのような構成になっています。
I2C制御の0.96インチOLEDディスプレイ(SSD1306)とスピーカー、5つの操作スイッチ(上・下・左・右・アクション)をコアとなるATtiny85で制御するというシンプルなハードウェア構成です。
ATtiny85は8ピンのAVRマイコンとなり使用出来るI/O端子(入出力端子)は6本しかありません。
ディスプレイのI2C接続で2本(SCL/SDA)、またスピーカーの駆動で1本使用するので実質残り3本しかI/O端子の余裕がありませんが、抵抗分圧によるADC(アナログ・デジタルコンバータ)の値を取得して上下左右の4つのスイッチ操作を2本のGPIO端子で検出するという面白い(工夫された)ハードウェア構成となっています。
ATtiny85の動作電圧は2.7V~5.5Vと広くボタン電池(3V)からの駆動も出来ることから、以前このような自作Tiny Joypad基板を製作したこともあります。
今回製作しようと考えているものはこれのミニサイズ版的なものなのですが、少しハードウェアに手を加えようと考えています。
ミニサイズのゲーム機として仕上げることを目標としているので、基板をケース内に組み入れると電池交換が面倒になってきます。
CR2032といったサイズのボタン電池ではTiny Joypadを数時間駆動させることが出来るのですが、なにげにボタン電池ってお高いので充電機能もあると便利そうです。
リポバッテリーを使うことも考えたのですが、想定しているサイズ内に収めることが難しくなってくるので充電出来る二次電池を使うことにしました。
電圧・容量的なことからCR2032と同サイズの二次電池LIR2032を使いました。
電池サイズ的に基板面積を大きく占有してしまいますが、なんとか想定している基板サイズ内に収めることができました。
LIR2032はCR2032ほど電池容量は大きくありませんが、それでも1時間以上の駆動は可能となりUSB端子から充電出来るようにしておけばケースをバラして電池交換する手間も省け便利なので、この構成で回路を組むことにしました。
全体の回路構成はこのようになりました。
USB端子からの充電機能を使う場合、LIR2032電池を使う必要があります!
基板設計
Fusion360でケースとともに設計していた基板外形をKiCad側に持っていき次に基板の設計です。
限られた実装面積に配置するのは大変でしたが、なんとか収めることが出来ました!
CAD上では結構余裕があるように見えますが、スルーホールパーツとの干渉部分を考え、またパーツを実装する際に実装順序を間違えると実装出来なくなるといった立体配置になるべくならないように考えるとこれがベストな配置かな?と思います。(はんだゴテを入れるスペースが小さく実装しにくい部分も出てしまいましたが!)
最終的なCADモデルの確認
スルーホールパーツを使った部分はパッドにはんだ付けしたリード線が反対面に露出するので、この部分は再度3D CAD(Fusion360を使っています)で確認し干渉が発生しないようにケースを修正していきました。
このような部分ですね!
これで想定しているケース内に実装したパーツが干渉することなく基板を収めることが出来ました。
JLCPCB / JLC3DPに基板とケースを発注
基板とケースの設計が完了したのでJLCPCBに発注しました。
PCBの発注
今回製作した基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
興味がある方は作ってみて下さい。
また何かの参考になればと思います。
Tiny Console(Gerber)
JLCPCBで発注する際の選択項目も見ておきます。
特に特記すべき点はありませんが、レジスト色(PCBカラー)はお好みで選択して下さい。
また、以前は有料だった製造番号を削除するオプション(PCB上のマーク)は現在無料で利用出来るようになっているので、[マーク削除]を選択するのがいいと思います。
PCBのみの発注だと基板料金が2ドル、配送方法にOCS NEPを選択し送料が約1ドルのトータル3ドルほどで製造してもらうことが出来ます。
驚きの安さですね!
JLCPCBでの基板の発注方法はこちらの記事で詳しくまとめています。
あわせて見て頂ければと思います。
0805サイズのパーツをベースで使っているので手はんだでの実装も十分可能ですが、充電チップで使ったMCP73831は結構小さなチップなので慣れていないと難しいと思います。(写真上のU2チップ)
今回ステンシルも一緒に発注しました。
リフローでの実装環境がある場合はステンシルを使ってはんだペーストを塗布して実装する方が楽に出来ると思います。
ステンシルを発注される場合は基板サイズが35mm×45mmと小さいので、[サイズのカスタマイズ]で100mm×100mmくらいに指定しておくと作業がしやすいと思います。(サイズを指定しないと結構大きなサイズで届きます)
JLCPCBのステンシル発注方法はこちらの記事も参考にして下さい。
ケースの発注
ミニサイズのゲーム基板としてPCB単体で使うのもありですが、JLC3DPでは格安で3Dプリントパーツを作ることが出来ます。
JLCPCBのグループ会社なので、上記PCBと同梱で発注すれば送料が1回分で済むのもお得です!
今回JLC3DPの[8001 Resin]を使い透明ケースを作りました。
サンディングやオイルスプレーといった後処理を標準で行ってくれるため、積層跡やサポート跡が処理されて綺麗に仕上がってきます。
トップケース・ボトムケース合わせて約6ドルほどで製作する事が出来ました。
非常にお安いですね!
JLC3DPでの3Dプリントパーツの発注方法はこちらの記事で詳しくまとめています。
あわせて見て頂ければと思います。
CAD上では干渉部分を全て処理していたのですが、表面実装パーツで使っているスイッチのパッド部分のはんだがケースと干渉していまい、綺麗に閉じることが出来ませんでした!
実装後このようなパッド部分にはんだの膨らみができてそれがケースに干渉してしまったということです。
これは実装前のCAD上では確認出来ない部分ではあるのですが、少し詰めが甘かったようです。
自宅の3Dプリンタで作った修正済みのケースでは問題なかったので大丈夫だとは思いますが、ケースはJLC3DPに再度発注して問題がないようであればケースデータの方も後日追記しダウンロード出来るようにしておきます。
ケース修正して完成!
100均で買えそうなミニゲーム機を1000円くらいかけてガチで作る楽しみ😊
得られた知識はお値段以上。今の自分のCADスキルでは実際に機能するものはこのサイズが限界かな!
JLC3DPでもう一度綺麗なケース作って完成品としよう📝 https://t.co/BRrAFHMjRV pic.twitter.com/1krUgSy6v1
— ガジェット大好き!! (@smartphone_jp1) October 2, 2024
PCBで使用したパーツ一覧
今回PCBの製作で使用したパーツの一覧です。
サイズ等の確認にリンク先ページを参考にして下さい。
パーツ | 定数 | 入手先 |
コンデンサ (0805) | C1/C3 1μF C2 100nF C4 10μF | AliExpress |
抵抗 (0805) | R1/R2 5.1kΩ R3 1kΩ R4/R5/R6 22kΩ R7 10kΩ R8/R10 33kΩ R9/R11 91kΩ | AliExpress |
LED (0805) | LED1 | AliExpress |
ポリヒューズ (0805) | F1 500mA | AliExpress |
ディスプレイ | OLED1 SSD1306 (I2C 0.96インチ128×64) | AliExpress / Amazon / 秋月電子 |
スピーカー | SP1 SMD(7525) | AliExpress |
マイコンチップ | U1 ATtiny85-20SU(SMD) | AliExpress / 秋月電子 |
充電チップ | U2 MCP73831 | AliExpress / 秋月電子 |
USB端子 | J1 Type-Cコネクタ(16P) | AliExpress / 秋月電子 |
ICSP端子 | J2 ピンヘッダー(3×2) | ーーー |
バッテリーケース (CR2032/LIR2032用) | BT1 | AliExpress / 秋月電子 |
スイッチ | SW1 3P_SS_12D01G3 | 秋月電子 |
SW2/SW3/SW4/SW5/SW6 2P-L6.0-W6.0(SMD) | AliExpress |
最後に!
少し長くなりましたので、次の記事でパーツの実装やプログラムの書き込みなど本記事の続きをご紹介したいと思います。
実は最近Arduinoを始めた甥っ子くん(小学生)へのプレゼントとして製作していたというのもあるのですが、ケースを修正し喜んでもらえるものになると良いのだけど・・・。
それでは次回の記事に続きます・・・
- ATtiny85で動かすミニゲーム機TinyConsoleの製作その① [ケース・基板設計]
- ATtiny85で動かすミニゲーム機TinyConsoleの製作その② [基板実装・ゲームデータの書き込み]
- ATtiny85で動かすミニゲーム機TinyConsoleの製作その③ [修正ケースが来ました]
[…] ATtiny85で動かすミニゲーム機TinyConsoleの製作その① [ケース・基板設計] […]
[…] ATtiny85で動かすミニゲーム機TinyConsoleの製作その① [ケース・基板設計] […]