2. 传感器:动作传感器

动作传感器概述

Android平台支持一些用于监视设备动作的传感器(这样的传感器共有5个)。其中两个(加速传感器和陀螺仪传感器)是纯的硬件传感器。另外三个(重力传感器、线性加速传感器和旋转向量传感器)可能是硬件传感器,也可能是软件传感器。例如,在一些Android设备中,这些基于软件的传感器会从加速和磁力传感器中获取数据,但在另一些Android设备中也可能从陀螺仪传感器中获取数据。也就是说,同一种基于软件的传感器在不同的Android设备中回传的数据可能来自不同的硬件传感器。所以基于软件的同一种传感器在不同的设备中可能精确度、使用范围有所不同。大多数高端Android设备都会有加速传感器,还有一些拥有陀螺仪传感器。

动作传感器的作用

动作传感器对于监测设备的移动非常有用,例如,倾斜、震动、旋转和摆动都属于动作传感器的监测范围。设备的移动通常是对用户输入的直接反应。例如,用户正在游戏中飙车,或控制游戏中的一个小球)。除此之外,设备所处的物理环境也会反应在设备的动作上,例如,用户正常驾驶汽车,而这是Android设备正安静地躺在旁边的座椅上,尽管设备没有移动,但会随着车的行驶而不断震动,而且设备也会随着汽车的移动而移动。

对于第一种情况,可以对设备本身的相对位置进行监测。而对于第二种情况,需要考虑到设备以外的参照系。动作传感器本身一般并不会用于监测设备的位置,关于设备的位置需要用其他类型的传感器进行监测,例如,磁场传感器。

动作传感器的回传数据

所有的动作传感器都会返回三个浮点数的值(通过长度为3的数组返回),但对于不同的传感器,这三个只的意义不同。例如,对于加速传感器,会返回三个坐标轴的数据。对于陀螺仪传感器,会返回三个坐标轴的旋转角速度。

加速传感器

# 设备从左到右推动,X轴加速度为正值。

# 设备朝着自己推动,Y轴加速度为正值。

# 如果朝着天空以A m/s^2的加速度推动,那么Z轴的加速度为A + 9.81,所以如果计算实际的加速度(抵消重力加速

度),需要减9.81。

Demo

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView android:id="@+id/tvAccelerometer"
		android:layout_width="fill_parent" android:layout_height="wrap_content" />
	<TextView android:id="@+id/tvMagentic" android:layout_width="fill_parent"
		android:layout_height="wrap_content" />
	<TextView android:id="@+id/tvLight" android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:layout_marginTop="10dp" />
	<TextView android:id="@+id/tvOrientation"
		android:layout_width="fill_parent" android:layout_height="wrap_content"
		android:layout_marginTop="10dp" />

	<TextView android:id="@+id/tvSensors" android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:layout_marginTop="10dp" />

</LinearLayout>
  1 package cn.eoe.motion.sensor;
  2
  3 import android.app.Activity;
  4 import android.hardware.Sensor;
  5 import android.hardware.SensorEvent;
  6 import android.hardware.SensorEventListener;
  7 import android.hardware.SensorManager;
  8 import android.os.Bundle;
  9 import android.util.Log;
 10 import android.widget.TextView;
 11
 12 public class MotionSensorActivity extends Activity implements
 13         SensorEventListener {
 14
 15     private TextView tvAccelerometer;
 16     private SensorManager mSensorManager;
 17     private float[] gravity = new float[3];
 18
 19     @Override
 20     protected void onCreate(Bundle savedInstanceState) {
 21         super.onCreate(savedInstanceState);
 22         setContentView(R.layout.activity_motion_sensor);
 23
 24         tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);
 25
 26         mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
 27
 28     }
 29
 30     @Override
 31     public void onAccuracyChanged(Sensor sensor, int accuracy) {
 32
 33     }
 34
 35     @Override
 36     public void onSensorChanged(SensorEvent event) {
 37         switch (event.sensor.getType()) {
 38         case Sensor.TYPE_ACCELEROMETER: //  加速度传感器
 39             final float alpha = (float) 0.8;
 40             /**
 41              *  event.values[0] 沿X轴加速度。
 42              *  event.values[1] 沿Y轴加速度。
 43              *  event.values[2] 沿Z轴加速度。
 44              *  gravity 处理重力加速度的杂音(不能能百分之百去掉)。
 45              */
 46             gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
 47             gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
 48             gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
 49
 50             String accelerometer = "\n" + "X:"
 51                     + (event.values[0] - gravity[0]) + "\n" + "Y:"
 52                     + (event.values[1] - gravity[1]) + "\n" + "Z:"
 53                     + (event.values[2] - gravity[2]);
 54             Log.d("z", String.valueOf(event.values[2] - gravity[2]));
 55             tvAccelerometer.setText(accelerometer);
 56
 57             // 9.81m/s^2
 58             break;
 59         case Sensor.TYPE_GRAVITY:  //  重力传感器
 60             gravity[0] = event.values[0];
 61             gravity[1] = event.values[1];
 62             gravity[2] = event.values[2];
 63             break;
 64         case Sensor.TYPE_PROXIMITY:  // 临近传感器
 65             setTitle(String.valueOf(event.values[0]));
 66             break;
 67         default:
 68             break;
 69         }
 70
 71     }
 72
 73     protected void onResume() {
 74         super.onResume();
 75         /**
 76          * 注册传感器
 77          *
 78          * 第二个参数,所注册的传感器。
 79          * 第三个参数,采样频率数值。SENSOR_DELAY_FASTEST:最快的。
 80          */
 81         mSensorManager.registerListener(this,
 82                 mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
 83                 SensorManager.SENSOR_DELAY_UI);  // 加速度
 84         mSensorManager.registerListener(this,
 85                 mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
 86                 SensorManager.SENSOR_DELAY_FASTEST);  // 重力传感器
 87         mSensorManager.registerListener(this,
 88                 mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
 89                 SensorManager.SENSOR_DELAY_UI);  //
 90     }
 91
 92     @Override
 93     protected void onPause() {
 94         super.onPause();
 95         // 卸载所有传感器
 96         mSensorManager.unregisterListener(this);
 97
 98     }
 99
100 }

2. 传感器:动作传感器

时间: 2024-10-13 07:02:17

2. 传感器:动作传感器的相关文章

进阶篇-安卓系统:4.安卓手机动作传感器

动作传感器对于监测设备的移动非常有用,例如:倾斜.震动.旋转和摆动都属于动作传感器的监测范围.设备的移动通常是对用户输入的直接反应. 所有动作传感器都会返回三个浮点数的值,对于不同的传感器,这三个值的意义不同.例如,对于加速度传感器,会返回三个坐标轴的加速数据.对于陀螺仪传感器,会返回三个坐标周的旋转角速度. 动作传感器的使用与数据返回:加速度传感器 如果单纯的使用加速度传感器传回的数据,会发现Z轴的的加速度是9.8多.所以看来安卓是把静止的手机竖直加速度默认为重力加速度,并且XY轴的数据也不是

动作传感器的组成及使用方法

1 //动作传感器:加速度传感器,重力传感器: 2 public class MainActivity extends Activity implements SensorEventListener { 3 private TextView tvAcceleromter; 4 private SensorManager sManager; 5 private float[] gravity = new float[3]; 6 7 @Override 8 protected void onCrea

android动作传感器

Android平台支持一些用于监视设备动作的传感器(这样的传感器共有5个).其中两个(加速传感器和陀螺仪传感器)是纯的硬件传感器.另外三个(重力传感器.线性加速传感器和旋转向量传感器)可能是硬件传感器,也可能是软件传感器.例如,在一些Android设备中,这些基于软件的传感器会从加速和磁力传感器中获取数据,但在另一些Android设备中也可能从陀螺仪传感器中获取数据.也就是说,同一种基于软件的传感器在不同的Android设备中回传的数据可能来自不同的硬件传感器.所以基于软件的同一种传感器在不同的

Android指南针之加速度传感器地磁传感器-android学习之旅(67)

由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度 具体代码示例 代码如下 public class MainActivity extends Activity { private ImageView compass; private SensorManager sensorManager; @Override protected void onCreate(Bundle savedInstanceState) { su

奇辉 有源磁钢 铁路车轮传感器 计轴传感器 磁钢传感器 无源磁钢

磁钢(车轮传感器)是铁路轨道衡.超偏载.道口报警器.铁路车辆5T系统.铁路车号识别系统.机车定位系统.货车装载状态视频监控系统等用以检测来车.计轴判辆的重要传感器件. 根据工作原理不同,磁钢分有源磁钢和无源磁钢. 以往,无源磁钢被广泛应用,存在的问题也是随处可见.在一些现场,如铁路平交道口.车辆段.机务段.编组站.铁路专用线等,列车减速或是频繁往复调车,运行速度往往低于5公里每小时,无源磁钢的原理以及设计结构决定了其对高速车感应灵敏,对低速列车感应信号电压低,极易产生丢轴.多轴,导致各系统.设备

有源磁钢传感器-车轮传感器-铁路计轴传感器-无源磁钢升级

产品介绍 有源磁钢传感器 感应磁场的变化,当导磁物体接近有源磁钢时,有源磁钢输出正脉冲,当导磁物体从接近位置远离有源磁钢时,有源磁钢输出电压为 0V .铁路领域广泛应用于轨道衡.超偏载监测.车号识别系统.5T系统.6C系统.检测列车车速.判断来车方向.计轴判辆等等.也可用于工业生产线. “车轮传感器 有源磁钢传感器 无源磁钢升级”详细介绍 有源磁钢传感器是利用了永磁材料的特性,感知接近永磁材料的导磁物体,并通过相关的设计电路输出一个正脉冲信号的工作模式来提供触发类的信号.相对于老式的无源磁钢传感

翻译:使用红外传感器与Arduino进行简单动作与手势检测

译注:昨天看 Adruino 的 Twitter 推了这篇项目,第一眼就觉得非常有趣,翻译给大家看看.文中的红外传感器比较高级,和淘宝上5块钱的那种只能输出0和1的不一样, TPA81 是可以输出温度的,还是8个连续点. MLX90614 可以输出一点的温度,还卖将近三十,可以想象 TPA81 的价格--而且淘宝上并没有卖 TPA81 的,可见国内还没有仿的.文章也给出了另一个解决方案,使用8个 HC-SR505 来替代,这就便宜了很多.我想了一下,如果要只是实现像文章那样的增减手势,3个 HC

Android 传感器开发 完全解析

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53161452 大家好,由于最近会有对智能硬件相关的开发需求,所以最近这些天分享的博文也就大致挂钩智能硬件了,像上一篇的蓝牙分享,相信很多读者已经看过了,那么今天我为大家带来Android传感器方面知识的介绍与使用方法,对于传感器的使用,不同版本的Android手机也许存在较大的硬件差异,但是万变不离其宗,本篇将通过几个最常见的传感器,渗透式的教会大家如何使用这些传感器,带领大家完

越来越流行的可穿戴传感器:你了解吗?

IHS 预期,消费者对各类可穿戴设备的强劲需求,将让应用在可穿戴设备中的传感器出货量激增,预计在2013至2019年间将成长七倍:可穿戴传感器出货量在 2013年为6,700万颗,2014年估计约8,500万颗,明年可成长一倍达1.75一颗,2019年出货量则估计为4.66亿颗.而由于每款可穿戴式设备中的传感器数量不只一颗,传感器的种类.功能用途多种多样,所以可穿戴传感器的成长速度将会远高于可穿戴设备.为了让大家加深对应用在可穿戴设备上各类传感器的了解,特别策划可穿戴传感器专题,带你走入可穿戴传