您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子元器件>传感器>

利用Sensor现实了传感器

2018年09月24日 10:31 作者:工程师谭军 用户评论(0
  传感器
 
  传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
 
  传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。
 
  主要作用
 
  人们为了从外界获取信息,必须借助于感觉器官。
 
  而单靠人们自身的感觉器官,在研究自然现象和规律以及生产活动中它们的功能就远远不够了。为适应这种情况,就需要传感器。因此可以说,传感器是人类五官的延长,又称之为电五官。
 
  新威廉希尔官方网站 革命的到来,世界开始进入信息时代。在利用信息的过程中,首先要解决的就是要获取准确可靠的信息,而传感器是获取自然和生产领域中信息的主要途径与手段。
 
  在现代工业生产尤其是自动化生产过程中,要用各种传感器来监视和控制生产过程中的各个参数,使设备工作在正常状态或最佳状态,并使产品达到最好的质量。因此可以说,没有众多的优良的传感器,现代化生产也就失去了基础。
 
  在基础学科研究中,传感器更具有突出的地位。现代科学威廉希尔官方网站 的发展,进入了许多新领域:例如在宏观上要观察上千光年的茫茫宇宙,微观上要观察小到fm的粒子世界,纵向上要观察长达数十万年的天体演化,短到 s的瞬间反应。此外,还出现了对深化物质认识、开拓新能源、新材料等具有重要作用的各种极端威廉希尔官方网站 研究,如超高温、超低温、超高压、超高真空、超强磁场、超弱磁场等等。显然,要获取大量人类感官无法直接获取的信息,没有相适应的传感器是不可能的。许多基础科学研究的障碍,首先就在于对象信息的获取存在困难,而一些新机理和高灵敏度的检测传感器的出现,往往会导致该领域内的突破。一些传感器的发展,往往是一些边缘学科开发的先驱。
 
  传感器早已渗透到诸如工业生产、宇宙开发、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保护等等极其之泛的领域。可以毫不夸张地说,从茫茫的太空,到浩瀚的海洋,以至各种复杂的工程系统,几乎每一个现代化项目,都离不开各种各样的传感器。
 
  由此可见,传感器威廉希尔官方网站 在发展经济、推动社会进步方面的重要作用,是十分明显的。世界各国都十分重视这一领域的发展。相信不久的将来,传感器威廉希尔官方网站 将会出现一个飞跃,达到与其重要地位相称的新水平。
 
  主要特点
 
  传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化,它不仅促进了传统产业的改造和更新换代,而且还可能建立新型工业,从而成为21世纪新的经济增长点。微型化是建立在微电子机械系统(MEMS)威廉希尔官方网站 基础上的,已成功应用在硅器件上做成硅压力传感器
 
  传感器的组成
 
  传感器一般由敏感元件、转换元件、变换电路和辅助电源四部分组成。
 
  敏感元件直接感受被测量,并输出与被测量有确定关系的物理量信号;转换元件将敏感元件输出的物理量信号转换为电信号;变换电路负责对转换元件输出的电信号进行放大调制;转换元件和变换电路一般还需要辅助电源供电
 
  主要功能
 
  常将传感器的功能与人类5大感觉器官相比拟:
 
  光敏传感器——视觉
 
  声敏传感器——听觉
 
  气敏传感器——嗅觉
 
  化学传感器——味觉
 
  压敏、温敏、
 
  流体传感器——触觉
 
  敏感元件的分类:
 
  物理类,基于力、热、光、电、磁和声等物理效应。
 
  化学类,基于化学反应的原理。
 
  生物类,基于酶、抗体、和激素等分子识别功能。
 
  通常据其基本感知功能可分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类(还有人曾将敏感元件分46类)。

  一、传感器的使用

  1、传感器的类型:

  方向传感器::Sensor.TYPE_ORIENTATION

  加速度(重力)传感器:sensor.TYPE_ACCELEFOMETER

  光线传感器:sensor.TYPT_LIGHT

  磁场传感器:sensor.TYPE_MANGNETIC_FIELD

  距离(临近性)传感器:Sensor.TYPE_FROXIMITY

  温度传感器:Sensor.TYPE_TEMPERATURE

  常用的API

  《1》得到传感器的服务(得到传感器的管理者)

  SensorManager sm=(SensorManager)getSystemService(SENSOR_SERVICE);

  《2》得到手机所支持的所有的传感器的类型:

  List list=sm.getSensorList(SensorManager.TYPE_ALL);

  《3》传感器的类型:

  Sensor.getType();

  《4》传感器的名字;

  Sensor.getName();

  《5》传感器的监听:SensorEventListener()

  sm.registerListener(监听,传感器对象,rate);

  重点:

  《1》光线传感器:sensor.TYPT_LIGHT

  得到光线值:float f=event.values[0];

  WindowManager.LayoutParams params = activity.getWindow().getAttributes();

  params.screenBrightness = value / 255f;

  activity.getWindow().setAttributes(params);

  《2》加速度传感器:sensor.TYPE_ACCELEFOMETER

  加速度有三个值:这三个值是手机在三个方向受到的加速度

  float x=event.values[0];–》在手机顶部从左边沿往有边沿是手机的X轴的正方向

  float y=event.values[1];–》从手机顶部沿手机左边沿手机底部是Y轴的正方向

  float z=event.values[2];–》垂直手机屏幕朝外的是正方向

  《3》方向传感器:Sensor.TYPE_ORIENTATION

  方向传感器三个值:

  方向角:指手机平躺时,手机头部绕Z轴旋转,与地球正北极的夹角

  0代表北(North)

  90代表东East

  180代表南(South)

  270代表西(West)

  俯视角:手机绕X轴旋转与水平线的夹角

  滚转角:手机绕Y轴旋转与水平线的夹角

  利用方向传感器实现 指南针应用

  运行后效果图如下:

  

  布局文件(activity_main.xml)

  《?xml version=“1.0” encoding=“utf-8”?》

  《RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

  xmlns:tools=“http://schemas.android.com/tools” android:id=“@+id/activity_main”

  android:layout_width=“match_parent” android:layout_height=“match_parent”

  android:paddingBottom=“@dimen/activity_vertical_margin”

  android:paddingLeft=“@dimen/activity_horizontal_margin”

  android:paddingRight=“@dimen/activity_horizontal_margin”

  android:paddingTop=“@dimen/activity_vertical_margin”

  tools:context=“com.example.g150825_android29.MainActivity”》

  《ImageView

  android:layout_width=“match_parent”

  android:layout_height=“match_parent”

  android:src=“@drawable/znz”

  android:id=“@+id/iv_image”

  /》I

  《TextView

  android:layout_width=“match_parent”

  android:layout_height=“wrap_content”

  android:textSize=“30sp”

  android:id=“@+id/tv_main_result”

  /》

  《/RelativeLayout》12345678910111213141516171819202122232425

  Java代码(MainActivity )

  package com.example.g150825_android29;

  import android.content.Context;

  import android.hardware.Sensor;

  import android.hardware.SensorEvent;

  import android.hardware.SensorEventListener;

  import android.hardware.SensorManager;

  import android.support.v7.app.AppCompatActivity;

  import android.os.Bundle;

  import android.util.Log;

  import android.view.View;

  import android.view.WindowManager;

  import android.view.animation.Animation;

  import android.view.animation.RotateAnimation;

  import android.widget.ImageView;

  import android.widget.TextView;

  import java.util.List;

  public class MainActivity extends AppCompatActivity {

  private SensorManager sensorManager;

  private Sensor sensorOri;

  private TextView tv_main_result;

  private MyListener myListener;

  private ImageView iv_image;

  private float current=0;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  tv_main_result = (TextView) findViewById(R.id.tv_main_result);

  iv_image = (ImageView) findViewById(R.id.iv_image);

  //得到传感器管理者

  sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  //得到光线传感器

  // sensorLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

  //获取加速度传感器

  // sensorACC = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

  //获取方向传感器

  sensorOri=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

  //获取光线传感器的值(光线值)

  myListener = new MyListener();

  }

  //注册监听(监听某一个传感器的值)

  @Override

  protected void onResume() {

  super.onResume();

  sensorManager.registerListener(myListener,sensorOri,SensorManager.SENSOR_DELAY_UI);

  }

  class MyListener implements SensorEventListener{

  //当值发生改变

  @Override

  public void onSensorChanged(SensorEvent sensorEvent) {

  float[] f=sensorEvent.values;

  float x=f[0];

  float y=f[1];

  float z=f[2];

  tv_main_result.setText(“x=”+x+“ y=”+y+“ z=”+z);

  //实例化旋转动画

  RotateAnimation rotateAnimation=new RotateAnimation(current,-x, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);

  rotateAnimation.setDuration(200);

  current=-x;

  iv_image.startAnimation(rotateAnimation);

  //改变屏幕的亮度

  // WindowManager.LayoutParams layoutParams=getWindow().getAttributes();

  // layoutParams.screenBrightness=light/255f;

  // getWindow().setAttributes(layoutParams);

  }

  //当值的精度发生改变

  @Override

  public void onAccuracyChanged(Sensor sensor, int i) {

  }

  }

  //取消注册监听

  @Override

  protected void onDestroy() {

  super.onDestroy();

  sensorManager.unregisterListener(myListener);

  }

  // public void getAllSensors(View view){

  // List《Sensor》 sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);

  // for(Sensor s:sensors){

  // Log.i(“test”, s.getName());

  // }

  //

  // }

  }


非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

( 发表人:金巧 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!