关于Android传感器之完全解析
感应器
感应器(英文名字:transducer/sensor)是一种检验设备,能感受到被检测的信息内容,能够将感受到的信息内容,按一定规律性转换变成电子信号或其它所需方式的信息内容輸出,以达到数据的传送、解决、储存、表明、纪录和操纵等规定。
感应器的特性包含:小型化、智能化、智能化系统、多用途化、专业化、数字化。它是完成自动化检测和智能控制的主要阶段。感应器的存有和发展趋势,让物品得到触感、味蕾和味觉等感观,让物件渐渐地越来越活了起來。一般 依据其几乎认知作用分成热敏元件、感光元器件、气敏元器件、力敏元器件、磁敏元器件、湿敏元器件、声敏元器件、射线光敏电阻器、色敏元器件和味敏元器件等十大类。
关键功效
大家为了能从外部获得信息,务必借助视觉器官。
而只靠我们自己的视觉器官,在探究天气现象和基本规律及其生产制造运动中两者的功用就不够了。为满足这些状况,就必须感应器。因而可以说,感应器是人们五官的增加,又称为电五官。
科技革命的来临,全球逐渐进到信息化时代。在使用数据的环节中,最先要处理的便是要获得精准靠谱的信息内容,而感应器是获得肯定和制造方面中数据的具体方式与方式。
在当代工业化生产尤其是自动化生产全过程中,要用各种各样感应器来监控和调节生产过程中的每个主要参数,使机器设备运行在常规情况或最好情况,并使设备做到最佳的品质。因而可以说,沒有很多的优质的感应器,智能化生产制造也就没有了基本。
在基础科学科学研究中,感应器更具备明显的影响力。当代科技的发展趋势,进入了很多新的领域:比如在宏观经济上需要观查过千亿光年的苍茫宇宙空间,外部经济上应观查小到fm的物体全球,竖向上应观查长达数十万年的星体演变,短到 s的瞬间反应。除此之外,还产生了对推进化学物质了解、发展新能源技术、新型材料等有着关键功效的各种各样极端化技术性科学研究,如高温高压、低温、高压、极高真空泵、强力电磁场、超弱电磁场这些。显而易见,要获得很多人们感观不能立即获得的信息内容,沒有相对应的感应器是不太可能的。很多基础学科科学研究的阻碍,最先就取决于目标数据的获得存有艰难,而一些新原理和高灵敏的检测传感器的发生,通常会致使该行业内的提升。一些感应器的发展趋势,通常是一些交叉学科开发设计的先行者。
感应器早就渗入例如工业化生产、宇宙空间开发设计、深海检测、生态环境保护、資源调研、医药学确诊、生物技术、乃至文化遗产保护这些非常之泛的行业。能够毫无夸大地说,从一望无际的外太空,到浩瀚无垠的深海,以致各种各样繁杂的工程项目系统软件,基本上每一个智能化新项目,都少不了各式各样的感应器。
不难看出,传感技术在发展经济、促进社会进步层面的关键功效,是十分显著的。世界各地都十分重视这一行业的发展趋势。坚信一段时间的未来,传感技术可能发生一个飞越,做到与其说关键位置相当的新水准。
主要特点
感应器的特性包含:小型化、智能化、智能化系统、多用途化、专业化、数字化,它不但增进了传统制造业的改建和升级换代,并且还有可能创建新式工业生产,进而变成 二十一世纪新的资金突破点。小型化是构建在微电子技术机械结构(MEMS)技术性基本上的,已完成运用在硅元器件上制成硅液位传感器。
感应器的构成
感应器一般由光敏电阻器、变换元器件、转换电源电路和輔助开关电源四部份构成。
光敏电阻器立即体会被精确测量,并輸出与被精确测量有确定关系的标量数据信号;变换元器件将光敏电阻器輸出的标量数据信号变换为电子信号;转换电源电路承担对变换元器件輸出的信号开展变大调配;变换元器件和转换电源电路一般还必须輔助开关电源供电系统。
关键作用
常将控制器的作用与人们5大视觉器官相比较:
光敏电阻——视觉效果
声敏感应器——听觉系统
气敏感应器——味觉
有机化学感应器——味蕾
压敏、温敏、
液体感应器——触感
光敏电阻器的归类:
物理学类,根据力、热、光、电、磁和弦等物理学效用。
化学类,根据化学变化的基本原理。
微生物类,根据酶、抗原、和生长激素等分子结构鉴别作用。
一般 据其几乎认知作用可分成热敏元件、感光元器件、气敏元器件、力敏元器件、磁敏元器件、湿敏元器件、声敏元器件、射线光敏电阻器、色敏元器件和味敏元器件等十大类(也有人曾将光敏电阻器分46类)。
常见感应器详细介绍与使用方法
Android服务平台适用三个大类的感应器
Motion sensors(运动传感器)
这种感应器精确测量加快力,并沿三个轴的转动力。此类型包含加速度传感器,重力传感器, 手机陀螺仪和转动矢量素材感应器。
Environmental sensors (自然环境感应器)
这种感应器精确测量各种各样环境监控系统,比如环境质量溫度和工作压力,照明灯具和环境湿度。此类型包含气压传感器,分光光度计,和温度表。
PosiTIon sensors (相位传感器)
这种感应器测量设备的物理学部位。这一类型包含方位感应器和磁力计。
感应器完成步骤
第一步:获得SensorManager
SensorManager mSensorManager = (SensorManager) mContext
.getSystemService(Context.SENSOR_SERVICE);12
第二步:申请注册感应器
Sensor sensor = mSensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (null != sensor)
mSensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_NORMAL);12345
registerListener这一办法有三个主要参数。
第一个主要参数是感应器数据信息改变的窃听器
大家必须去完成SensorEventListener插口,他里边有两个回调函数方式,
@Override
public void onSensorChanged(SensorEvent event) {
//当感应器的标值产生变化时启用
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//感应器的精密度产生变化时启用
}123456789
onSensorChanged方式只有一个SensorEvent种类的主要参数event,在其中SensorEvent类有一个values自变量十分关键,该变量值的类别是float[]。但该自变量数最多仅有3个原素,并且依据温度传感器的不一样,values自变量中原素所表示的含意也不一样。
有关values值的详尽含意可以看参照文章内容!!!
第二个主要参数是人们必须监视的感应器
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);1
Sensor.TYPE_ACCELEROMETER则是Android设置传感器分类,这儿就是指瞬时速度感应器,
第三个主要参数是感应器数据信息升级信息的速率
有下列四个值可选择,她们的速率是增长的
SENSOR_DELAY_UI
SENSOR_DELAY_NORMAL
SENSOR_DELAY_GAME
SENSOR_DELAY_FASTEST
感应器的销户
//销户全部感应器目标
public voidunregisterListener(SensorEventListener listener)
//销户特定的感应器目标
public voidunregisterListener(SensorEventListener listener, Sensor sensor)1234
sensor的获得依然是根据SensorManager.getDefaultSensor()方式。
得到手机上适用的全部感应器
Listsensors = sensorManager.getSensorList(Sensor.TYPE_ALL);1
Android传感器分类表
瞬时速度感应器:TYPE_ACCELEROMETER
以m/s2精确测量它机器设备全部三个物理学中心线方位(x,y,和z)瞬时速度。
周边温度感应器:TYPE_AMBIENT_TEMPERATURE
检验周边气体溫度。
压力感应器:TYPE_GRAVITY
精确测量作用力
手机陀螺仪感应器:TYPE_GYROSCOPE
以rad/s测量设备三个物理学中心线方位(x,y,和z)。转动速率。
阳光照射感应器:TYPE_LIGHT
以lx精确测量周边的光源等级。
线形瞬时速度感应器:TYPE_LINEAR_ACCELERATION
检验顺着一个径向的瞬时速度。
磁性感应器:TYPE_MAGNETIC_FIELD
精确测量周边的三个物理学中心线方位的电磁场。
方位感应器: TYPE_ORIENTATION
测量设备全部三个物理学中心线方位(x,y和x)的转动视角。
液位传感器:TYPE_PRESSURE
精确测量周边气体标准气压
接近开关:TYPE_PROXIMITY
检验物件与智能手机的间距
空气湿度感应器:TYPE_RELATIVE_HUMIDITY
检验周边气体空气湿度
转动矢量素材感应器:TYPE_ROTATION_VECTOR
用以检验健身运动和检验转动。
温度感应器: TYPE_TEMPERATURE
检测仪器的溫度
感应器应用实践活动
这儿以方位感应器为例子
方位感应器的获得方法
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);1
上边这一,对,早已被google弃用了,掌握就行。
Android中的平面坐标
自身画的有点儿丑,凑合着一下吧,Z轴默认设置 垂直平分路面,说白了获得的三个Values二维数组即相匹配手机上与Z,Y,X产生的交角,后边会表明,
前边讲了,TYPE_ORIENTATION已被弃用,那麼近期的方位感应器是怎样做的呢?
实际上,Android 获得手机上转动的角度和方向是根据瞬时速度感应器和地磁传感器一同测算得到的
OK,大家此刻是必须一起应用两种感应器的,看编码
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.
TYPE_ACCELEROMETER);
Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.
TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(listener, accelerometerSensor,
SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(listener, magneticSensor,
SensorManager.SENSOR_DELAY_GAME);12345678
与此同时采用了瞬时速度感应器和地磁传感器
获得旋转矩阵二维数组R
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);1
获得手机上转动数据信息
SensorManager.getOrientation(R, values);1
values 是一个长短为 3 的 float 二维数组,手机上在每个角度上的转动数据信息都是被储存到这一二维数组之中。
对应关系:
values[0]-》Z轴、values[1]-》X轴、values[2]-》Y轴
values[0]的取值范围是-180到180 度,在其中±180 度表明正南方方位,0 度表明正北方方位,-90 度表明东南方方位,90 度表明正东方位,如图所示
说白了,实践是检验真知的唯一标准,这是我检验后自主画的,大伙儿看一下就清楚该怎么依据得到到的方面来做相应的解决了
一个完全的方位感应器封裝类
public class DirectionSensorUtils implements SensorEventListener {
private SensorManager sensorManager;
float[] accelerometerValues = new float[3];
float[] magneticValues = new float[3];
float lastRotateDegree;
private ImageView compassImg;//罗盘背景
public DirectionSensorUtils(Context context , ImageView compassImg) {
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
this.compassImg = compassImg;
}
//申请注册感应器
public void registerSensor(){
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.
TYPE_ACCELEROMETER);
Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.
TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(this, accelerometerSensor,
SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(this, magneticSensor,
SensorManager.SENSOR_DELAY_GAME);
}
//消除感应器申请注册
public void unregisterSensor(){
if (sensorManager != null) {
sensorManager.unregisterListener(this);
}
}
@Override
public void onSensorChanged(SensorEvent event) {
// 分辨当今是瞬时速度感应器或是地磁传感器
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// 根据clone()获得不一样的values引入
accelerometerValues = event.values.clone();
} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
magneticValues = event.values.clone();
}
//获得地磁场与瞬时速度感应器组成的旋转矩阵
float[] R = new float[9];
float[] values = new float[3];
SensorManager.getRotationMatrix(R, null, accelerometerValues,
magneticValues);
SensorManager.getOrientation(R, values);
//values[0]-》Z轴、values[1]-》X轴、values[2]-》Y轴
//应用前请开展变换,由于获得到的值是倾斜度,实例以下
// Math.toDegrees(values[0]);
// Math.toDegrees(values[1]);
// Math.toDegrees(values[2]);
handleEvent(values);
}
public void handleEvent(float[] values){
// 这儿完成了一个罗盘
float rotateDegree = -(float) Math.toDegrees(values[0]);
if (Math.abs(rotateDegree - lastRotateDegree) 》 1) {
RotateAnimation animation = new RotateAnimation
(lastRotateDegree, rotateDegree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.
RELATIVE_TO_SELF, 0.5f);
animation.setFillAfter(true);
compassImg.startAnimation(animation);
lastRotateDegree = rotateDegree;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
最新更新
猜你喜欢
电工推荐
![电工技术基础_电工基础知识_电工之家-电工学习网](/skin/images/guanzhu.jpg)