今回は、日本バイオフィードバック学会で、皮膚温バイオフィードバック装置作成を題材としたワークショップを開催します。資料、設計ファイル、プログラム等、一式を以下にのせておきます。
プレゼンファイル:BFWS160610_
プログラム一式:ArduBF160610
3D設計ファイル:BFcase
使用部品リスト:BFParts
今回は、日本バイオフィードバック学会で、皮膚温バイオフィードバック装置作成を題材としたワークショップを開催します。資料、設計ファイル、プログラム等、一式を以下にのせておきます。
プレゼンファイル:BFWS160610_
プログラム一式:ArduBF160610
3D設計ファイル:BFcase
使用部品リスト:BFParts
日本心理学会第79会大会において、チュートリアルワークショップを開催しました。
当日は約30名の方々にご参加いただくことができました。前半は、皮膚温測定器を用いた実験を、後半は心電図測定器により心拍ゆらぎを測定する実験を行いました。後半はやや時間不足となりましたが、概ね予定通りの実験を時間内にこなすことができました。
当日用いた資料:TWS2015A_150924
後半の心拍ゆらぎに関しては、一部しか結果を報告できなかったため、下記に参加してくださった方の平均値を示します。
実験のスケジュールは、安静5分、パズル課題5分、再び安静5分というものでした。パズル課題中(赤線枠内)、IBIは減少し、RMSSDに関しても、やや低下がみとめられました。測定したデータに関しては、6名中5名が問題なく解析可能でしたが、1名の方に関しては、おそらくR波検出スレッショルドが適切でなかったため、ほとんどの期間が解析不能でした。したがって、上記グラフは5名分の結果で算出しました。
来年以降も、機会があれば再びWSを開催したいと思います。参加してくださった皆さま、ありがとうございました。
教育用に、4人同時に皮膚温が計測できる装置を作成しました。USBバスパワーで動作し、4人分の皮膚温が液晶ディスプレイに表示されます。測定値は10倍で表示されます。
構成部品は以下のとおりです。
(1)ArduinoUNO x1
(2)ブレッドボード x1
(3)温度センサー x4
(4)液晶ディスプレイ x1
(5)サーボケーブル(80cm) x4
(6)単芯ケーブル 各色適宜
(7)収縮チューブ 各色適宜
部品リスト:standalone_temp4
主要な部品は秋月電子通商で入手できます。サーボケーブルは、ラジコン部品ショップで、単芯ケーブル(ジャンプワイヤーでも良い)と収縮チューブは秋葉原で入手しています。
測定・表示ソフトウェアは、Arduino開発環境(1.0.5)で作成しました。液晶ディスプレイ制御ライブラリは、オレ工房様から頂きました。
ソフトウェア:temp4_150302
下記は、安静3分→スピーチ課題3分→安静3分のスケジュールで、30秒おきに皮膚温を測定し、プロットした事例です。精神負荷による皮膚温低下が検出できています。
関係者の皆様,日本心理学会のTWS,お疲れ様でした。
早速ですが,「Macで動作をさせるには(草野先生)」の記事を参考にさせていただき,TWSの指尖容積脈波の計測を行いました。(測定PC:Mac Book Pro (OS X))
まず,草野先生から提供していただいたスライド6〜12の「一時データ保存先」の確認を行いました。
ユーザーが1つしかないPCでは基本的に「共有とアクセス」の設定が「読み/書き」になっています。
そのため,複数のユーザーを作成しているPCにおいて設定を変える作業が必要になります。
次に,測定を行いました。
Arduinoでのport設定は「COM」ではなく,私のPCの場合は「/dev/tty.usbmodem1411」と表示されたので,
この名称を「settings.txt」のポート名に修正しました。
そして,Processingを用いて測定するとエラーが出ました。
(Error, disabling serialEvent( ) for /dev/tty.usbmodem1411 null)
参考スライドにも書かれていたエラーです。
スライド13の「Arduinoの挿し直し」を対応策として行ったところ,
エラーが出なくなり,問題なく測定することができました。(写真参照)
しかし,続けて計測すると先ほどと同様のエラーが出てしまい,
測定ができませんでした。
再度,対応策として挿し直したところ測定ができました。
結果として,測定するたびに挿し直さなければいけないということでした。
Mac本体の「システム情報」を確認すると,
Arduinoの接続はProcessingでエラーが出ているときにも確認できていました。
そのため,ProcessingでのエラーはArduinoを認識できなくなって生じたわけではないようです。
現状の報告になりますが,どうぞよろしくお願いいたします。
解決策がわかりましたらご連絡いたします。
東京海洋大学の草野先生より、指尖容積脈波のプログラムをMacで動作させる方法について情報提供をいただきました。Macユーザーの方は、ぜひお役立てください。
呼吸の測定を行いたいと思っているのですが,
既製品の呼吸センサはどうも使用しにくいということもあり,
某既成品の呼吸センサの原理(呼吸によって形状が変化する部品内に圧センサを設置,形状変化に伴い抵抗値が変わることで呼吸を捉える)をDIYで作成できるのでは?ということで作成・計測してみました。
クリアケースをハサミで適当なサイズにカットし、間に圧センサーと消しゴムを挟んであります。このセンサーの両端に伸縮性の低い紐(具体的には信号線)を結びつけ、胴回りに一周させて固定します。呼吸してお腹が出っ張ると、紐がセンサーの両端を引いて、消しゴムが圧力センサーに押し付けられる仕組みになってます。・・・どうやらちゃんと測定できるようです(写真を参照)。
細かい作成方法に関してはもう少ししっかりと作成できてから公開できれば,と思いますので,今回は数枚の写真を掲載します。
ご不明な点・質問等があればコメントに書き込んでいただければと思います。
どうぞよろしくお願いいたします。
ここでは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はそこそこのサンプル速度が出るので、なるべく多くサンプルし、その平均を求めることで、より正確な温度を求めることができます。