Skip to content

Activité

Lucioles

Avancé | MakeCode, Python | Radio, Écran LED | Communication, Randomisation, Sélection

Étape 1 : Fais-le

Transformez un ensemble de micro:bits en un essaim magique brillant de lucioles en utilisant la communication radio

un ensemble de micro:bits se déclenchant mutuellement par radio pour briller brièvement

Ce que vous apprendrez

  • comment utiliser la communication radio entre micro:bits pour déclencher des événements
  • que l'écran LED du micro:bit peut devenir plus lumineux puis s'assombrir
  • comment utiliser des nombres aléatoires et tenter d'imiter le comportement du monde réel

Qu'est-ce que c'est ?

Les lucioles sont des insectes qui utilisent la bioluminescence (lumière faite dans leur corps) pour communiquer entre eux.

Ce projet imite le comportement des vrais lucioles en utilisant la fonctionnalité de communication radio du micro:bit. La version Python a été créée par Nicholas H. Tollervey, et la version MakeCode est basée sur cela.

Flashez le programme sur au moins trois micro:bits dans la même pièce. Appuyez sur le bouton A de n'importe quelle micro:bit et vous devriez voir un 'essain' de micro:bits s'allumer alors qu'ils reçoivent un message radio. Il fonctionne mieux dans une pièce sombre avec beaucoup de micro:bits.

Dès qu'une micro:bit reçoit le message radio, elle a une chance sur dix de transmettre son propre message radio et d'ainsi lancer une nouvelle vague lumineuse vers les autres micro:bits.

Lorsque les lumières finissent par s'arrêter, appuyez sur le bouton A de n'importe quelle micro:bit pour redémarrer l'essaim de communication.

Comment ça marche

  • Le programme utilise la communication radio pour envoyer un message 'flash' lorsque vous appuyez sur le bouton A sur l'un des micro:bits.
  • Lorsque chaque micro:bit reçoit le message, il attend une durée aléatoire comprise entre 50 et 350 millisecondes. L'écran LED va ensuite clignoter puis graduellement s'assombrir pour imiter la lueur d'une luciole.
  • Ensuite, il génère un nombre aléatoire entre 0 et 9. Si le nombre est 0, il envoie alors son propre message radio 'flash', ce qui déclenche le scintillement de plus de lucioles. Il a donc une chance sur dix de déclencher plus de lueurs dans d'autres micro:bits.
  • Vous pouvez utiliser un mélange d'anciens et de nouveaux micro:bits, mais ils doivent tous avoir la même version du programme, soit la version MakeCode, soit la version Python. (La communication radio fonctionne légèrement différemment dans chaque langage de programmation. Les programmes MakeCode ne peuvent pas communiquer par radio avec les programmes Python et vice versa.)

Ce dont vous aurez besoin

  • au moins 3 micro:bits, plus il y en a mieux c'est
  • packs de piles micro:bit (facultatif)

Étape 2 : Programme-le

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

Étape 3 : Améliore-le

  • Modifier l'image qui s'affiche lorsque l'écran clignote
  • Modifiez le code pour le rendre plus ou moins susceptible de déclencher un autre événement flash chez d'autres micro:bits. La gamme de nombres aléatoires pourrait correspondre au nombre de micro:bits que vous avez: augmentez la probabilité si vous avez moins de micro:bits
  • Faire des groupes de lucioles plus petits en utilisant des groupes de nombres radio différents. Seuls les micro:bits avec le même numéro de groupe seront en mesure de communiquer entre eux.
  • Expérimentez en changeant la puissance du signal radio.
    Utilisez le bloc 'radio définir puissance de transmission' dans MakeCode.
    En Python, utilisez radio.config(power=7)
    Choisissez un nombre entre 0 (signal radio le plus faible) et 7 (le plus fort).
    Quel effet a le changement de la puissance de la radio ?