心理サイエンス応用演習Ⅱ-11

前回授業コメントへのフィードバック
 フィードバック動画を作成しましたので、ご覧いただけますと幸いです。

M5Atomで心拍測定練習
 この授業では、M5Atom+Max30101モジュールで心拍測定の実験を行います。その前に、まずは下記の動画に従って練習をしてみましょう。まずは下記の実験手順解説動画を御覧ください。CM動画はまだ見ないで下さい。
計測結果確認用アドレス

実験に用いるCM動画
 下に練習用動画(90秒)と、実験用動画(4分30秒)を用意しました。上のインストラクション動画に従って測定練習を行い、実験用動画を視聴中の心拍数を測定し、データとして提出してください。

本日の課題
 インストラクションに従い、CMを視聴している最中の心拍数を測定し、エクセルにコピーし、グラフを描画してください。そして、「CM視聴中の心拍数」というファイル名でエクセルファイルを保存し、リアクションと一緒にお送り下さい。

リアクションの記入
 課題が終わった方は、土曜日の深夜までに、下記アドレスからリアクションを登録してください(リアクションは出欠記録を兼ねています)。
心理サイエンス応用演習2リアクション

心理サイエンス応用演習Ⅱ-10

前回授業コメントへのフィードバック
 フィードバック動画を作成しましたので、ご覧いただけますと幸いです。

マイクロコンピュータを改め心拍測定を進める
 今回は予定通り、マイクロコンピュータをM5AtomLiteに変更して計測してみます。Atomを使うために、今回は電子回路基板を作成、簡単な組立作業をしていますので、そちらの動画も合わせてご覧ください。

計測結果確認用アドレス

※上記M5Atomで心拍測定で用いる電子回路基板なのですが、日曜日に頑張って作成したのですがまだ人数ぶん揃っておりません。揃い次第助手室の箱に入れて配布しますので、もう少々お待ち下さい。

リアクションの記入
 課題が終わった方は、本日を含めて6日以内に、下記アドレスからリアクションを登録してください(リアクションは出欠記録を兼ねています)。
心理サイエンス応用演習2リアクション

心理サイエンス応用演習Ⅱ-09

前回授業コメントへのフィードバック
 フィードバック動画を作成しましたので、ご覧いただけますと幸いです。

計測モジュールの問題と今後の方向性について
 計測プログラムを作り込み、MAX30101モジュールで心拍&酸素飽和度をネットワーク計測できるところまで来ました。しかし、モジュールの動作が不安定なため、今回はプログラムの解説にとどめます。動画の中でも解説されておりますが、今後はマイクロコンピュータをM5AtomLiteに変更して、計測を進めようと考えています。今週はプログラムの実施等の作業はありませんので、動画の視聴だけしてください。

リアクションの記入
 課題が終わった方は、本日を含めて3日以内に、下記アドレスからリアクションを登録してください(リアクションは出欠記録を兼ねています)。
心理サイエンス応用演習2リアクション

心理サイエンス応用演習Ⅱ-8

前回リアクションへのフィードバック
 前回は、IoT機器の可能性や、生体計測の社会応用の話をしました。世界は徐々に変わりつつあるので、受講者の皆さんもいろいろな可能性を夢想し、未来を創ることにチャレンジしてほしいと思います。

※今回はM5StickCとMax30101センサーボードを使います。助手室のカウンター付近の箱に入れておきますので、来校時に各自で自分の学籍番号が記載されたパッケージを回収し、作業を進めるようにしてください。自分の番号が記載されたパッケージがない場合はチャットでご連絡ください。回収が火曜日以降になる場合も考慮して、今回はリアクションの回答期限を5日以内とします。

M5StickCを使うための準備(昨年度の復習)
今年は、(ArduinoUNOではなく)最初からM5StickCを使っていきます。下記の動画は、開発環境をインストールして、LED を点滅させるところまでを紹介しています。やり方を忘れてしまった人は復習してください。昨年と違うコンピューターを使っている人は、動画に沿って開発環境をインストールしなおしてみてください。Arduinoのインストールをやり直すひとは、ここここを参考にしてください。

※追加のボードマネジャーのURL↓
https://dl.espressif.com/dl/package_esp32_index.json

LEDを点滅させるプログラム

LEDの長い足をG26に短い足をGNDに入れましょう。

//blink32
//LEDを点滅させる
void setup()
{
  pinMode(26, OUTPUT); //13番のピンを出力モードに
}
 
void loop()
{
  digitalWrite(26, HIGH); //13をONにする
  delay(100); //1000ms待つ
  digitalWrite(26, LOW); //13をOFFにする
  delay(100); //
}

LCD(液晶ディスプレイ)を使ってみる(昨年度の復習)
 
以下ではLCDを使ったプログラムをいくつか試してみましょう。ディスプレイの詳しい使い方はここに解説されています。

液晶ディスプレイを指定した色で塗りつぶす↓

//M5C_LCD1
#include <M5StickC.h>

void setup(void)
{
  M5.begin();
}
 
void loop(void)
{
  M5.Lcd.fillScreen(PURPLE); //黒で塗りつぶす
  M5.Lcd.setCursor(0, 0);   //左上から書き始める
  M5.Lcd.print("black");    //文字を表示
  delay(1000);              //1000ms停止する

  M5.Lcd.fillScreen(M5.Lcd.color565(255, 230, 200));
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.print("white");
  delay(1000);
}

ランダムな位置にランダムな大きさで円を描画する↓

//M5C_LCD2
#include <M5StickC.h>

void setup(void)
{
  M5.begin();
}
 
void loop(void)
{
  int x=random(0, 160); //x点を指定
  int y=random(0, 80);  //y点を指定
  int r=random(0, 40);  //半径を指定
  int red=random(0, 255); //red 0-255
  int green=random(0, 255); //green 0-255
  int blue=random(0, 255); //blue 0-255
  
  //M5.Lcd.fillCircle(x, y, r, M5.Lcd.color565(red, green, blue));
  M5.Lcd.drawCircle(x, y, r, M5.Lcd.color565(red, green, blue));
    
  delay(10);
}

MAX30101を使った心拍数の測定
 今回使用するのは、SparkFun Pulse Oximeter and Heart Rate Sensor – MAX30101 & MAX32664というセンサーボードです。詳しい使用方法はSparkfunのHookupGuideで解説されていますが、ここでは1.ライブラリを導入する、2.サンプルプログラムを動かす、という手順で進めていきましょう。細かい作業を含みますので、動画はYoutube上で画質を1080pにしてご覧ください。

//Max30101_M5StickC
#include <SparkFun_Bio_Sensor_Hub_Library.h>
#include <Wire.h>

// Reset pin, MFIO pin
int resPin = 26;
int mfioPin = 36;

// Possible widths: 69, 118, 215, 411us
int width = 411; 

int samples = 400; 
int pulseWidthVal;
int sampleVal;

// Takes address, reset pin, and MFIO pin.
SparkFun_Bio_Sensor_Hub bioHub(resPin, mfioPin); 

bioData body; 

void setup(){

  Serial.begin(115200);

  //Wire.begin();
  Wire.begin(32,33);  //M5StickC SDA,SCL
  int result = bioHub.begin();
  if (result == 0) // Zero errors!
    Serial.println("Sensor started!");

  Serial.println("Configuring Sensor...."); 
  int error = bioHub.configSensorBpm(MODE_ONE); // Configure Sensor and BPM mode , MODE_TWO also available
  if (error == 0){// Zero errors.
    Serial.println("Sensor configured.");
  }
  else {
    Serial.println("Error configuring sensor.");
    Serial.print("Error: "); 
    Serial.println(error); 
  }

  // Set pulse width.
  error = bioHub.setPulseWidth(width);
  if (error == 0){// Zero errors.
    Serial.println("Pulse Width Set.");
  }
  else {
    Serial.println("Could not set Pulse Width.");
    Serial.print("Error: "); 
    Serial.println(error); 
  }

  // Check that the pulse width was set. 
  pulseWidthVal = bioHub.readPulseWidth();
  Serial.print("Pulse Width: ");
  Serial.println(pulseWidthVal);

  // Set sample rate per second. Remember that not every sample rate is
  // available with every pulse width. Check hookup guide for more information.  
  error = bioHub.setSampleRate(samples);
  if (error == 0){// Zero errors.
    Serial.println("Sample Rate Set.");
  }
  else {
    Serial.println("Could not set Sample Rate!");
    Serial.print("Error: "); 
    Serial.println(error); 
  }

  // Check sample rate.
  sampleVal = bioHub.readSampleRate();
  Serial.print("Sample rate is set to: ");
  Serial.println(sampleVal); 

  // Data lags a bit behind the sensor, if you're finger is on the sensor when
  // it's being configured this delay will give some time for the data to catch
  // up. 
  Serial.println("Loading up the buffer with data....");
  delay(4000);
}

void loop(){

    // Information from the readSensor function will be saved to our "body"
    // variable.  
    body = bioHub.readSensorBpm();

    Serial.print(body.irLed); 
    Serial.print(",");
    Serial.print(body.redLed); 
    Serial.print(",");
    Serial.print(body.heartRate); 
    Serial.print(",");
    Serial.print(body.confidence); 
    Serial.print(",");
    Serial.print(body.oxygen); 
    Serial.print(",");
    Serial.print(body.status); 
    Serial.println(); 
    // Slow it down or your heart rate will go up trying to keep up
    // with the flow of numbers
    delay(500); 
}

リアクションの記入
 課題が終わった方は、本日を含めて5日以内に、下記アドレスからリアクションを登録してください(リアクションは出欠記録を兼ねています)。
心理サイエンス応用演習2リアクション

心理サイエンス応用演習Ⅱ-07

前回授業コメントへのフィードバック
 フィードバック動画を作成しましたので、ご覧いただけますと幸いです。

生体情報計測に向けて
 今回は、今後計測していく背板情報について説明を行いつつ、これらの反応を測る経緯と、その意義について説明します。企業との共同研究の話なども紹介しておりますので、ご覧ください。

リアクションの記入
 課題が終わった方は、本日を含めて3日以内に、下記アドレスからリアクションを登録してください(リアクションは出欠記録を兼ねています)。
心理サイエンス応用演習2リアクション