前回リアクションへのフィードバック
前回は、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リアクション