UNITYでのARDUINO開発入門

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

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

## [UNITYでのARDUINO開発入門](https://onetech.jp/blog/unity%e3%81%a7%e3%81%aearduino%e9%96%8b%e7%99%ba%e5%85%a5%e9%96%80-6473)

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

![image.png](https://onetech.jp/blog/wp-content/uploads/2019/11/Arduino-UNO-R3-v%C3%A0-C%E1%BA%A3m-bi%E1%BA%BFn-si%C3%AAu-%C3%A2m-HC-SR04-1.jpg)
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/c966f4da-0fe4-d661-0ade-9b7c7c412efa.png)


### 2. Javaをインストールする
以下のリンクから、該当なOSバージョンを選択してインストールします。
今回の実例ではWindows-x64環境を使用しているので、画像のようなJavaバージョンを選択します。
https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/c22ad9b1-f476-e255-a531-77f21c54d26f.png)
 

### 3. 初期設定
ArduinoIDEのインストール後、初期設定を行います。
「Tools」→「Board」→「Arduino Uno」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/7841d1f1-0216-8e66-cb63-01b3a99d8411.png)
「Tools」→「Serial Port」→「COM3」使用しているUSBポートを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/9aa18f4e-5417-07de-e869-2eedf266aae1.png)
最後「Tools」→「Programmer」→「AVR ISP」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/15ceb477-973d-1a47-3258-ac710f702cb3.png)


### 4. 超音波距離計センサー・ボード設定
以下の画像のように設置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/02139107-e19b-157d-e6e5-eb22d59f09a8.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/c13fb98f-2448-8d61-e4dc-a6eb5f50ccf6.png)

### 7. Unity環境へのArduinoを接続する
Unityを起動します。
「File」→「Build Settings…」→「Player Settings」→「Api Compatibility Level」を選択し、「Api Compatibility Level」 で「.NET2.0」を「.NET4.0」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/99fe6c1e-679e-3b2e-3269-b8131ed8ec91.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/195b9a8f-cb4b-503f-59a4-59459d3571f9.png)
UI背景を作るため、「Hierarchy」のラベルの下にある「Create」ボタンを選択し、「UI」→「Image」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/9118c94e-c8cc-7eba-893e-fbd155331aff.png)
そのままだと追加した「Image」は小さいので、全面に拡大します。
Hierarchy」内の「Image」を選択し、右側の「Inspector」内に表示されている「Anchor」の画像を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/a97df4f5-9319-9fea-aa7e-52a26bee3a20.png)
「Alt」キーを長押ししたまま、下図に示す画像を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/7efc9ed1-8c11-70dc-9be1-79dccedb894e.png)
超音波センサの値を表示するため、UIの上にテキストを追加します。
背景を追加するステップと同様に、「Hierarchy」のラベルの下にある「Create」ボタンを選択し、「UI」→「Text」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/435a826e-ec0a-6131-93ec-8d45ffc8365c.png)

そのままだと追加した「Text」は小さいので、下図赤枠内のように設定して「Text」を大きくしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/11685c6b-d18f-b68b-6ecd-9c9c05a944c0.png)

「Project」タブの下にある「Create」ボタンを選択し、「C# Script」を選択して「C# Script」ファイルを作成します。
任意のファイル名を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/bedb5096-d4b2-16a4-a699-c80072f46e40.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/eeefc3b8-e347-2c6e-bce9-229717fb8878.png)
再生ボタンを押下すると、センサ～対象物までの距離が結果として表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/28556b5d-96fe-8118-4e10-45f609a0f3f7.png)

デモ動画
## Arduino UNO R3とHC SR04のデモ動画

以下の動画は超音波距離計センサーの値を取得してリアルタイムでUnityに表示します。さらにHC-05やHC-10（BLE）というブルートゥースモジュールを利用してケーブルなしデータを伝送することができますが、回路の電源として追加のバッテリーモジュールが必要なのでM5Stackのほうがお勧めします。
[![Arduino UNO R3およびHC SR04超音波センサーを使用したUnityによる近接センサー回路のArduinoデモ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387054/b87f4ba9-b491-b5cd-7340-8b6568e5f3fd.png)](https://www.youtube.com/watch?v=pPfdyLLGE8g) 

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

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