Skip to content

Atividade

Sinalizador de proximidade

Avançado | MakeCode, Python | Ecrã LED, Rádio | Comunicação, Ondas rádio, Operações aritméticas

Passo 1: Faz tu mesmo

O que é isto?

Usa rádio para perceber quão perto está outro micro:bit e a seguir faz um jogo de caça ao tesouro ou o usa-o para saber se estás a uma distância social segura.

Introdução

Guia do código

Como é que funciona

  • Para isto precisas pelo menos de 2 micro:bits. Vamos criar dois programas diferentes, um deles para o sinalizador que envia constantemente uma mensagem rádio de fraca potência. O outro programa é descarregado no receptor.
  • Quando o receptor apanha uma mensagem lançada pelo sinalizador, ele guarda a sua intencidade numa variável chamadasinal e depois mostra-a no ecrã de LEDs.
  • Quanto mais próximo estiveres do transmissor mais forte é o sinal rádio; nesse caso, se o sinal for forte quer dizer que provavelmente o outro micro:bit está por perto.
  • Se o sinal rádio é fraco, é provavel que o outro micro:bit esteja afastado.
  • O micro:bit mostra um gráfico de barras que cresce quanto mais forte for o sinal e mais próximo tu estiveres. Ele usa o bloco matemático map para mapear os números que representam a força do sinal de rádio, que vão desde -95 (fraco) até -42 (forte) que são conertidos a um intervalo de 0 a 9 para desenhar um gráfico de barras.

Versão Python

  • O Python não tem uma função de mapa ou gráfico predefinida, então funciona de uma forma um pouco diferente. Quando te aproximas do sinalizador, todos os LEDs se acendem; e a luz fica mais intensa quanto mais perto estás perto estiveres.
  • As leituras da intensidade do sinal rádio são feitas com o comando radio.receive_full() . Isto fornece a mensagem, a intensidade do sinal e uma referência horária. Queremos saber apenas a intensidade do sinal, por isso usamos signal = message[1] para extraír este valor e alojá-lo numa variável chamada signal.
  • A intensidade do sinal pode estar entre -98 (mais fraco) e -45 (mais forte) e o programa Python define uma função chamada map para converter os números deste intervalo num valor entre 0 e 9 que podemos usar para alterar o brilho dos LEDs: 0 significa desligado, 9 é o LED mais máximo de intensidade. (Podes querer reutilizar esta função noutros projetos em Python, já que ela funciona de forma identica ao bloco map no MakeCode).
  • O programa Python cria uma imagem 5x5 em branco chamada light (luz) usando o comando light = Image(5,5)
    A luminosidade é alterada usando o comando light.fill() .

Do que é que precisas

  • 2 micro:bits e suporte de pilhas
  • Editor MakeCode ou Python
  • Suporte de pilhas (opcional)

Passo 2: Cria o teu código

Transmissor / Sinalizador

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

Receptor

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

Passo 3: Melhora-o

  • Combina o sinalizador e o código receptor de maneira a que possas ter um micro:bit a fazer as duas tarefas.
  • Faz umas pulseiras onde possas usar os detectores de proximidade.
  • Qual é a força do sinal quando estás a 1 ou 2 metros de distância? Altera o código para ativar um alarme visual ou sonoro quando alguém estiver demasiado próximo.
  • Usa estes programas para fazer uma caça ao tesouro: esconde o sinalizador e descarrega o código de receptor em vários micro:bits
  • Se estás no exterior ou num espaço amplo, experimenta mudar a potência do transmissor. Pode ser qualquer número entre 0 e 7