Skip to content

활동

거리 감지기

고급 | MakeCode, Python | LED, 라디오 | 라디오 파, 산술 연산자, 통신

1단계: 만들어 보세요.

프로젝트 소개

무선 라디오 기능을 사용해서 다른 micro:bit 와 떨어져 있는 거리를 측정하고, 보물 찾기 게임을 만들거나, 다른 사람들과 사회적 거리를 안전하게 유지할 수 있도록 해보세요.

소개

프로그래밍 가이드

설명

  • 최소 2대 이상의 micro:bit 가 필요합니다. 2개의 프로그램을 만들 것입니다. 한 가지 프로그램은 신호 발신 비콘을 위한 프로그램으로서, 저전력 라디오 메시지를 계속해서 발신합니다. 다른 프로그램은 신호 수신기를 위한 프로그램입니다.
  • 신호 발신 비콘에서 전송된 메시지를 수신기가 수신하면, 그 메시지의 신호 강도를 signal 변수에 저장하고, 그 값을 LED 화면으로 출력합니다.
  • 라디오 신호의 강도는 신호 발신기와 가까우면 가까울 수록 강하기 때문에, 신호 수신 강도가 세면 다른 micro:bit 와의 거리가 가깝다는 것을 의미합니다.
  • 라디오 신호가 약하면, 다른 micro:bit 와 멀리 떨어져 있을 수 있습니다.
  • 마이크로비트와 가까울 수록 더 큰 LED 막대 차트로 나타납니다. 다른 범위의 값으로 변환하는 비례 변환(map) 블록을 사용합니다. 원래 무선 신호의 범위 -95 (약함) ~ -42 (강함)에서 측정된 신호 강도를, 0 부터 9 까지의 값으로 변환하고 그 값을 LED 차트 형태의 막대그래프 처럼 출력해 보여줍니다.

파이썬 버전

  • 파이썬에는 LED 막대 차트 기능이나, 비례 변환(map) 함수가 없기 때문에, 다른 방법으로 작동합니다. 수신기를 신호 발신기 비콘에 가까이 가져가면 LED 화면의 불이 모두 켜지고, 가까이 가져가면 갈 수록 더 밝게 빛나게 됩니다.
  • 라디오 신호 수신 강도를 radio.receive_full() 명령을 사용해서 읽어옵니다. 이 명령을 사용하면 전송된 메시지, 메시지 수신 강도, 메시지 수신 시간을 알아낼 수 있습니다. 메시지 수신 강도만 알아내면 되기 때문에, signal = message[1] 를 실행시켜 신호 수신 강도를 signal 변수에 저장합니다.
  • 신호 수신 강도는 -98 (가장 약함) 에서 -45 (가장 강함) 범위에 있고, 파이썬 프로그램에서는 함수를 만들어 수신 강도 값을 0 – 9 범위의 값으로 비례 변환(map) 합니다. 변환된 값은 LED 밝기를 바꾸는데 사용할 수 있습니다.: 0 은 꺼짐, 9 는 가장 밝은 LED 밝기 입니다. (MakeCode 의 비례 변환(map) 블록처럼 똑같이 동작하기 때문에, 다른 파이썬 프로젝트에서도 재사용 할 수 있습니다.)
  • 파이썬 프로그램에서는 5x5 크기의 빈 light 이미지를 먼저 생성합니다. light = Image(5,5) 명령을 사용하고, LED 의 밝기는 light.fill() 명령을 사용해 바꿀 수 있습니다.

준비물

  • micro:bit 2개와 배터리 팩
  • MakeCode 또는 Python 편집기
  • AAA 배터리 팩 (옵션)

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단계: 더 좋게 만들어 보세요.

  • 신호 발신 코드와 수신 코드를 결합해서, 1대의 micro:bit 가 2가지 작업을 모두 할 수 있도록 만들어 보세요.
  • 거리 감지기를 손목에 채울 수 있는 손목 밴드를 만들어 보세요.
  • 1 미터나 2미터 떨어졌을 때, 신호 강도가 얼마나 되나요? 다른 사람과 너무 가깝게 있는 경우, 빛 과 소리로 경보 알람을 출력할 수 있도록 프로그램을 수정해 보세요.
  • 이 프로그램들을 사용하면 보물찾기 게임을 할 수 있습니다.: 신호 발신 비콘을 숨기고, 신호 수신 프로그램을 여러 대의 micro:bit 에 업로드 하면 됩니다.
  • 넓은 야외 공간에서 라디오 신호 전송 강도를 바꿔가며 실험해 보세요. 라디오 전송 강도는 0 부터 7 까지의 값을 사용할 수 있습니다.