传感器的介绍

作者: 总会颠沛流离 | 来源:发表于2019-05-07 23:09 被阅读7次

今天面试,突然有需求是通过记录步数来达到领取优惠劵的目的(计步传感器),顿时我就懵比了,虽然会点,之前项目中很少用到。我现在就带领大家了解了解,有不对的地方多多指教。

记住在学习中,难免会碰到一些困难,给我们带来烦恼。成绩较差,虽然自己努力了,却总不见效;练习立定跳远,却总是跳不过那根优秀线……这样的例子有很多。当我们遇到这些困难时,该拥用怎样的心态?我们“班务栏”里“班级目标”后写着一句话:“每天进步一点”。我们就是要抱着这种良好的心态,努力学习,争取每天进步一点。

传感器的使用

1.加速度传感器

2.磁场传感器

3.方向传感器

4.陀螺仪传感器

5.重力传感器

6.线性加速度传感器

7.温度传感器

8.光线传感器

9.距离传感器

10.压力传感器

11.计步传感器

1. 首先先查看测试的安卓机拥有的传感器

这里先初始化一个SensorManager的对象,然后把所有支持的sensor类型log日志打印出来看看。

SensorManager mSensorManager;
List<Sensor> sensorList;
// 实例化传感器管理者
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 得到设置支持的所有传感器的List
sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
List<String> sensorNameList = new ArrayList<String>();
for (Sensor sensor : sensorList) {
Log.d(TAG, "onResume: "+sensor.getName());
}

下面为大家一一介绍

1.加速度传感器

在这这之前先了解一下手机传感器世界的三维坐标

image

首先先创建3个textView来显示三个方向上的加速度。

先给Activity实现SensorEventListener接口,后面要不断要监听来刷新数据

 public class MainActivity extends AppCompatActivity implements 
 SensorEventListener {
 然后创建SensorManager对象,如果前面设置过就不用设置,然后为它注册加速度传感器监
听器,采样频率可以自己设置,一般越高越精准但是越耗电
private SensorManager sm;
//创建一个SensorManager来获取系统的传感器服务
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
/*
* 最常用的一个方法 注册事件
* 参数1 :SensorEventListener监听器
 * 参数2 :Sensor 一个服务可能有多个Sensor实现,此处调用getDefaultSensor获取默认的
Sensor
 * 参数3 :模式 可选数据变化的刷新频率,多少微秒取一次。
 * */
 //加速度传感器
 sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
  SensorManager.SENSOR_DELAY_NORMAL);
  接下来我们只要监听这个传感器值的变化,然后更新textView的值就好了
 @Override
 public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
    float X_lateral = sensorEvent.values[0];
    float Y_longitudinal = sensorEvent.values[1];
    float Z_vertical = sensorEvent.values[2];
    mtextViewx.setText(X_lateral + "");
    mtextViewy.setText(Y_longitudinal + "");
    mtextViewz.setText(Z_vertical + "");
}

}


image

结果:可以看到放在桌子上的时候x和y轴的加速度几乎为0,我手机不太平,而z轴的加速度接近9.8
在activity变为不可见的时候,传感器依然在工作,这样很耗电,所以我们根据需求可以在onPause方法里面停掉传感器的工作

@Override
public void onPause() {
sm.unregisterListener(this);
super.onPause();
}
2.磁场传感器

和加速度计一样,为sensormanager监听磁场变化即可,吧手机放在电脑旁边时候可以清楚看到数值的变化

 // 为磁场传感器注册监听器
 sm.registerListener(this, 
 sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 
 SensorManager.SENSOR_DELAY_NORMAL);
 else if(sensorEvent.sensor.getType() == 
 Sensor.TYPE_MAGNETIC_FIELD){
float X_lateral = sensorEvent.values[0];
float Y_longitudinal = sensorEvent.values[1];
float Z_vertical = sensorEvent.values[2];
mtextView1.setText("x轴的磁场强度\n"+ X_lateral );
mtextView2.setText("y轴的磁场强度\n"+ Y_longitudinal );
mtextView3.setText("z轴的磁场强度\n"+ Z_vertical );
 }
image

3.方向传感器

这个可以用来做指南针之类的,绕z轴转过的角度为0时大概指向正北。这个TYPE_ORIENTATION接口不够精确已经过时了,可以使用旋转矩阵来代替。这里绕z轴转过的角度是value[0],

详情看这个博客点击打开链接

// 为方向传感器注册监听器
sm.registerListener(this, 
sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), 
SensorManager.SENSOR_DELAY_NORMAL);
else if(sensorEvent.sensor.getType() == 
Sensor.TYPE_ORIENTATION){
float X_lateral = sensorEvent.values[0];
float Y_longitudinal = sensorEvent.values[1];
float Z_vertical = sensorEvent.values[2];
mtextView4.setText("绕z轴转过的角度\n"+ X_lateral );
mtextView5.setText("绕x轴转过的角度\n"+ Y_longitudinal );
mtextView6.setText("绕y轴转过的角度\n"+ Z_vertical );
}

4.陀螺仪传感器

// 为陀螺仪传感器注册监听器
sm.registerListener(this, 
sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE), 
 SensorManager.SENSOR_DELAY_NORMAL);
 else if(sensorEvent.sensor.getType() == 
 Sensor.TYPE_GYROSCOPE){
//需要将弧度转为角度
float X = (float)Math.toDegrees(sensorEvent.values[0]);
float Y = (float)Math.toDegrees(sensorEvent.values[1]);
float Z = (float)Math.toDegrees(sensorEvent.values[2]);
mtextView7.setText("绕x轴转过的角速度\n"+ X );
mtextView8.setText("绕y轴转过的角速度\n"+ Y );
mtextView9.setText("绕z轴转过的角速度\n"+ Z );

5.重力传感器
就是把重力加速度分解到xyz三个方向上

// 为重力传感器注册监听器
sm.registerListener(this, 
sm.getDefaultSensor(Sensor.TYPE_GRAVITY), 
SensorManager.SENSOR_DELAY_NORMAL);
else if(sensorEvent.sensor.getType() == Sensor.TYPE_GRAVITY){
float X = sensorEvent.values[0];
float Y = sensorEvent.values[1];
float Z = sensorEvent.values[2];
mtextViewgx.setText("x方向的重力加速度\n"+ X );
mtextViewgy.setText("Y方向的重力加速度\n"+ Y );
mtextViewgz.setText("Z方向的重力加速度\n"+ Z );

6.线性加速度传感器
就是去掉重力加速度后各个方向的加速度

// 为线性加速度传感器注册监听器
 sm.registerListener(this, 
 sm.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), 
 SensorManager.SENSOR_DELAY_NORMAL);
else if(sensorEvent.sensor.getType() == 
Sensor.TYPE_LINEAR_ACCELERATION){
float X = sensorEvent.values[0];
float Y = sensorEvent.values[1];
float Z = sensorEvent.values[2];
mtextViewlx.setText("x方向的线性加速度\n"+ X );
mtextViewly.setText("Y方向的线性加速度\n"+ Y );
mtextViewlz.setText("Z方向的线性加速度\n"+ Z );

}

相关文章

  • 无标题文章

    磁传感器方案介绍 磁传感器类型(离轴式磁传感器)下方配有图片 离轴式磁编码器原理介绍两个公式 方案介绍采用iC-M...

  • 传感器

    知识要点: 1、传感器的简介及分类 1.1传感器的概述及应用场景1.2传感器分类介绍 2、方向传感器获取参数的实现...

  • 传感器

    知识要点: 1、传感器的简介及分类 1.1传感器的概述及应用场景1.2传感器分类介绍 2、方向传感器获取参数的实现...

  • 传感器

    知识要点: 1 传感器的简介及分类 1.1传感器的概述及应用场景1.2传感器分类介绍 2 方向传感器获取参数的实现...

  • 传感器的介绍

    今天面试,突然有需求是通过记录步数来达到领取优惠劵的目的(计步传感器),顿时我就懵比了,虽然会点,之前项目中很少用...

  • 液位传感器介绍

    液位传感器介绍 液位传感器是一种测量液位的压力传感器。液位传感器也称做液位开关,用于我们生活中的、马桶、浴缸、饮水...

  • Ardurio收集的传感器数据存入sd卡

    本章节我们将介绍如何实现将Ardurion收集的传感器数据存入sd卡中(火焰传感器、温湿度传感器为例) 准备器材:...

  • 欧姆龙MEMS气体流量传感器的特点以及用途介绍

    欧姆龙MEMS气体流量传感器的特点以及用途介绍 欧姆龙MEMS气体流量传感器的特点以及用途介绍,鼎悦电子代理OMR...

  • 终端传感了解吗?18个知识点为你扫盲

    摘要:今天给大家分享点关于物联网的终端传感的知识点,你有兴趣吗? 一、无线传感器介绍 1.传感器的形态 传感器——...

  • 一种比超声波式好用的水位传感器

    给你介绍一个比超声波式好的水位传感器 光电式一体式水位传感器优点很多,对比干簧管浮球水位传感器、超声波式水位传感器...

网友评论

    本文标题:传感器的介绍

    本文链接:https://www.haomeiwen.com/subject/ejbuoqtx.html