浅中山棋牌游戏析磁场传感器和方位及应用原理
时间: 2020-09-18 17:56 浏览次数: 当前栏目:行业新闻编辑:中山手机棋牌游戏
有线门磁为嵌入式安装更加隐蔽,感应门窗的开合,适用于木质或铝合金门窗发出有线常闭/常开开关信号。门磁是用来探测门、そ窗、抽屉等是否被非法打开或移动。它由无线发射器和

  有线门磁为嵌入式安装更加隐蔽,感应门窗的开合,适用于木质或铝合金门窗发出有线常闭/常开开关信号。门磁是用来探测门、そ窗、抽屉等是否被非法打开或移动。它由无线发射器和磁块两部分组成。门磁系统其实和床磁等原理相同。

  ば浅析磁场传感器和方位及应用原理

  磁场传感器(Magnetic Field つ Sensors)

  磁场传感器可以用来检测磁场大小,和加速度传感器一样,有x、y、z轴▽ 三个方向,单位为uT(microteslas)。磁场传感器也称为compass(指南针),在uses-feature中使用android.hardware.sensor.compass作为其名字。说实在的,单看磁场数值也看不出所以然。

  说个故事,单位部门调整,一拨同事到10楼,这是上下移动实验室的夹层,下面是移动网络(有4G小基站)实验室。一听要挪过去,各个忧心忡忡,这辐射如何办?按秘书的说法,怎◆ 么办,凉拌。正好玩磁场传感器,虽然magneTIc不是electromagneTIc,电场、磁场相互作用,在具体的都还给老师了。手头上也没有什么能够进行测试的,就用磁场传感器测一测。这种事情多半都是自己吓自己,智能手机将成为摸金校尉的必备工具。

  下面是↖小例子代码片段:

  public class MagneTIcFieldSensorAcTIvity extends Activity implements ◢ SensorEventListener{

  。..。..

  @Override

  protected void onCreate(Bundle savedInstanceState) ÷{

  。..。..

  sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);

  sensor=sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

  }

  。..。.. 有 //注册和注销磁场传感器监听器

  private int count=1;

に   @Override

  public void ◇onSensorChanged(SensorEvent event) {

  if( ← count++==20){ //磁场传感器很敏感,每20个变化,显示一次数值

  double value=Math.sqrt(event.values[0]*event.values[0] + event.values[1]*event.values[1]

  +event.values[2]*event.values[2]);

  String str=String.format(“X:%8.4f , Y:%8.4f , Z:%8.4f \n总值为:%8.4f”,

  event.values[0],event.values[1],event.values[2],value);

  count=1;

  tv.setText(str);

  }

  }

  @Override

  public よ void onAccuracyChanged(Sensor sensor, int accuracy) {

  // Nothing here

  }

  }

  方位传感器(Orientation Sensors)

  磁场传感器和加速度传感器结合可或者设备摆放角度,两【】者结合可以获取方位。这些せ计算由Android代劳了,SensorManager提供getRotationMatrix(),获得转动的矩阵,并进一步通过getOrientation()获得方位矩阵。Android还有方位传感器(orientation ざ↑ほSensors),不是物理实体,而是通过* acceleration传感器和磁场感应器来获取方位,而在Android2.2▅ 开始方位传感器就被deprecated了。

  设备摆放情况通过azimuth、pitch和roll来表示。

  azimuth即方位角,就是手机方向和正北的夹角,百度百科这样描述方位角:是从某点的指北方向线起,依顺时针方向到目标方向线之间的水平夹角。pitch和roll可能是引用了航天的术语。azimuth,pitch和roll分别是z轴、X轴和Y轴的旋转角度。

  老方法采用orientation传感器,azimuth从0~360。pitch是在x轴方向的转动角度,其实就是Y轴和水平面的仰角,范围为-180~180,正的为朝下(手机头低于水平面),负的为朝上,pitch的方向逆时针为正。roll是Y轴防线的转动角度,实际就是X轴和水平面的角度,范围在-90~90,同样逆时针为正,右轴高于左轴时为正,右轴高于左轴时为负。

  新的方法,azimuth的范围是-180~180,当然我们可以进行适当的处理,如果小于零,则加360,这样就可以和orientation的得到的值一样。棋牌游戏平台十大排名需要注意的是pitch的范围是-90~90,机头上翘为负;roll的范围是-180~180,和老方法相反,右轴高时为负。

  这两种方式的数值可能会使人有些迷糊,我们在使用之前先查文档弄清楚就是了。我曾经有个疑惑为何有两个数值的范围是360度,其中一个数值只有180度。想想球面就知道了,以地球仪为例,经度范围是360°,维度范围是180°,就可ら以确定球面上的任何一点,以球心到该点假设是手机中轴线,还有一个围绕Y轴360°转的角度的第三维,这就可以确ご 定所有的排放Ψ方式。

  小例子

  下面小例子我们将同时展现新旧两种方式。

  public ▽class VirtualJax ↓extends Activity implements 【】SensorEventListener{

  。.. → 。.. //注册和注销传感器监听器,本例涉及三个传感器(加速度传感器、♂ 地磁传感器和方位传感器),可以用sensorManager.unregister(this)注销监听器所涉及的全部传感器。

  private Sensor accelSensor=null, compassSensor=null, orientSensor=null;

  private float[] accelValues=new float[3], compassValues=new float[3],orientValues=new float[3];

  private boolean ready=false; //检查传感器是否正常工作,即是否同时具有加速传感器和磁场传感器。

  private float[] inR=new float[9];

  private float[] 牛牛游戏 inclineMatrix=new float[9];

  private float[] prefValues=new float[3];

  private double mInclination;

  private int count=1;

  @SuppressWarnings(“deprecation”) //因为orientaion已经不再※使用,为了不要显示warning,加上此标识

  @Override

  public void onSensorChanged(SensorEvent event) ぴ {

  //【1】将相关传感器的K数值分别读入accelValues,compassValues(◆磁力感应器的数值)和orientValues数组中

  switch(event.sensor.getType()){

  case ¥Sensor.TYPE_ACCELEROMETER:

  for(int i=0 ; i 《 3 ; i ++){

  accelValues[i]=event.values[i];

  }

  if(compassValues[0] !=0) //如果accelerator和magnetic传感器都有数值,设置为真

  ready=true;

  break;

  case Sensor.TYPE_MAGNETIC_FIELD:

  for(int i=0 ; i 《 3 ; i 棋牌游戏平台 ++){

  compassValues[i]=event.values[i];

  }

  if(accelValues[2] !=0) //检查accelerator和magnetic传感器都有数值,只是换一个轴向检查

  ready=true;

  break;

  case Sensor.TYPE_ORIENTATION:

  for(int i=0 ; i 《 3 ; i ╂++){

  orientValues[i]=event.values[i];

  }

  break;

  }

  if(!ready)

  return;

  //【2】根据加速传感器的数值accelValues[3]和磁力感应さ器的数值compassValues[3],进行矩阵计算,获得方位←

  //【2.1】计算rotation ★ matrix な R(inR)和inclination matrix I(inclineMatrix)

  if(SensorManager.getRotationMatrix(inR, inclineMatrix, accelValues, compassValues)){

  SensorManager.getOrientation(inR, ¤prefValues);

  //【2.2】根据inclination matrix计算磁仰角,地球表面任一点的地磁场总强度的矢量方向与水平面的夹角。

  mInclination=SensorManager.getInclination(inclineMatrix);

  //【3】显示测量值

  if(count++ % 100==0){

  doUpdate(null);

  count=1;

  }

  }else{

  Toast.makeText(this, “无法获得矩阵(SensorManager.getRotationMatrix)”, Toast.LENGTH_LONG);

  finish();

  }

  }

  //【3】显示测量值

  public void №doUpdate(View v){

  if(!ready)

  return;

  //preValues[0]是方位角,单位是弧度,范围是-pi到pi,通过Math.toDegrees()转换为角度

  ㊣float mAzimuth=(float)Math.toDegrees(prefValues[0]);【】

  String msg=String.format(“推荐方式:\n方位角:%7.3f\npitch: ◇ %7.3f\nroll: %7.3f\n地磁仰角:# %7.3f\n”,

  mAzimuth,Math.toDegrees(prefValues[1]),Math.toDegrees(prefValues[2]),

  Math.toDegrees(mInclination));

  nowOne.setText(msg);

  msg=String.format(“老方式:\n方位角:%7.3f\npitch: %7.3f\nroll: %7.3f”,

  orientValues[0],orientValues[1],orientValues[2]);

  oldOne.setText(msg);

  }

  }

以上就是【浅中山棋牌游戏析磁场传感器和方位及应用原理】的全部内容,文章地址:http://fqdlw.com/xingyexinwen/456.html,本文tag标签:浅析磁场传感器和方位及应用原理,返回首页查看更多信息!



Copyright © 中山亿鸿电子产品有限公司 版权所有 备案号: 粤ICP备5548875
全国服务电话:021-668744215   传真:021-668744215
公司地址:广东省中山市高新区幸福广场幸福大道A26-8   网站地图  最新文章

手机棋牌游戏