MAX30102-Arduinoテスト1
MAX30102
心拍数モニタバイオセンサーモジュール
データシート
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX30102.pdf
まずネットでの情報が多いのでArduinoではじめてみる。久々にNanoをひっぱり出してきた・・・。サンプルを走らせると何やら数字はかえってくる。
すぐさまスマートウォッチGalaxy Watch5 Pro(4万円はする)で測定した値と比べると10程違う。
ArduinoのExampleが動いた所でつかえるようになるものでもないという事で一つ一つデータシートを読んで動作を確認していくことにする。
まず #include <Wire.h> Wireをインクルードする。結果をシリアルに出力するためにSerial.beginも。
あとはI2Cのコマンドを並べて・・・
#include <Wire.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Wire.begin();
}
void loop() {
// put your main code here, to run repeatedly:
Wire.beginTransmission(0x57);
Wire.write(0xFF);
Wire.endTransmission(false);
Wire.requestFrom(0x57, 1,true);
Serial.println(Wire.read(),HEX);
delay(1000);
}
I2Cの通信が確認できたのでやり取りする関数から用意する。
File-New sketchで新しいスケッチをつくる。 I2Cを使うので、
続いて、レジスタへの書き込み、読み込みの関数を用意してやる。
void MAX30105writeRegister(uint8_t address, uint8_t reg, uint8_t value) {
Wire.beginTransmission(address);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
uint8_t MAX30105readRegister(uint8_t address, uint8_t reg) {
Wire.beginTransmission(address);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(address, 1,true);
return Wire.read();
}
setupの中には、Wireの開始の関数を置く
Wire.begin();
レジスタ0x09は、シャットダウンや、リセット、モードの選択をする。
MAX30105writeRegister(0x57,0x09,0x07);
x0Cのレジスタは、LEDに流す電流の大きさを決める。
MAX30105writeRegister(0x57,0x0C,0x1F);
まずは、中間に見えている1F(6.2mA)を指定してみた。
0x11と0x12のレジスタで2つのLEDをアクティブにするタイミングを指定してやる。
MAX30105writeRegister(0x57,0x11,0x21);
void setup() {
// put your setup code here, to run once:
Wire.begin();
MAX30105writeRegister(0x57,0x09,0x07);
//LED current
MAX30105writeRegister(0x57,0x0C,0x1F);
/
MAX30105writeRegister(0x57,0x11,0x21);
}
すると上のような記述になる。
loopの中を以下のように記述する。これはいわゆるLチカをやってみる。
void loop() {
// put your main code here, to run repeatedly:
MAX30105writeRegister(0x57,0x0C,0x00);
MAX30105writeRegister(0x57,0x0D,0x00);
delay(500);
//MAX30105writeRegister(0x57,0x0C,0x1F);
MAX30105writeRegister(0x57,0x0D,0x1F);
delay(500);
}
電流をゼロと1Fと交互に500msecで1秒間隔で点滅させる。コメントアウトを0x0Cと0x0Dで変えて動作を確認してみある。
LED1(0x0C)を点灯させた場合
肉眼では見えないが、カメラ越しだと、青色く見える点が点滅する。
まずは、I2Cを介してマイコンから命令を送ってLEDを点灯させる所まではできた。
コメント
コメントを投稿