Skip to content

활동

반딧불이

고급 | MakeCode, Python | LED, 라디오 | 난수, 선택 실행, 통신

1단계: 만들어 보세요.

무선 라디오 통신을 이용해서, 여러 개의 micro:bit 들을 마법처럼 반짝이는 한 무리의 반딧불이들처럼 만들어보세요.

여러 무리의 micro:bit 들이 한 그룹씩 잠깐씩 반짝이며, 무선으로 서로 동기화 되어 움직입니다.

학습 내용

  • 여러 이벤트들을 실행시키기 위해 micro:bit 들 사이에 무선 라디오 통신을 사용하는 방법
  • micro:bit 의 LED 화면을 밝게 또는 어둡게 만드는 방법
  • 랜덤으로 임의의 수를 뽑아내고 실제 세상의 현상들을 모방해 보는데 활용하는 방법

프로젝트 소개

반딧불이는 (몸에서 빛을 발생시키는) 생체발광 방법을 사용해서 서로 의사소통을 하는 곤충입니다.

이 프로젝트는 micro:bit 의 무선 라디오 통신 기능을 사용해서 실제 세상에 있는 반딧불이들의 행동을 모방해봅니다. Python 버전의 코드는 니콜라스 H 톨러비(Nicholas H. Thollervey)가 만들었으며, MakeCode 버전은 그 Python 버전 코드를 기반해서 만들어졌습니다.

같은 방에 있는 최소 3개 이상의 micro:bit 에 프로그램을 업로드하세요. 그 micro:bit 들 중에서 아무 micro:bit 의 A 버튼을 누르면, 무선 라디오 메시지를 받은 micro:bit 들의 '불 빛 무더기' 를 볼 수 있게 됩니다. micro:bit 가 매우 많은 깜깜한 방에서 매우 멋진 광경을 볼 수 있습니다.

micro:bit 가 무선 메시지를 수신하면, 1/10 의 확률로 다른 micro:bit 에게 반딧불이 물결 불 빛을 켜도록하는 무선 메시지를 전송합니다.

반딧불이 물결 불 빛이 멈췄을 때, 다시 micro:bit 의 A 버튼을 누르면, 다시 통신 '물 결 파동' 이 시작됩니다.

설명

  • 이 프로그램에서는 micro:bit 의 A 버튼을 눌렀을 때, 무선 라디오 통신으로 'flash' 메시지를 전송합니다.
  • micro:bit 가 메시지를 수신하면, 해당 micro:bit 는 50 에서 350 밀리초까지 랜덤으로 시간을 보내며 잠시 기다립니다. 그 다음에 LED 를 점점 어둡게 했다가 밝게하면서, 불 빛을 반딧불이처럼 흉내냅니다.
  • 그 다음에 0 부터 9 까지의 수 중에서 랜덤으로 뽑습니다. 랜덤으로 뽑힌 수가 0 이라면, 'flash' 무선 메시지를 다른 반딧불이 micro:bit 에게 전송합니다. 그렇게 하면 1/10 확률로 다른 micro:bit 들에게 반짝이는 반딧불이 불 빛을 전달할 수 있게 됩니다.
  • 신형 micro:bit 뿐만 아니라 구형 micro:bit 도 모두 사용할 수 있습니다. 하지만, 모두 똑같은 MakeCode 또는 Python 프로그램으로 업로드 되어야 합니다. (무선 라디오 통신 방식이 프로그래밍언어에 따라서 조금 다릅니다. MakeCode 프로그램은 Python 프로그램과 통신하지 못하고, 거꾸로 Python 프로그램과 MakeCode 프로그램도 서로 통신하지 못합니다.)

준비물

  • 최소 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 들끼리만 서로 무선으로 통신할 수 있습니다.
  • 무선 신호 세기를 변화시켜보는 실험.
    MakeCode 에서 '라디오 전송 강도' 블록을 사용해보세요.
    Python 에서는 radio.config(power=7) 를 사용하고, 0 (가장 약한 신호) ~ 7 (가장 강한 신호) 범위를 사용할 수 있습니다.
    라디오 전송 강도를 바꾸면 어떻게 되나요?