三维重建:GalaxyS9+心率传感器和SpO2、空间传感器

参考文章:Android传感器-运动传感器.本文的例子比较详细。

GalaxyS9+传感器

        S9+中使用了多个传感器,包括虹膜传感器、3D传感器、指纹传感器(后置)、加速计、陀螺仪、距离传感器、指南针、气压计、心率传感器和SpO2血氧饱和度。

SpO2血氧饱和度

测定方法原理:将探头指套固定在病人指端,利用手指作为盛装血红蛋白的透明容器,使用波长660 nm的红光和940 nm的近红外光作为射入光源,测定通过组织床的光传导强度,来计算血红蛋白浓度及血氧饱和度。通过SPO2监护,我们可以得到SPO2,脉率,脉搏波。

一般认为SpO2正常应不低于94%,在94%以下为供氧不足。有学者将SpO2<90%定为低氧血症的标准,并认为当SpO2高于70%时准确性可达±2%,SpO2低于70%时则可有误差。临床上我们曾对数例病人的SpO2数值,与动脉血氧饱和度数值进行对照,认为SpO2读数可反映病人的呼吸功能,并在一定程度上反映动脉血氧的变化。

S9中的血氧饱和度测试使用红外光线,收集反射,测量SpO2。

测量方法:打开SamsungHealth界面,在主页上添加心跳测量和血氧饱和度测量。食指轻按背部摄像机右侧的红外相机阵列,点击GalaxyS9+选定的项目测量,开始测量....。

传感器API

在工程中调用传感器API

     在android的sensor中想Sensor.TYPE_ROTATION_VECTOR、Sensor.TYPE_GRAVITY、Sensor.TYPE_HEART_RATE等传感器是虚拟出来的,使用的是其他传感器生成的数据,为合成传感器。一些如Sensor.TYPE_HEART_BEAT、Sensor.TYPE_PROXIMITY、Sensor.TYPE_GYROSCOPE为原始传感器,数据为硬件API直接获得的。

 获取传感器

    private SensorManager sensorManager;
    private Sensor proximitySensor;
    private SensorEventListener proximitySensorListener;

    private Sensor gyroscopeSensor;
    private SensorEventListener gyroscopeSensorListener;

    private Sensor rotationVectorSensor;
    private SensorEventListener rvListener;

    private Sensor heartRateSensor;
    private SensorEventListener hrListener;

    private Sensor heartbeatSensor;
    private SensorEventListener hbListener;

      其中 gyroscopeSensorrotationVectorSensor、heartRateSensor 、heartBeatSensor分别为陀螺仪、角速度传感器、心率传感器、心跳传感器。当然这只是一个名字。

      以原始传感器重力传感器-陀螺仪为例, 对传感器的调用在这个初始化过程中

// 获取陀螺仪
        gyroscopeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

      此外,需要设置监听器;

// Create a listener
        gyroscopeSensorListener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {
                // More code goes here
                if (sensorEvent.values[2] > 0.5f) { // anticlockwise
                    getWindow().getDecorView().setBackgroundColor(Color.BLUE);
                } else if (sensorEvent.values[2] < -0.5f) { // clockwise
                    getWindow().getDecorView().setBackgroundColor(Color.YELLOW);
                }
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {
            }
        };

// Register the listener 注册听众
        sensorManager.registerListener(gyroscopeSensorListener,
                gyroscopeSensor, SensorManager.SENSOR_DELAY_NORMAL);

测试效果:




参考API: https://developer.android.com/guide/topics/sensors/sensors_motion.html

传感器

SensorEvent数据

描述

测量单位

TYPE_ACCELEROMETER

SensorEvent.values[0]

沿x轴的加速度(包括重力)

m/s2(平方)

SensorEvent.values[1]

沿y轴的加速度(包括重力)

SensorEvent.values[2]

沿z轴的加速度(包括重力)

TYPE_GRAVITY

SensorEvent.values[0]

沿x轴的重力

m/s2

SensorEvent.values[1]

沿y轴的重力

SensorEvent.values[2]

沿z轴的重力

TYPE_GYROSCOPE

SensorEvent.values[0]

绕x轴旋转的速率

rad/s

SensorEvent.values[1]

绕y轴旋转的速率

SensorEvent.values[2]

绕z轴旋转的速率

TYPE_GYROSCOPE_UNCALIBRATED

SensorEvent.values[0]

绕x轴的旋转速率(无偏移补偿)

rad/s

SensorEvent.values[1]

绕y轴的旋转速率(无偏移补偿)

SensorEvent.values[2]

绕z轴的旋转速率(无偏移补偿)

SensorEvent.values[3]

绕x轴的预计偏移

SensorEvent.values[4]

绕y轴的预计偏移

SensorEvent.values[5]

绕z轴的预计偏移

TYPE_LINEAR_ACCELERATION

SensorEvent.values[0]

沿x轴的加速度(不包括重力)

m/s2

SensorEvent.values[1]

沿y轴的加速度(不包括重力)

SensorEvent.values[2]

沿z轴的加速度(不包括重力)

TYPE_ROTATION_VECTOR

SensorEvent.values[0]

沿x轴旋转矢量分量(x*sin(θ/2)).

无单位

SensorEvent.values[1]

沿y轴旋转矢量分量(y*sin(θ/2)).

SensorEvent.values[2]

沿z轴旋转矢量分量(z*sin(θ/2)).

SensorEvent.values[3]

旋转向量的标量分量((cos(θ/2)).(标量分量是可选的)

TYPE_SIGNIFICANT_MOTION

N/A

N/A

N/A

TYPE_STEP_COUNTER

SensorEvent.values[0]

从传感器激活那一刻起的步数

步数

TYPE_STEP_DETECTOR

N/A

N/A

N/A

旋转矢量传感器和重力传感器是运动检测中使用频率最高的传感器. 旋转矢量传感器是多功能的, 可以广泛的用于运动相关的任务, 比如检测手势, 检测角度改变, 检测相关的方向变化. 在开发游戏的时候经常用到旋转矢量传感器, 还有增强现实的应用, 二维或者三维的罗盘, 或者一个相机稳定的APP. 在大多数的情况下, 使用这些传感器会比用加速度计和磁力计或者方向传感器更好.

猜你喜欢

转载自blog.csdn.net/wishchin/article/details/80982993