hiroshikuno が 2021年05月15日14時05分17秒 に編集
初版
タイトルの変更
こどもも使える!ワイヤレスコントローラーを作る
タグの変更
obnizIoTコンテスト
電子工作初心者
ゲーム
メイン画像の変更
記事種類の変更
製作品
本文の変更
### こんなのができました @[youtube](https://www.youtube.com/watch?v=2aFLvxZi0Bg) ### ことのあらまし 当方娘(2才)が居るんですが、ひょんなことで「ゲーム作ってむすめに遊んでもらいテェ、、、」という気持ちが高まり、今まで齧っては放置していた事を寄せ集めてゲームを作ることにしました。 めちゃくちゃ簡単なゲームと、子供でもわかる超直感的なコントローラーが要るな、と思い夜な夜な構想したところ、obnizでコントローラーを作ってWebブラウザのゲームと連動させれば作れそうだ、となったので、作りました。 ### 仕組み 1. obnizが接続されるとランプが光る 2. 押しボタン押下でWebページ上でスペースキーが押下されるイベントを設置 3. スペースキーで操作できるゲーム内のキャラクターが動く ### 材料 - obniz board 1Y - アーケードボタン - 100円ショップの容器 - ジャンパワイヤ - ピンヘッダ・ハウジング - 電池ケース単4×3(および電池) - 絶縁テープ 道具部門 - ステップドリル - ハンダゴテ一式 ライブラリ - obniz.js - cocos2d-js-v3.13.js ### つくっていきましょう コントローラーを作っていきます。 まず用意するのは100円ショップにあるプラ容器。丁度良ければなんでもいいとは思いますが、子どもが叩くのに耐えられるくらいの頑丈さは欲しい所です。 それと大きい押しボタン。アーケードボタンとも言うそうですね。ゲームセンターとかにありそうなものです。 ![キャプションを入力できます](https://camo.elchika.com/ea6fd9d495aefb28de8b8819870bcf1ce4485267/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f65353863373162662d623439612d343465332d393934632d333334623439636130353934/) 合体させるため穴を開けます。 DIYをやっていると「丁度いい穴を開けたい」問題がたびたび発生すると思います。これ結構悩みましたが、色々調べる中で「ステップドリル」と言うものに出会い、これを使うことにしました。結局ボタンをつけるので、今回は穴自体がきれいじゃなくても、まぁよいか。ということで。 ![キャプションを入力できます](https://camo.elchika.com/caa0a600e4fd833cbc796f6ffbcac8e76dca931c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f63663732626132632d383830382d343762622d383565342d333732323139613262306164/) (余談ですけれども、某通販サイトで安い3本入りのステップドリルを買ったんですが、ドリルにはめる6角の精度が悪く、ハマらないものがあり返品して結局日本製の物を書い直しました、、、日本製の安心感たるや、、、高いですけれどね) 合体します。外見が完成 ![キャプションを入力できます](https://camo.elchika.com/c11468b25d2c7b42e633e5a82b3ceeab7ba35784/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f33336535653332372d633361352d343738312d616331372d303138343361646566353833/) ### ボタンにワイヤーをハンダ付け ボタンの端子にワイヤーをハンダ付けします。 根元を補強しつつ、干渉を防ぐために絶縁テープで覆っておきました。 あと、obnizに挿す方はテープでまとめておいて挿しやすくしておきます。順番に気をつけつつ。 ![キャプションを入力できます](https://camo.elchika.com/eb4ebcc283901d19aedcadfa699b048fc7be2a2d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f36363164343934662d316264362d343461382d383736612d313837313334313366663361/) ### 電池ケースにピンヘッダをハンダ付け ワイヤレスにしたい、、、というのが今回の野望の一つでして、なんとかプラ容器に収まりつつobnizが動く電源を用意することにしました。 マルチメーターで電圧を見つつ、かつ小さい電池ケースを探った所単4電池3本が丁度良さそうという結論に。 ![キャプションを入力できます](https://camo.elchika.com/00c1bb6a5934d165170274c94c558e0cadbf3ded/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f37663762666465372d353164372d346264642d393465642d386563653863643461346538/) で、こちらもobnizに挿せる様にピンヘッダをハンダ付けして、ハウジングを装着。 ![キャプションを入力できます](https://camo.elchika.com/d0d6a864e140f05d9bac5c84ada3bc10129734ba/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f35613134393434662d316165302d346666342d393965332d303861336237336436373737/) 動いています。 ![キャプションを入力できます](https://camo.elchika.com/4dac6fe5e0e795b74de702d77f8cb4af1b0a800b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f36396662386361332d356461382d343032312d393033612d373133393335333035373362/) ### プログラムを書く プログラムを書いていきます。 1. obnizが接続されて使用可能な状態になったらLEDが光る 2. ボタン押下でスペースキーが押下される の2点だけなので、短いです。 ``` var evt = new KeyboardEvent("keydown", { keyCode: 32 }) var target = document.getElementById('gameCanvas'); var obniz = new Obniz("0000-0000"); obniz.onconnect = async function() { var led = obniz.wired("LED", { anode: 2, cathode: 3 }).on(); var button = obniz.wired("Button", { signal: 0, gnd: 1 }); button.onchange = function(pressed) { obniz.display.clear(); obniz.display.print("pressed:" + pressed); if(pressed) { console.log('press') target.dispatchEvent(evt); } }; }; ``` ハマった所なんですが、「キーボードとどうやって連携したらいいの????」というところです。キーボードのイベント見るのは分かるけど、押下されたことにするにはどうしたらいいんだ、となり、色々調べた結果キーボードイベントを作りゲーム本体の要素にdispatchEventしたところ動きました。よい解決方法なのかどうかはちょっと自信ないんですけれども。 ### ゲームを作る ゲームを作っていきます。なにで作ろうかな〜〜〜と考えていた所、たまたま家にcocos2dというライブラリの本があったので、これを写経してゲームを作ったので、それをアレンジすることにしました。 (5〜6年前に流行ったライブラリっぽいです。2021年はまた色々ありますね。) 画面はこんな感じで、うさぎが走って風景画スクロール、右からいちごが出てきてうさぎと重なったらゲット。ジャンプもしながら何個取れるかな、というもの。絵も描きました。 ![キャプションを入力できます](https://camo.elchika.com/020bbe90af41efe5ba9d4173df96ac548f0c7d31/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65313564356133662d346332392d343934392d383465342d6333333236336231323239632f37623838326237632d333334652d343533652d383733622d346439323736386261363262/) (めちゃくちゃ簡単なゲームなので、本見ながらやればいけるでしょ〜〜〜と思っていた所、そう簡単にはいかない現実としばらく戦うことになりました。もう全然わからん。) 全然わからんなりに最適なやつじゃないな、、、という自覚もあるパワーコードも書きながら、なんとか遊べる様になりました。 ### 完成 全部がっちゃんこして完成です。まぁ出来てみれば簡単な物ですし、全部そう難しくはないなとは思いますが、プロセスでは壁を打ち破れば次の壁、という感じでなんどか心が折れそうになりました。出来上がったときは結構感動しました、、、。 @[youtube](https://www.youtube.com/watch?v=2aFLvxZi0Bg) ### 感想 今回は「こどもが使える・遊べるやつ」というのがテーマでしたが、プログラムを変えればもうどうにでもなるIoTボタンなので、いろんな展開ができそうだな、と思っています。 (絵を書き換えて男の子向けのゲームにしたりとか、ビンゴマシンをプログラムして大袈裟なビンゴボタンにするとか、、、) 子供には目の前の物体(ボタン)が何かと連動するっていうIoTのおもろさを体験できるモノにできればな〜など思っています。