SPRESENSEのマイク入力をADCにして心拍センサーを取り込む! [SPRESENSE]
前回、SPRESENSEのADCで心拍データをキャプチャしましたが、DC取り込みなので体動で大きくレベルが変化していました。そこで、今回はSPRESENSEのマイク入力に心拍センサーを接続してデータを取り込んでみました。マイク入力はAC入力なので電気的にDC成分をカットできます。
SPRESENSEチップのデータシートを見るとマイク入力のレンジは0.9V(±0.45V)なので、ADCの0.7Vよりレンジが広く優秀です。
試しに、モノラル16k/16bitをSDカードに録音?してみたのですが、とにかくデータが取れすぎる。心拍センサーのノイズを拾いまくりです。
なので、冒頭の動画は1024サンプルの平均をとってさらに平均をとったデータの128サンプルで平均をとるという贅沢すぎるデータ処理をしています。
マイク入力はゲインも設定できるので、AC限定ですがADCとしては非常に優秀です。皆さんもつかってみてはいかがでしょう?
心拍センサーを SPRESENSE のマイク入力でキャプチャしてみました。データが取れすぎるので、贅沢にデータを使ってみたら綺麗な波形がとれました。SPRESENSEのマイク入力を高速・高精度のADCとして使えるぞ pic.twitter.com/OWmReXPaKF
— よしのたろう (@Taro_Yoshino) October 16, 2020
SPRESENSEチップのデータシートを見るとマイク入力のレンジは0.9V(±0.45V)なので、ADCの0.7Vよりレンジが広く優秀です。
試しに、モノラル16k/16bitをSDカードに録音?してみたのですが、とにかくデータが取れすぎる。心拍センサーのノイズを拾いまくりです。
なので、冒頭の動画は1024サンプルの平均をとってさらに平均をとったデータの128サンプルで平均をとるという贅沢すぎるデータ処理をしています。
#include <Audio.h> AudioClass *theAudio; void setup() { int ret; Serial.begin(115200); Serial.println("Init Audio Library"); theAudio = AudioClass::getInstance(); theAudio->begin(); Serial.println("Init Audio Recorder"); /* Select input device as AMIC */ theAudio->setRecorderMode(AS_SETRECDR_STS_INPUTDEVICE_MIC); theAudio->initRecorder(AS_CODECTYPE_PCM, "/mnt/spif/BIN", AS_SAMPLINGRATE_16000, AS_CHANNEL_MONO); Serial.println("Capturing start!"); theAudio->startRecorder(); } #define AVE_WINDOW 128 int16_t average[AVE_WINDOW]; static int num = 0; void loop() { static const int32_t buffer_sample = 1024; static const int32_t buffer_size = buffer_sample * sizeof(int16_t); static char frame[buffer_size]; uint32_t read_size; int err = theAudio->readFrames(frame, buffer_size, &read_size); if (err != AUDIOLIB_ECODE_OK && err != AUDIOLIB_ECODE_INSUFFICIENT_BUFFER_AREA) { printf("Error err = %d\n", err); sleep(1); theAudio->stopRecorder(); exit(1); } int16_t *buf = (int16_t*)frame; int32_t sum = 0; for (int i = 0; i < buffer_sample; ++i) { sum += buf[i]; } average[num] = sum / buffer_sample; if (++num >= AVE_WINDOW) num = 0; if (num == 0) { sum = 0; for (int i = 0; i < AVE_WINDOW; ++i) { sum += average[i]; } int16_t output = sum / AVE_WINDOW; Serial.println(output); } }
マイク入力はゲインも設定できるので、AC限定ですがADCとしては非常に優秀です。皆さんもつかってみてはいかがでしょう?
心拍 ハートレート 心拍数をテスト 脈拍センサー パルスセンサモジュール 3.3V〜5V
- 出版社/メーカー: KOZEEY
- メディア: Wireless Phone Accessory
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE 拡張ボード CXD5602PWBEXT1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
コメント 0