Arduino+αで剣と魔法のデジタルチャンバラつくる

■ はじめに

この文章を皆さんが読む頃にはスターウォーズが絶賛公開されていて、大人もライトセイバーでチャンバラしたくなっているはず!  そんな世間の波に便乗して、趣味の工作の途中成果をQiitaのArduinoアドベントカレンダーに投稿するためにまとめてみました。

 

本記事のタイトルは「Arduino+αで剣と魔法のデジタルチャンバラつくる」です。

youtu.be

 

まずは、上記の動画をご覧ください。スターウォーズのチャンバラシーン集です。 

 

たぎりますよねー。

 

また、ゲームをお好きな方はご存知だと思いますが、PCオンラインゲームの世界では、ここ数年「League of Legends」の様な、剣と魔法と(+銃)で戦うファンタジー対戦ゲームが大ブームになっております。

 

ワタクシ、こんなコンピューターゲームを、みんなで集まって遊べるアクティビティにしたら、すごく楽しいんじゃないかという考えにずーっと取り憑かれておりまして。

 

本記事は、そういった遊びの企画&システム概要のメモ、加えて一部モックアップの作成ログになります。

 

Arduinoでやりたいこと

 

本記事ではArduino+αぐらいの機材で、多人数で集まって遊べるアクティビティ、つまりサバイバルゲームの銃を剣に変えて、魔法(?)要素を付け足した様なシステムを安価につくり上げることを目指します。

 

ワタクシ、まったくエンジニアではないので、技術的には基礎的なことしかやっておりません、ってかできませんのでArduino工作の応用例を見るつもりで、かつ脳内で少し中二病フィルターをかけた状態でお読みいただけると幸いです。

 

■作るもの

 

プレイヤーはある程度の広さのあるフィールドで、5人vs5人程度のチームに別れて、相手を倒して得られるスコアを競います。

 

FPSによくあるようなルールですね。

 

これを実現するために、プレイヤーは以下の装備品を身につけます。

・剣(ウレタン製)

・当たり判定パッド

Arduino+αのコアユニット

・魔法の腕輪

f:id:banana_wani_en:20151214082929p:plain

 

システム全体では以下の様な構成になります。

 

 

f:id:banana_wani_en:20151216100253p:plain

 

twe-liteとToCoStickというのは、ZigBeeベースの無線モジュールです。これ単体でもマイコンとして機能するようなのですが、今回は無線通信専用にしています。

 

 

■魔法の腕輪 

 

「剣と魔法」と名乗るからには、魔法のシステムが必要ですよね。

 

これは赤外線リモコンの仕組みを流用します。Arduinoを触った方ならご存知だと思いますが、ごく安価な材料で赤外線リモコン送信部と受信部を作成することができます。

 

こちらが魔法の腕輪になります。

f:id:banana_wani_en:20151216074017j:plain

 

Arduino pro miniと赤外線LED、ゼスチャー入力用にADXL345という加速度センサーをつなげてます。

 

ADXL345加速度センサーモジュール - Androciti Wiki

 

手の甲を正面に向けて手を垂直に立てて、数回左右に振り、その後手を地面と水平にして肘を横にグッと引くと赤外線LEDからリモコンコードが発信されます。

 

f:id:banana_wani_en:20151216095031p:plain

 

手を降る回数でファイヤーボールとか、サンダーボルトとかを撃ち分けられるようにしました。2〜3mはしっかり届くようですし、指向性も高いので、ある程度狙って打ってる感も出ます。とりあえず中二感は出てますね。満足。

 

現状では受光部をまだ作っていないので、ファイヤーボールを打つとテレビのスイッチが入り、サンダーボルトを打つとチャンネルが変わります。。。。

 

こんな感じに仕上げられると良いですね。

 

f:id:banana_wani_en:20151216100459p:plainf:id:banana_wani_en:20151216100712p:plain

Project S.C.I.F.I — Michael Hill   

Liberation & Iron (Steampunk) Figment

 

さあ、気を取り直して次にいきましょう。

 

■当たり判定パッド

 

魔法を受ける側の赤外線リモコンの受光部、剣の攻撃を受ける当たり判定パッドを一式にまとめてウェアとして装着できるようにします。

 

まず当たり判定パッドはこちら。

f:id:banana_wani_en:20150529092921j:plain

 

パッド自体の構造は単純。Alliexpressで買った激安ユニバーサル基板にタクトスイッチをつけて、上から2mm厚のプラ板をくくりつけました。これを両上腕部にマジックテープで括りつけます。

 

台座の部分は100円ショップで買った鉢底ネットです。フチがチクチクして痛いのでバイアステープを巻いて接着しています。

 

f:id:banana_wani_en:20150529082545j:plain f:id:banana_wani_en:20150529082604j:plain

 

これもとりあえず下記の様に脳内補完しておいてください。

f:id:banana_wani_en:20151216101106p:plain

LARP Rogue Armour Pauldrons Set - TheVikingStore.co.uk

 

 

 

タクトスイッチの配線はArduinoにつながり、シリアルピンを経由してtwe-liteという無線モジュールにつながっています。 

超簡単!無線マイコンモジュールTWE-Lite DIP(トワイライト・ディップ) - MONO-WIRELESS.COM

twe-liteにApp_Uartというアプリを書き込むと、Serial.writeやSerial.printlnで出力したデータが、そのままPCに飛ばせます。これまた拍子抜けするほど簡単!

 

f:id:banana_wani_en:20151206090258j:plain

Arduinoとの接続も至ってシンプル。twe-lite とArduino pro miniをtx→rx、rx→txでつなぎます。twe-liteはデフォルトで115200bpsで通信するのでArduino側もそれに合わせます。

 

コンソールを開くと、プロンプト部分にtwe-liteのIDがくっついた上で、そのまま文字列が飛んできます。ほんと普通のチャットです。こんな簡単でいいのかしら?

 

■リモコン受光部

 

次にリモコン受光部です。

 

赤外線リモコン受信モジュールOSRB38C9AA(2個入): センサ一般 秋月電子通商 電子部品 ネット通販

 

赤外線リモコンについては、このあたりの説明がわかりやすくて参考になりました。

 

Arduinoでリモコン作成

Arduinoで赤外線リモコンの受信データをハック | 素人がつくってみた

 

リモコン受光部のコードを見るとArduinoをずっとループで待たせておく事が前提のようです。なので専用にArduinoを1個つかってリモコン受光部の信号を読み取り、シリアル通信で魔法を受けたことだけをもうひとつのArduinoに送信するようにします。

 

おっと。さっき、シリアルピンをPCとの通信に使ってしまっていますね。でも、安心してください。ソフトウェアシリアルってのがあるみたいです。

ソフトウェアシリアル通信の動作確認 | Atelier NODOKA

これで魔法を受けたことを表すコードをメインのArduinoに送ることにしましょう。

 

私の環境ではエラーは出なかったのですが、下記のサイトによると、やりようによっては、どうも取りこぼしも起きるみたいです。

Arduino ソフトシリアルの検証android.ohwada.jp

 

エラーチェックとかどうやればいいのかな?

 

それと受光部は体の複数箇所につけないと、手で受光部が隠れてしまうなどの不具合が出そうです。

 

うーん。いろいろあるので、まとめて後回し。ToDoリストに追加!

 

■リスポーンポイント

 

魔法の腕輪と同じものを場所固定しておけば機能しそうです。

回復魔法にもなりますね。タレットのシステムもこれで行けるような気がしてます。

(このあたりから未着手作業が増えています。すまんす。)

 

■個別プレイヤー用のインフォメーション表示

当初、LEDでHP残量がわかればいいかなと思っていたのですが、実際に作ってみたところ、どうにもフィードバックがタンパクな感じがします。そうだ! 音を出してみましょう。

 

いろいろ調べてみるとArduinoのpinにスピーカー直付で結構ないい音が出るようです。

 

とりあえずArduinoの基本中の基本ということでTONE関数で圧電スピーカーをならしてみたのですが、むむむな感じ。

 

かっこいいサウンドデータをつくるのはそれなりに手間がかかりそうです。これも後回し。

 

かっこいい動画とコードのサンプルがあったので 防備録代わりに貼っておきます。

www.instructables.com

 

はー、Arduinoだけでこんなサウンドが出るのね。素敵! これもToDoリスト入り。

ついでに、振動モーターなどをつけることもToDoリストに加えておきましょう。 

 

■ウレタン剣

1mほどのPVCパイプに1mx1m1cmのウレタンを巻きつけたもの。剣はでかいほうが愉快です。写真はウチの次男ちゃん140cmです。スターウォーズというよりベルセルクのノリですね。

 

これで殴りあうだけでも結構楽しいんです!

 

f:id:banana_wani_en:20150521190353j:plain

 

はっ!? もしかしてデジタルとかいらねんじゃね?

 

 

 

いやいや。

気を取り直して次に行きましょう。

  

■スコア表示用PC&ディスプレイ

 

 PCで通信を受け取るのはToCoStickというtwe-liteをUSB化した無線モジュールです。データはシリアル入力として受け取ることになるので、これをProcessingという簡易言語で受け取りスコア表示してます。

 

後々バランス取りなどの作業を考えると、Arduinoにロジックを書き込むのではなく、Processing側にロジックを集約するべきだったかもしれません。うーん。これもToDoリストに追加。

 

■終わりに/仲間募集

 

夏ごろからArduino学びつつ、プログラムなども覚えつつ、しばらくシコシコやっていたのですが、ウェアや剣を人数分作るのめんどくさいなーとか、これ結構お金かかるなーとか、個人プロジェクトとしては若干手に余る感じがして、いろいろ考えたらモチベーションが落ちてきたので最近はすっかり放置しておりました。

 

お仕事でゲーム作りに携わったことはあるのですが、自分でコードも書くとなると中々大変ですね。企画ばっか肥大化して頓挫するダメなゲーム制作の典型的なパターンです。反省w

 

でも、マルチプレイな剣と魔法のチャンバラゲーム作ってみたいなー。誰か手伝ってくれないかなー。

ということでメンバー募集。プログラマーの人とかコスプレ造形の人とか、イベント運営の人とか。遊んでみたいから応援するぜってのでもありがたいかも。

 

誰か一緒に剣と魔法で戦うデジタルチャンバラやろうぜ。