【DIY】Arduinoを触ってみたゆうがた登場したのは随分前らしいですが。(2005年ごろ?)今まで気にはなっていたものの、メンドくさそうなので触らなかったArduinoですが、ちょっと作りたいものが出来たので試してみることにしました。最近のハンコンにはボタンがたくさん付いているので、まあまあ操作に困ることはありません。ハンドルが1つだけならば良いのですが、複数持ってたりすると、ハンドルごとにボタン配置が違うため、同じ設定ボタンでも全然別の場所だったりして、覚えることができない。ハンコンのボタンにラベルでも貼っておけばまだ良さ気ですが、基本VRしてるので、HMDを被ってるとそんなラベルも見えない。なると、キーボードとかに割り当てておくのが無難てことになりますが、それだと雰囲気も出ないし、そもそもやはりVR中はキーボードも操作しづらい。・・・等々の理由で、ハンコンの横に専用のコントローラを付けてる人が多いです。ちなみにこういう製品も売っていますが、数が出ないこともあり大手メーカーではなく個人レベルみたいなメーカー製で、もちろんいい値段がする。下の製品だと2〜3万円くらいです。ハンコンやHシフターとかはそれなりにメカニカルな構造が必要なため、おいそれと個人では作れませんが、こんなボタンやダイヤル程度のコントローラなんか、作れそうじゃん?そう、Arduinoとかのマイコンを使えば。だいたい、作り方とかも最近はYouTubeとかにごまんとあるし、やってやれないことはなさそう。いうことで、Arduinoを買ってみました。Amazonで1100円。今まで情報集めをしてなかったので、Arduinoのマイコンボードなんて1種類だけだと思ってたので、気にせずテキトーに安いヤツ(中国製の互換品)を買ったわけですが。結論から言うと、このボードではダメでした。Arduinoには数十種類もボードがあり、一番出回っているのがこの「UNO」なのですが、コイツはUSBコントローラとしては使えない製品だったのです。Leonardo」というボードを追加購入しました。Amazonで1199円。どっちも別に高くないし、他の用途には使えるので返品とかはせず、何かに使うことにしました。最初に買った「UNO」も次の「Leonardo」も開発用基盤らしく、製品に組み込み向けの極小基盤のLeonardoもあったので、ついでにそっちも買っときました。(700円)開発基盤で動作検証してから、実際の組み込みは極小基盤を使うカンジで。ボタンも要るのでこれまたAmazonで安物中国製(12個800円)も買っておきました。ホントは秋月とかの電子部品屋に行けばもっと安くて品質の良いものもあると思いますが、通販は送料がかかるし、日本橋とか行くのメンドイし。これらを入れるケースはちゃんとしたものは電子部品屋にしかなく、ホームセンターでは売ってませんでした。電子部品屋のものも、ちょっとしたボタンボックス用には少し大きい。良いのがないか考えていたところ、100均のプラケースに良いのがありそうと探しに行くと、程よい大きさ・厚さのがありました。ダイヤルとかは、以前フェラーリF1ハンコンを作ったときに余っているのがあるので、それを利用(といっても1個80円程度のロータリーエンコーダ)。これで全材料がそろいました。間違えて買った部品込みでもわずか4000円弱。部品を組み立てる前に、まずはArduinoで目的の動作をするものが作れるかどうかの検証をしないといけません。ArduinoはボードをPCにつないで、マイコンにプログラミングしてやらないと動作しません。IDE」(無料)を使います。一からプログラミングしても良いですが、アプリに入っているサンプルコードを利用すれば、よくある製品ならそのまま使えたりします。サンプルになくても、GitHubとかを巡ると目的に合うコードを書いてる人もいたりするのでそれをダウンロードして取り込めばOK。自分の目的はUSBコントローラなので、ジョイスティックとかのライブラリを作ってる人のコードを拝借しました。このライブラリを使うと、アナログスティックやらハットスイッチ(十字キー)やらトリガーやらも使えますが、自分の目的には不要なので、ボタンのみが欲しい。ボタンのみのシンプルなコードがサンプルで付いてたのですが、これは4ボタンのみ。100均のプラケースはボタンもしくはダイヤルが12個程度配置できそうなので、12個分欲しい。いうことで、コードをテキトーにいじってはマイコンに書き込み、実際に動作させて(まだ物理ボタンは配線していないが)みるテストを繰り返し、やっとボタン12個が表示されるようになりました。次に、実際にボタンを配線して動作確認します。つなぎ方としては、任意のI/Oポートをプラス側、GNDをマイナス側としてボタンをつなぐだけです。(ぶっちゃけテストレベルならボタンなんかなくても、プラス配線とマイナス配線だけでもOK)自分的には電気回路に関してはまったくのド素人なので、複雑なことは一切できませんが(抵抗とかダイオードとかコンデンサとか何に使うかわからん)、ただのボタンなら簡単。1個の動作はOK、2個つないでの動作も問題なしでした。この辺まではスムーズにいったのですが、問題が生じたのはダイヤル。ボタンはプラスマイナスの2端子しかありませんが、ダイヤル(ロータリーエンコーダ)は3端子あります。右回しなのか左回しなのかを取得するためにそれぞれ端子があるのです。(残り1個はGND)ということはどういうことかというと、ダイヤル1個に2つのI/Oポートが必要・・・つまりボタン9個+ダイヤル3個の構成なら、I/Oが12個では足りず15個必要。ところがArduinoの基盤にはデジタル入出力ポートが12個しかありません。あと6ポートありますがこれはアナログ用。・・・なのですが、ググってみるとアナログポートはデジタルとしても使えることが分かりました!これで一件落着、と思ったのですが、そう簡単にはいかない。UNO、Leonardoともに、デジタルポートのピン番号は2〜13番で共通。UNOに関しては、14〜19番がアナログポートのピン番号なので、その内の2〜16番をデジタルで使う、とコードを書くだけで良いのですが、メンドクサイことにLeonardoは違う。Leonardoのアナログポートのピン番号はなぜか18〜23番。To文で数字を1つずつ繰り上げながら繰り返し処理をしてるので、間が飛ぶと処理ができない。To文に組み込めない。試行錯誤しましたが、結果的になんかうまくいきました(コーディングで一番ダメな回答やんけ)。ま、ともかくプログラミングは成功したので、あとは物理配線をして組み立てるだけ。久々のはんだ付けは少々大変でしたが(ハズキルーペが必要)、なんとかそれもでき、カーボンシートを貼ってそれっぽいものが完成しました。最初は組み込み用の極小基盤で組み立てる予定でしたが、これまた誤算、極小基盤のほうは物理的に12ポートしかないので諦めました。右ハンドル用Hシフターのボディに両面テープでくっつけて、あと機能ラベルも貼ったら完成。100均のプラケースとは思えないでしょ。軽いので両面テープでも落ちないし。ボタン押すときにペコペコへこむけど。ボタンの動作は問題なし。ダイヤルのほうは実はコーディングがテキトー(というかボタンと同じ動作)過ぎて、ちゃんと動作していません。ロータリーエンコーダていうのは結構メンドクサイものらしく(これも今朝ググって知った)、チャタリング対策をしないとちゃんと使えないらしい。現状では右にひねると左側も反応したり、どちらも反応しなかったり。まあダイヤルは雰囲気で付けただけなので(全部ボタンだとちょっとダサい)、別にいいです。その内、チャタリング対策もしてみます。Corsa】ゆうがたさてさて、最近e-Sportsが流行っています。日本では主にe-Sportsと言えば格闘ゲームやサッカーゲーム、海外ではFPSと呼ばれるシューティングゲーム等が多いようですが、実はレースゲームのe-Sportsもあります。その中で競技人口が最たるものがPS4の「グラン・ツーリスモ・スポーツ(GTS)」を使って行われているもの。e-Sportsを念頭に2017年に作られたゲームなので当然ですが、世界中で選手権レースが行われているようです。自分はPS4を持っていないので参戦できないし、GT5(2009年だっけ?)でレースシムとしての違和感を感じて見限ったGTシリーズに、再度チャレンジする気も毛頭ない。(GT4までは、初代PSの初代グラン・ツーリスモ(1997年くらい?)からずっとファンだったのですよ)PCゲーム界隈にももちろん多数のレースゲームはありますが、コト「e-Sports」となるとまだあまり盛んには行われていない模様。Competizione」(ACC)にはオンライン対戦機能がありますが、それを利用して組織的に開催されるイベントはまだまだ少ない。PC界隈には以前から「iRacing」というゲーム、ではなくオンライン対戦専用のレースシムがありますが、大々的にe-Sportsとして行われている感じではなく、プロ・アマチュアドライバーの実戦前の練習用ソフト的な位置付けのようです。それに月額料金(サーバ使用料)がかかるし、クルマやコースは全部有料課金だし、趣味でレースゲームしたいだけのカジュアルプレイヤーにはとっつきにくい。別にe-Sportsなんて仰々しくなくても、既にあるソフトのオンライン対戦だって十分楽しいのですが、いかんせん厄介なのが参戦プレイヤーのスキルやモラル格差。ライバル車とのバトルで強引な突っ込みや、ブレーキミスで前車にオカマを掘る、コースアウトからの復帰時に後続車を見ずにコースを塞いでクラッシュを誘発くらいならともかく、レーシングラインで急に停車、ノーブレーキで前車に突っ込む、果ては逆走してレースを台無しに・・・といった嫌がらせや荒らし行為をするプレイヤーが一定数存在します。オンラインゲームではそういうプレイヤーを排除するシステムがあったりするのですが、残念ながらACにはない。後発のACCにはレーティングシステムがあってマシにはなりましたが、それも完全には機能しておらず、不正プレイヤーに悩まされることがあります。(最新パッチで改善されましたが、以前は不正プレイヤーに接触された被害者なのに、こっちのレーティングが下がるという理不尽なことも)それ故に、人間の監視が行き届いているe-Sportsなら、健全なオンラインレースができると思っている訳ですが、そこらの野良レースとはレベルが段違いなのは明白。今年の春に始まったACCのe-Sportsシリーズに、早速エントリーはしたものの、世界のトッププレイヤー相手ではまったく歯が立ちませんでした。エントリー方法は簡単で、ゲーム内のe-Sportsイベント(単独走行でタイムを競う予選方式)に参戦したのですが、ランキングで300〜1000位という凡人クラス。その後の決勝に挑めるのはトップ20台だけというゲキ狭な門なので、まったくカスりもしない有様。GT選手権が行われるレースウィークに現地に呼ばれてオフラインで対戦となる。Corsaのe-Sportsを開催するという告知を見ました。それがこの「インタープロトeシリーズ」でした。プラットフォームはACなのでエントリーに支障はないし、用意されたMODも無料配布、エントリー料金も不要。(もちろんすべてオンライン参戦で、日本語も通じる)とは言え、アマチュア有志によるお手軽イベントレベルではなく、レース規約がちゃんと文章化されてるようなれっきとした組織運営。6月に開幕し全5戦開催とのことで、とりあえずMODだけ欲しいヒトでも申し込めば配布してくれるので、なんとなく申し込んでみました。そもそも「インタープロトシリーズ」(IPS)とは実際に実車で開催されている国内選手権で、富士スピードウェイのみで年間4戦(8レース)行なわれるワンメイクレースとのこと。ワンメイクと言えどわざわざオリジナルマシン「Kuruma」を開発するほどで、アマチュアレーサーだけでなくメジャーなプロレーサーも参戦している。そのIPSのマシンをMODで開発したのが、今回の「インタープロトeシリーズ」(IPeS)です。申し込んで数日でMOD配布リンクがメールで届いたので、試しにACにインストールして走ってみました。ACには富士スピードウェイのコースが公式にはないので、こちらもMODを利用しますが、これはIPeS運営のオリジナルではなく以前からAC用MODとしてあるもの。そもそも富士スピードウェイのレイアウトがあまり好きじゃないので、ほとんど走り込んでいないコース。だいたいからして、コースMODというのはレーザースキャンされた公式コースと違い、どうしても再現性が低い。ラグナセカやノルドシュライフェは公式コースがリリースされる前にMODコースを走っていて「なんか楽しくないコース」と思っていても、いざ公式で登場すると「こんな攻め甲斐のあるコースだったのか!!」と驚くほど、MODは出来がしょぼいということです。(所詮、個人が無料で配布してるものだし)なのでMODコース自体あまり走っていないのですが、IPeSは富士のレースしかないため、これで練習するしかない。(いずれちゃんとしたコースMODを開発したい、と運営の人も言っている)MODの「Kuruma」で富士スピードウェイを走り出したわけですが、なんじゃこりゃ。ブレーキをかけるたび、コーナーを曲がってアクセルオンで立ち上がるたび、リヤがグリップを失ってスピン。ほとんど全てのコーナーで挙動が全く安定しない。こんな不安定なクルマ、運転できたもんじゃない。最初は何かMODのパラメータがぶっ壊れてるんじゃないか、と思ったわけですが。019も作った当初はちゃんと走れたのに、ゲーム側のアップデートで挙動が変わってしまい、まともに走行できなくなった)どうやらそうではないみたい。とあるYouTuberが同じMODを走らせている動画で、「実車のレースマシンの挙動をリアルに再現している」とのたまわっていたのです。素人がレースカーを運転すると、立ち上がり加速時にアクセルを踏み過ぎて大抵スピンしてしまうらしい。要するに、ブレーキもアクセルもハンドルも、雑な操作をするとすぐスピンするのがレースカーというものらしい。これまで数々のレースゲームで遊んできたわけですが、それらはすべてゲーム挙動だったということですね。挙動エンジンがゲームレベルというものもあるが、プレイヤーへの配慮として実車の挙動をマイルドに調整しているものもある・・・ACとかは挙動エンジンはちゃんと物理演算しているものの、実車と違いフィードバックの少なさゆえにパラメータを調整しているのでしょう。実車には車体を伝わる振動やハンドルに来る反力、リアルな視覚情報、あまつさえ重力加速度(G)という絶対的なフィードバックがあるので。それらの調整をせずにひたすら実車に忠実に作ると、こんなマシンが出来上がる模様。(もしかするとこれでもまだ、実車レベルのシビアさではないのかも知れないが)尚、このIPeS用の専用マシンは一切のセットアップ変更ができない仕様になっています。にくいマシンでもセットアップで自分好みの挙動になったりするので、吊るしのまま乗ることはほぼない自分としては、一切いじれないのはかなりツラい。唯一変更できるブレーキバランスで少しでも乗りやすくしようとしましたが、それでも安定はしてくれない。乗りこなせないため、レースエントリーは見送ろうかなとか思ってたのですが、ACCのような世界の強豪相手ではないし、もしかしたら他も同レベルかも、と挑戦してみることにしました。言いつつ、エントリー受付開始+開幕前の練習走行会があった6月1日のことはすっかり忘れていて、1週間後の受付締め切り日にギリギリ申し込んだ体たらくでしたが。開幕前のベストタイムはなんとか1分50秒を切るレベルでしたが、実車のIPSの走行データによると、トップドライバー(1分43秒台)はともかくとして、ジェントルマン(アマチュアクラス)が1分47秒台だったので、もしかしたら49秒台なら決勝進出できるかもと思ったわけです。IPeSのレース方式としては以下のとおり。・まず2〜3組に分けて予備予選を実施。・予備予選の上位12台がファイナルステージへ進出。(決勝結果に応じて全員25〜4点のポイント付与)・予備予選13〜42位のプレイヤーがセカンドステージへ進出。(決勝結果に応じて上位3位まで3〜1点のポイント付与)・年間5戦を行ない、決勝で獲得した総ポイント数で年間王者を決める。・年間王者は富士へご招待、実車の「Kuruma」走行チャンスもあり。ちでしたww実は49秒台でいけるかもと思った後、参加しなかった6月1日の練習走行の動画を見たら、とんでもなかった。47秒台でも遅いレベル。頑張らなあかんやん、とギリギリまで猛練習をしたわけですが、それでも48秒後半で、結局81台の参戦者の中で上位42台には入れませんでした。中の中くらいの腕前と自負している自分としては、なかなか悩ましい結果。(落選者の順位は教えてくれなかったので何番手タイムだったかは不明)なんとしても決勝レースを、セカンドステージでいいから走りたい。第2戦へ向けてさらなるタイムアップを図ることにしたわけですが、そんな簡単にはいかない。1か月の走り込みで、なんとか1分48秒2を叩き出しましたが、それも1回だけ、しばらくスランプで48秒台すら出せないまま7月の第2戦が近づきました。あ、一応今回のエントリーは忘れないよう受付初日(7月1日)に行ないました。本番前日の7月14日、いまだ48秒台すら出ないままでしたが、その日の朝ふと走り方を変えて走ってみたところ、いきなり48秒を飛び越え47秒台に突入。スピンが怖くてコーナーの突っ込みが甘く、立ち上がりも加速できないパーシャルスロットルが長かったのを、突っ込んでも大丈夫なコーナーを見極めることにしたのです。やり過ぎるとスピンもしまくりますが、早めに加速しても大丈夫なコーナーがあるのが分かりました。ベストタイムでいざ予備予選へ。本番の予備予選では30台ものマシンが同時にアタックしているため、なかなかクリアラップも取りにくいし、他のマシンの邪魔をしないようにしないといけない。そこで運営側で紹介されていたコースマップを表示するMODを導入してみました。デフォでもマップ表示はあるのですが、表示範囲が狭くて全体が見渡せない。MODのマップは全車両の位置がフルマップ表示で分かるので、予選時に空いている場所を探すのに非常に重宝しました。VRを使っているので、なるべくこういうHUDは表示せず、自分の目で確かめる派(真横もすぐ振り向けるし)だったのですが、やはり真面目にe-SportsをするにはHUDも必要です。結局このMODは第3戦以降参戦するうえでの必須MODとなりました。第2戦はエントリー台数が減って60台弱でしたが、それでも1/3弱は予備予選落ちです。そんな中で、マップMODでタイミングを見計らってコースイン、ミスなくクリアラップを記録し、ベストタイムに近い47秒7で初の予備予選通過を果たしました!予備予選の公式結果は出なかったですが、どうやら全体で35番手前後だった模様。だいたい真ん中辺ですな。ファイナルステージは45秒台を出さないとダメなので、現時点では全く手が届きませんが、なんとかセカンドステージ常連くらいにはなれそう。他のヒトがレベルアップしない限りは。して2戦目にしてセカンドステージに進出したわけですが、結果的に・・・これまたやらかしてしまいました。実車のIPSのレースは、フォーメーションラップのあとローリングスタートでレース開始となります。ところがACにはシステム上、ローリングスタートというレース方式がありません。(グリッドについて一斉スタートのスタンディングスタートのみ)やむなく、スタンディングスタートの1周目をフォーメーションラップとし、2周目からのローリングスタートという競技規則になっています。ローリングスタートの合図が出せないため、先頭マシンがスタートラインを横切ったらレース開始となっていますが、後ろの方はそんなの見えないので、実質前の車が加速したら開始です。GTシリーズがローリングスタートなので、自分はそれで十分に慣れているつもりでした。毎週月曜日に開催されているIPeSの模擬レースにも一度参加していて、この方式も経験済みでした。・・・にもかかわらず、初の決勝進出で緊張していて、ローリングスタートルールを完全に忘れていました。シグナルが赤く染まっていくのに、なんで他車はエンジン吹かしてないのか訝しながら、ブラックアウトとともに猛ダッシュ・・・前車にぶつかりかけて避けた後に、ようやく思い出しました。他車にもぶつかってないし、と自分を納得させ、そのまま車列に復帰したものの、裏ストレートで前車の急ブレーキで追突しそうになり、避けたら結局スピンしました・・・で、言われたとおり全車通過まで待ってから最後尾で復帰・・・(ちなみに予選順位は11位でした)。そこからレーススタートしたわけですが、スタート方式勘違いによる動揺からレースに集中できず、単独スピン数知れず、あまつさえ目の前で他車のスピンに巻き込まれたりと散々なレースでした。(もちろん、スタートミスによる10秒ペナルティも食らいました)YouTube配信でも盛大にスタート失敗したにもかかわらず、自分の姿は全く映らず、なんとも目立たない存在でした。・・・というわけで第2戦のリベンジ。第3戦が昨日、8月12日に行われたわけですが、結果的にはセカンドステージ9位でした。(が、予選四脱のペナルティで10位に降格)上位入賞はままなりませんでしたが、今度は恥ずかしい失敗もなく、割とレースも楽しめました。第3戦のエントリー台数はさらに減って46台。みんな忙しいのか、飽きたのか、どんどん増えるものだと思っていたのが。相変わらずセカンドステージまでは42台がいけるので、わずか4台の予備予選落ちしかしない。これまでより気は楽になりますが、他の連中のレベルアップ度合いにもよるので、予断は許さない。コースをさらに研究し、ラインを変えたことで自己ベストを47秒4まで更新していましたが、あとコンマ5秒詰めて46秒台に入れたいところ。今回は燃料が重い状態での練習を続けており、言わばドラゴンボールの界王様の修行のごとく、より負荷をかけた状態で練習していました。レース当日2時間前に最後の練習として、久々に燃料3周分のみの予選モードでアタックしたところ、47秒0が出て自己ベストを更新しました。残念ながら目標の46秒台には届かなかったものの、予備予選でもほぼ自己ベストの47秒1を記録し、無事セカンドステージ進出。前回レースや模擬レースで自分と同様にローリングスタートルールを理解していないプレイヤーが続出したため、今回から予備予選終了後に、決勝進出いかんにかかわらず、全員ローリングスタートの練習が組み込まれました。おかげもあってか、今度は落ち着いてレースでき、スタートも綺麗に決まりました。決勝は47秒4のタイムで7番手スタートでしたが、フォーメーションラップ中に前の1台がコースアウトし、さらにスタートが成功して1コーナーで1台を交わし5番手。1周目の裏ストレートエンドの飛び込みで、3、4番手が並んでターンイン。何か起こりそうだったので少し離れてコーナーを曲がったら、案の定2台が接触スピンしていたので、しめたと思い横をすり抜けようとしたら・・・スピン車両が運悪く真横で動いたため接触、こちらもスピンしてしまい、一瞬だけ3番手に浮上したものの16番手まで落ちました。その後は9番手まで復帰したものの、それ以上はかないませんでしたが、今回はちゃんとライバルと接戦ができ、何台かオーバーテイクも決めてレースを楽しめました。YouTubeライブ配信でも、ちょうど自分がオーバーテイクを決めるシーンが出ていて、坪井君に「めちゃクリーン、最高!」と褒めてもらえたし。エントリーネームは「kotora」選手です。数年前にACのオンライン用にテキトーに付けた名前でそのまま続けています。第4戦は9月、今度こそ46秒を出してセカンドステージ上位を狙いたいです。あと、予選タイムを削るだけではなく、ロングランでミスなく走れるように練習しないと。