Skip to content

活动

萤火虫

高级 | MakeCode, Python | LED显示器, 无线电 | 选择, 通信, 随机化

第 1 步:制作

利用无线电通信将一组micro:bit变成一群神奇的萤火虫

一组micro:bit通过无线电相互触发,短暂地发出微光

学习目标

  • 如何在micro:bit之间使用无线电通信来触发事件
  • 让micro:bit的LED显示器变亮或者变暗
  • 如何使用随机数和概率来模仿真实世界的行为

它是什么?

萤火虫是用生物荧光(身体发出的光)来相互通讯的昆虫。

本项目利用micro:bit的无线电通信功能来模拟真实世界中萤火虫的行为。 Python版本由Nicholas H. Tollervey创建,MakeCode版本以其为基础创建。

将程序刷入位于同一房间的至少3个micro:bit中。 按下任一micro:bit上的按键A,应该能看到"一群"micro:bit收到无线电消息后点亮。 在黑暗的房间里使用大量micro:bit效果最佳。

一旦一个micro:bit收到无线电消息后,它就有十分之一的机会来传送自己的无线电消息,从而让另一波的micro:bit开始发光。

当灯光最终停止时,按任意micro:bit上的按键A重新启动“群”通信。

工作原理

  • 当你在任一micro:bits上按下按键A时,程序使用无线电通信发出一条消息“flash” 。
  • 当每个micro:bit收到消息时,它会随机等待一定的时间(50到350毫秒之间)。 然后它让LED显示屏变亮,再逐渐变暗,以此来模拟萤火虫的莹莹亮光。
  • 随后它生成一个0到9之间的随机数。 如果数字是0,它会发送自己的“flash”无线电消息,触发更多的micro:bit萤火虫发光。 所以它有十分之一的机会来触发其他的micro:bit发光。
  • 你可以混合使用旧版和新版的micro:bit。但它们都必须刷入MakeCode或Python版本的程序。 (无线电通信在每种编程语言中的工作方式略有不同。 MakeCode程序不能通过无线电与Python程序通信,反之亦然。)

所需材料

  • 至少3个micro:bit,越多越好
  • micro:bit电池盒(选配)

第 2 步:编程

1# A micro:bit Firefly.
2# By Nicholas H.Tollervey. Released to the public domain.
3import radio
4import random
5from microbit import display, Image, button_a, sleep
6
7# Create the "flash" animation frames. Can you work out how it's done?
8flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]
9
10# The radio won't work unless it's switched on.
11radio.on()
12
13# Event loop.
14while True:
15    # Button A sends a "flash" message.
16    if button_a.was_pressed():
17        radio.send('flash')  # a-ha
18    # Read any incoming messages.
19    incoming = radio.receive()
20    if incoming == 'flash':
21        # If there's an incoming "flash" message display
22        # the firefly flash animation after a random short
23        # pause.
24        sleep(random.randint(50, 350))
25        display.show(flash, delay=100, wait=False)
26        # Randomly re-broadcast the flash message after a
27        # slight delay.
28        if random.randint(0, 9) == 0:
29            sleep(500)
30            radio.send('flash')  # a-ha
31            
32

第 3 步:完善

  • 更改显示屏闪烁时展示的图像
  • 修改代码,使其更多或更少可能地在其他micro:bit上触发另一波闪烁事件。 随机数的范围可以与你拥有的micro:bit的数量匹配:如果你拥有更少的micro:bit,要更如此。
  • 使用不同的无线电组号来设定小范围的群组。 具有相同编号的micro:bit才能互相通信。
  • 尝试改变无线电信号功率。
    使用MakeCode中的“radio set transmit power”模块。
    在Python中,使用radio.config(power=7)
    选择一个介于0 (最弱无线电信号) 和7 (最强) 之间的数字。
    改变无线电功率有什么效果?