カテゴリー別アーカイブ: チュートリアル

2020環境心理学会WS

今回はUnityを使ってオンライン実験を行うことを想定したワークショップです。Unityのインストールから基本的な操作方法の学習、FPS(1人称視点)コントローラの導入、景観の作成、Web上での公開方法までを扱います。これらの動画では、以下のアセット(ソフトウェア資産)を使います。
Standard Assets (for Unity 2018.4)
AllSky Free – 10 Sky / Skybox Set
Rock package

1.Unityのインストール
開発元は、UnityHubを使ったインストールを推奨しているようなので、ここでもまずはUnityHubをインストールし、つぎにダウンロードアーカイブからUnityをインストールします。Unity にはたくさんのバージョンがありますが、ここでは2019.4.12をインストールしておくようにしてください。

2.Unityエディターを使う
視点の変更やオブジェクトの配置など、エディタ操作の基本を学びます。Unityエディターを使うにはUnityでアカウントを登録する必要があります。googleアカウントを持っている方は、それを使うこともできます。また、Visual Studio(プログラムエディタ)を使うために、Microsoftのアカウントが必要になりますので、必要に応じて用意してください。

「マウス中央ボタンドラッグ」で視点移動
「Alt+マウス左ボタンドラッグ」で視点回転
「F」キーで選択中のオブジェクトを視点の中心にする

3.FPSコントローラを設定する
FPSコントローラーを配置し、一人称視点で世界の中を動き回る方法を学びます。FPSコントローラで飛び石を渡る簡単なゲームを作成してみます。

「Ctrl+D 」でオブジェクトを複製する(Duplicate)
「Ctrl+P」でゲームモードに移行するorエディターに復帰する

4.Terrain(地形)を作成する
Unityを使った地形作成は、箱庭を作っているような楽しさがあります。動画では大急ぎで作っていますが、少し時間をかけてディテールにこだわって作っていただくと、楽しく学べると思います。青空、夕空、曇り空の3種類を作り、スクリプトで切り替えられるようにします。

5.WebGL形式でビルドして公開する
公開しないと閲覧してもらえないので、WebGL形式でのビルドは非常に重要なプロセスです。しかし、WebGL自体が比較的新しい技術ということもあり、難易度は高めです。パソコンに登録されたユーザー名や作業フォルダ名に日本語が含まれていると、ビルドに失敗する事があるようです。

自分のWebサイトをもっていない場合は、UnityRoomのようなWebGL形式のコンテンツを無料で公開させてくれるサイトを利用する事も可能です(ただし広告が出ます)。レンタルサーバーはさくらインターネットロリポップなどで年間5000円程度で借りる事ができるので、実験用にはこちらが良いと思います。

2015日本心理学会TWS

日本心理学会第79会大会において、チュートリアルワークショップを開催しました。

SvHbRozEQCiiRaO2UtOWu6ngctu4gE58SmCMK1Qc3PNuIK855xqWq02NDZ_fVTssGRfexw=w1045-h728

当日は約30名の方々にご参加いただくことができました。前半は、皮膚温測定器を用いた実験を、後半は心電図測定器により心拍ゆらぎを測定する実験を行いました。後半はやや時間不足となりましたが、概ね予定通りの実験を時間内にこなすことができました。

当日用いた資料:TWS2015A_150924

後半の心拍ゆらぎに関しては、一部しか結果を報告できなかったため、下記に参加してくださった方の平均値を示します。

TWS2015

実験のスケジュールは、安静5分、パズル課題5分、再び安静5分というものでした。パズル課題中(赤線枠内)、IBIは減少し、RMSSDに関しても、やや低下がみとめられました。測定したデータに関しては、6名中5名が問題なく解析可能でしたが、1名の方に関しては、おそらくR波検出スレッショルドが適切でなかったため、ほとんどの期間が解析不能でした。したがって、上記グラフは5名分の結果で算出しました。

来年以降も、機会があれば再びWSを開催したいと思います。参加してくださった皆さま、ありがとうございました。

皮膚温測定プログラム

ここではArduinoで皮膚温を測る基本的なプログラムを紹介していきます。センサーはLM35DZをA0へ入れることを想定しています。

ファイル:temp1
内容:とりあえずアナログチャンネルから皮膚温を読む

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int analogValue = 0; // アナログ値を格納する変数

void setup(){
Serial.begin(9600); // シリアルポートを9600bpsで開く
}

void loop(){
analogValue = analogRead(0); // アナログピン0から読み取る
float temp;

temp=(double)analogValue/1024*500.0;

Serial.print(temp); //読んだ値をPCへ送る
Serial.println(); // 改行を送信
delay(100); // 100ミリ秒停止
}

ファイル:temp2
内容:10回サンプルし、その平均を表示する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int v = 0; // アナログ値を格納する変数
float sum;
float average;

void setup(){
Serial.begin(9600); // シリアルポートを9600bpsで開く
}

void loop(){
sum=0;
for(int i=0;i<10;i++){
sum = sum+analogRead(0); // アナログピン0から読み取る
}
average=sum/10.0;
float temp;
temp=(double)average/1024*500.0;

Serial.print(temp); //読んだ値をPCへ送る
Serial.println(); // 改行を送信
delay(100); // 100ミリ秒停止
}

ファイル:temp3
内容:100回サンプルし、その平均を表示する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int v = 0; // アナログ値を格納する変数
float sum;
float average;

void setup(){
Serial.begin(9600); // シリアルポートを9600bpsで開く
}

void loop(){
sum=0;
for(int i=0;i<100;i++){
sum = sum+analogRead(0); // アナログピン0から読み取る
}
average=sum/100.0;
float temp;
temp=(double)average/1024*500.0;

Serial.print(temp); //読んだ値をPCへ送る
Serial.println(); // 改行を送信
delay(100); // 100ミリ秒停止
}

実際に動作させてみると、サンプル数が多いほど皮膚温の変化が安定していることがわかります。Arduinoはそこそこのサンプル速度が出るので、なるべく多くサンプルし、その平均を求めることで、より正確な温度を求めることができます。