Maker Faire Tokyo に出展したIoTクソゲー「うちわdeファイト」の作り方
8月4日・5日 Maker Faire Tokyo 2018 に出展したIoTクソゲー「うちわdeファイト」の作り方をまとめます。
すでにQiitaというプログラミングの知識を共有するサービスに投稿しましたが、同じ内容を自分のブログにも残します。
IoTクソゲー「うちわdeファイト」とは?
うちわを仰いだ回数がパワーとして、パソコン画面のブロックに伝わり、相撲みたいに落とし合いをするというというゲームです。
このビデオでは、勝者は逆ですねww
【システム構成図】
【私の環境】
MacBook Pro (Retina, 13-inch, Early 2015)
macOS High Sierra
Python 2.7.10
Unity 2018.2.0f2
【必要なもの】
Raspberry Pi Zero WH
https://www.switch-science.com/catalog/3646/
Raspberry Pi Zero ケース
https://www.switch-science.com/catalog/3196/
ジャイロ加速度センサー MPU-6050
ジャンパワイヤ (メス~メス)
モバイルバッテリー + microBケーブ
※なんでもいいですけど、僕が使ってるのはこちら。うちわの柄にちょうどいいです。
https://item.rakuten.co.jp/dtc/4562425291921/?scid=af_pc_etc&sc2id=af_113_0_10001868
うちわ
※1つだけだと耐久性がないので、2つ重ねしました
初期設定など
Raspberry Pi Zero の初期設定は、こちらのブログを参考にしました。
センサーをラズパイで有効化するための設定や、配線はここのサイトのとおりにしました。
ターミナルからRaspberryPi接続方法ですが、
普通は、
$ ssh pi@raspberrypi.local
で接続しますが、
今回は2つのラズパイを同時につなげることもありますので、ラズパイのIPアドレスで接続します。
例えば、
うちわ1のRaspberry PiのIPアドレスを192.168.10.107
うちわ2のRaspberry PiのIPアドレスを192.168.10.108
と仮定しますと、
まず、うちわ1のRaspberry Piに接続します。
$ ssh pi@192.168.10.107
次に「コントロール+T」 でターミナルウィンドウをもう1つ出現させ、
うちわ2のRaspberry Piに接続します。
$ ssh pi@192.168.10.108
これで、うちわ1、うちわ2、2つののRaspberry Piに同時に接続できました。
なお、Raspberry PiのIPアドレスの確認方法は色々ありますが、Macなら Lan Scan というアプリを使うのが簡単です。
プログラミング
センサー値を取得し、角度に変換するコードは、こちらのブログを参考にしました。
Raspberry Piからサーバーに送るコードは、こちらのブログの「8. 温度情報をHerokuに送信する」に記載のコードを参考にしました。
サーバーはherokuを使い、Ruby on Railsで構築しました。
※バックエンドについての詳細は割愛
ゲームはUnityで作りました。
うちわ1を制御するコードは以下の通りです。
サーバーにRaspberryPiから送られたデータを取りに行って、画面上の物体にその値を加えてます。
うちわ2も同様にコーディングします。
他にゲーム全体を運営するプログラムも必要ですが、ここでは割愛します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Player1Controller : MonoBehaviour { public Rigidbody rb; void Start() { } void Update() { StartCoroutine(connect("https://XXXXX.herokuapp.com/uchiwa1")); //サーバーのアドレスを入力 } IEnumerator connect(string url) { WWW www = new WWW(url); yield return www; JSONObject json = new JSONObject(www.text); //サーバーからデータをJSON形式で取得 JSONObject power = json.GetField("power"); //取得したデータから必要なデータpower(物体に加える力)を抽出 float addpower = power.n; Rigidbody rb = this.GetComponent<Rigidbody>(); // rigidbodyを取得 Vector3 force = new Vector3(addpower, 0.0f, 0.0f); // 力を設定 rb.AddForce(force); // 力を加える } } |
最後
実際に遊んでみて、プログラムを微調整し、
最後の最後に、Raspberry Piの電源を入れたら自動的にPythonのプログラムが実行する設定をします。(このゲームを遊ぶのに、いちいちターミナルを起動、コマンド入力などするのは手間ですので)
Raspberry Piのプログラムの自動起動は、こちらのブログのとおりです。
これで、完成です。
ほとんど、ググって先人たちの叡智を組み合わせただけです。
先人たちの皆様、ありがとうございました。
巨人の肩の上に乗るってこういうことなんですね。
だから、最近は、僕のような電子工作を始めて1年の中年のサラリーマンでもこれくらいのことはできますので、皆様も電子工作にチャレンジしてみたらいかがでしょうか。
反省点・改良点
Maker Faire Tokyoの会場(東京ビッグサイト)では、当日Wifiが全く繋がりませんでしたので、単なる置物となりました。来場者にはデモ動画で説明するだけしかできず、悔しい思いをしました。
Maker Faireのような展示会に出展する時は、Wifiが繋がらないことを前提に、有線やWifi以外の無線を考慮に入れなければいけないことを身をもって知りました。
次は、ソラコム のセルラー通信に対応するように改良しようと思います。
ad
- Tweet
-
-
この記事が気に入りましたら、ぜひTwitter、facebookボタンをお願いします。
ブログを書くモチベーションになります。よろしくお願いします。
ビットコイン投げ銭ウィジェット
関連記事
-
-
「つくるけぇ!」に出展しました
10月8日に、東広島市の道の駅「湖畔の里 福富」で開催された「つくるけぇ!」というイベントに私の
-
-
【Python 備忘録】pycURLのインストールができない場合の解決方法
※ここに記載の事例は、あくまで私個人の備忘録です。 私個人の環境での話ですので、これが本当に正し
-
-
遠隔押印マシーン『InCaaaan(インカーン)簡易版』の作り方
※同じ記事をQiitaに書いてますが、ブログにも残します。 新型コロナ禍で
-
-
NeoPixelで光るSDGsバッジ作ったよ
最近、こんなバッジ付けてる人、よく見かけますね。 これは、SDGsのバ
-
-
「Startup Weekend Tokyo 深圳」に参加しました。
いつか起業したいなーという思いはあるのですが、ずっと「いつか」ばかりで実行力のないTatsu