11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unreal Engine 4 (UE4)Advent Calendar 2017

Day 23

UE4+Arduinoでいろいろと

Last updated at Posted at 2017-12-22

あんまりUE4+Arduinoってやってる人がいないので、ちょっとArduinoについて触れてみようかなぁと。

クリエーター的視点で何ができるかなぁって感じなので、プログラマー視点で見るとちょっとそれ違うんじゃない?ってところが多いかもしれないけど、その辺は目を瞑って見てもらえればと。

まずはArduinoって何ってところだけど、今回に関してはものすごい端折った説明をすると、センサーとかの数値をプログラムとかで制御出来る用に変換する、またその逆って感じでとらえてもらえればわかりやすいと思います。

具体的に何ができるかというと、例えば以下のような感じ。


■導入方法

UE4Duinoや導入方法は↓あたりを参考にしてみてください。

Unreal Engine 4 (UE4) Advent Calendar 2015 - Unreal Engine 4とArduinoで遊ぼう(準備編)
http://pantherhead.com/blog/2015/12/21/20151222/

UE4Duino(Plugin)
https://github.com/RVillani/UE4Duino


■Arduinoから数値を受け取る

1つ目の映像は
・ArduinoでカラーセンサーからRGB値を取得
・UE4へ数値を流し込む
・マテリアルのRGB値へ反映

Arduinoでセンサーから取得したものをSerial.print(String)したものをUE4DuinoでReadするんだけど、数値をバラバラっと投げるのもどうかと思うので、取り扱いが簡単なようにいったん文字列にまとめて投げてます。

Serial.print(r);
Serial.print(",");
Serial.print(g);
Serial.print(",");
Serial.println(b);

UE4に渡される文字列
r,g,b(改行)

でUE4でもう一度数値に変換と。
Splitで「,」で区切ってバラしてます。(もっといい方法あるかも)
65f54eb022c8d66906f0eb3d0e56c2b8.png

で、Arduinoの設定にもよるんだけど、そのままだとすご勢いで数値が流れ込んできて数値が暴れまくるので、平均値とるようにしてます。
Arduino側でSerial.print()のあとにDelay()をすることで数値を投げるタイミングを制御できるけど、そのタイミングの数値が欲しいというよりは、一定時間の平均値が欲しいのでUE4側で処理してます。
あとはMake VectorしてSet Vector Psarameter Value on Materialsでマテリアルのカラーに適用。

簡単に言うとArduinoでSerial.printでデータを出して、UE4(UE4Duino)でRead Stringで受け取るだけ。
文章的に長くなってしまったけど、比較的簡単に出来るかと。


■Arduinoへ数値を渡す

2つ目の映像は
・UE4でアクションを起こしたいタイミングでArduinoへ信号を投げる(UE4Duino>Printノード)
・ArduinoでUE4からStringを受け取って指定した処理をする

Arduino側での処理はUE4からStringを1文字受け取って、その文字が何かによって処理を実行みたいな感じ。
11eb9eab584af5a4076804fbdbed70c3.png
この例では文字「o」「p」をトリガーとして使ってます。
文字列にすることも出来るけど処理方法が変わってくるので、ここではとりあえず1文字で。

↓Arduino側の処理

void loop() {
  int incomingByte = Serial.read();

  if (incomingByte != -1 ) {
    switch (incomingByte) {
      case 'o':
        digitalWrite(Relay_PIN, HIGHLOW);
        break;

      case 'p':
        digitalWrite(Relay_PIN, LOW);
        break;
    }
  } else {
        digitalWrite(Relay_PIN, LOW);
  }
}

この映像は100V(普通の壁コンセント用)のスポットライトのコードの途中を切ってリレーを間に挟んで、単純に100V電源をON/OFFしてるだけ。
(電球の負荷的にもあまりよろしくないと思うけど、リレーモジュールの検証ということで)
※感電とかいろいろと危ないので自己責任で。

Arduinoからデータを受けるのに比べてちょこっと複雑かも。


■あとはアイデア次第!

基本的にはこんな感じでUE4への入力・UE4からの出力が出来たところで、あとは何から入力するか・何へ出力するかっていうアイデア次第かなぁと。
入力系はいろいろなセンサーが手軽に手に入るし、出力系はモーターや照明など(他にあまり思いつかない…)いろいろあると思うので、気になったものは是非試してみたください。

以下、参考までに。

11
10
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
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?