卓上解説室

筆者TellerGがyoutube等に投稿した動画の解説用として試験的に運用中。

卓上工作室 A-003 解説

卓上工作室 A-003

www.youtube.com

以下折り畳み内にて動画後半部分を解説させていただきます。
(注意)素人解説です。詳しい方からのご指摘、ご指南等はいつでもお待ちしております。

目次

  • 今回制作した回路
  • Arduino側プログラム
  • Unity側プログラム

今回制作した回路

ブレットボード図

回路図

※動画中でも解説していますが回路図内の可変抵抗の抵抗値はどちらも10kΩです。

Arduino側プログラム

int v0 = 0;
int v1 = 0;

void setup() {
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);

  Serial.begin(9600);
}

void loop() {
  v0 = analogRead(A0);
  v1 = analogRead(A1);

  Serial.print(v0);
  Serial.print(",");
  Serial.println(v1);
}

アナログピンA0、A1で読み取ったポテンショメーターからの信号をそれぞれカンマで区切ってシリアル通信でPCに送信するプログラムです。
実際に通信している様子は動画本編をご覧ください。

Unity側プログラム

動画内でも紹介していますが以下のページの内容を参考にさせていただきました。ありがとうございました。
nn-hokuson.hatenablog.com

大部分は引用ですので詳細はリンク先ページをご覧ください。

ここでは動画内でも示した改変部分のみのスクリプトを示します。

            string vol = this.serial.ReadLine(); //シリアル受け取り
            string[] volArray = vol.Split(','); // カンマ( , )で文字列を分解 
            vol1 = int.Parse(volArray[0]); //stringからintに変換
            vol2 = int.Parse(volArray[1]);
            Debug.Log(vol1);
            Debug.Log(vol2);

ここでは、まず変数 vol にシリアル通信で送信されてくる先ほどの文字列を受け取ります。
続いて、 Split を用いてカンマ位置で文字列を分解、配列 volArray にそれぞれ取り出します。
その下2行で文字列( string )から整数( int )データに変換しています。


次に、実際にunity内のデータを操作するスクリプトです。

sing System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cubetest1 : MonoBehaviour
{ 
    public tester tester;
    //可変抵抗ごとの個体差や、実際に体に装着した際の調整をインスペクタからできるようにしておく。
    public float minvol = 0; 
    public float Maxvol = 0;

    private void Start()
    {
        Maxvol = Maxvol - minvol;
    }

    void Update ()
    {
        float vol = tester.vol1;  //※1
        vol = vol - minvol ;
        this.transform.localScale = new Vector3(vol / Maxvol+1, vol / Maxvol+1, vol / Maxvol+1);
	}
}

先ほど読み取って分割した数値を参照してCubeのスケールを変化させるスクリプトです。
実際の動作は動画をご覧ください。

※1 vol1 部分が参照する変数名なのですが、ここをpublic string 等でインスペクタから変更できるようにしたいのですがどうにもうまくいきません(unity上で動作させようとするとエラーを吐く)。その結果直接変数名を記述し、ポテンショメータごとにスクリプトを分ける不格好な実装になっています。どなたかの意見をお待ちするとともに、解決法が分かれば追記したいと思います。


以上、補足解説でした。
このような解説を書くのが初めてなため不出来であることをお許しください。
ご意見、ご指摘等ご遠慮なくコメントいただければ今後の参考となります。何卒よろしくお願いいたします。