お手軽な脈拍計測

指から自分の心拍数を計測してみました. Androidで計測するつもりでしたが,不具合があったためセンサを製作しました.

目次

はじめに

脈拍はスマートフォンやスマートウォッチでも計測していますね.
webカメラで撮影した顔画像から計測している人もいます.
https://qiita.com/taichi-iki/items/0b9165deab187bb2d3f9
今回はこの脈拍を実際に計測してみます.

Androidスマートフォンによる計測(失敗談)

Androidのセンサーリストの中に"TYPE_HEART_RATE"を発見したので,実装してみます.
https://developer.android.com/reference/android/hardware/Sensor

実装

センサーの登録とセンサー値が変化した時の挙動を示すプログラムの一部を載せます.
言語はKotlinです.
アプリのパーミッション設定をし忘れないようにしてください.
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mSensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
        mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE)
        mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_NORMAL)

        for (permission in PERMISSIONS) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                if(ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
                    Toast.makeText(
                        this, getString(R.string.toast_requires_permission, permission),
                        Toast.LENGTH_SHORT
                    ).show()
                }else{
                    ActivityCompat.requestPermissions(this, PERMISSIONS, REQCODE_PERMISSIONS)
                }
            }
        }
heartRate(onCreate).kt
    override fun onSensorChanged(p0: SensorEvent?) {
        if (p0 != null) {
            when(p0.sensor.type){
                Sensor.TYPE_HEART_RATE -> {
                    var rate = p0.values[0]
                    Log.d(TAG, rate.toString())
                }
            }
        }
    }
heartRate(onSensorChanged).kt
ここまでは良かったのですが,使用しているスマホMoto Z Playは非対応のようです,,,
スマートウォッチ用のAPIでしょうか,,,
無印良品のアプリのようにカメラとフラッシュを併用すればスマホでも計測することができます.

ないならつくればいいじゃない.

スマホで計測する作戦が頓挫したので脈拍センサを製作します.
光を吸収するヘモグロビンの特徴を利用して,指に入射した光の反射光を計測することで脈拍を計測します.

脈動を打つ=>ヘモグロビンが増える=>光を多く吸収する=>反射光は弱くなる

今回使用したセンサはNJL5501RというLED(入射光の発光部品)とフォトトランジスタ(反射光の計測部品)がセットになったものです.
http://akizukidenshi.com/catalog/g/gK-09433/
回路はこちらを参考にしました.
http://akizukidenshi.com/download/ds/akizuki/pulseoxi_appl_v1.1.pdf
部品はほぼ参考回路と同じですが,オペアンプはJRC7032Dを使用しています.

原理図

計測の様子

緑のセンサに指を置くことで計測できます

計測結果

ほぼ等間隔でピークになってます.
60秒で73回程度極値を取っているので心拍数は73回程度ですね.

おわりに

今回は市販されている脈拍センサを利用して脈拍を計測してみました.
簡単かつ安価に計測できるので,皆さんも挑戦してみてください.
ピーク値からピーク値までの間隔の変動は交感神経や副交感神経と関連があり,ストレスの検知に役立つそうです(リンク文献を参照).
次回は計測した脈拍からストレス状態を観察してみます.