I always wanted to build a Lego Roller Coaster, but I only got to know the possibilities with the 31084 Pirate Roller Coaster set. This set triggered me to design my own roller coaster.

I decided to use two real-life roller coasters of the Bellewaerde theme park as inspiration:
The Boomerang
The Boomerang first launches you through a set of loopings. And just when you think you’re done, it launches you back… but this time in reverse. This reverse-idea is so cool that I’ve used it in my roller coaster design.

The Wakala
This brand new roller coaster has a moving track: You first pass a straight piece of track to end up over the water. But a bit later this straight piece swaps places with a turn, guiding you back to the starting point. I certainly wanted those moving tracks in my design (even though it turned out to be quite hard!)

The design
The ramp
For the ramp, I had a look at the 10261 Lego Roller Coaster set. I mainly followed the design of that set. I don’t own the set, but I’ve ordered most of the track parts separately via the Lego shop.


And as you can see, I copied the yellow-red design for the roller coaster cart from my favorite roller coaster: The Boomerang.
The moving track
The moving track contains a small chain to pull the cart until the button. Once the button is pressed, the complete track starts moving. And then you can continue the ride in reverse.



This was by far the hardest part of the design. I tried multiple ways to pull the cart, but in the end the chain worked best.
The full ride

Programming
I typically use MicroPython for programming my Mindstorms EV3. Here’s the coding:
#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile
from time import sleep
# This program requires LEGO EV3 MicroPython v2.0 or higher.
# Click "Open user guide" on the EV3 extension tab for more information.
# Create your objects here.
ev3 = EV3Brick()
chain_motor = Motor(Port.D)
track_motor = Motor(Port.B)
touch_sensor = TouchSensor(Port.S1)
# Variables
normal_speed = 70 # % of max speed
high_speed = 85 # % of max speed
chain_rotating_time = 5 #seconds
wait_time_until_repeat = 20 #seconds
# Write your program here.
ev3.speaker.beep()
while True:
#The chain keeps on running forward, until the button is pressed
while not touch_sensor.pressed():
chain_motor.dc(normal_speed)
chain_motor.dc(0)
#After a button press, the chain is stopped and the track moves
track_motor.run_until_stalled(-180,then=Stop.HOLD,duty_limit=40)
#The chain reverses at high speed for a couple of seconds
chain_motor.dc(-1*high_speed)
sleep(chain_rotating_time)
chain_motor.dc(0)
#The track goes back to its original position
track_motor.run_until_stalled(180,then=Stop.HOLD,duty_limit=40)
#after some time, it all starts over again
sleep(wait_time_until_repeat)
In action
Here’s the roller coaster in action:
More projects
Check out my other Lego Mindstorms EV3 projects:
One thought on “Lego Roller coaster”