Introduction: [2021] Running a Lego Compatible Train With Micro:bit and Tablet (iPad or IPhone)
Are you interested in running a BBC micro:bit powered train? Micro:bit based robotics platform can be transformed into trains, and you can play it with Lego train and rail ecosystem.
In this tutorial, we will use Valenta Zero robotics controller to develop a micro:bit based Lego compatible locomotive running on Lego rails.
Valenta Loco is a powerful and smooth running micro:bit controlled Lego compatible locomotive. It is equipped with Valenta Zero robotics controller that can be controlled by a micro:bit for playing with Lego trains and rails. The locomotive has two (x2) micro gear motors in the bogies. You can use Lego Technic bricks to build your unique body shell on the locomotive.
3D printing Lego Compatible Rails via Thingiverse
Check Thingiverse and you can 3D print your Lego compatible rails based on your layout plan.
Sample Codes
In this tutorial, we will present how to set up micro:bit app on your iPad (iPhone), how to pair it with your micro:bit, and how to use Gamepad in the app for controlling the locomotive. Pressing Gamepad button A or B will let the locomotive go forward or backward. Releasing Gamepad button A or B will let the locomotive stop.
You can download ready-to-play MakeCode sample files and play immediately in this tutorial. This tutorial does not require coding at all. However, what's really fun is to reverse-engineer how it's running under the hood. If you want to discover more, you can further continue reading the following steps to go deeper in the knowledge.
If you want to control your locomotive using two (x2) micro:bits, please review this tutorial instead.
Supplies
iPad (iPhone)
We will use an iOS device (iPad or iPhone) in this tutorial. Make sure you've downloaded micro:bit app in the App store. Please check your device compatibility with the app for using Bluetooth connection.
Micro:bit
We will use one (x1) micro:bit for the receiver. We've tested the sample code in this tutorial and both micro:bit version (V1) and version 2 (V2) are working correctly.
Batteries
We will use new, single-use six (x6) 1.5V AA batteries for the locomotive.
Kit
You can obtain Valenta Loco micro:bit powered locomotive engine via Projects4Kiz.
You can also refer to the instruction for assembling the locomotive.
Step 1: Checking If Wiring Is Correct
We will make sure if the locomotive is set up properly. Especially we will check the wiring connection.
The locomotive is equipped with micro:bit based motor controller called Valenta Zero. It contains a small motor controller (DRV8833) for controlling a DC motor on each bogie. There are four (x4) GPIO (general purpose input and output) pins P0, P1, P2 and P8 for connecting devices like LED headlights. Each of P0, P1, P2, P8 pins have three pins, (S)Signal (yellow wire cable), (V)Voltage (red wire cable) and (G)Ground (black wire cable). These pins can operate at 3.3V or 5V (selectable) and please choose 5V for connecting LED headlights.
We can find red and black wires coming from each of the bogie on the locomotive. They are motor cables.
- Pick up a motor cable and put its red wire to the left pin on M1 and its black wire to the right pin on M1 as shown in the figure.
- Pick up another motor cable and put its red wire to the left pin on M2 and its black wire to the right pin on M2 as shown in the figure.
If you have a train body shell equipped with front LED headlights, you can light them up! Say let's choose P8 for connecting these LED headlights.
Put its red wire to (V) Voltage pin at P8 and its black wire to (G) Ground pin at P8 as shown in the figure. LED headlights are ready to light up when the power is on.
Step 2: Copying the Sample File to Micro:bit
You can download MakeCode sample file (below) to your computer. This sample file is ready to play, and you can start playing immediately. This sample file can work with both micro:bit version 1 (V1) and version 2 (V2).
Please download Receiver.hex file below. Then, connect your computer and a micro:bit via USB cable. Drag and drop Receiver.hex file to the micro:bit and use this as "receiver" micro:bit. Once you've copied the sample file to the micro:bit, disconnect it from your computer.
Mount "receiver" micro:bit on the locomotive and turn on the power switch on Valenta Zero motor controller. Now try pressing button A or B. The locomotive will run forward or backward.
Attachments
Step 3: Downloading Micro:bit App
Let's download micro:bit app to your iPad (iPhone) in the App store.
Open the app and tap choose micro:bit button for pairing your micro:bit.
Step 4: Pairing a Micro:bit
So far you have not paired any micro:bit to your iPad (iPhone) yet. Click Pair a micro:bit button.
Step 5: Pressing Button A, B and Reset Buttons
You will need to hold pressing button A and button B, and simultaneously press and release Reset button.
When all the dots in the 5x5 LED matrix flash altogether, click Next button.
Step 6: Tapping the LED Dots
In the app, you will need to tap each LED dot just the way exactly shown on your micro:bit 5x5 LED matrix. This LED dot pattern is unique and different for everyone.
Step 7: Pairing to the Device
When you are ready to pair, let's click Next button.
Step 8: Searching Via Bluetooth
Please make sure that your iPad (iPhone) has Bluetooth ON. Micro:bit app is trying to search and pair with your micro:bit.
Step 9: Checking If Pairing Is Successful
Once your micro:bit and iPad (iPhone) have been paired successfully, please click OK button.
Step 10: Setting Up Gamepad
Let's go back to the top menu and click Monitor and Control button. Click Add (+) button and choose Gamepad in the list.
Step 11: Playing With Gamepad
Please click Start button to activate Gamepad with your micro:bit. Now you can control your micro:bit using Gamepad. Pressing button A or B will let the locomotive run forward or backward.
If you want to discover how it's running, you can further continue reading the following steps to go deeper in the knowledge. We will explain the anatomy of the sample code.
Step 12: Removing Micro:bit Paired in the App
The app allows you to set up multiple micro:bits simultaneously.
If you've paired too many micro:bits and if you want to remove one of them, go to top menu and click Choose micro:bit button. You can find the list of micro:bits you've paired previously. Click Trash button to remove the micro:bit you want.
Step 13: Removing Micro:bit Paired in Bluetooth Setting
We also recommend that you clean up Bluetooth setting occasionally by removing micro:bits you've paired previously. To clean up already paired micro:bits in Bluetooth setting on your iPad (iPhone), please follow these steps.
Go to Setting.
Go to Bluetooth.
Click the micro:bit you want to remove.
Click Forget this device button.
Click OK button.
Step 14: Adding Extensions to MakeCode Editor
Does your MakeCode editor include following extensions? Please open the editor and check if it includes these extensions in the left menu. You will use these extensions in Receiver.hex sample file. If you can't find these extensions, click Extensions in the bottom of the menu. Then, click to add these extensions to the menu one by one.
Bluetooth extension
You will need this function to control "receiver" micro:bit's digital and analog pins via Bluetooth from your iPad (iPhone).
Devices extension
You will need this extension to define the actions assigned to each Gamepad button in micro:bit app on your iPad (iPhone).
Step 15: Reviewing Receiver.hex Sample File
Now we will examine Receiver.hex sample file. Open MakeCode editor and click Import button. Open Receiver.hex file you've copied to "receiver" micro:bit.
The locomotive has a micro gear motor M1 and M2 on each bogie.
on start block
This block is called initially at once when "receiver" micro:bit is powered on.
bluetooth io pin service
In Bluetooth extension, drag and drop bluetooth io pin service block. With this block, you can access to "receiver" micro:bit's digital and analog pins via Bluetooth.
function goForward block
digital write pin P13 to 0
P13 pin is used for direction of M1 motor. In Pins extension, drag and drop digital write pin P13 to 0, so that M1 goes forward.
digital write pin P15 to 0
P15 pin is used for direction of M2 motor. In Pins extension, drag and drop digital write pin P15 to 0, so that M2 goes forward.
analog write pin P12 to 1023
P12 pin is used for speed (max speed is 1023) of M1 motor. In Pins extension, drag and drop analog write pin P12 to 1023, so that M1 goes forward at max speed.
analog write pin P14 to 1023
P14 pin is used for speed (max speed is 1023) of M2 motor. In Pins extension, drag and drop analog write pin P14 to 1023, so that M2 goes forward at max speed.
function goBackward block
digital write pin P12 to 0
P12 pin is used for direction of M1 motor. In Pins extension, drag and drop digital write pin P12 to 0, so that M1 goes backward.
digital write pin P14 to 0
P14 pin is used for direction of M2 motor. In Pins extension, drag and drop digital write pin P14 to 0, so that M2 goes backward.
analog write pin P13 to 1023
P13 pin is used for speed (max speed is 1023) of M1 motor. In Pins extension, drag and drop analog write pin P13 to 1023, so that M1 goes backward at max speed.
analog write pin P15 to 1023
P15 pin is used for speed (max speed is 1023) of M2 motor. In Pins extension, drag and drop analog write pin P15 to 1023, so that M2 goes backward at max speed.
function stop block
digital write pin P13 to 0
P13 pin is used for direction of M1 motor. In Pins extension, drag and drop digital write pin P13 to 0, so that M1 is set for forward direction.
digital write pin P15 to 0
P15 pin is used for direction of M2 motor. In Pins extension, drag and drop digital write pin P15 to 0, so that M2 is set for forward direction.
analog write pin P12 to 0
P12 pin is used for speed (0 means no speed) of M1 motor. In Pins extension, drag and drop analog write pin P12 to 0, so that M1 stops.
analog write pin P14 to 0
P14 pin is used for speed (0 means no speed) of M2 motor. In Pins extension, drag and drop analog write pin P14 to 0, so that M2 stops.
on gamepad button A down block
In Devices extension, you can find the block on gamepad button A down block. This block is executed whenever you press Gamepad button A on your iPad (iPhone). When pressed, the block will callgoForward function and the locomotive will go forward.
on gamepad button A up block
In Devices extension, you can find the block on gamepad button A up block. This block is executed whenever you release Gamepad button A on your iPad (iPhone). When released, the block will call stop function and the locomotive will stop.
on gamepad button B down block
In Devices extension, you can find the block on gamepad button B down block. This block is executed whenever you press Gamepad button B on your iPad (iPhone). When pressed, the block will call goBackward function and the locomotive will go backward.
on gamepad button B up block
In Devices extension, you can find the block on gamepad button B up block. This block is executed whenever you release Gamepad button B on your iPad (iPhone). When released, the block will call stop function and the locomotive will stop.