GitHunt
AL

ALNezar/Microbit-bluetooth-car

This project allows remote control of motors and servos using a Micro:bit via Bluetooth. Commands like "up", "down", "left", "right", "stop", and "servo" are sent over Bluetooth to control motion and servo angles in real-time.

Micro:bit Motor Control

Bluetooth Motor & Servo Control with BBC Micro:bit

Platform: Micro:bit
Language: TypeScript
Hardware: DC Motors
Hardware: Servo
Bluetooth
License

Built for UQD10801 – ROBOCON I coursework


What This Does

This project lets you control DC motors and a servo wirelessly using a BBC Micro:bit. Send commands over Bluetooth ("up", "down", "left", "right") and the Micro:bit converts them to PWM signals that drive the motors. I built this for a robotics course and it works well for small RC vehicles or prototype robots.

Features
  • Bluetooth UART for wireless command input
  • PWM motor control for variable speed and direction
  • Servo positioning for angle control
  • Real-time response suitable for mobile platforms

Hardware Setup

Here's the wiring setup I used. The motor driver connects to the Micro:bit pins and handles the actual current for the DC motors. The servo runs off pin P0.

Wiring diagram

Motor driver wiring with starter kit components

Prototype vehicle

The assembled prototype


Parts List

Component Notes
BBC Micro:bit Main controller board
DC Motors (2x) Left and right drive motors
Hobby Servo For steering or other angle control
Motor Driver Module H-bridge driver to control motor direction and speed
Bluetooth Device Phone app or another Micro:bit for sending commands

Getting Started

To run or modify this code:

  1. Go to MakeCode for Micro:bit
  2. Click Import → Import URL
  3. Paste: https://github.com/alnezar/kart-microbit-motor-control
  4. The project opens in the browser editor

Command Reference

Command Result
up Move forward
down Move backward
left Turn left
right Turn right
stop Stop motors
c Set servo range

Code Overview

The main logic listens for UART data over Bluetooth and maps commands to motor control functions. Each direction function sets the appropriate pin states for the motor driver.

let recvievestring = ""

// Motor control functions
function Forward() {
    pins.analogWritePin(AnalogPin.P4, 1023)
    pins.digitalWritePin(AnalogPin.P5, 1)
    pins.digitalWritePin(AnalogPin.P6, 0)
    pins.analogWritePin(AnalogPin.P10, 1023)
    pins.digitalWritePin(AnalogPin.P11, 0)
    pins.digitalWritePin(AnalogPin.P12, 1)
}

function Backword() {
    pins.analogWritePin(AnalogPin.P4, 1023)
    pins.digitalWritePin(AnalogPin.P5, 0)
    pins.digitalWritePin(AnalogPin.P6, 1)
    pins.analogWritePin(AnalogPin.P10, 1023)
    pins.digitalWritePin(AnalogPin.P11, 1)
    pins.digitalWritePin(AnalogPin.P12, 0)
}

// Bluetooth event handlers
bluetooth.onBluetoothConnected(function () {
    music.play(music.builtinPlayableSoundEffect(soundExpression.sad), 
               music.PlaybackMode.UntilDone)
})

bluetooth.onUartDataReceived(serial.delimiters(Delimiters.NewLine), function () {
    recvievestring = bluetooth.uartReadUntil(serial.delimiters(Delimiters.NewLine))
    if (recvievestring == "up") Forward()
    if (recvievestring == "down") Backword()
    if (recvievestring == "right") Right()
    if (recvievestring == "left") Left()
    if (recvievestring.charAt(0) == "c") {
        servos.P0.setRange(0, 180)
    }
})

// Setup
music.play(music.stringPlayable("C D E F G A B C5 ", 120), 
           music.PlaybackMode.UntilDone)
led.enable(false)
bluetooth.startUartService()
servos.P0.setRange(0, 180)
stop()

Tech Stack

  • Platform: Microsoft MakeCode
  • Language: TypeScript
  • Hardware: BBC Micro:bit, DC motors, hobby servo, motor driver

Languages

TypeScript94.5%Ruby2.8%Makefile2.7%

Contributors

Created May 18, 2025
Updated February 11, 2026