您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

利用Sensor現(xiàn)實了傳感器

2018年09月24日 10:31 作者:工程師譚軍 用戶評論(0
  傳感器
?
  傳感器(英文名稱:transducer/sensor)是一種檢測裝置,能感受到被測量的信息,并能將感受到的信息,按一定規(guī)律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。
?
  傳感器的特點包括:微型化、數(shù)字化、智能化、多功能化、系統(tǒng)化、網(wǎng)絡(luò)化。它是實現(xiàn)自動檢測和自動控制的首要環(huán)節(jié)。傳感器的存在和發(fā)展,讓物體有了觸覺、味覺和嗅覺等感官,讓物體慢慢變得活了起來。通常根據(jù)其基本感知功能分為熱敏元件、光敏元件、氣敏元件、力敏元件、磁敏元件、濕敏元件、聲敏元件、放射線敏感元件、色敏元件和味敏元件等十大類。
?
  主要作用
?
  人們?yōu)榱藦耐饨绔@取信息,必須借助于感覺器官。
?
  而單靠人們自身的感覺器官,在研究自然現(xiàn)象和規(guī)律以及生產(chǎn)活動中它們的功能就遠(yuǎn)遠(yuǎn)不夠了。為適應(yīng)這種情況,就需要傳感器。因此可以說,傳感器是人類五官的延長,又稱之為電五官。
?
  新技術(shù)革命的到來,世界開始進(jìn)入信息時代。在利用信息的過程中,首先要解決的就是要獲取準(zhǔn)確可靠的信息,而傳感器是獲取自然和生產(chǎn)領(lǐng)域中信息的主要途徑與手段。
?
  在現(xiàn)代工業(yè)生產(chǎn)尤其是自動化生產(chǎn)過程中,要用各種傳感器來監(jiān)視和控制生產(chǎn)過程中的各個參數(shù),使設(shè)備工作在正常狀態(tài)或最佳狀態(tài),并使產(chǎn)品達(dá)到最好的質(zhì)量。因此可以說,沒有眾多的優(yōu)良的傳感器,現(xiàn)代化生產(chǎn)也就失去了基礎(chǔ)。
?
  在基礎(chǔ)學(xué)科研究中,傳感器更具有突出的地位?,F(xiàn)代科學(xué)技術(shù)的發(fā)展,進(jìn)入了許多新領(lǐng)域:例如在宏觀上要觀察上千光年的茫茫宇宙,微觀上要觀察小到fm的粒子世界,縱向上要觀察長達(dá)數(shù)十萬年的天體演化,短到 s的瞬間反應(yīng)。此外,還出現(xiàn)了對深化物質(zhì)認(rèn)識、開拓新能源、新材料等具有重要作用的各種極端技術(shù)研究,如超高溫、超低溫、超高壓、超高真空、超強磁場、超弱磁場等等。顯然,要獲取大量人類感官無法直接獲取的信息,沒有相適應(yīng)的傳感器是不可能的。許多基礎(chǔ)科學(xué)研究的障礙,首先就在于對象信息的獲取存在困難,而一些新機理和高靈敏度的檢測傳感器的出現(xiàn),往往會導(dǎo)致該領(lǐng)域內(nèi)的突破。一些傳感器的發(fā)展,往往是一些邊緣學(xué)科開發(fā)的先驅(qū)。
?
  傳感器早已滲透到諸如工業(yè)生產(chǎn)、宇宙開發(fā)、海洋探測、環(huán)境保護(hù)、資源調(diào)查、醫(yī)學(xué)診斷、生物工程、甚至文物保護(hù)等等極其之泛的領(lǐng)域??梢院敛豢鋸埖卣f,從茫茫的太空,到浩瀚的海洋,以至各種復(fù)雜的工程系統(tǒng),幾乎每一個現(xiàn)代化項目,都離不開各種各樣的傳感器。
?
  由此可見,傳感器技術(shù)在發(fā)展經(jīng)濟、推動社會進(jìn)步方面的重要作用,是十分明顯的。世界各國都十分重視這一領(lǐng)域的發(fā)展。相信不久的將來,傳感器技術(shù)將會出現(xiàn)一個飛躍,達(dá)到與其重要地位相稱的新水平。
?
  主要特點
?
  傳感器的特點包括:微型化、數(shù)字化、智能化、多功能化、系統(tǒng)化、網(wǎng)絡(luò)化,它不僅促進(jìn)了傳統(tǒng)產(chǎn)業(yè)的改造和更新?lián)Q代,而且還可能建立新型工業(yè),從而成為21世紀(jì)新的經(jīng)濟增長點。微型化是建立在微電子機械系統(tǒng)(MEMS)技術(shù)基礎(chǔ)上的,已成功應(yīng)用在硅器件上做成硅壓力傳感器。
?
  傳感器的組成
?
  傳感器一般由敏感元件、轉(zhuǎn)換元件、變換電路和輔助電源四部分組成。
?
  敏感元件直接感受被測量,并輸出與被測量有確定關(guān)系的物理量信號;轉(zhuǎn)換元件將敏感元件輸出的物理量信號轉(zhuǎn)換為電信號;變換電路負(fù)責(zé)對轉(zhuǎn)換元件輸出的電信號進(jìn)行放大調(diào)制;轉(zhuǎn)換元件和變換電路一般還需要輔助電源供電。
?
  主要功能
?
  常將傳感器的功能與人類5大感覺器官相比擬:
?
  光敏傳感器——視覺
?
  聲敏傳感器——聽覺
?
  氣敏傳感器——嗅覺
?
  化學(xué)傳感器——味覺
?
  壓敏、溫敏、
?
  流體傳感器——觸覺
?
  敏感元件的分類:
?
  物理類,基于力、熱、光、電、磁和聲等物理效應(yīng)。
?
  化學(xué)類,基于化學(xué)反應(yīng)的原理。
?
  生物類,基于酶、抗體、和激素等分子識別功能。
?
  通常據(jù)其基本感知功能可分為熱敏元件、光敏元件、氣敏元件、力敏元件、磁敏元件、濕敏元件、聲敏元件、放射線敏感元件、色敏元件和味敏元件等十大類(還有人曾將敏感元件分46類)。

  一、傳感器的使用

  1、傳感器的類型:

  方向傳感器::Sensor.TYPE_ORIENTATION

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

  光線傳感器:sensor.TYPT_LIGHT

  磁場傳感器:sensor.TYPE_MANGNETIC_FIELD

  距離(臨近性)傳感器:Sensor.TYPE_FROXIMITY

  溫度傳感器:Sensor.TYPE_TEMPERATURE

  常用的API

  《1》得到傳感器的服務(wù)(得到傳感器的管理者)

  SensorManager sm=(SensorManager)getSystemService(SENSOR_SERVICE);

  《2》得到手機所支持的所有的傳感器的類型:

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

  《3》傳感器的類型:

  Sensor.getType();

  《4》傳感器的名字;

  Sensor.getName();

  《5》傳感器的監(jiān)聽:SensorEventListener()

  sm.registerListener(監(jiān)聽,傳感器對象,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軸旋轉(zhuǎn),與地球正北極的夾角

  0代表北(North)

  90代表東East

  180代表南(South)

  270代表西(West)

  俯視角:手機繞X軸旋轉(zhuǎn)與水平線的夾角

  滾轉(zhuǎn)角:手機繞Y軸旋轉(zhuǎn)與水平線的夾角

  利用方向傳感器實現(xiàn) 指南針應(yīng)用

  運行后效果圖如下:

  

  布局文件(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();

  }

  //注冊監(jiān)聽(監(jiān)聽某一個傳感器的值)

  @Override

  protected void onResume() {

  super.onResume();

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

  }

  class MyListener implements SensorEventListener{

  //當(dāng)值發(fā)生改變

  @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);

  //實例化旋轉(zhuǎn)動畫

  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);

  }

  //當(dāng)值的精度發(fā)生改變

  @Override

  public void onAccuracyChanged(Sensor sensor, int i) {

  }

  }

  //取消注冊監(jiān)聽

  @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%

( 發(fā)表人:金巧 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?