I created building instructions for a really cool motorcycle I saw last year: the TMC Dumont by Tarso Marques. It features hub-less wheels and a really big engine. Something just clicked in my head, when I got hold of 20 banana gears and saw that bike.
Making the LEGO MINDSTORMS TMC Dumont work like the real one
The hub-less rear wheel was the easiest to get working. I figured pushing a wheel against would would make it run fine. It turns out that was perfect to make the bike go forward. But gravity isn’t strong enough to make it run backwards. On the real life model I pulled rubber bands over the wheels to get some traction.
The steering mechanisme was the greater challenge. The original TMC Dumont videos on YouTube never show how the real bike makes a turn. It has to turn, however in order to stay upright. It looked like the real bike had extending and retracting arms to move the front wheel. I succeeded in building a similar mechanism with the rack gears from the Mercedes Arocs Truck.
Luke Skywalker rides the Dumont like a boss
By sheer coincidence the scale of the model was the same as the large Star Wars figurines. The handlebars are a perfect fit for Luke’s hands!
In the pictures you can also see 4 cables coming out of the sensor ports. They are actually two cables looping back. I thought the cables just looked cool on this model.
Programming the TMC Dumont
In the video I’m running ev3 python from LEGO Education on the Mindstorms Brick. It allows me to connect a PS3 Sixaxis controller and remote control the bike. The code is pretty much the same as car with front wheel steering. You can run it with a single keystroke if you install VS Code with LEGO Education Micropython. To get it on to the brick, go to the LEGO Mindstorms extension in VS Code, click ‘create a new project’ and past the code below. Connect your ev3dev brick to your computer with USB internet sharing or wifi and press F5 to run it.
#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
import struct
# Declare motors
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)
steer_motor = Motor(Port.A)
# Initialize variables.
# Assuming sticks are in the middle when starting.
right_stick_x = 124
right_stick_y = 124
# A helper function for converting stick values (0 - 255)
# to more usable numbers (-100 - 100)
def scale(val, src, dst):
"""
Scale the given value from the scale of src to the scale of dst.
example: print(scale(99, (0.0, 99.0), (-1.0, +1.0)))
"""
return (float(val - src[0]) / (src[1] - src[0])) * (dst[1] - dst[0]) + dst[0]
# Find the PS3 Gamepad:
# /dev/input/event3 is the usual file handler for the gamepad.
# look at contents of /proc/bus/input/devices if it doesn't work.
infile_path = "/dev/input/event3"
# open file in binary mode
in_file = open(infile_path, "rb")
# Read from the file
FORMAT = 'llHHI' # long int, long int, unsigned short, unsigned short, unsigned int
EVENT_SIZE = struct.calcsize(FORMAT)
event = in_file.read(EVENT_SIZE)
while event:
(tv_sec, tv_usec, ev_type, code, value) = struct.unpack(FORMAT, event)
if ev_type == 3 and code == 3:
right_stick_x = value
if ev_type == 3 and code == 4:
right_stick_y = value
# Scale stick positions. Flip directions here.
forward = scale(right_stick_y, (0,255), (-100,100))
left = scale(right_stick_x, (0,255), (150,-150))
# Set motor voltages for propulsion.
left_motor.dc(forward)
right_motor.dc(forward)
steer_motor.track_target(left)
# Finally, read another event
event = in_file.read(EVENT_SIZE)
Building instructions for the TMC Dumont with LEGO MINDSTORMS
You can build a TMC Dumont for yourself. Head over to my Patreon site to get building instructions. I have create an easy-to follow and high resolution PDF file. I did not model the chain and the cables. I suppose you’ll be able to figure that out from the pictures, right? If not, drop me a line on Patreon.
These are the parts you will be needing. It’s a csv list that works well with Bricklink.