りろに〜ぷWEB

  
  2020年 7月 5日 【PC】ネット回線とテレビをケーブルから光へ
  2020年 5月31日 【eSports】Inter Proto e-Series 2020 第2戦【初入賞】
  2020年 5月23日 【ネコ】シマコの自助努力【アレルギー治癒】
  2020年 4月 5日 【DIY】HAL9000自作【2001年宇宙の旅】

  2019年10月13日 
【DIY】Arduinoを触ってみた
  ゆうがた
登場したのは随分前らしいですが。(2005年ごろ?)
今まで気にはなっていたものの、メンドくさそうなので触らなかったArduinoですが、ちょっと作りたいものが出来たので試してみることにしました。

レースゲームをやってると、レース中に実車同様のボタン操作があったり、ゲーム内でのモード選択等、いろいろなボタン操作が必要になりますが、
最近のハンコンにはボタンがたくさん付いているので、まあまあ操作に困ることはありません。
が、ハンドルが1つだけならば良いのですが、複数持ってたりすると、ハンドルごとにボタン配置が違うため、同じ設定ボタンでも全然別の場所だったりして、覚えることができない。
ハンコンのボタンにラベルでも貼っておけばまだ良さ気ですが、基本VRしてるので、HMDを被ってるとそんなラベルも見えない。
となると、キーボードとかに割り当てておくのが無難てことになりますが、それだと雰囲気も出ないし、そもそもやはりVR中はキーボードも操作しづらい。

・・・等々の理由で、ハンコンの横に専用のコントローラを付けてる人が多いです。
ちなみにこういう製品も売っていますが、数が出ないこともあり大手メーカーではなく個人レベルみたいなメーカー製で、もちろんいい値段がする。
下の製品だと2〜3万円くらいです。

ハンコンやHシフターとかはそれなりにメカニカルな構造が必要なため、おいそれと個人では作れませんが、こんなボタンやダイヤル程度のコントローラなんか、作れそうじゃん?
そう、Arduinoとかのマイコンを使えば。
だいたい、作り方とかも最近はYouTubeとかにごまんとあるし、やってやれないことはなさそう。

ということで、Arduinoを買ってみました。
買ったのはArduino UNO R3という製品。Amazonで1100円。
なんせ今まで情報集めをしてなかったので、Arduinoのマイコンボードなんて1種類だけだと思ってたので、気にせずテキトーに安いヤツ(中国製の互換品)を買ったわけですが。
結論から言うと、このボードではダメでした。
Arduinoには数十種類もボードがあり、一番出回っているのがこの「UNO」なのですが、コイツはUSBコントローラとしては使えない製品だったのです。
(搭載しているチップの関係で)
買ってから情報集めをしていて気づいたので、やむなく、自分の目的に使える「Arduino Leonardo」というボードを追加購入しました。Amazonで1199円。
まあどっちも別に高くないし、他の用途には使えるので返品とかはせず、何かに使うことにしました。
尚、最初に買った「UNO」も次の「Leonardo」も開発用基盤らしく、製品に組み込み向けの極小基盤のLeonardoもあったので、ついでにそっちも買っときました。(700円)
開発基盤で動作検証してから、実際の組み込みは極小基盤を使うカンジで。

さらにボタンも要るのでこれまたAmazonで安物中国製(12個800円)も買っておきました。
ホントは秋月とかの電子部品屋に行けばもっと安くて品質の良いものもあると思いますが、通販は送料がかかるし、日本橋とか行くのメンドイし。
ただし、これらを入れるケースはちゃんとしたものは電子部品屋にしかなく、ホームセンターでは売ってませんでした。
が、電子部品屋のものも、ちょっとしたボタンボックス用には少し大きい。
良いのがないか考えていたところ、100均のプラケースに良いのがありそうと探しに行くと、程よい大きさ・厚さのがありました。もちろん110円。
ダイヤルとかは、以前フェラーリF1ハンコンを作ったときに余っているのがあるので、それを利用(といっても1個80円程度のロータリーエンコーダ)。
これで全材料がそろいました。間違えて買った部品込みでもわずか4000円弱。

で、部品を組み立てる前に、まずはArduinoで目的の動作をするものが作れるかどうかの検証をしないといけません。
ArduinoはボードをPCにつないで、マイコンにプログラミングしてやらないと動作しません。
プログラミングするにはArduino専用の開発アプリ「Arduino 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ポートありますがこれはアナログ用。
・・・なのですが、ググってみるとアナログポートはデジタルとしても使えることが分かりました!

これで一件落着、と思ったのですが、そう簡単にはいかない。
Arduino UNO、Leonardoともに、デジタルポートのピン番号は2〜13番で共通。
UNOに関しては、14〜19番がアナログポートのピン番号なので、その内の2〜16番をデジタルで使う、とコードを書くだけで良いのですが、メンドクサイことにLeonardoは違う。
Leonardoのアナログポートのピン番号はなぜか18〜23番。間が飛んでるのです。
サンプルコードではFor To文で数字を1つずつ繰り上げながら繰り返し処理をしてるので、間が飛ぶと処理ができない。
アナログポートはアナログ用のピン番号(A0〜A5)も持っていて、そっちでも指定はできるのですが、もちろんこれも同じFor To文に組み込めない。
で、いろいろ試行錯誤しましたが、結果的になんかうまくいきました(コーディングで一番ダメな回答やんけ)。

ま、ともかくプログラミングは成功したので、あとは物理配線をして組み立てるだけ。
久々のはんだ付けは少々大変でしたが(ハズキルーペが必要)、なんとかそれもでき、カーボンシートを貼ってそれっぽいものが完成しました。


尚、最初は組み込み用の極小基盤で組み立てる予定でしたが、これまた誤算、極小基盤のほうは物理的に12ポートしかないので諦めました。
右ハンドル用Hシフターのボディに両面テープでくっつけて、あと機能ラベルも貼ったら完成。
一見、100均のプラケースとは思えないでしょ。
軽いので両面テープでも落ちないし。まあちょっとボタン押すときにペコペコへこむけど。

尚、ボタンの動作は問題なし。
ダイヤルのほうは実はコーディングがテキトー(というかボタンと同じ動作)過ぎて、ちゃんと動作していません。
ロータリーエンコーダていうのは結構メンドクサイものらしく(これも今朝ググって知った)、チャタリング対策をしないとちゃんと使えないらしい。
現状では右にひねると左側も反応したり、どちらも反応しなかったり。
まあダイヤルは雰囲気で付けただけなので(全部ボタンだとちょっとダサい)、別にいいです。
その内、チャタリング対策もしてみます。
 
 
-No.788-にコメント

  2019年 8月13日 【e-Sports】インタープロトeシリーズへ参戦!【Assetto Corsa】
  2019年 5月25日 【VR】Oculus Rift S発売!
  2019年 5月 1日 【ライブ】TECHNOざんまいでお腹いっぱい
  2018年12月22日 【NAS】LinkStationがお亡くなりに・・・
  2018年12月 8日 【Qi】無線充電を試してみた!
  2018年12月 2日 【PC】アップデート後の使用感
  2018年11月24日 【PC】マザー壊した・・・【アップデート】
  2018年10月22日 【PC】新作レースシムとPCアップデート【Assetto Corsa】
  2018年 9月23日 【DIY】もろもろ改造・修理【ガジェット】【マンション】
  2018年 8月23日 GeForce RTXシリーズ発表!
  2018年 2月22日 【PC】新作発表!!【AssettoCorsa】
  2018年 1月 7日 【Audio】AVアンプが壊れる・・・
  2017年12月17日 【iPhone】iPhone6sのバッテリー交換
  2017年11月19日 【コクピット】Fanatec導入・・・
  2016年12月14日 【ネコ】新しい猫がやって来た
  2016年 6月 5日 【PC】Simvibe導入!【コクピット】
  2016年 5月29日 【PC】Oculus Rift CV1 + Assetto Corsa!【VR】
  2016年 4月17日 【PC】Oculus Rift来ないけど、なんか快適【Windows10導入】
  2016年 3月23日 【PC】ついにMODを始めました【Assetto Corsa】
  2015年12月 6日 【自炊日本語字幕】ゲティスバーグの戦い ディレクターズカット
  2015年11月27日 【自炊日本語字幕】ゲティスバーグの戦い、再び
  2015年11月11日 【ガジェット】Fire TV Stick使用感
  2015年10月31日 【Amazon】Fire祭【プライム特典】
  2015年 9月26日 【iPhone】iPhone6s購入
  2015年 9月23日 【PC】かなり致命的に壊しかけた・・・
  2015年 9月11日 【iPhone】iPhone6s/6s plus 発表
  2015年 7月17日 【PC】Euro Truck Simulator 2【トラック野郎】
  2015年 7月 4日 【PC】Assetto Corsa徒然
  2015年 5月30日 【PC】いろいろ不具合解消(Assetto Corsa用)
2020
7 5 4 
2019
10 8 5 
2018
12 11 10 9 8 2 1 
2017
12 11 
2016
12 6 5 4 3 
2015
12 11 10 9 7 5 4 3 2 
2014
12 11 10 9 8 7 4 3 2 1 
2013
12 10 9 8 7 6 5 4 2 1 
2012
12 11 10 9 7 6 5 4 3 2 1 
2011
12 11 10 9 8 7 6 5 4 3 2 1 
2010
12 11 10 9 8 7 6 5 4 3 2 1 
2009
12 11 10 9 8 7 6 5 4 3 2 1 
2008
12 11 10 9 8 7 6 5 4 3 2 1 
2007
12 10 9 8 7 6 5 4 3 1 
2006
12 11 10 9 8 7 6 5 4 3 2 1 
2005
12 11 10 9 8 7 6 5 4 3 2 1 
2004
12 11 10 9 8 7 6 5 4 3 2 1 
2003
12 10 9 8 7 6 5 4 3 2 1 
2002
12 11 7 6 4 3 2 1 
2001
12 11 

 
OEdiary v1.02 - KappaNuma