当前位置:

首页 > 系统应用 > 10.12 传感器专题(3)——加速度/陀螺仪传感器

10.12 传感器专题(3)——加速度/陀螺仪传感器

本节引言: 这一节继续把目光放在 Android 里的传感器上,重点聊两个常用成员:加速度传感器(Accelerometer sensor)和陀螺仪传感器(Gyroscope sensor)。它们和上一节提到的方向传感器一样,同样对应 x、y、z 三个轴。不过有个细节最好先拎清:这里传感器里的 x、

本文目录

    本节引言:

    这一节继续把目光放在 Android 里的传感器上,重点聊两个常用成员:加速度传感器(Accelerometer sensor)和陀螺仪传感器(Gyroscope sensor)。它们和上一节提到的方向传感器一样,同样对应 x、y、z 三个轴。不过有个细节最好先拎清:这里传感器里的 x、y 轴,别和绘图场景中的 x、y 轴混在一起。传感器坐标系是以左下角为原点,x 轴向右,y 轴向上。坐标关系先理顺,后面的内容学起来就顺手多了,接下来就按这个思路进入本节的传感器。

    另外,想说一点的就是我们不是专门搞这个的,就写东西啊玩玩,见识下而已哈,很多东西 别太较真!

    PS:方向传感器其实就是利用加速度传感器和磁场传感器来获取方位的,在2.2开始就被弃用了~

    1.加速度传感器(Accelerometer sensor)

    1)名词概念:

    • 加速度传感器的单位:加速度(m/s^2)
    • 方向传感器获取到的加速度是:手机运动的加速度与重力加速度(9.81m/s^2)的合加速度
    • 另外重力加速度是垂直向下的!

    关于这个不同方向合加速度的计算好像蛮复杂的,这里我们就不去纠结这个了! 先来看看加速度的value数组中的三个数的值吧~依旧是上节的代码,改下传感器而已~

    水平放置: 竖直平放: 竖直横放:

    从上面我们知道value数组的三个值分别对应X,Y,Z轴上的加速度! 好的,知道个大概,我们来写个简易计步器来熟悉下用法!

    2).简易计步器的实现

    运行效果图:

    代码实现:

    布局代码:activity_main.xml:

    
    
    
    

    MainActivity.ja va:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener, SensorEventListener {
    private SensorManager sManager;
        private Sensor mSensorAccelerometer;
        private TextView tv_step;
        private Button btn_start;
        private int step = 0;   //步数
        private double oriValue = 0;  //原始值
        private double lstValue = 0;  //上次的值
        private double curValue = 0;  //当前值
        private boolean motiveState = true;   //是否处于运动状态
        private boolean processState = false;   //标记当前是否已经在计步
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            sManager = (SensorManager) getSystemService(SENSOR_SERVICE);
            mSensorAccelerometer = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            sManager.registerListener(this, mSensorAccelerometer, SensorManager.SENSOR_DELAY_UI);
            bindViews();
        }
    private void bindViews() {
    tv_step = (TextView) findViewById(R.id.tv_step);
            btn_start = (Button) findViewById(R.id.btn_start);
            btn_start.setOnClickListener(this);
        }
    @Override
        public void onSensorChanged(SensorEvent event) {
            double range = 1;   //设定一个精度范围
            float[] value = event.values;
            curValue = magnitude(value[0], value[1], value[2]);   //计算当前的模
            //向上加速的状态
            if (motiveState == true) {
                if (curValue >= lstValue) lstValue = curValue;
                else {
                    //检测到一次峰值
                    if (Math.abs(curValue - lstValue) > range) {
                        oriValue = curValue;
                        motiveState = false;
                    }
                }
            }
            //向下加速的状态
            if (motiveState == false) {
                if (curValue <= lstValue) lstValue = curValue;
                else {
                    if (Math.abs(curValue - lstValue) > range) {
                        //检测到一次峰值
                        oriValue = curValue;
                        if (processState == true) {
                            step++;  //步数 + 1
                            if (processState == true) {
                                tv_step.setText(step + "");    //读数更新
                            }
                        }
                        motiveState = true;
                    }
                }
            }
        }
    @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {}
    @Override
        public void onClick(View v) {
            step = 0;
            tv_step.setText("0");
            if (processState == true) {
                btn_start.setText("开始");
                processState = false;
            } else {
                btn_start.setText("停止");
                processState = true;
            }
        }
    //向量求模
        public double magnitude(float x, float y, float z) {
            double magnitude = 0;
            magnitude = Math.sqrt(x * x + y * y + z * z);
            return magnitude;
        }
    @Override
        protected void onDestroy() {
            super.onDestroy();
            sManager.unregisterListener(this);
        }
    }

    好的,真的是非常简易的计步器...上面的步数是我坐着拿手撸出来的... ,毕竟写来玩玩而已~

    2.陀螺仪传感器(Gyroscope sensor)

    1)名词概念:

    陀螺仪又叫角速度传感器,一般用来检测手机姿态的,好像手机中的陀螺仪传感器一般都是三轴的! 体感游戏用得最多,手机拍照防抖,GPS惯性导航,还有为APP添加一些动作感应(比如轻轻晃动手机 关闭来电铃声)等等,具体的可以自己去百度下~

    • 陀螺仪传感器的单位:角速度(弧度/秒)radians/second
    • 获得传感器用的是:Sensor.TYPE_GYROSCOPE

    他的三个值依次是沿着X轴,Y轴,Z轴旋转的角速度,手机逆时针旋转,角速度值为正,顺时针则为负值! 经常用于计算手机已经转动的角度!这是网上的一段代码~

    private static final float NS2S = 1.0f / 1000000000.0f;
    private float timestamp;
    public void onSensorChanged(SensorEvent event)
    {
        if (timestamp != 0)
        {
            // event.timesamp表示当前的时间,单位是纳秒(1百万分之一毫秒)
            final float dT = (event.timestamp - timestamp) * NS2S;
            angle[0] += event.values[0] * dT;
            angle[1] += event.values[1] * dT;
            angle[2] += event.values[2] * dT;
        }
        timestamp = event.timestamp;
    }

    通过陀螺仪传感器相邻两次获得数据的时间差(dT)来分别计算在这段时间内手机延X、 Y、Z轴旋转的角度,并将值分别累加到angle数组的不同元素上

    3.本节示例代码下载:

    SensorDemo4.zip

    本节小结:

    好的,本节给大家简单的跟大家介绍了下加速度传感器和陀螺仪,写了个简易计步器, 感觉传感器没怎么玩过,没什么好写,算了,下节就简单的把剩下的传感器介绍下 算了,就当科普科普,以后要用到再深入研究吧~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用 传感器
    相关文章 更多
    寻影 Meet Flip 会议摄像头发布:一体化翻折设计、搭索尼 1/2 英寸传感器,599 元
    寻影 Meet Flip 会议摄像头发布:一体化翻折设计、搭索尼 1/2 英寸传感器,599 元

    寻影推出MeetFlip4KAI会议摄像头:一体化翻折设计搭配金属转轴,搭载索尼1/2英寸传感器,支持4K@30fps与相位对焦。具备AI构图、挥手控制变焦、双麦克风四种收音模式及美颜功能,首发价599元。

    新型量子传感器可探测引力波和暗物质
    新型量子传感器可探测引力波和暗物质

    一种新型量子传感器通过两个不同位置的原子干涉仪共用同一束激光测量,有效抵消激光噪声,成功提取微弱信号。实验表明该装置能排除噪声干扰,捕捉模拟的早期引力波和超轻暗物质信号,为研究超大质量黑洞形成和暗物质本质开辟新途径。

    消息称索尼黑卡 RX10 V 相机 7 月 9 日发布:升级新处理器,传感器与镜头不变
    消息称索尼黑卡 RX10 V 相机 7 月 9 日发布:升级新处理器,传感器与镜头不变

    索尼黑卡RX10V相机将于七月九日发布,核心升级为新处理器与NP-FZ100电池,运算速度与自动对焦性能均大幅提升,传感器与镜头沿用前代一英寸两千万像素CMOS及24-600mmF2.4-F4镜头。此外,FX5电影摄影机也预计于7月中旬后登场。

    索尼 FX5 电影摄影机实拍图首曝:威尼斯菜单,16MP 全堆栈传感器支持 5K 片门全开、三原生 ISO
    索尼 FX5 电影摄影机实拍图首曝:威尼斯菜单,16MP 全堆栈传感器支持 5K 片门全开、三原生 ISO

    索尼FX5电影摄影机实拍图曝光,菜单采用威尼斯风格,搭载1600万像素全堆栈传感器,支持5K片门全开、三原生ISO,可机内录制X-OCNLTRAW格式,具备高动态范围和优秀低光性能,采用紧凑机身设计,画质出色,预计本月下旬发布。

    斗鱼直播手机版设置不允许斗鱼广告访问传感器的方法
    斗鱼直播手机版设置不允许斗鱼广告访问传感器的方法

    斗鱼APP,作为备受欢迎的直播平台,其首页界面内容丰富多样,特别适合喜欢通过直播进行社交互动的人群。它不仅提供了大量的游戏类直播、短视频和资讯文章,还支持用户进行自主创作和分享。然而,有部分用户反映,在使用过程中经常会受到“摇一摇”“扭一扭”等基于传感器触发的广告干扰,这对正常的使用体验造成了影响。

    曝尼康 DL 紧凑型数码相机有望复活,配 1 英寸传感器和变焦镜头
    曝尼康 DL 紧凑型数码相机有望复活,配 1 英寸传感器和变焦镜头

    尼康DL系列紧凑型数码相机有望复活,搭载2400万像素堆栈式1英寸传感器与变焦镜头,机身设计接近原DL18-50和DL24-85,或合并为24-70版本,支持灵活颜色控制,附皮革相机包,EVF可单独购买。目前仍属爆料阶段。

    中国科学家研发低噪声高灵敏磁传感器,1赫兹下可达15.7纳特斯拉
    中国科学家研发低噪声高灵敏磁传感器,1赫兹下可达15.7纳特斯拉

    IT之家 8 月 15 日消息,中国科学院合肥物质科学研究院强磁场科学中心联合中国科学院宁波材料技术与工程研究所、宁波东方理工大学,围绕通过调控自旋织构动力学来抑制磁传感器噪声这一物理机制取得进展,成功研制出一种同时具备高灵敏度和低噪声特性的反常霍尔磁传感器。相关成果已经发表于《物理评论快报》。高性

    领普人体存在传感器ES5顶装版发售,69元
    领普人体存在传感器ES5顶装版发售,69元

    领普人体存在传感器ES5顶装版售价69元,采用雷达、红外与光照三模融合设计,可探测呼吸、微动等细微动作。顶装需预留75mm孔位及零火线,支持30°角度调节,运动探测直径14米,存在探测直径10米。提供融合与雷达双模式,支持一键扫描干扰源,内置光照传感器联动灯具。

    索尼推出黑卡 RX10V 长焦相机:2010 万像素 1 英寸传感器、等效 24-600mm 镜头,国行 15199 元
    索尼推出黑卡 RX10V 长焦相机:2010 万像素 1 英寸传感器、等效 24-600mm 镜头,国行 15199 元

    索尼全新黑卡RX10V第五代旗舰级长焦相机发布,搭载2010万像素高画质1英寸堆栈式传感器与等效24-600mm超远摄镜头,国行15199元。支持每秒30张高速连拍、AI智能主体识别系统、无裁切4K60p视频录制,配备新型NP-FZ100锂电池,续航约630张照片。

    尼康新品 APS-C 高端相机曝光:青春版 Z9/ZR,搭载 45MP 堆栈式传感器
    尼康新品 APS-C 高端相机曝光:青春版 Z9/ZR,搭载 45MP 堆栈式传感器

    据爆料,尼康即将推出一款APS-C高端相机,搭载4500万像素堆栈式传感器,具备高速连拍能力,定位类似D500后续机型,或为融合RED技术的迷你Z9/ZR变体,预计8至9月发布。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。