环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產(chǎn)品分類

當(dāng)前位置: 首頁(yè) > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 力傳感器

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
力傳感器

android 加速傳感器 重力傳感器:android 加速度傳感器,重力傳感器,線性加速度傳感器

發(fā)布日期:2022-10-09 點(diǎn)擊率:75


android 加速傳感器 重力傳感器:android <a title=加速度傳感器,重力傳感器,線性加速度傳感器 第1張" title="android 加速傳感器 重力傳感器:android 加速度傳感器,重力傳感器,線性加速度傳感器 第1張-傳感器知識(shí)網(wǎng)"/>

android 加速傳感器 重力傳感器:android 加速度傳感器,重力傳感器,線性加速度傳感器

加速度傳感器檢測(cè)物體傾角的原理
檢物體傾角的一種常用方法是對(duì)陀螺儀輸出的角速度進(jìn)行積分。雖然這種方法直截了當(dāng),但誤差會(huì)隨著積分時(shí)間的增加而快速累積。在某些應(yīng)用中,若整個(gè)時(shí)間范圍內(nèi)物體運(yùn)動(dòng)緩慢(忽略慣性力等因素的影響,物體只受重力作用),那么可以使用加速度計(jì)來(lái)測(cè)量物體的傾斜角度。該方法利用重力矢量及其在加速度計(jì)軸上的投影來(lái)確定傾斜角度。
以兩輪平衡小車(chē)(倒立擺模型)為例,當(dāng)檢測(cè)到傾角存在時(shí)要控制小車(chē)以一定的加速度運(yùn)動(dòng),才能維持平衡而不至于倒下。因此傾角的測(cè)量成為控制小車(chē)直立的關(guān)鍵。而在實(shí)際小車(chē)運(yùn)動(dòng)過(guò)程

android 加速傳感器 重力傳感器:Android基于Sensor感應(yīng)器獲取重力感應(yīng)加速度的方法

package uni.sensor;
import java.util.Iterator;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
public class SensorDemoActivity extends Activity {

//設(shè)置LOG標(biāo)簽
 private static final String TAG="sensor";
 private SensorManager sm;
 @Override
 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//創(chuàng)建一個(gè)SensorManager來(lái)獲取系統(tǒng)的傳感器服務(wù)
sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
//選取加速度感應(yīng)器
int sensorType=Sensor.TYPE_ACCELEROMETER;

sm.registerListener(myAccelerometerListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);
 }

final SensorEventListener myAccelerometerListener=new SensorEventListener(){
//復(fù)寫(xiě)onSensorChanged方法
public void onSensorChanged(SensorEvent sensorEvent){
 if(sensorEvent.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
Log.i(TAG,"onSensorChanged");
//圖解中已經(jīng)解釋三個(gè)值的含義
float X_lateral=sensorEvent.values[0];
float Y_longitudinal=sensorEvent.values[1];
float Z_vertical=sensorEvent.values[2];
Log.i(TAG,"
heading "+X_lateral);
Log.i(TAG,"
pitch "+Y_longitudinal);
Log.i(TAG,"
roll "+Z_vertical);
 }
}
//復(fù)寫(xiě)onAccuracyChanged方法
public void onAccuracyChanged(Sensor sensor , int accuracy){
 Log.i(TAG, "onAccuracyChanged");
}
 };
 public void onPause(){

sm.unregisterListener(myAccelerometerListener);
super.onPause();
 }
}

android 加速傳感器 重力傳感器:Android開(kāi)發(fā)之重力傳感器

重力傳感器與方向傳感器的開(kāi)發(fā)步驟類似,只要理清了期中的x,y,z的值之后就可以根據(jù)他們的變化來(lái)進(jìn)行編程了,首先來(lái)看一副圖

假設(shè)當(dāng)?shù)氐闹亓铀俣戎禐間
當(dāng)手機(jī)正面朝上的時(shí)候,z的值為q,反面朝上的時(shí)候,z的值為-g
當(dāng)手機(jī)右側(cè)面朝上的時(shí)候,x的值為g,右側(cè)面朝上的時(shí)候,x的值為-g
當(dāng)手機(jī)上側(cè)面朝上的時(shí)候,y的值為g,右側(cè)面朝上的時(shí)候,y的值為-g
了解了重力傳感器中X,Y,Z的含義之后下面我們就開(kāi)始學(xué)習(xí)如何使用
首先我們創(chuàng)建一個(gè)傳感器管理器和一個(gè)傳感器監(jiān)聽(tīng)器,管理器用來(lái)管理傳感器以及創(chuàng)建各種各樣的傳感器,監(jiān)聽(tīng)器用來(lái)監(jiān)視傳感器的變化并且進(jìn)行相應(yīng)的操作
private SensorManager sensorManager;
private MySensorEventListener mySensorEventListener;
mySensorEventListener=new MySensorEventListener();//這個(gè)監(jiān)聽(tīng)器當(dāng)然是我們自己定義的,在重力感     應(yīng)器感應(yīng)到手機(jī)位置有變化的時(shí)候,我們可以采取相應(yīng)的操作,這里緊緊是將x,y,z的值打印出來(lái)
private final class MySensorEventListener implements  SensorEventListener{

@Override
//可以得到傳感器實(shí)時(shí)測(cè)量出來(lái)的變化值
public void onSensorChanged(SensorEvent event) {
//重力傳感器
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
float x=event.values[SensorManager.DATA_X];
float y=event.values[SensorManager.DATA_Y];
float z=event.values[SensorManager.DATA_Z];
//tv_accelerometer是界面上的一個(gè)TextView標(biāo)簽,不再贅述
tv_orientation.setText("Orientation:"+x+","+y+","+z);
}
}

我們?cè)趏nResume方法中創(chuàng)建重力傳感器,并向系統(tǒng)注冊(cè)監(jiān)聽(tīng)器
protected void onResume() {
Sensor sensor_accelerometer=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(mySensorEventListener,sensor_accelerometer,   SensorManager.SENSOR_DELAY_UI);

super.onResume();
}
最后我們?cè)趏nPause()中注銷所有傳感器的監(jiān)聽(tīng),釋放重力感應(yīng)器資源!
protected void onPause() {
/注銷所有傳感器的監(jiān)聽(tīng)
sensorManager.unregisterListener(mySensorEventListener);
super.onPause();
}
到此,有關(guān)重力傳感器的介紹完畢!
android 加速傳感器 重力傳感器:android 加速度傳感器,重力傳感器,線性加速度傳感器  第2張

android 加速傳感器 重力傳感器:Android的重力傳感器(3軸加速度傳感器)簡(jiǎn)單實(shí)例

重力感應(yīng)主要是依靠手機(jī)的加速度傳感器(accelerometer)來(lái)實(shí)現(xiàn)

在Android的開(kāi)發(fā)中一共有八種傳感器但是不一定每一款真機(jī)都支持這些傳感器。因?yàn)楹芏喙δ苡脩舾静籧are的所以可能開(kāi)發(fā)商會(huì)把某些功能屏蔽掉。還是得根據(jù)真機(jī)的實(shí)際情況來(lái)做開(kāi)發(fā),今天我們主要來(lái)討論加速度傳感器的具體實(shí)現(xiàn)方式。

傳感器名稱如下:

加速度傳感器(accelerometer)
陀螺儀傳感器(gyroscope)
環(huán)境光照傳感器(light)
磁力傳感器(magnetic field)
方向傳感器(orientation)
壓力傳感器(pressure)
距離傳感器(proximity)
溫度傳感器(temperature)

上面的是程序的運(yùn)行圖

遇到的問(wèn)題:
1、當(dāng)在與球相同的布局里面調(diào)用TextView時(shí),球就不能移動(dòng)了。最后我把球和數(shù)據(jù)分離開(kāi),用兩個(gè)布局處理的。
2、不明白super.setframe()函數(shù)到底是什么意思
有哪位大神看懂了,告訴我一下

這個(gè)是主程序代碼:
package cn.itcast.accelerometer;
import cn.itcast.accelerometer.view.BallView;
import android.app.Activity;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class AccelerometerActivity extends Activity {
private static final float MAX_ACCELEROMETER=9.81f;
private SensorManager sensorManager;
private BallView ball;
private boolean success=false;
private boolean init=false;
private int container_width=0;
private int container_height=0;
private int ball_width=0;
private int ball_height=0;
private TextView prompt;
private TextView tv1;
private TextView tv2;
private TextView tv3;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//獲取感應(yīng)器管理器
sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
prompt=(TextView) findViewById(R.id.ball_prompt);
tv1=(TextView)findViewById(R.id.tv1);
tv2=(TextView)findViewById(R.id.tv2);
tv3=(TextView)findViewById(R.id.tv3);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {//ball_container控件顯示出來(lái)后才能獲取其寬和高,所以在此方法得到其寬高
super.onWindowFocusChanged(hasFocus);
if(hasFocus && !init){
View container=findViewById(R.id.ball_container);
container_width=container.getWidth();
container_height=container.getHeight();
ball=(BallView) findViewById(R.id.ball);
ball_width=ball.getWidth();
ball_height=ball.getHeight();
moveTo(0f, 0f);
init=true;
}
}
@Override
protected void onResume() {
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//獲取重力加速度感應(yīng)器
success=sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);//注冊(cè)listener,第三個(gè)參數(shù)是檢測(cè)的精確度
super.onResume();
}

@Override
protected void onPause() {
if(success) sensorManager.unregisterListener(listener);
super.onPause();
}
private SensorEventListener listener=new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {

if (!init) return ;
float x=event.values[SensorManager.DATA_X];
float y=event.values[SensorManager.DATA_Y];
float z=event.values[SensorManager.DATA_Z];
prompt.setText("X=" + x + ",Y=" + y + ", Z=" + z);
//當(dāng)重力x,y為0時(shí),球處于中心位置,以y為軸心(固定不動(dòng)),轉(zhuǎn)動(dòng)手機(jī),x會(huì)在(0-9.81)之間變化,負(fù)號(hào)代表方向
moveTo(-x, y);//x方向取反

        if(x>0){
tv1.setTextColor(Color.WHITE);
tv1.setText("向左");
}

        if(x

        if(y

        if(z<0){         tv3.setTextColor(Color.YELLOW);         tv3.setText("向下");         }                 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; private void moveTo(float x, float y) {        int max_x=(container_width - ball_width) / 2;//在x軸可移動(dòng)的最大值        int max_y=(container_height - ball_height) / 2;//在y軸可移動(dòng)的最大值        //手機(jī)沿x、y軸垂直擺放時(shí),自由落體加速度最大為9.81,當(dāng)手機(jī)沿x、y軸成某個(gè)角度擺放時(shí),變量x和y即為該角度的加速度        float percentageX=x / MAX_ACCELEROMETER;//得到當(dāng)前加速度的比率,如果手機(jī)沿x軸垂直擺放,比率為100%,即球在x軸上移動(dòng)到最大值        float percentageY=y / MAX_ACCELEROMETER;                        int pixel_x=(int) (max_x * percentageX);//得到x軸偏移量        int pixel_y=(int) (max_y * percentageY);//得到y(tǒng)軸偏移量        //以球在中心位置的坐標(biāo)為參考點(diǎn),加上偏移量,得到球的對(duì)應(yīng)位置,然后移動(dòng)球到該位置                int x3=max_x + pixel_x;//屏幕中心位置+x軸偏移        int y3=max_y + pixel_y;//屏幕中心位置+y軸偏移                ball.moveTo(x3, y3);                  } } 球的代碼移動(dòng): package cn.itcast.accelerometer.view; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; public class BallView extends ImageView { public BallView(Context context) { super(context); }    public BallView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public BallView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public void moveTo(int x, int y) {//沒(méi)有弄明白什么意思,誰(shuí)懂了告訴我一下啊,我加一個(gè)TextView,球就不能移動(dòng)了    itas109        super.setframe(x, y, x + getWidth(), y + getHeight());//繪制視圖,由左上角與右下角確定視圖矩形位置    } }   整個(gè)程序的下載地址:

下一篇: PLC、DCS、FCS三大控

上一篇: 電氣控制線路圖控制原

主站蜘蛛池模板: 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网| 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机-冠古设备厂家|维修|租赁【官网】 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 永嘉县奥阳陶瓷阀门有限公司 | 间苯二酚,间苯二酚厂家-淄博双和化工 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 |