Activity

# Proximity beacon

## Step 1: Make it

### What is it?

Use radio to sense how close another micro:bit is and then make a treasure hunt game or use it to help people know they’re at a safe social distance.

### How it works

• You need at least 2 micro:bits for this. We’ll create two different programs, one for the beacon which constantly sends a low-power radio message. The other program goes on the receiver.
• When the receiver picks up a message from the beacon, it stores its strength in a variable called signal and shows it on its LED display.
• Radio signals get stronger the closer you are to the transmitter, so if the signal is strong it means the other micro:bit is probably close.
• If the radio signal is weak, the other micro:bit is probably further away.
• It displays a bar graph which gets bigger the stronger the signal and the closer you are. It uses the maths map block to map radio signal strength numbers from the range -95 (weak) to -42 (strong) to a range 0 to 9 we can use to draw a bar graph.

#### Python version

• Python doesn’t have a built-in bar graph or map function, so it works a bit differently. All the LEDs light up when you get close to the beacon, and the closer you get the brighter they glow.
• It takes radio strength readings using the `radio.receive_full()` command. This provides the message, the signal strength and a timestamp. We only want to know the signal strength, so we use `signal = message[1]` to extract this and store it in a variable called signal.
• The signal strength may be in the range -98 (weakest) to -45 (strongest), and the Python program defines a function called map to convert numbers in this range to the range 0 – 9 which we can use for changing the brightness of the LEDs: 0 means off, 9 is the brightest an LED can be. (You might want to re-use this function in other Python projects as it works very much like the map block in MakeCode).
• The Python program creates a blank 5x5 image called light using the command `light = Image(5,5)`
Its brightness is changed using the `light.fill()` command.

### What you need

• 2 micro:bits and battery packs
• MakeCode or Python editor
• battery pack (optional)