原文地址: MicroBlocks 编程案例: 正中靶心!

MicroBlocks 中文主页


历史人物胡乱射出一箭, 历史学家在箭的落点画个圈说: 看!他正中靶心!

前语

@leeyve 最近买了两个机器人,问我能否接管它们,使其可编程。我拿来玩了会儿,十分喜欢,所以便着手试着用蓝牙接管它们。

蓝牙黑客的工作首要集中在处理 bytes,只需愿意投入时刻,总是能够弄懂传输的信息,更何况死后有巨大的开源社区。

在汇景上课,课间十分钟,完成了第一次控制。

以下是接管之后,在 Python 里对其编程的小例子(近期咱们也会将其接入 Scratch)

演示视频:

  • adapter.codelab.club/video/93a65…
  • adapter.codelab.club/video/8c0bf…

但是,咱们今天并不计划讨论蓝牙黑客的技巧,玩一些更有趣的东西。

ps: 假如你对蓝牙黑客感兴趣, 或许会喜欢 btlejack

猜测与辩驳

常识,特别是咱们的科学常识,是经过未经证明的(和不行证明的)预言,经过猜测,经过对咱们问题的尝试性处理,经过猜测而进步的。 — 波普尔《猜测与辩驳》

在瞎折腾的过程中,咱们发现这两机器人有一种对战形式: 当用户驾驭机器人对战时,假如按下发射按钮,击中对方,另一个机器人会被击败。

机器人并没有真的宣布的子弹,另一个机器人怎么知道被击中呢? 我猜测,机器人身上带有红外发射器和红外接收器。

猜测的具体内容是: 红外基本沿直线传播,假如一个机器人的红外发射器宣布红外线,正好被另一个机器人的红外接收器收到,就产生了 “击中” 事件。

验证

我想验证这个主意,所以找来 micro:bit, 翻箱倒柜,从 CodeLab 旧物箱里找到 m5stack 的红外传感器:

MicroBlocks 编程案例: 正中靶心!

在旧物箱里又找到一个不知哪个公司的红外遥控器:

MicroBlocks 编程案例: 正中靶心!

我将红外传感器接到 micro:bit 里,之前没有对红外设备进行编程的经验,但因为有 Microblocks,信心十足,感觉能够搞定它,因为 Microblocks 是一个扩大你心智力气的编程环境,对探究和了解事物提醒了绝佳支撑。

我将 m5stack 的红外传感器(IN pin)连到 micro:bit 1 号引脚,经过运用 Microblocks 内置的 IR Remote (在 积木库/Other 分类里):

MicroBlocks 编程案例: 正中靶心!

现在,能够实时观察到接受自红外遥控器的信号。

MicroBlocks 编程案例: 正中靶心!

挫折

对咱们猜测的批判极为重要:经过指出咱们的错误,使咱们了解咱们正试图处理的那个问题的困难。就这样咱们越来越了解咱们的问题,并或许提出越来越成熟的处理:对一个理论的辩驳——即对问题的任何认真的尝试性处理的辩驳——始终是使咱们接近真理的前进的一步 — 波普尔《猜测与辩驳》

我开心地跑到隔壁办公室准备拿小黄人机器人试试。

@leeyve 和 @Leon 正在折腾它,我让他们控制机器人朝我的红外接收器发射,成果一无所获,咱们的猜测好像被试验辩驳了。

MicroBlocks 编程案例: 正中靶心!

我猜测,有两种或许:

  1. 机器人对战底子不是根据红外线
  2. 机器人的确发射了红外线,但现在 Microblocks 插件对红外的解码机制与机器人发射红外时的编码机制不同,所以无法得到有意义的内容。

怎么验证「猜测 2」呢?我需求拆开红外积木,看看它是怎么处理红外信号的,和大多数积木化平台不同, Microblocks 关于深化了解事物的机制,提供了绝佳的支撑,你能够在其间自由探究。

所以我打开积木的界说:

MicroBlocks 编程案例: 正中靶心!

MicroBlocks 编程案例: 正中靶心!

MicroBlocks 编程案例: 正中靶心!

经过查看积木界说,大致了解了其工作原理。回到咱们的 「猜测 2」:

2 机器人的确发射了红外线,但现在 Microblocks 插件对红外的解码机制与机器人发射红外时的编码机制不同,所以无法得到有意义的内容。

为了绕开红外的解码机制,我计划直接运用界说里看到的 读取数字引脚。 假如小黄人的确发射红外,那么咱们就会收到红外,并显示被枪击中(用于实时调试)。

MicroBlocks 编程案例: 正中靶心!

可行!

MicroBlocks 编程案例: 正中靶心!

这段代码对咱们就够用了,因为咱们并不关怀红外信号里的内容,所以不必去解码红外信号,只关怀是否有被红外射中(检测 有/无红外线 射过来)。

射击靶心

咱们能够从他们的做法中知道他们的主意. —- Richard Hamming

现在咱们现已能够经过 micro:bit 和红外传感器,接收到机器人的射击信号了。

我当即想做这样一个好玩的项目: 射击靶心

主意是这样的,驾驭机器人,调整其方位,看谁能够射中靶心。

个主意很简单扩展成各种形式的对抗赛。

我计划运用运用 舵机+红外传感器 来制作 , 当 红外传感器(放在靶心) 被击中时,舵机带动红外传感器转动,所以 就被击倒了。

为了添加表现力,@leeyve 建议把咱们前次试验用的彩虹灯 加上。 我还想把声响作用也加上, 所以咱们写出了这样的代码:

MicroBlocks 编程案例: 正中靶心!

值得注意的是音讯积木,它们是并发的!这位构建大型项目提供了强大的支撑。随着项目的生长,根据音讯的编程风格不会导致耦合度和复杂性骤增。

对应的 micro:bit 代码为: gun-demo.ubp

项目作用如下:

adapter.codelab.club/video/2c562…

ps: 这个项目里拼凑了来自 6 家不同公司的零件!

爆炸 作用

后来我想增强子弹击中的作用,Scratch 非常合适制作作用动画! 所以我运用 Adapter 的 micro:bit radio插件,将 Microblocks 平台与 Scratch 连在一起, 相关原理咱们在上篇文章里做了详细介绍。

接着我改编了之前洛克人的项目。 完成后作用如下:

演示视频: adapter.codelab.club/video/1e171…

对应的 micro:bit 代码为: gun-radio.ubp

对应的 Scratch 项目代码为: demo

总结

从猜测、探究、试验到做出预期的项目,咱们前后只花了 1 小时不到,中间有遇到困难,但没有迈不过的。我将这视为: 精心规划的创造平台增强用户心智和能力的一个例子。它提供的自由度,让我能够深化到系统的不同层面,进而能够运用多种方式来验证我的主意,当一种主意卡住时,能够快速切到另一种。它为增强可了解性而做的规划,让我在探究事物的同时,得以深化了解它们的运作机制;而当我有了新主意,它的实时交互性又鼓舞我随时开端,不必想清楚再做,在编程的过程中深化自己的主意,实际上,它增强了我心智的力气。终究抵达的东西,并不是我最初想好的,在行进中抵达意料之外的境地。通常是意料之外的欢喜。

这里涉及的创造环境包含 Microblocks、Scratch、CodeLab Adapter,它们都是个人核算的产品, 这个社区为支撑用户更好了解世界,几十年来付出了不懈努力。

问候个人核算的先驱们, 尤其是问候 Alan Kay。