Arduino(アルドゥイーノ)とは、初心者でも使えるマイコンボードとして開発されました。Bluetoothモジュール 、イーサネットシールド 、温度センサー、超音波距離センサー などに応用可能です。Iot機器を簡単に作ることができます。今回はベトナムで超音波距離計センサーの値を取得してリアルタイムでUnityに表示します。
1.Arduino(アルドゥイーノ)とは
Arduinoは、電子の興味を持つ人、学生、または専門家がセンサーで環境と相互作用するデバイスを作成するのを支援することを目的に構築されたオープンソースのハードウェアおよびソフトウェアプラットフォームです。
この記事の中でUSBゲートでArduinoボートとUnityと接続して超音波距離計センサーの値をUnityのUIに表示させるという簡単なデモを紹介したいと思います。
ハードウェアには、AVR Atmel 8ビットまたはARM Atmel 32ビットに基づいて設計された回路基板が含まれ、現在のモデルには1つのUSBポート、6ピンのアナログ、14ピンI / Oデジタルが装備されています。
ソフトウェアは、Windows、Mac、Linuxで実行できるIDE開発環境であり、ユーザーはArduino用のプログラムをC / C ++で作成できます。
次の記事では、ArduinoをUnityに接続する方法、Arduinoボードに接続されているセンサーの値を取得する方法を示します。 Unityに接続すると、多くのアプリケーションに拡張できます。たとえば、BLE(Bluetooth Low Energy)を介してArduinoに接続されたMicrosoft Hololens(ホロレンズ)を使用して、周囲のデバイスを制御します。
2.デバイス
次の記事では以下を使用します。
Arduino R3ボード以外は、ESP8266またはESP32組み込みのBluetoothおよびwifiも含めて使用できます。 または、M5Stackの中にBluetooth、Wifi、加速度センサー、バッテリー、TFTスクリーンという統合モジュールを全部入って使用できます。 すべてがC ++およびArduinoIDEを使用してプログラミングまたはVisual Studioコードをプログラミングしますが、PlatformIOプラグインをインストールする必要があります。
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デモ
ONETECHの先端テクノロジー開発サービス(IoT/5G/Robot/Drone)
日本国内のIT人材不足問題は深刻であり、「働き方改革」などの現代的な働き方がトレンドになっています。一方で、ブロックチェーン、ビッグデータ、ロボティクス、ドローン、5G、IoTやAIなどの高度なテクノロジーを導入する需要が高まっており、多くの企業がITリソース不足に苦しんでいます。
その技術力の高さを示すのが、同社の得意な開発分野です。例えば、AI(人工知能)、VR(仮想現実)やAR(拡張現実)といった先端的なテクノロジーを専門に習得した人材が同社には多く在籍しています。それらの先端技術とWebシステムや業務システム、アプリを組み合わせ、お客様のご要望に応じた、「最適なシステムをリーズナブルに」ご提案をしてくれるのがOne Technology Japanです。
■ 本件に関しまして問い合わせ
■ https://onetech.jp/contact