Skip to content

活动

近程信标

高级 | MakeCode, Python | LED显示器, 无线电 | 无线电波, 算数运算符, 通信

第 1 步:制作

它是什么?

使用无线电检测另一个micro:bit有多近,然后制作寻宝游戏或使用它来帮助人们知道自己处于安全的社交距离。

介绍

编程指南

工作原理

  • 至少需要2个micro:bit才能实现。 我们将创建两个不同的程序,一个用于不断发送低功率无线电消息的信标。 另一个程序在接收器上。
  • 当接收器从信标接收到消息时,它将其强度存储在名为signal的变量中,并在LED显示屏上进行显示。
  • 越靠近发射器,无线电信号越强,因此,如果信号较强,则意味着另一个micro:bit可能就在附近。
  • 如果无线电信号很弱,则另一个micro:bit可能距离较远。
  • 显示一个条形图,信号越强,距离越近,该条形图变得越大。 其使用数学map模块将无线电信号强度数字从-95(弱)到-42(强)的范围映射至0到9的范围,从而可用于绘制条形图。

Python版本

  • Python没有内置的条形图或映射函数,因此它的运行方式有些不同。 当你靠近信标时,所有LED灯都会点亮,越靠近信标,亮度就越高。
  • 它使用radio.receive_full()函数来获取无线电强度读数。 这提供了消息、信号强度和时间标记。 我们只想知道信号强度,所以我们使用signal=message[1]提取此信息,并将其存储在signnal变量中。
  • 信号强度可能介于-98(最弱)至-45(最强)之间,Python程序定义了一个函数名为map,其将此范围内的数字转换为0 - 9范围内的数字,从而让我们可以用这些数值来改变LED亮度:0表示关闭;9则表示LED亮度的最大值 。 (你可能想要在其它Python项目中重新使用此函数,因为它与MakeCode中的map模块很相似。)
  • Python程序创建了一个空的5x5图像,名为light ,所使用的执行代码为 light = image(5, 5)。
    其亮度通过调用light.fill()命令来改变。

所需材料

  • 2 个micro:bit和电池盒
  • MakeCode或者Python编辑器
  • 电池盒(选配)

第 2 步:编程

发射器/信标

1from microbit import *
2import radio
3radio.config(group=1, power=1)
4radio.on()
5
6while True:
7    radio.send('1')
8    sleep(200)
9

接收器

1from microbit import *
2import radio
3radio.config(group=1)
4radio.on()
5light = Image(5,5) # create an empty image
6
7# function to map signal stength to LED brightness
8def map(value, fromMin, fromMax, toMin, toMax):
9    fromRange = fromMax - fromMin
10    toRange = toMax - toMin
11    valueScaled = float(value - fromMin) / float(fromRange)
12    return toMin + (valueScaled * toRange)
13
14while True:
15    message = radio.receive_full()
16    if message:
17        signal = message[1]
18        brightness = map(signal, -98, -44, 0, 9)
19        light.fill(round(brightness))
20        display.show(light)
21

第 3 步:完善

  • 组合信标和接收器代码,这样你就可以用一个micro:bit来完成这两项任务。
  • 制作腕带,以便可以戴上你的近程探测器。
  • 当你相距1或2米时,信号有多强? 修改代码以在有人离得太近时触发视觉或听觉警报。
  • 使用这些程序制作寻宝游戏:隐藏信标并将接收器程序下载到多个micro:bit中
  • 如果你在室外或广阔空间中,请通过更改发射器功率进行实验。 功率值可以是0到7之间的任何数字。