Micro:bit 重力控制水平仪

栏目: 后端 · 发布时间: 6年前

内容简介:在可以看出

上一节 的教程里,我们学习了如何使用 Micro:bit 在线编程网站提供的选择、循环、按钮事件和游戏精灵模块实现一个简单的模拟传球小程序,这回我们来学习一下如何使用 Micro:bit 的重力模块,用它实现一个重力控制上下左右滑动的 LED,相当于一个水平仪。这节教程将会有 3 种水平仪的实现,分别是敏捷版、智障版和优化版,从简单到复杂,我们可以从中体会不同的实现带来的不同效果。

敏捷版

Micro:bit 重力控制水平仪

智障版

Micro:bit 重力控制水平仪

优化版

Micro:bit 重力控制水平仪

可以看出

  1. 敏捷版最灵敏,基本上是跟随鼠标移动的方向(实际上是板子的倾斜方向)进行移动

  2. 智障版就很智障了,只能动一下挪一下,感觉特别懒

  3. 优化版介于敏捷版和智障版之间,能跟随重力方向自动移动,并且加上了一定延迟,使得 led 的变化更加自然

3 轴传感器

Micro:bit 板子上集成了一个 3 轴传感器,水平方向 (按钮 A 到 按钮 B) 的方向为 X 轴,垂直方向 ( 徽标(徽标就是那个椭圆形中间两个小点点像个娃娃头一样的) 到 引脚孔 2) 为 Y 轴,垂直穿过板子为 Z 轴,每个轴的加速度范围都是 -1024 到 1024,具体方向见下图

Micro:bit 重力控制水平仪

今天的这篇教程不涉及 Z 轴,只关心 X 轴和 Y 轴。水平放置板子,徽标朝上时,两个方向的加速度分别是 X = 0, Y = 0,在模拟器中,默认状态就相当于水平放置板子,即徽标朝向屏幕外,正对你。

基本原理

  • 当板子水平倾斜时,会有一个 X 方向的加速度,当从按钮 A 向 按钮 B 倾斜,X 方向加速度为 正值,即大于零的值,0~1024,当从按钮 B 向 按钮 A倾斜,X 方向加速度为负值,即小于零的值,-1024~0,为了便于计算,我们给 X 方向的加速度值加上 1024,使范围变为 0~2048,这样就不用考虑负值的情况了

  • 当板子垂直倾斜时,会有一个 Y 方向的加速度,当从 徽标 向 引脚孔 2 倾斜,Y 方向加速度为 正,0~1024,当从 引脚孔 2 向 徽标 倾斜,Y 方向加速度为负值,-1024~0,同样的,我们给 Y 方向的加速度值加上 1024,使范围变为 0~2048。

  • 当板子同时向 水平方向 和 垂直方向 倾斜时,既有 X 方向 也有 Y 方向的加速度

  • 当板子倾斜时,加速度会一直存在,直到板子被水平放置

敏捷版

敏捷版的思路比较简单,我们会用到 输入 分类下的 加速度值 模块,它提供了读取 3 轴方向上的加速度值的能力,我们可以把 X 轴的加速度和 Y 轴的加速度换算成 LED 灯阵的坐标,这样就可以控制 LED 灯来回跑啦。

Micro:bit 重力控制水平仪

解释如下:

  1. 给 X 和 Y 方向的加速度 加 1024,换算成正值,范围变成 0 ~ 2048

  2. 由于 X 和 Y 方向只有 5 个 LED,需要换算坐标,用 2048 / 5 约等于 410,所以用 2048 / 410 向下取整(10/3=3.3333 向下取整为 3,向上取整为 4)后得到 0、1、2、3、4 这 5 个整数

实现如下:

  1. 当开机时,在 (2,2) 处创建一个精灵

  2. 无限循环读取 X 方向的加速度,加 1024 后除以 410,得到的结果用来改变精灵的 X 坐标

  3. 无限循环读取 Y 方向的加速度,加 1024 后除以 410,得到的结果用来改变精灵的 Y 坐标

Micro:bit 重力控制水平仪

是不是很简单呀

智障版

实现智障版需要用到 4 个事件,位于 输入 分类下的 当振动 事件,我们会用到的是 当徽标朝上 当徽标朝下 当向左倾斜当向右倾斜 这 4 个事件

Micro:bit 重力控制水平仪

解释如下:

  1. 当徽标朝上即水平放置板子后,向上倾斜板子,也就是徽标一端翘起,此时 Y 方向加速度为正

  2. 当徽标朝上即水平放置板子后,向下倾斜板子,也就是有引脚孔的一端翘起,此时 Y 方向加速度为负

  3. 当向左倾斜即水平放置板子后,向左倾斜板子,也就是按钮 B 所在的一端翘起,此时 X 方向加速度为负

  4. 当向右倾斜即水平放置板子后,向右倾斜板子,也就是按钮 A 所在的一端翘起,此时 X 方向加速度为正

实现如下:

  1. 当开机时,在 (2,2) 处创建一个精灵

  2. 当徽标朝上精灵的 Y 坐标 加 1

  3. 当徽标朝下精灵的 Y 坐标 减 1 (加 -1)

  4. 当向左倾斜精灵的 X 坐标 减 1 (加 -1)

  5. 当向右倾斜精灵的 X 坐标 加 1

Micro:bit 重力控制水平仪

但是这个有个缺点,就是每次都要移动一次板子才能触发事件,也就是向左移动一次板子,精灵向左移动 1 步,其他方向同理,下面我们看看优化版。

优化版

为了达到精灵自动移动的效果,我们需要用到循环,时刻检测板子在 X Y 方向上的加速度,并控制精灵向该方向自动移动,为了精灵不至于移动太快,我加上了一个 500 毫秒的延迟,同时为了降低灵敏度,使得板子倾斜一定程度精灵才移动,因此我加上了阈值,300  (反方向移动为 -300)。

实现如下:

  1. 当开机时,在 (2,2) 处创建一个精灵

  2. 创建1个循环,判断 X 方向的加速度值,如果大于 300,则让精灵的 X 坐标  加 1,暂停 500 毫秒

  3. 创建1个循环,判断 X 方向的加速度值,如果小于 -300,则让精灵的 X 坐标 减 1 (加 -1),暂停 500 毫秒

  4. 创建1个循环,判断 Y 方向的加速度值,如果大于 300,则让精灵的 Y 坐标  加 1,暂停 500 毫秒

  5. 创建1个循环,判断 Y 方向的加速度值,如果小于 -300,则让精灵的 Y 坐标 减 1 (加 -1),暂停 500 毫秒

这样就可以让 精灵 自动向倾斜方向移动啦

Micro:bit 重力控制水平仪

练习题

改变优化版中 阈值 300 和 延迟 500 毫秒的数值,体会这两个值不同数值下的效果。

有问题可以在微信公众号中给我发消息呦。

始发于微信公众号: 暴王不暴燥


以上所述就是小编给大家介绍的《Micro:bit 重力控制水平仪》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Algorithm Design Manual

The Algorithm Design Manual

Steven S Skiena / Springer / 2011-11-14 / GBP 55.07

....The most comprehensive guide to designing practical and efficient algorithms.... Written by a well-known algorithms researcher who received the IEEE Computer Science and Engineering Teaching Aw......一起来看看 《The Algorithm Design Manual》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具