BBC micro:bit Train Controller

Having had a couple of micro:bits for a while I thought it about time I did something practical with them and inspired but an article in the May/June 2017 issue of Elector Magazine , I decided to try out the C/C++ mbed developer platform. mbed is a online set of developer resources for IoT devices based on ARM microcontrollers, which includes the BBC micro:bit.

I plan to update this page as I work on the project, and will make the code and any custom hardware circuits available to download from my github site. I hope at some stage to also publish the complete s/w builds directly via mbed, but am struggling a little with this at the moment …

The starting point

My starting point was to get use to compiling code to the micro:bit via the mbed environment, using the elector instructions I managed the usual ‘Hello World’ scrolling display. There are a few typos / omissions in the article but, with a little looking at the online help managed to successfully compile and copy some basic programs on the microbit. Interestingly it proved easier to setup a Raspberry Pi to run mbed than windows 10 – mainly because the drivers needed for the USB side are already installed with Linux.

First working version

startingpoint

Having got the basics working I wrote a bit of code to drive output 0 as a analog line up and down using the A & B buttons. Once I had this working I built a simple driver using the  SN754410  Quadruple Half-H Driver IC. you can see this working on this YouTube clip.

Remote control rev 1

The next stage was to get the 2 micro:bits talking to each other. I started here with some example code from the mbed site, and after a few false starts was able demonstrate basic remote control  – as you can see on this video clip.  The s/w uses the micro:bits built-in 2.4GHz radio module configure for simple micro:bit to microbit communications [rather than the more usual Bluetooth standard] . It is worth noting this is a very simple protocol and does not include any security – so any suitably configured micro:bit in range will receive messages. The code for is on my github site. Importantly for ‘radio’  function to work you have to inhibit the inbuilt Bluetooth functionality by adding a line to MicroBit.h include file – this is explained in more detail on the ‘micro:bit runtime site’

bluetooth inhibit

The next stage

train pcbHaving got a basic working circuit on a breadboard the next stage for me was to transfer the design to something a little more permanent. for something like this I would usually build it on a ‘stripboard’ but the edge connector on the micro:bit makes this quite difficult to do. Instead I designed a simple PCB and got it manufactured by Ragworm. You can down load the final schematic from my github. There is lots of ‘stuff’ on the 754410

trainpcbcrop

on the web so I will not repeat it here but in terms of the interface to the micro:bit I use ‘output 0’ setup for PWM analog to drive the input stage of the 754410 and a spare IO line for direction control. Although I only needed a single circuit including a second channel made sense as the 754410 can drive 2 channels.

June 2017

Having checked out the PCB fully, I have gone back look at the ‘remote control’ micro:bit. Here I am planning to look at what makes the most user friendly speed control interface. initially I have set it up to be controlled by the accelerometer output where full speed is the 12 o’clock position and stop is 3 to 9 o’clock. I have also included a speed lock function and direction change using the buttons. While this works fine I am not sure how good it will be in practice for accurate train control. Next I plan to try a more ‘traditional version with a rotary or slider control.

You can see a short video of the accelerometer control version here and you can you can find the code on my github.

While not planning to actively sell the PCB, most likely I will have some spare so do let me know if you want to buy one rather than get your own made.