Skip to content

Activitat

Detector de proximitat

Expert | MakeCode, Python | Pantalla LED, Ràdio | Comunicació, Operadors aritmètics, Ràdio

Pas 1: Crea-ho

En què consisteix?

Utilitza la ràdio per percebre la proximitat d'una altra micro:bit i llavors fes un joc de caça del tresor o utilitza-la per ajudar a les persones per saber si estan a una distància social segura.

Introducció

Guia de codificació

Com funciona

  • Necessites almenys 2 micro:bits per a això. Crearem dos programes diferents, un per a la balisa que envia constantment un missatge de ràdio de baixa potència. L'altre programa va al receptor.
  • Quan el receptor rep un missatge des d'una balisa, desa la força del senyal en una variable anomenada "senyal (signal)" i la mostra en la pantalla LED .
  • Els senyals de ràdio es fan més forts com més a prop estiguis del transmissor, de manera que si el senyal és fort, vol dir que probablement l'altra micro:bit està a prop.
  • Si el senyal de ràdio és feble, probablement l'altra micro:bit estigui més lluny.
  • La pantalla mostra un gràfic de barres que es fa més gran com més forta és el senyal i més a la vora estàs. Utilitza el bloc matemàtic "transforma" per assignar números proporcionals a la intensitat del senyal de ràdio, que va des de -95 (feble) fins a -42 (fort). Aquests números, en l'interval de 0 a 9 es fan servir per dibuixar un gràfic de barres.

Versió de Python

  • Python no té un gràfic de barres ni una funció de mapa integrada, de manera que funciona una mica diferent. Tots els leds s'il·luminen quan t'acostes a la balisa, i com més t'apropes, més brillants son.
  • Les lectures de la intensitat de la ràdio s'obtenen mitjançant la instrucció "radio.receive_full()". Això retorna el missatge, la intensitat del senyal i una marca de temps. Només volem saber la intensitat del senyal, així que fem servir "signal = missatge[1]" per recuperar-la i emmagatzemar-la en una variable anomenada "signal (senyal)".
  • La intensitat del senyal pot variar entre -98 (més feble) i -45 (més forta) i el programa Python defineix una funció anomenada "map(escala)" per convertir els números d'aquest interval al interval 0 – 9 que pots utilitzar per canviar la brillantor dels leds: 0 significa apagat, 9 és la brillantor màxima que pot tenir un LED. (És possible que vulguis reutilitzar aquesta funció en altres projectes Python, ja que funciona igual que el bloc "map(escala)" de MakeCode).
  • El programa de Python crea una imatge en blanc de 5x5 anomenada "light (llum)" mitjançant la instrucció "light = Image(5,5)"
    La seva brillantor es canvia mitjançant la instrucció "light.fill()".

Què necessites

  • 2 micro:bits i piles
  • Editor MakeCode o Python
  • Piles (opcional)

Pas 2: Programa-ho

Emissor/balisa

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

Pas 3: Millora-ho

  • Combina el codi de balisa i receptor perquè puguis tenir un micro:bit que faci les dues tasques.
  • Fes polseres perquè puguis portar els teus detectors de proximitat.
  • Què tan fort és el senyal quan esteu a 1 o 2 metres de distància? Modifica el programa per activar una alarma visual o sonora quan algú estigui massa a prop.
  • Utilitza aquests programes per fer un joc de caça del tresor: amaga la balisa i col·loca el programa del receptor en moltes micro:bits
  • Si ets a l'aire lliure o en un espai gran, experimenta canviant la potència del transmissor. Pot ser qualsevol nombre del 0 al 7