Processing_プログラム解説

はじめに
前回のBFプログラム解説に続き, processingのプログラムについて要点を絞って解説していく。 processingのプログラム解説が終われば, 卒論Ⅰは残りまとめだけ。

要点
・.csv発行
・時刻表示, カウント
・皮膚温の波形をプロット
・Arduino開発環境と連携し, シリアルモニタの値を確認(安静期間の確認も)

SBF230707(ST波形表示, シリアル通信)

import processing.serial.*;

Serial myPort;
String portName = "COM6"; //BT serial port
int baudRate = 115200;
int dataPlotWidth = 640;
int dataPlotHeight = 200;
float[] data = new float[5];
String[] dataMV = new String[5];
float[] prevData = new float[5];
color[] colors = {
  color(255, 0, 0), 
  color(0, 0, 255), 
  color(0, 0, 0, 0), 
  color(0, 0, 0, 0)
};
int datacount=0;
String OutFileName;
String buf2;
PrintWriter writer;
int startMillis;


void setup() 
{
  //size(dataPlotWidth, dataPlotHeight);
  size(600,500);
  myPort = new Serial(this, portName, baudRate);
  
  OutFileName=getTimestamp()+".csv";
  writer = createWriter("./data/"+OutFileName); // Create a new file in the sketch directory
  buf2="";

}

void draw()
{
  
  if((datacount % 600) == 0) {
    background(255);  // clear screen    
    fill(0, 0, 0); // set the fill color to black
    textSize(12);
    text("40 deg", 10, 20); // 
  }
  
  while (myPort.available() > 0) 
  {
    String inString = myPort.readStringUntil('\n');
    
    if (inString != null) 
    {
      inString = trim(inString);
      String[] parts = split(inString, ',');
      
      if(parts.length >3) 
      {
        for (int i = 0; i < 5; i++) 
        {
          prevData[i] = data[i];
          data[i] = map(float(parts[i]), 20, 40, 0, 500);  // Assuming your data is in the range 0-200
          dataMV[i] = parts[i];
          
        }
        String stamp=getTimestamp2();
        String etime= getElapsedTime();
        String buf=stamp+","+etime+","+dataMV[0] + "," + dataMV[1] + "," + dataMV[2] + "," + dataMV[3] + "," + dataMV[4];
        println(buf);
        buf2=buf2+buf+"\n";
        
        if(datacount%10==0){
          writer.print(buf2);
          writer.flush();
          buf2="";
        }

        int xp = datacount%600;
        strokeWeight(1);
        for (int i = 0; i < 1; i++) 
        {
          stroke(colors[i]);
          line(xp-1, 500 - prevData[i], xp, 500 - data[i]);
        }
        
        drawCurrentTime();
        drawElapsedTime();

    
        datacount++;
      }
    }
  }
}

void stop() {
  writer.flush(); // Writes the remaining data to the file
  writer.close(); // Finishes the file
  super.stop();
}

Subroutine1(現在時刻, 経過時間)

String getTimestamp() {
  int y = year();
  int m = month();
  int d = day();
  int h = hour();
  int min = minute();
  int s = second();

  // Use nf() to add leading zeroes to each time component if needed
  String timestamp = nf(y, 4) + nf(m, 2) + nf(d, 2) + "_" + nf(h, 2) + nf(min, 2) + nf(s, 2);
  
  return timestamp;
}

String getTimestamp2() {
  int h = hour();
  int min = minute();
  int s = second();

  // Use nf() to add leading zeroes to each time component if needed
  String timestamp =  nf(h, 2) +":"+ nf(min, 2) +":"+ nf(s, 2);
  
  return timestamp;
}

void drawCurrentTime()
{
  String stamp2=getTimestamp2();
  fill(255); noStroke();
  rect(450, 5,130,50); 
  fill(0); stroke(0);textSize(24); 
  text(stamp2, 450, 30); //   
}

void drawElapsedTime()
{
  String elapsedTime = getElapsedTime();
  fill(255); noStroke();
  rect(450, 55,130,50); 
  fill(0); stroke(0);textSize(24); 
  text(elapsedTime, 450, 60);
}

String getElapsedTime() {
  int elapsedMillis = millis() - startMillis;

  int s = elapsedMillis / 1000;
  int m = s / 60;
  int h = m / 60;

  s = s % 60;
  m = m % 60;

  return nf(h, 2) + ":" + nf(m, 2) + ":" + nf(s, 2);
}

生理心理学実験_資料Ⅰ

Ⅰ計測準備

1. 主な生理指標
 ①皮膚温(Skin Temperature):リラクセーションの指標 ex)匂い, 自然環境
 ②皮膚コンダクタンス(Skin Conductance):感情やストレス ex)お笑い, ホラー
 ③心拍数(Heart Rate):身体活動,集中程度    ex)運動, 映像視聴
 ④心拍変動(Heart Rate Variability):健康,リラックス   ex)睡眠の質
 ⑤心電図:心臓の電気活動 (心臓/心拍のどちらに焦点を当てるか)

*1)  ストレス反応は,瞬時的なもの(皮膚コンダクタンス),ゆっくりしたもの(皮膚温)があるため,実験計画を踏まえどちらを使用するか判断する。ストレス, リラックス時の各生理反応は下記の通り。

2. 計測に必要なもの

 ①皮膚温:緑の計測器, メンディングテープ
 ②発汗のみ:透明の計測器, みの虫クリップ, ピンク色の電極, 手袋
 ③心拍数, 発汗:透明の計測器, 電極, 手袋
 ④ Polar H10(心拍数, 心拍変動):黒色の計測機,水(小皿程度)
 ⑤Polar Unite(心拍数, 歩数, 睡眠など):腕時計型の計測器

*2)  発汗のみ計測する場合, 「②」を使用してください。また, 青色の電極は心電図に使用するので,ピンク色の電極を使用してください。
*3)  心拍数の計測精度は, 「③→④→⑤」の順番です。運動時の心拍数を計測する際は, Polar Uniteがおすすめです。

3. 計測リンク
 計測機(①~③)はそれぞれ機体名が割り振らており,こちらのリンク内「http://kodamalab.sakura.ne.jp/~~~~~/showchannels.php」の赤文字に入力すると計測中のデータが確認できます。

 ①皮膚温:http://kodamalab.sakura.ne.jp/M2TP/showchannels.php
 ②発汗:http://kodamalab.sakura.ne.jp/M2/showchannels.php
 ③心拍数, 発汗:http://kodamalab.sakura.ne.jp/M5log/showchannels.php

*4)   Polar(計測機④, ⑤)は, 確認方法が異なるため, こちらのリンク(http://protolab.sakura.ne.jp/LAB01/?p=22881)を参照してください。

4. 計測方法
 ①皮膚温:右下スイッチを入れる (左下ボタンはイベント記録)
 ②皮膚コンダクタンス:右下スイッチを入れ,左下ボタンを押す(赤く光ればok)
 ③心拍数, 発汗:(センサを上向きとして)右下のボタンを長押し

*5) 波形が緩やかな放物線を描いていれば正常だが, ギザギザした波形の場合, 計測が失敗している可能性が高い(ex.センサの装着に問題)。

=======================================================================

Ⅱ 参照サイト

1. 計測機の引用文献
・皮膚温/心拍数, 発汗:長野・吉田(2018).
・発汗(単一):長野他(2019).
・Polar Unite/H10:POLAR社製

2. 基礎実験
・皮膚温:リンク
・発汗:リンク

3. 分析方法の解説
・分散分析等:リンク

=======================================================================

HADを使ってみる

はじめに
 卒論の統計処理を行おうとしたものの、js-starでは3要因の分散分析までしかできないことを知った。以前のブログで分析候補を挙げたところ、生理指標の大半が4, 5要因分散分析のため、かなり厳しめである。sasはちょいと面倒だし、だからといってspssを使うにも一々大学行って、21:50までしかできないから、新たなる統計ソフトのHADを使ってみる。分析したら、図表を作ってくれるらしい。

HADの詳細
・機能一覧:こちら
・DLサイト:こちら

BFプログラムの解説

はじめに
 卒論実験ⅠのBF装置の開発にソフトウェアの解説も取り入れるため、ChatGPTを用いてプログラムを解読中。といっても長野(2022)の測定器開発で半分書いてあるから、「FB有無の切り替え, 液晶ディスプレイ, 安静管理の自動化」を組み込めば終わり。Processingのプログラム解説もつけるべきか?

プログラム

#include <Adafruit_NeoPixel.h>  //LEDのライブラリ
#include <ST7032_asukiaaa.h>    //液晶ディスプレイのライブラリ

#define PIN        3   //LEDの制御ピン
#define NUMPIXELS 1    //LEDの数

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);   //LEDのライブラリを使用
ST7032_asukiaaa lcd;        //液晶ディスプレイのライブラリを使用

const int switchPin = 7;    //FB有無の切り替えに用いるスイッチ

double mv, temp0, temp1, tempd;   //温度データを格納する変数
double sum, average;    //温度データの合計値と平均値を格納
long t, t0, cnt;      //現在の時刻・温度データをサンプリングした時の時刻・温度データのサンプリング数
int Bpin = 2;  //ブザーPIN2

const int HISTORY_SIZE = 180; // 履歴のサイズ
double history[HISTORY_SIZE]; // 測定値の履歴
int historyIndex = 0;         // 履歴のインデックス

double minTemp = 0.0;  // 最小温度
double maxTemp = 0.0;  // 最大温度

bool readyFlg=false;  //安静準備フラグ

void setup() {
  pinMode(switchPin, INPUT_PULLUP);  // 内部プルアップ抵抗を有効にする

  pinMode(Bpin, OUTPUT);
  pinMode(13, OUTPUT);
  Serial.begin(115200);  //シリアル通信115200
  analogReference(INTERNAL); //参照電圧を1.1Vに設定
  cnt = sum = 0;
  pixels.begin();      //LEDを初期化

  lcd.begin(8, 2);     //液晶ディスプレイで8列2行で指定表示
  lcd.setContrast(5);  //液晶ディスプレイのコントラスト
}

void loop() {
  t0 = t;
  t = millis();        //現在時刻をms単位で取得
  mv = (double)1100 / (double)1024 * analogRead(0);  //デジタル値を電圧に変換
  sum = sum + mv;
  cnt++;        //サンプリング数のカウント
  if (t0 / 1000 != t / 1000) {    //1秒(100ms)毎に平均算出
    average = sum / (double)cnt;  //平均を計算

    temp0 = temp1;                //前回の温度を保存
    temp1 = average * 0.1;        //電圧を温度に変換
    tempd = temp1 - temp0;        //温度変化量を算出

    int mag, dir;                 //変化の程度(mag)と方向(dir)
    if (tempd > 0) {
      mag = abs(tempd * 100);
      dir = 1;                    //温度上昇時
    } else if (tempd <= 0) {
      mag = abs(tempd * 100);
      dir = -1;                   //温度下降時
    }

    int switchState = digitalRead(switchPin);

    if (switchState == LOW) {   //FBスイッチがオフの時に
      pixels.clear();
      if (dir == 1) {
        pixels.setPixelColor(0, pixels.Color(mag, 0, 0)); //温度上昇を赤で表示
        if (mag > 0) {
          tone(Bpin, 500, 10);    //温度上昇時は500Hz
        }
      }
      if (dir == -1) {
        pixels.setPixelColor(0, pixels.Color(0, 0, mag)); //温度下降を青で表示
        if (mag > 0) {
          tone(Bpin, 1000, 10);   //温度下降時は1000Hz
        }
      }
    } else if (switchState == HIGH) {         //左下のスイッチを入れるとFBなし
      pixels.setPixelColor(0, pixels.Color(0, 0, 0));    //LEDを消す
      noTone(Bpin);         //ブザー音を消す
    }

    pixels.show();

    Serial.print(temp1); //現在温度
    Serial.print(",");   //カンマ区切り
    Serial.print(tempd); //温度変化量
    Serial.print(",");
    Serial.print(mag);   //変化の強さ
    Serial.print(",");
    Serial.print(cnt);   //サンプリング数

    if(readyFlg==true){
      Serial.print(",***"); //安静期間終了時に「***」表示
    }
    else{
      Serial.print(",---"); //安静期間が終了していない場合「---」表示
    }
    
    Serial.println();   //シリアルモニタに「***/---」を表示するための空行
    sum = 0;    //合計値の初期化
    cnt = 0;
    delay(10);  //10ms単おきに行う

    history[historyIndex] = temp1;  //温度データを記録するための配列
    historyIndex = (historyIndex + 1) % HISTORY_SIZE;  //新しい温度データを保存

    minTemp = history[0];   //最小温度をデータの最初の要素で初期化
    maxTemp = history[0];   //最大温度をデータの最初の要素で初期化

    for (int i = 1; i < HISTORY_SIZE; i++) {  //温度データから最小・最大温度を算出
      if (history[i] < minTemp) {   //データ内で最小温度より低い場合
        minTemp = history[i];       //最小温度を更新
      }
      if (history[i] > maxTemp) {    //データ内で最大温度より低い場合
        maxTemp = history[i];        //最大温度を更新
      }
    }

    //3分間の皮膚温の変動が0.4℃以内の時にアスタリスク表示
    if (maxTemp - minTemp <= 0.4) {   //最大・最小温度の差が0.4℃以内の場合
      lcd.setCursor(7, 0);        //液晶ディスプレイの右上に
      lcd.print("*");             //「*」表示
      //Serial.println("***");
      readyFlg=true;
    } else {                      //条件を満たさなかった場合
      lcd.setCursor(7, 0);        //液晶ディスプレイの右上に
      lcd.print(" ");             //何も表示しない
    }

    String buf1, buf2;
    buf1 += temp1;      //buf1は現在温度
    buf2 += tempd;      //buf2は温度変化量

    lcd.setCursor(0, 0); //液晶ディスプレイの1行目にカーソルを移動
    lcd.print(buf1.c_str()); //1行目に現在温度を表示
    lcd.setCursor(0, 1);    //液晶ディスプレイの2行目にカーソルを移動
    lcd.print(buf2.c_str());  //2行目に温度変化量を表示
  }
}

【液晶ディスプレイ】

#include <ST7032_asukiaaa.h>    //液晶ディスプレイのライブラリ

ST7032_asukiaaa lcd;  //液晶ディスプレイのライブラリを使用

double temp1, tempd;   //温度データを格納する変数

double minTemp = 0.0;  // 最小温度
double maxTemp = 0.0;  // 最大温度

void setup() {
  lcd.begin(8, 2);     //液晶ディスプレイで8列2行で指定表示
  lcd.setContrast(5);  //液晶ディスプレイのコントラスト
}

void loop() {
  //3分間の皮膚温の変動が0.4℃以内の時にアスタリスク表示
  if (maxTemp - minTemp <= 0.4) {   //最大・最小温度の差が0.4℃以内の場合
    lcd.setCursor(7, 0);        //液晶ディスプレイの右上に
    lcd.print("*");             //「*」表示
    readyFlg=true;
  } else {                      //条件を満たさなかった場合
    lcd.setCursor(7, 0);        //液晶ディスプレイの右上に
    lcd.print(" ");             //何も表示しない
  }

  String buf1, buf2;
  buf1 += temp1;      //buf1は現在温度
  buf2 += tempd;      //buf2は温度変化量

  lcd.setCursor(0, 0); //液晶ディスプレイの1行目にカーソルを移動
  lcd.print(buf1.c_str()); //1行目に現在温度を表示
  lcd.setCursor(0, 1);    //液晶ディスプレイの2行目にカーソルを移動
  lcd.print(buf2.c_str());  //2行目に温度変化量を表示
}

【安静期間の自動管理化】

double temp1;   //現在温度のデータを格納する変数
double sum, average;    //温度データの合計値と平均値を格納
long cnt;      //温度データのサンプリング数

const int HISTORY_SIZE = 180; // 履歴のサイズ
double history[HISTORY_SIZE]; // 測定値の履歴
int historyIndex = 0;         // 履歴のインデックス

double minTemp = 0.0;  // 最小温度
double maxTemp = 0.0;  // 最大温度

bool readyFlg=false;  //安静期間のフラグ


void loop() {

    if(readyFlg==true){
      Serial.print(",***"); //安静期間終了時に「***」表示
    }
    else{
      Serial.print(",---"); //安静期間が終了していない場合「---」表示
    }
    
    Serial.println();   //シリアルモニタに「***/---」を表示するための空行
    sum = 0;    //合計値の初期化
    cnt = 0;
    delay(10);  //10ms単おきに行う

    history[historyIndex] = temp1;  //温度データを記録するための配列
    historyIndex = (historyIndex + 1) % HISTORY_SIZE;  //新しい温度データを保存

    minTemp = history[0];   //最小温度をデータの最初の要素で初期化
    maxTemp = history[0];   //最大温度をデータの最初の要素で初期化

    for (int i = 1; i < HISTORY_SIZE; i++) {  //温度データから最小・最大温度を算出
      if (history[i] < minTemp) {   //データ内で最小温度より低い場合
        minTemp = history[i];       //最小温度を更新
      }
      if (history[i] > maxTemp) {    //データ内で最大温度より低い場合
        maxTemp = history[i];        //最大温度を更新
      }
    }

    //3分間の皮膚温の変動が0.4℃以内の時にアスタリスク表示
    if (maxTemp - minTemp <= 0.4) {   //最大・最小温度の差が0.4℃以内の場合
      lcd.setCursor(7, 0);        //液晶ディスプレイの右上に
      lcd.print("*");             //「*」表示
      //Serial.println("***");
      readyFlg=true;
    } else {                      //条件を満たさなかった場合
      lcd.setCursor(7, 0);        //液晶ディスプレイの右上に
      lcd.print(" ");             //何も表示しない
    }

①測定している値を60回分覚えるプログラム

const int HISTORY_SIZE = 60; // 履歴のサイズを60に変更
double history[HISTORY_SIZE]; // 測定値の履歴
int historyIndex = 0;         // 履歴のインデックス


// 履歴に温度データを追加する部分
history[historyIndex] = temp1;  //温度データを記録するための配列
historyIndex = (historyIndex + 1) % HISTORY_SIZE;  //新しい温度データを保存

②180個覚えた履歴の中から最大値と最小値を求めて, その差を算出するプログラム

const int HISTORY_SIZE = 180;   // 履歴のサイズ
double history[HISTORY_SIZE];   // 測定値の履歴
int historyIndex = 0;           // 履歴のインデックス
double minTemp = 0.0;  // 最小温度
double maxTemp = 0.0;  // 最大温温度

void loop() {
    history[historyIndex] = temp1;                  // 温度データを記録するための配列に保存
    historyIndex = (historyIndex + 1) % HISTORY_SIZE; // 新しい温度データを保存するインデックスを更新

    minTemp = history[0];   // 最小温度をデータの最初の要素で初期化
    maxTemp = history[0];   // 最大温度をデータの最初の要素で初期化

    // 温度データから最小・最大温度を算出
    for (int i = 1; i < HISTORY_SIZE; i++) {
        if (history[i] < minTemp) {
            minTemp = history[i];   // 最小温度を更新
        }
        if (history[i] > maxTemp) {
            maxTemp = history[i];   // 最大温度を更新
        }
    }
}

③最大値と最小値の差が0.4℃以内であった場合は, 液晶ディスプレイにアスタリスクを表示するプログラム

const int HISTORY_SIZE = 180;   // 履歴のサイズ
double history[HISTORY_SIZE];   // 測定値の履歴
int historyIndex = 0;           // 履歴のインデックス
double minTemp = 0.0;           // 最小温度
double maxTemp = 0.0;           // 最大温度

void loop() {
    history[historyIndex] = temp1;  // 温度データを記録するための配列に保存
    historyIndex = (historyIndex + 1) % HISTORY_SIZE;  // 新しい温度データを保存するインデックスを更新

    minTemp = history[0];   // 最小温度をデータの最初の要素で初期化
    maxTemp = history[0];   // 最大温度をデータの最初の要素で初期化

    // 温度データから最小・最大温度を算出
    for (int i = 1; i < HISTORY_SIZE; i++) {
        if (history[i] < minTemp) {
            minTemp = history[i];   // 最小温度を更新
        }
        if (history[i] > maxTemp) {
            maxTemp = history[i];   // 最大温度を更新
        }
    }

    // 最大・最小温度の差が0.4℃以内の場合、アスタリスク表示
    if (maxTemp - minTemp <= 0.4) {
        lcd.setCursor(7, 0);  // 液晶ディスプレイの右上に
        lcd.print("*");       // 「*」表示
    } else {
        lcd.setCursor(7, 0);  // 液晶ディスプレイの右上に
        lcd.print(" ");       // 何も表示しない
    }
}

【FB有無の切り替え】

#include <Adafruit_NeoPixel.h>  //LEDのライブラリ
#include <ST7032_asukiaaa.h>    //液晶ディスプレイのライブラリ
 
#define PIN        3   //LEDの制御ピン
#define NUMPIXELS 1    //LEDの数
 
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);   //LEDのライブラリを使用

const int switchPin = 7;    //FB有無の切り替えに用いるスイッチ
int Bpin = 2;  //ブザーPIN2

void setup() {
  pinMode(switchPin, INPUT_PULLUP);  // 内部プルアップ抵抗を有効にする
  pinMode(Bpin, OUTPUT);

void loop() {
  int switchState = digitalRead(switchPin);
 
  if (switchState == LOW) {   //FBスイッチがオフの時に
    pixels.clear();
    if (dir == 1) {
        pixels.setPixelColor(0, pixels.Color(mag, 0, 0)); //温度上昇を赤で表示
      if (mag > 0) {
        tone(Bpin, 500, 10);    //温度上昇時は500Hz
      }
    }
    if (dir == -1) {
      pixels.setPixelColor(0, pixels.Color(0, 0, mag)); //温度下降を青で表示
      if (mag > 0) {
        tone(Bpin, 1000, 10);   //温度下降時は1000Hz
      }
    }
  } else if (switchState == HIGH) {         //左下のスイッチを入れるとFBなし
    pixels.setPixelColor(0, pixels.Color(0, 0, 0));    //LEDを消す
    noTone(Bpin);         //ブザー音を消す
  }

230714 進捗報告

進捗

1. 装置10台作成

・10台分作成完了
・毎週10人計測中→7~8月まで
・ストラップを100均で追加購入
・新しい3Dプリンタでケース作成

2. イメージ方略の選択

選択
訓練2週間後の参加者が「イメージなし方略」を選択するようになった。

理由
・温冷感, 情動イメージなどイメージするネタが尽きた
・イメージ無しだとイメージする手間が省けて皮膚温制御に没頭できる

しかし、イメージ方略を使用して慣れてきたため、訓練1週目からイメージ無しは難しいかもとのこと。そのため、訓練1週目にイメージ方略(情動, 温冷感)で感覚を掴み、以降イメージ無しで訓練を行う方法は有効?実験Ⅲや分析

3. Processing3.5.4

安静終了の合図を液晶ディスプレイ, シリアルモニタに表示するようにした。さっそく実験に導入し、動作上の問題は今のところ見られない。

4. 3週間の訓練を終えた感想

①自宅などでの訓練
・訓練を負荷と感じず、むしろリラックスできる時間となった。楽しい
・毎日寝る前に訓練を行う習慣をつけたら、眠りやすくなった。
・当初より上達した、コツを掴めた
・学内で装置を身に着けている人と訓練した
・自分の体の変化に気を向ける機会がついた

②改善点
・エンターテインメント性は欲しい(訓練が上手くいくとモニタに犬の画像などランダム表示。日によって変われば、訓練のモチベアップ?)
・自宅での訓練で、安静2分が面倒(いきなり訓練を始めたい)
・モニタの数値だとわかりづらいため、折れ線グラフとかにしてほしい

5. 生理指標

大学での各訓練期間別の皮膚温制御成績を図に示した。訓練3週間後以外、訓練間であまり差はみられない。

・訓練初日12名
・1週間後8名
・2週間後5名
・3週間後5名

6. 心理指標(RSES-J)

心理指標RSES-Jの平均得点を図に示した。「訓練初日~3週間後」までの実験参加者5名を対象に、1要因4水準参加者内の分散分析を行った結果、有意差は認められなかった。

===================================================================

質問内容

・プロセッシングのエラー

===================================================================

やる事

・参加者16~18名を今月中に取る
・装置の修繕
・研究計画書の作成

===================================================================

ご指摘

・Processingの問題に関しては、配列の問題。要はプログラム側で指定したデータ容量の値が不足しているため、500から900や1200に変更すれば解決される。
・生理指標の分析に関しては、長野・廣田先生の論文のように皮膚温変化量を算出する。基礎実験の皮膚温計測のように、「安静・課題期間の最後1分間」を基準に変化量を算出する。下記動画が変化量の算出例。

「皮膚温変化量=課題期間-安静期間」

統計処理
・各期間:1要因4水準の分散分析/2要因4水準の分散分析(訓練による)
・訓練別:上昇・下降訓練で対応ありのt検定を行う

第29回精神神経内分泌免疫学研究会_東工大

はじめに
東工大で内分泌免疫学研究会が開催されるとのことで、さっそく行ってきた。電車の外回りと内回りがよくわからなくて道に迷ったが、いつものことなので慣れた。去年の研究交流会依頼で久々に行ったが、チーズケーキとか建築物がすごかった。

講演
正直、心理学についての内容が来るものだと思ってたから、小講演で栄養学について語られてびびった。ただ、時間栄養学では、酸化ストレス・肥満などへの対策として、どの時間帯に食品を摂取すべきか。また運動栄養学では、筋トレ(運動量・タンパク質の摂取タイミング)など興味がひかれるような内容で、かつ分かりやすく面白かった。
講演1の内受容感覚に関しては、以前の交流会で大雑把には知っていたが、もうほぼほぼ完成してた。内受容の超短縮版BPQ-BA?を使ってた。それにしても、ストレス系の内受容と生理指標(HR, SCL, コルチゾール?)との関連が先行研究で検討されていないのは知らなかった。いっそのことSTBFで検討するかなぁ。卒論で内受容感覚の心理指標MAIAを使用するため、定義・敏感さ(IS)・正確さ(IAc)について改めて学び直す機会となった。

講演3の爪からのストレス検討については、聞いたことのない内容だったため、参加前からかなり気になっていた。毛髪や唾液のようにコルチゾールを検出するようで、マイナーらしい。違いとしては、爪は累積的に評価され、唾液は即時的な反応を検出するらしい。実験時期がコロナ渦のため、剰余変数である手洗い・手指消毒が結果に影響を及ぼしたような内容を語っていた。分析としては、「爪採取→粉砕→検査にかける」といった手順らしい。先端1mmで10日分のコルチゾール採取できるらしい。これを15日おきに採取ってことは1mm×15日(1ヶ月)??ってことは( ^ω^)・・・

なんにしてもめちゃくちゃ面白かった。本学では、コルチゾールの実験なんてやらないし、小川奈美子先生は非常勤だしで、教わる機会がないから新しい知識を蓄えられて満足…とまではいかないけど、機械があれば計測の方を体験したいな。下のファイルが講演時に取ったメモ帳。スカスカだからたぶんわからんと思うぞ。

内受容感覚

メモ
卒論の書きたしで、緒言もしくは心理指標の欄に内受容感覚, MAIAの使用理由とISなど軽く触れておく。今のところRSES-JはSTBFの臨床系の先行研究で実証されているが、MAIAに関しては、特に書かれていなかったよう気がしたから尚更記載が必要。

Polar H10マニュアル

Polar H10は心拍計測トラッキングであり、多くの人から高く評価されている。高精度の心拍計測であり、Bluetoothでデータを取得できる優れものである。赤く囲まれたところから計測することができるようになっている。そんな計測器が実験室でも使うことができるようになったため、使い方について紹介する。

                 ↑ Polar H10

Polar H10を使う前にいくつか準備しなければいけない。

準備
 1, スマートフォンで ”Polar Flow” をインストールする。
   ↓
 2, Polar のアカウントを作成する。
  (生年月日や身長体重活動レベル等の設定は適当でも問題ないが、アカウント名等
   は英語で設定を行う必要がある)
   ↓
 3, ログイン

上記にある準備が出来たら、実際に Polar を装着し、心拍を計測していく。

計測
 1, Polar のバンドを若干きつめに腹部(鎖骨の少し下あたり)に装着し、本体をボタン部分に着け
  る(本体が前に来るように装着する)。
   ※本体を装着することで、電源が自動的に入る。
   ↓
 2, Polar Flow の設定から「その他のアウトドア」をタップし「その他の室内」にする。
   ↓
 3, 設定にあるペアリングを行う。
   ↓
 4, 「スタート」を押すと計測が記録される。
   ↓
 5, 「一時停止」を押し、停止ボタンを長押しすることで、トレーニングセッションを
  保存するか聞かれるので、保存を選択する。

文章の説明だけだとわからないところもあると思うので動画も用意しました。
  1から3までの流れの動画
  4から5までの流れの動画

ここまでで計測データが保存されたので、保存されたデータをパソコンで確認します。

保存データ確認方法
 1, こちらのサイトから Polar Flow に行き、サインインする。
   ↓
 2, カレンダーが表示され、計測日の記録をクリックする。
   ↓
 3, 「セッションをエクスポート」をクリックし、セッション(csv)を選択する。

以上のことを行うことで、Excelとして保存されます。それでは確認していきましょう。

Excel の確認方法

左の写真にあるようにB列にあるのが計測時間,C列にあるのが心拍数の数値となっている。もちろんグラフを出すこともできる(今回はじっとして計測していたため、あまり変化が見られないグラフとなっている)。

今回は心拍数のみを計測したが、心拍変動なども計測できるようだ。

Polar Unite取り扱いガイド

実験室Polar Uniteメモ

Polarアカウント→・bunpolar01~05
Googleアカウント→bunpolar01~05@gmail.com
Polar、Googleアカウントのパスワード→bgu3568533

初期設定(ペアリングまで)

・Polar FlowSyncをパソコンにインストールする。
・Polar Uniteに付属の充電アダプタを使ってパソコンと接続する。(USB接続)

・ウェブブラウザが自動的に立ち上がり、サインインを求められるのでアカウントがある場合はサインインする。ない場合はgoogleアカウントを新しく作るか既存のアカウントを用いてPolarのアカウントを作成する。
・Polar Uniteのセットアップが終わるまで放置し、終わったらパソコンとの接続を解除する。

計測開始からデータの取得まで

・Polar Uniteの右下のボタンを単押ししてトレーニングを開始を押す。
・モードを選べるので、その他室内を選択すると記録が開始される。

計測開始までの手順↓

・記録を終了したいときは、右下のボタンを長押しする。画面上にカウントが表示されて、0になるまで押し続ける。
・記録終了と表示されて、セッションを保存しますかと表示されるので緑色のチェックマークを押す。すると記録が保存される。

計測終了までの手順↓

・記録の保存が出来たら、Polar Uniteをパソコンに接続し、Polar FlowSyncから同期するを選択する。同期が終わるとPolarのウェブブラウザが立ち上がり、サインインを求められるので、使用しているPolar Uniteと同じアカウントでサインインする。
※この一連の流れはデバイスによって自動でやってくれるものもあるので、できなくても大丈夫
・取得したいデータの日付を選択し、セッション分析の画面まで行く。
・セッションのエクスポートを選択し、CSV形式のファイルをダウンロードする。

データ取得の様子↓

ダウンロードしたCSVファイルを開く。HRの下に並んでいる数字が必要なデータなので、自分のExcelファイルにコピペする。

諸注意

・Polar Uniteを使用する前には必ず充電すること。(常に充電がないものと考える必要があるため)
・パソコンとの同期には少し時間がかかる。

デジタルメディアの視聴による感情変化に関する調査

調査にご協力いただきありがとうございます。本調査に初めてご参加いただいた方、2回目以上のご参加の方でURLが違います。お間違えの無いようお願いいたします。

初めて調査に参加していただいた方
 まず、以下のURLの質問にご回答ください。すでにご回答いただいた方は、次の「2回目以上のご参加の方」へお進みください。
https://forms.office.com/Pages/ResponsePage.aspx?id=ims4HMDFUUS2NlKEwv-EdH4qTRMFlxlDsy3D_ZONq8xUQ1JXWTNSRlRVV0k1M0JRV1E3WkUwVUdDNS4u


2回目以上のご参加の方
 複数回のご参加、誠にありがとうございます。こちらのURLより、あなたの視聴した映像についてご回答ください。
https://forms.office.com/Pages/ResponsePage.aspx?id=ims4HMDFUUS2NlKEwv-EdH4qTRMFlxlDsy3D_ZONq8xURTZLVk1DT0RaN0YxODFFNFgyTFRaWEFSVS4u

文京学院大学 人間学部 心理学科4年 米倉ひなた
E-mail:20hp255@s.bgu.ac.jp
担当指導員 長野祐一郎

本実験 事前準備

実験環境

1. メモ
・室温24~26℃
・パーテーション2枚
・モニタ
・マスキングテープ
・計測機器(BF装置, PC, USB)

(BF装置配布時に、単4電池3本・教示文スライドを忘れずに)

2. 注意点
・窓は閉める
・室温は適切か
・センサに風は当たってないか

データ関連

1. Forms(編集者用)
計測初日:MAIA, 事前質問
計測4回分:Rosenberg, 独自項目→完成!!
自宅訓練:訓練時の温度など→インストラクション挿入のみ
実験参加のお願い:第1~3希望

2. Forms(参加者用)
・計測初日:リンク
・計測4回分:リンク
・自宅訓練:BF装置裏面に添付
・実験参加のお願い:リンク

3. 教示文