资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2019/1/24,#,传感器的定义,传感器是一种物理装置或生物器官,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的信息传 递给其他装置或器官。国家标准,GB7665-87,对传感器的定义是:,能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和 转换元件组成,。传感器是一种检测装置,能感受被测量的信息,并能将检测的感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息 的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的首要环节。,传感器的定义传感器是一种物理装置或生物器官,能够探测、感受,1,传感器的种类,可以从不同的角度对传感器进行分类:转换原理(传感器工作的基本物理或化学效应);用途;输出信号类型以及制作材料和工艺等。根据工作原理,传感器可分为物理传感器和化学传感器两大类。物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。大多数传感器是以物理原理为基础运作的。化学传感器的技术问题较多,例如可靠性问题、规模生产的可能性、价格问题等,解决了这些问题,化学传感器的应用将会有巨大增长。而有些传感器既不能划分为物理类,也不能划分为化学类。,传感器的种类 可以从不同的角度对传感器,2,Android,中传感器的种类,Google Android,操作系统中内置了很多传感器,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变屏幕显示布局。下面是,Android,中支持的几种传感器:,SenSor,。,TYPE_ACCELEROMETER,:加速度传感器。,Sensor,。,TYPE_GYROSCOPE,:陀螺仪传感器。,Sensor,。,TYPE_LIGHT,:亮度传感器。,Sensor,。,TYPE_MAGNETIC_FIELD,:地磁传感器。,Sensor,。,TYPE_ORIENTATION,:方向传感器。,Sensor,。,TYPE_PRESSURE,:压力传感器。,Sensor,。,TYPE_PROXIMITY,:近程传感器。,Sensor,。,TYPE_TEMPERATURE,:温度传感器。,Android中传感器的种类Google Android操作,3,Android,中传感器的功能,要在,Android,中使用传感器,首先需要了解,SensorManager,和,SensorEventListener,。顾名思 义,,SensorManager,就是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。我们可以通过,getSystemService,方法来取得一个,SensorManager,对象。代码如下:,SensorManager mSensorManager=,(,SensorManager,),getSystemService,(,SENSOR_SERVICE,);,Android 中传感器的功能要在Android中使用传感器,4,取得,SensorManager,对象之后,可以通过,getSensorList,方法来获得我们需要的传感器类型,保存到一个传感器列表中。通过如下代码可以得到一个方向传感器:,List sensors=mSensorManager,。,getSensorList,(,Sensor,。,TYPE_ORIENTATION,);,要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。,Android,中提供了,registerListener,来注册一个传感器,并提供了,unregisterListener,来卸载一个传感器。,registerListener,方法包括,3,个参数:第,1,个参数,接收信号的,Listener,实例;第,2,个参数,想接收的传感器类型的列表(即上一步创建的,List,对象);第,3,个参数,接收频度。调用之后返回一个布尔值,,true,表示成功,,false,表示失败。,取得SensorManager对象之后,可以通过getSen,5,/,注册传感器,Boolean mRegisteredSensor=mSensorManager.registerListener,(,this,sensor,SensorManager.SENSOR_DELAY_FASTEST,);,/,卸载传感器,mSensorManager.unregisterListener,(,this,);,/注册传感器,6,onSensorChanged,(,SensorEvent event,)方法在传感器值更改时调用。该方法只由受此应用程序监视的传感器调用。该方法的参数包括一个,SensorEvent,对象,该对象主要包括一组浮点数,表示 传感器获得的方向、加速度等信息。例如,以下代码可以取得其值:,float x=event.valuesSensorManager.DATA_X;,float y=event.valuesSensorManager.DATA_Y;,float z=event.valuesSensorManager.DATA_Z;,onAccuracyChanged,(,Sensor sensor,int accuracy,)方法在传感器的精准度发生改变时调用。其参,数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。,onSensorChanged(SensorEvent e,7,Android,加速度传感器,加速度传感器是为了检测物体的加速度的传感器。物体运动加速度也跟着变化,如果能取到加速度,物体受到什么样的作用力或则物体进行什么样的运动,我们就可以知道。使用加速度,我们就能做模拟计步器、物体运动的应用程序。,Android 加速度传感器 加速度传感器是,8,Android,加速度传感器的类型是,Sensor.TYPE_ACCELEROMETER,通过,android.hardware.SensorEvent,返回加速度传感器值。,加速度传感器返回值的单位是加速度的单位,m/s2,(米每二次方秒),有三个方向的值分别是,values0:x-axis,方向加速度,values1:y-axis,方向加速度,values2:z-axis,方向加速度,Android 加速度传感器的类型是 Sensor.TYP,9,其中,x,y,z,方向的定义是以水平放置在的手机的右下脚为参照系坐标原点(如下图),x,方向就是手机的水平方向,右为正,y,方向就是手机的水平垂直方向,前为正,y,方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负,x0|+-+-y0|/z0(toward the sky),O:Origin(x=0,y=0,z=0),其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系,10,需要注意的是,由于地球固有的重力加速度,g(,值为,9.8 m/s2),,,因此现实中实际加速度值应该是,z,方向返回值,-9.8 m/s2.,比如你以,2 m/s2,的加速度将手机抛起,这时,z,方向的返回值应该是,11.8 m/s2.,反之若以手机以,2 m/s2,的加速度坠落,则,z,方向的返回值应该是,7.8 m/s2.,需要注意的是,由于地球固有的重力加速度g(值为9.8 m/,11,常量名,说明,实际的值,GRAVITY_DEATH_STAR_1,死亡星,3.5303614E-7,GRAVITY_EARTH,地球,9.80665,GRAVITY_JUPITER,木星,23.12,GRAVITY_MARS,火星,3.71,GRAVITY_MERCURY,水星,3.7,GRAVITY_MOON,月亮,1.6,GRAVITY_NEPTUNE,海王星,11.0,GRAVITY_PLUTO,冥王星,0.6,GRAVITY_SATURN,土星,8.96,GRAVITY_SUN,太阳,275.0,GRAVITY_THE_ISLAND,岛屿星,4.815162,GRAVITY_URANUS,天王星,8.69,GRAVITY_VENUS,金星,8.87,常量名说明实际的值GRAVITY_DEATH_STAR_1,12,Android,姿态传感器,姿态传感器是使用最多的传感器之一,该传感器主要感应手机方位的变化,捕获的同样是三个数,分别代表手机沿,Yaw,轴、,Pitch,轴和,Roll,轴转过的角度。,Yaw,轴、,Pitch,轴和,Roll,轴与平时我们理解的空间坐标系有所不同,下面分别对这三个轴所表示的含义进行详细介绍。,Yaw,轴,该轴是三个轴中最简单的一个,其表示的方向是不变的,一直是重力加速度,g,的反方向,即一直是竖直向上的,与手机的姿态无关。,Pitch,轴,该轴的方向并不是固定不变的,而是会随着手机沿,Yaw,轴旋转而改变,唯一不变的关系是该轴永远与,Yaw,轴成,90,度角,图表示了该轴的方向。实际上,Yaw,轴与,Pitch,轴相当于焊到一起的一个,90,度支架,无论手机怎么旋转,其与,Yaw,轴的角度都为,90,度。,Roll,轴,该轴是沿着手机屏幕向上的轴,在图,14-10,中可以看到,无论手机是何种姿态,,Roll,轴都是沿着手机的屏幕向上的,其方向是与手机绑定的。,Android 姿态传感器姿态传感器是使用最多的传感器之一,,13,android传感器和位置服务课件,14,android,重力感应器,整个重力感应坐标设定如下,:,以屏幕的左下方为原点(,2d,编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从,-10,到,10,,以浮点数为等级单位,想象一下以下情形:,手机屏幕向上(,z,轴朝天)水平放置的时侯,(,x,,,y,,,z,)的值分别为(,0,,,0,,,10,);,手机屏幕向下(,z,轴朝地)水平放置的时侯,(,x,,,y,,,z,)的值分别为(,0,,,0,,,-10,);,手机屏幕向左侧放(,x,轴朝天)的时候,(,x,,,y,,,z,)的值分别为(,10,,,0,,,0,);,手机竖直(,y,轴朝天)向上的时候,(,x,,,y,,,z,)的值分别为(,0,,,10,,,0,);,其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用,x,y,z,三个值求三角函数,就可以精确检测手机的运动状态了。,android重力感应器整个重力感应坐标设定如下:,15,android传感器和位置服务课件,16,光线传感器,光线传感器的类型常量是,Sensor.TYPE_LIGHT,。,values,数组只有第一个元素(,values0,)有意义。表示光线的强度。最大的值是,120000.0f,。,Android SDK,将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常量都定义在,SensorManager,类中,代码如下:,光线传感器光线传感器的类型常量是Sensor.TYPE_LI,17,public static final float LIGHT_SUNLIGHT_MAX=120000.0f;public static final float LIGHT_SUNLIGHT=110000.0f;public static final float LIGHT_SHADE=20000.0f;public static final float LIGHT_OVERCAST=10000.0f;public static final float LIGHT_SUNRISE=400.0f;public static final float LIGHT_CLOUDY=100.0f
展开阅读全文