\r\n\r\n

ゲームコントローラとArduinoでロボットを制御する方法

ビデオゲームコントローラでArduinoを操作してみたいと思ったことはありませんか?さて、あとはこの記事とxbox360のコントローラーだけですね!...。

Arduinoとその互換ボードは、世界中のDIY愛好家にとって欠かせないデバイスの1つです。Arduinoを使い始めた初心者の方にも、すでにArduinoを生活の中で使っている方にも、数え切れないほどの素晴らしいプロジェクトのプラットフォームを提供します。

今日は、サーボ使用のハンドリング、Xbox 360のコントローラーをコントロールするクリエイティブな方法を探ります。もしあなたがすでにゲーム開発にかなり精通しているなら、Unityを使ったカスタムゲームコントローラーのチュートリアルに興味があるかもしれません。

また、Arduinoのバイオリンに初めて挑戦される方は、こちらのArduinoガイドが参考になるかもしれません。同様に、初めてJavaを使う方は、少し戸惑うかもしれません。Processingはプラットフォームの簡易版を使用していますが、これらのJavaの概念とテクニックはまだ役に立つかもしれません。

必要なもの

  • 1 Arduino。今日はUNOを使っています。
  • ホビーサーボ1個。Arduinoでピン止めできるものなら何でも。
  • 有線式Xbox 360コントローラ1個。ただし、技術的にはほぼすべてのコントローラで動作します。
  • 数本の接続線。

これに加えて、ProcessingとArduino IDEをそれぞれのウェブサイトからダウンロードする必要があります。

arduinoの準備

まず、サーボを取り付ける必要があります。この配線の色は様々ですが、一般的に5Vピンは赤に、GNDピンは茶または黒に接続されます。通常、10番ピンには、黄色またはオレンジ色のデータ線が接続されています。

配線を確認し、Arduinoをパソコンに接続します。Arduino IDEを起動します。

File> Examples> Firmata> Standard FirmataにあるStandardFirmataスケッチを開いてください。このスケッチは、PythonでArduinoを制御する記事で使用したのと同じ、シリアルポートを外部から制御するための基板を作成します。スケッチをボードにアップロードします。

アップロードに失敗した場合は、ツールメニューで正しいボードとポートの詳細が選択されていることを確認してください。

私たちのArduinoが完成しました

セットアップハンドリング

プロセスを開くと、白紙のスケッチが表示されます。その前に、いくつかのライブラリをインストールする必要があります。Sketch」メニューから「Import Libraries」 > 「Add Library」を選択します。Arduinoユーザーなら誰でも知っているコントリビューションマネージャが表示されます。

そのためには、3つのライブラリをインストールする必要があります。1つ目は、「Game Control Plus」ライブラリです。これで、ゲームコントローラーをProcessingで使えるようになるのです。検索」ウィンドウで探して、右下の「インストール」をクリックします。 game Control Plusは、設定ツールのために別のライブラリのインストールが必要なので、今すぐ始めましょう。G4Pライブラリを検索してインストールしてください。

最後に、Arduino(firmata)ライブラリが必要です。ご想像の通り、検索して「インストール」をクリックしてください。これがインストールされると、テストを開始することができ、すべて問題なく動作します。私たちはWindows 10を使っていますが、Raspberry-Piなど、ほとんどのプラットフォームで処理機能を提供しています。

arduinoのテスト

カスタムスケッチの作成に入る前に、Arduinoとサーボの取り扱いをテストしてみましょう。File" > "Examples "を開き、"Contributed libraries"/"Arduino" から "Arduino (firmata)" を選択します。" フォルダを開き、"ArduinoServo" を選択します。これを使ってサーボをテストするのですが、その前にいくつか変更する必要がありそうです。

スケッチを下にスクロールして、次の行を見つけます。

println(Arduino.list());

コメントが "output "の場合、println (Arduino.list());の前のスラッシュ2つを削除し、スケッチを保存します。再生アイコンをクリックして実行し、下部のコンソールを注視してください。これにより、COMポートに接続されているすべてのものが一覧表示されます。

私の場合、Arduinoはここに記載されている3番目のポートであるCOM 8にあります。これは、次の行のコードに、どのCOMポートを使用するかを決定する値の配列があるため、重要なことです。

COMポートを反映させるために変更する必要があります。私の場合、これは3番目の位置、つまりインデックス番号2です。

arduino = new Arduino(this, Arduino.list()[2], 57600);

このコードをテストするには、他にいくつかの小さな変更を加える必要があります。Arduinoのピンが設定されているところまでスクロールして、ここの行を1つコメントします。もう一方を10番ピンに変更します。

//arduino.pinMode(4, Arduino.SERVO);arduino.pinMode(10, Arduino.SERVO);

Draw()メソッドで同じ操作をする必要があります。

arduino.servoWrite(10, c***train(mouseX / 2, 0, 180));// arduino.servoWrite(4, c***train(180 - mouseX / 2, 0, 180));

スケッチを保存して実行すると、サーボを動かして、プログラムが生成したウィンドウの上でマウスを前後に動かすことができるはずです。

もし、うまくいかない場合は、サーボの配線を確認し、COMポートの配列位置が正しいかどうかを確認してください。Arduinoが処理とうまく通信していることがわかったら、次に進みましょう。

コントローラーの設定

また、使用しているGame Control Plusのライブラリも強力な構成になっています。コントローラが**であることを確認し、Configuratorのサンプルプロジェクトを開いて実行します。以下のメニューが表示されます。

コントローラの名前をクリックすると、大きな設定画面が表示されます。

一見難しそうに見えますが、できるだけシンプルになるように設計されています。左側の最初のキーに、必要な変数名を記入します。この変数はサーボの位置を制御するので、servoPosと呼ぶことにします。

その横のボックスには、その機能を簡単に説明することができます。今度はコントローラーを手に取り、使いたいサーボスティックを動かしてみてください。少し実験してみると、右手の親指がX回転ボックスに対応することがわかります。変数servoPosとこのボックスの間に線を引きます。

ここで、設定をデータファイルとして保存する必要があります。ウィンドウの右上にある、デバイスの役割フィールドとファイル名フィールドを埋めてください。

ファイル名はコード内で使用するため、重要です。xbsという名前でシンプルにしています。Validate "をクリックし、"Save "をクリックする。これは、後で使用できるように、コントローラへの指示のファイルを書き込みます。

カスタムスケッチフォルダを用意する

作業フォルダを設定しましょう。空白の加工スケッチを開き、好きな名前を付けて保存します。これにより、保存場所にそれ用のディレクトリが作成されます。

Documents/Processing/libraries/GameControlPlus/examples/Configurator に移動し、data と書かれたフォルダをコピーしてください。このフォルダには、先ほど作成した設定ファイルが入っています。新しく保存されたブランクスケッチのディレクトリに移動し、データフォルダを貼り付けます。

カスタムスケッチの作成

これですべてが整ったので、2つのライブラリを使ってスケッチを始めることができます。これから順を追って説明しますが、もし続けるなら、完全なスケッチとデータフォルダをダウンロードすることができます。ArduinoのCOMポートに合わせて、コードの修正が必要な場合があります。

まず、必要なライブラリをすべてインポートします。

import processing.serial.*;import net.java.games.input.*;import org.gamecontrolplus.*;import org.gamecontrolplus.gui.*;import cc.arduino.*;import org.firmata.*;

また、ControlDevice、I/OとArduino、そしてサムスティックの値を保持するための浮動小数点:を宣言する必要があります。

ControlDevice cont;ControlIO control;Arduino arduino;float thumb;

setup()メソッドは、小さなウィンドウとコントローラのインスタンスを作成し、デバイスを設定ファイルにマッチングさせます。このとき、コンフィギュレーションデータファイルのファイル名が正しいことを確認することが重要です。

void setup() { size(360, 200); control = ControlIO.getInstance(this); cont = control.getMatchedDevice("xbs"); if (cont == null) { println("not today chump"); // write better exit statements than me System.exit(-1); } // println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[2], 57600); arduino.pinMode(10, Arduino.SERVO);}

また、この段階で該当するコントローラーがないかを確認し、必要であればプログラムを終了します。size() で作成したウィンドウは不要ですが、 コントローラから有用な値を取得できているかどうかについては、 後で何らかのフィードバックを得ることができます。また、テスト時と同様に、ここでArduinoとピンを初期化します。

ここで、コントローラからの入力値を受け取り、サーボが使用できる値にマップする小さなメソッドを作成します。

public void getUserInput() { thumb = map(cont.getSlider("servoPos").getValue(), -1, 1, 0, 180);}

このコードでは、データファイルを使用して、名前付きコントロールのservoPosを取得し、コントローラの右手親指にリンクして、そこから値を読み込んでいます。そして、これらの値をマッピングし、thumb float変数に値を格納する。

さて、このコードは決して呼び出されることはないので、今すぐ修正しましょう。

void draw() { getUserInput(); background(thumb,100,255); arduino.servoWrite(10, (int)thumb);}

draw()は、Arduino IDEのloop()メソッドに似ています。フレームごとにgetUserInput()メソッドを呼び、サム値を更新します。この値を用いて background()の赤色値を変更し、値の変更を視覚的に表示する。そして、arduino.servoWrite company()関数を使用します。なお、servoWrite関数は2つの整数値(ピン番号と角度)を引数として使うので、親指を整数値に変換する必要があります。

コードに誤りがないか確認し、コードを保存して「実行」をクリックします。Arduinoの初期化を少し遅らせると、このようになります。

ゲームコントローラーとArduinoで制御:完了

このプロジェクトは、素晴らしいライブラリが助けになるとはいえ、経験の浅いプログラマーにとっては、いろいろな意味でかなり奥の深いものです。これは、ロボットやその他あらゆるデバイスを制御するための新しい考え方なのです。

このプロジェクトは、レーザー砲塔の作り方ガイドと完璧に連動しており、完全な制御を行うことができます。Arduinoのアラームチュートリアルのようにピエゾブザーを設定し、コントローラーでブザーの音やライトの色を変更することができます。

あるいは、十分な長さのUSBケーブルさえあれば、巨大ロボットを作って地球を征服することも可能です!

  • 2021-03-25 23:05 に公開
  • 閲覧 ( 23 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ