UnityでのArduino開発入門

目次

  1. Arduinoとは
  2. デバイス
    • 回路
    • センサー
    • 他のデバイス
  3. Arduino環境設定
    • ArduinoIDEのインストール
    • 超音波距離計センサーのプログラミング
  4. Unity環境からArduinoへの接続
    • UI開発
    • Unityでの結果表示
    • デモ動画

1.Arduinoとは

Arduinoは、電子の興味を持つ人、学生、または専門家がセンサーで環境と相互作用するデバイスを作成するのを支援することを目的に構築されたオープンソースのハードウェアおよびソフトウェアプラットフォームです。

この記事の中でUSBゲートでArduinoボートとUnityと接続して超音波距離計センサーの値をUnityのUIに表示させるという簡単なデモを紹介したいと思います。

ハードウェアには、AVR Atmel 8ビットまたはARM Atmel 32ビットに基づいて設計された回路基板が含まれ、現在のモデルには1つのUSBポート、6ピンのアナログ、14ピンI / Oデジタルが装備されています。

Hướng-dẫn-kết-nối-Unity-với-Arduino-qua-cổng-USB

基本的なArduino回路基板

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

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

2.デバイス

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

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

ESP8266-hoặc-ESP32-hoặc-module-tích-hợp-M5Stack

ESP8266またはESP32またはM5Stackは、Bluetooth、WiFi、加速度センサー、バッテリー、TFTスクリーンで利用可能です。

3.Arduino環境設定

           Arduino IDEをインストールする

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

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

Javaをインストールする

以下のリンクから、該当なOSバージョンを選択してインストールします。

今回の実例ではWindows-x64環境を使用しているので、画像のようなJavaバージョンを選択します。

https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

 

 初期設定

  • ArduinoIDEのインストール後、初期設定を行います。
  • Tools」→「Board」→「Arduino Uno」を選択します。

  • Tools」→「Serial Port」→「COM3」使用しているUSBポートを選択します。

  • 最後Tools」→「Programmer」→「AVR ISP」を選択します。

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

  • 以下の画像のように設置します。

  • ピン[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で除算して距離を算出します。

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);
}

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

4.  Unity環境へのArduinoを接続

  • Unityを起動します。
  • File」→「Build Settings…」→「Player Settings」→「Api Compatibility Level」を選択し、Api Compatibility Level」 で.NET2.0」を「.NET4.0」に変更します。

  • UI背景を作るため、「Hierarchy」のラベルの下にある「Create」ボタンを選択し、「UI」→「Image」を選択します。

  • そのままだと追加した「Image」は小さいので、全面に拡大します。
  • Hierarchy」内の「Image」を選択し、右側の「Inspector」内に表示されている「Anchor」の画像を選択します。

  • Alt」キーを長押ししたまま、下図に示す画像を選択します。

  • 超音波センサの値を表示するため、UIの上にテキストを追加します。
  • 背景を追加するステップと同様に、「Hierarchy」のラベルの下にある「Create」ボタンを選択し、「UI」→「Text」を選択します。

 

 

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

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

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

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」ボタンを選択して先ほど作成したスクリプトを選択します。

  • 再生ボタンを押下すると、センサ~対象物までの距離が結果として表示されます。

デモ動画

 Arduino UNO R3とHC SR04のデモ動画

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

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

M5Stackでのデモ動画

           M5Stackでは、TFTディスプレイを使用して結果を表示できるため、Unityは必要ありません。 インターフェイスは高度にカスタマイズ可能で、ビデオでは結果を表示するためにM5Avatarライブラリを使用しました。 さらに、M5StackはESP32ボードを使用しているため、Unityまたは他の言語のAndroid / iOSコードを介して転送するために拡張できるwifiおよびbluetoothで使用できます。

M5Stackによる距離センサー回路のArduinoデモ

■本件に関しまして問い合わせ

https://onetech.jp/contact

お問い合わせ

返信を残す

お問い合わせ