Design, build and program a micro:bit buggy. Three events, one champion team.
🚀 Speed Sprint🏁 Manoeuvre Course🥊 Sumo Arena
The Project
Each team builds a remote-controlled buggy: two micro:bits (one on the buggy, one as a radio remote), a Kitronik motor driver board, and two motors plus a caster ball — or four motors for tank drive. You then enter your buggy into all three events.
📦 What you'll get
2 × BBC micro:bit v2
1 × Kitronik motor driver board (5620 or 5641)
2 or 4 × geared DC motors with wheels
1 × caster / bearing ball (if 2-motor)
3×AA battery holder for the buggy
2×AA battery pack for the remote
Chassis material: laser-cut acrylic, 3D print or cardboard
🎯 What you'll learn
H-bridge motor control & PWM speed
Radio communication between micro:bits
Differential-drive steering maths
Mechanical design: weight, traction, wheelbase
Iterative testing and debugging
Teamwork: pilot & engineer roles
📅 Timeline (8 weeks)
Wk 1–2 Wiring + first drive (Stage 1)
Wk 3–4 Full remote control (Stage 2–3)
Wk 5–6 Chassis tuning & event practice
Wk 7 Time trials
Wk 8Buggy Battle Finals
The Three Events
Every team competes in all three. Points are added across events — consistency wins.
🚀
Speed Sprint
Fastest run down a 5 m straight track.
Course
5 m straight, 60 cm wide lane
Marked start & finish lines
Win condition
Lowest time wins. Two attempts; best counts.
Touching the wall = +1 s penalty per touch.
Engineering tips
Maximise PWM (use 1023).
Keep weight low & centred between drive wheels.
Match left/right motor speed with a trim variable if it pulls.
🏁
Manoeuvre Course
Slalom round cones, through a gate, return to base.
Course
4 cones (slalom)
1 narrow gate (40 cm wide)
180° turn at the far end
Win condition
Lowest time, fewest cones knocked.
Each cone hit = +3 s. Missed gate = +5 s.
Engineering tips
Lower PWM for fine control (try 600–800).
Short wheelbase = tighter turns.
Practise spot turns vs. arc turns — both are useful.
🥊
Sumo Arena
Push your opponent out of the ring. Last buggy in wins.
Arena
Circular ring, 1.2 m diameter, raised 5 cm
Black ring with white border
Win condition
Knockout bracket. Best of 3 rounds per match.
Round ends when any wheel leaves the ring.
30 s timeout = double knockout, replay.
Engineering tips
Add weight (within 500 g limit).
Low front wedge / scoop helps lift opponents.
4-motor drive gives more pushing force.
Grippy tyres beat hard plastic on the arena surface.
The Build
Two micro:bits. One on the buggy, one in your hand. They talk over radio.
One pin HIGH = motor turns one way. The other pin HIGH = motor turns the other way. Both LOW = stopped. Use write_analog(0–1023) for PWM speed control.
Programming Scaffold
Four stages from "first drive" to "tilt steering". Use MakeCode blocks or MicroPython — same logic.
1
Hello, Buggy
Goal: Press button A on the remote — buggy drives forward for 1 second, then stops.
Concepts:radio.send, radio.receive, motor on/off.
2
Full Remote Control
Goal: A = left, B = right, A+B = forward, no button = stop.
// REMOTE (sender)
on start
radio set group 1
forever
if (button A is pressed) AND (button B is pressed)
radio send string "F"
else if button A is pressed
radio send string "L"
else if button B is pressed
radio send string "R"
else
radio send string "S"
pause 100 ms
// BUGGY (receiver) -- requires the "kitronik-motor-driver" extension
on start
radio set group 1
on radio received receivedString
if receivedString = "F"
Motors: motor 1 forward at 100
Motors: motor 2 forward at 100
else if receivedString = "L"
Motors: motor 1 reverse at 80
Motors: motor 2 forward at 80
else if receivedString = "R"
Motors: motor 1 forward at 80
Motors: motor 2 reverse at 80
else
Motors: motor 1 off
Motors: motor 2 off
# remote.py -- the handheld micro:bit
from microbit import *
import radio
radio.config(group=1)
radio.on()
last = ""
while True:
if button_a.is_pressed() and button_b.is_pressed():
cmd = "F"
elif button_a.is_pressed():
cmd = "L"
elif button_b.is_pressed():
cmd = "R"
else:
cmd = "S"
if cmd != last: # only send on change -> less radio traffic
radio.send(cmd)
last = cmd
sleep(50)