7
4

More than 3 years have passed since last update.

UNITYでのARDUINO開発入門

Posted at

ソフトウェアは、Windows、Mac、Linuxで実行できるIDE開発環境であり、ユーザーはArduino用のプログラムをC / C ++で作成できます。

次の記事では、ArduinoをUnityに接続する方法、Arduinoボードに接続されているセンサーの値を取得する方法を示します。 Unityに接続すると、多くのアプリケーションに拡張できます。たとえば、BLE(Bluetooth Low Energy)を介してArduinoに接続されたHololens(ホロレンズ)を使用して、周囲のデバイスを制御します。

UNITYでのARDUINO開発入門

次の記事では以下を使用します。

image.png
Arduino R3ボード以外は、ESP8266またはESP32組み込みのBluetoothおよびwifiも含めて使用できます。 または、M5Stackの中にBluetooth、Wifi、加速度センサー、バッテリー、TFTスクリーンという統合モジュールを全部入って使用できます。 すべてがC ++およびArduinoIDEを使用してプログラミングまたはVisual Studioコードをプログラミングしますが、PlatformIOプラグインをインストールする必要があります。

ダウンロードおよびインストール方法

1. Arduino IDEをインストールする

以下のリンクから、OSに適切なバージョンを選択してインストールをダウンロードします。

https://www.arduino.cc/en/Main/Software
image.png

2. Javaをインストールする

以下のリンクから、該当なOSバージョンを選択してインストールします。
今回の実例ではWindows-x64環境を使用しているので、画像のようなJavaバージョンを選択します。
https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
image.png

3. 初期設定

ArduinoIDEのインストール後、初期設定を行います。
「Tools」→「Board」→「Arduino Uno」を選択します。
image.png
「Tools」→「Serial Port」→「COM3」使用しているUSBポートを選択します。
image.png
最後「Tools」→「Programmer」→「AVR ISP」を選択します。
image.png

4. 超音波距離計センサー・ボード設定

以下の画像のように設置します。
image.png

ピン[GND] ↔  [POWER/-]
ピン[VCC] ↔  [POWER/+]
ピン[TRIG] ↔  [INPUT (digitalport)]
ピン[ECHO] ↔  [OUTPUT (Analogport)]
距離測定のため、センサ [TRIG] から非常に短いパルス信号 (5マイクロ秒 – ピーク) を放出します。 その後、センサーはPINから反射信号を受信するまでセンサ [ECHO] でHIGHパルスを生成します。 パルス幅は、超音波がセンサーから送信されて戻ってくる時間に相当します。

空気中の音速は340 m / s (物理定数)で、29,412マイクロ秒/ cm (106 /(340 * 100))に相当します。 時間を計算したのち、29,412で除算して距離を算出します。

5. ArduinoIDEでのプログラミング

const int trig = 12;
const int echo = 11;
void setup()
{
​Serial.begin(9600);
​pinMode(trig,OUTPUT);
​pinMode(echo,INPUT);
}
void loop()
{
​unsigned long duration;
​int distance;
digitalWrite(trig,0);
​delayMicroseconds(2);
​digitalWrite(trig,1);
​delayMicroseconds(5);
​digitalWrite(trig,0);
​duration = pulseIn(echo,HIGH);
​distance = int(duration/2/29.412);
​Serial.print(distance);
​Serial.println("cm");
​delay(200);
}

6. シリアルモニタで結果を確認

image.png

7. Unity環境へのArduinoを接続する

Unityを起動します。
「File」→「Build Settings…」→「Player Settings」→「Api Compatibility Level」を選択し、「Api Compatibility Level」 で「.NET2.0」を「.NET4.0」に変更します。
image.png
image.png
UI背景を作るため、「Hierarchy」のラベルの下にある「Create」ボタンを選択し、「UI」→「Image」を選択します。
image.png
そのままだと追加した「Image」は小さいので、全面に拡大します。
Hierarchy」内の「Image」を選択し、右側の「Inspector」内に表示されている「Anchor」の画像を選択します。
image.png
「Alt」キーを長押ししたまま、下図に示す画像を選択します。
image.png
超音波センサの値を表示するため、UIの上にテキストを追加します。
背景を追加するステップと同様に、「Hierarchy」のラベルの下にある「Create」ボタンを選択し、「UI」→「Text」を選択します。
image.png

そのままだと追加した「Text」は小さいので、下図赤枠内のように設定して「Text」を大きくしてください。
image.png

「Project」タブの下にある「Create」ボタンを選択し、「C# Script」を選択して「C# Script」ファイルを作成します。
任意のファイル名を設定してください。
image.png

以下のコードを記述します。

public class ArduinoController : MonoBehaviour
{
private Text m_DistanceText; //距離の表示するテキスト
private SerialPort m_SerialPort; //USBポート

void Start()
{
    m_DistanceText = FindObjectOfType<Text>(); //シンでのテキストを探す
    m_SerialPort = new SerialPort(“COM5”, 9600); //ポートを指定する
    m_SerialPort.Open(); //ポートを開く
}

void Update()
{
    if (m_SerialPort.IsOpen) // Arduinoと接続することを確認
    {
        string data = m_SerialPort.ReadLine(); // Arduinoからのデータを取得する
        float dis = 0;
        if (float.TryParse(data, out dis)) //Arduinoからのデータは数かどうか確認する
        {
            m_DistanceText.text = dis + “cm”; //画面に表示する
        }
    }
}
 private void OnApplicationQuit()
{
    m_SerialPort.Close();//アプリを閉める時ポートを閉める
}

}

最後に「Canvas」オブジェクトに先ほど記述したスクリプトを追加します。
「Hierarchy」内の「Canvas」を選択し、右側に表示される「Add Component」ボタンを選択して先ほど作成したスクリプトを選択します。
image.png
再生ボタンを押下すると、センサ~対象物までの距離が結果として表示されます。
image.png

デモ動画

Arduino UNO R3とHC SR04のデモ動画

以下の動画は超音波距離計センサーの値を取得してリアルタイムでUnityに表示します。さらにHC-05やHC-10(BLE)というブルートゥースモジュールを利用してケーブルなしデータを伝送することができますが、回路の電源として追加のバッテリーモジュールが必要なのでM5Stackのほうがお勧めします。
Arduino UNO R3およびHC SR04超音波センサーを使用したUnityによる近接センサー回路のArduinoデモ

Arduino UNO R3およびHC SR04超音波センサーを使用したUnityによる近接センサー回路のArduinoデモ

Source: https://onetech.jp/blog/unityでのarduino開発入門-6473

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4