Introduction: Brachistochrone

There are many paths a ball can take between points A and B. These are not all equal however, for two points A and B, where A is higher than B, there is a fastest path called a brachistochrone. This projects demonstrates this. Another cool property of the brachistochrone is that the travel time is constant for any position from where the ball is released. This project aims to demonstrate this aswell.

Step 1: Tools and Materials

To make the brachistochrone we have used the following materials:

  • 4 mm thick wooden plates
  • Wooden block
  • Circular saw
  • Lasercutter
  • Hot glue gun
  • 4x 20 mm diameter marbles
  • Soldering iron
  • Arduino
  • LCD-screen (arduino compatible)
  • Potentiometer
  • 2x servo
  • 5x push button
  • Wires (lots of them)
  • Soldering iron
  • Wire cutter
  • Power bank (or other way to power the arduino)

In adition the following programs were used:

  • Adobe Illustrator
  • Python (Spyder)
  • Arduino IDE

Step 2: Sketching the Tracks

We began by plotting a brachistochrone curve in python. The script used to do this along with the arduino code can be found here. We used tracks sketched out of rectangles of 30x30cm. In each track 2cm were left at the edges, making the actual track 28cm high and wide. However, you might need to change these measurements according to your lasercutter, any size should work as long as all the tracks are all the same size.

We then sketched the tracks in Adobe Illustrator we have sketched three different tracks, the first is a linear path from A to B, the second is the brachistochrone, and the third is a random path from A to B which is too steep. We need two copies of a path to make a track. Make sure the two copies of each path are the same! Do this by copying the sketches. However, the brachistrochrone is sketched 4 times, since we want to make two brachistochrone curves. We then sent the illustrator file to a local company called Laserbeest(, who did the lasercutting. Our illustrator file can be found here, please note that you will very likely have to change this to fit your lasercutter.

Step 3: Assembling the Tracks

We cut 10 identical wooden spacers of 10 mm thick, for this we used a circular saw. The spacers can be seen in the first picture. Size is not very important as long as they fit, and are large enough so you can easily glue them. Two spacers are glued on one copy of the track, and the other is glued on top. Two spacers are used for each track, so that it is firmly attached as is shown in the second picture. Make sure the two paths are oriented the same! To make the setup as a whole, we glued one spacer between the different tracks, this can be seen in the third and fourth picture.The tracks are then glued on a wooden plate.

Step 4: Making the Release Mechanism

To see which track is the fastest, we had to make sure the marbles are all released at the same time. We did this by making a release mechanism with a servo and a release arm. In our design, the arm is made of LEGO, but feel free to make it from something else. The servos are connected to the arduino, this is further explained in the next step. The servo is shown in the first picture and the release arm is shown in the second picture. The servos were glued to the tracks. The height of the second servo in the third picture is not really important, we want to demonstrate that the release height does not matter for the brachistochrone. So pick a spot which you think is nice.

Step 5: Putting the Electronics Into Place

To register to track times, we used push buttons attached to the arduino. From the moment the balls are released the arduino registers the time until the pushbutton is pressed. In this way the arduino can record how long a marble took to roll down the track. Firstly, we soldered wires to the push buttons, as is shown in the first picture. In the picture three legs are soldered, however we later found out we only needed two legs. So save yourself a lot of trouble and only solder two legs on the same side. The push buttons were then glued to a wooden screen at the end of the track. To do this you will have to bend the legs like you see in the first picture.
The push buttons can share a connection to the 5V output of the arduino, see the brown wire in the second picture. The other legs are connected to ground and arduino pins A0-A3, as shown in the fritzing sketch. At last, we added a LCD-screen, which shows the time of each track, and connected the servos. The total circuit to connect the arduino to the push buttons, the LCD-screen and the servos can be seen in the fritzing sketch. The setup is shown in the fourth and fifth picture.

We placed the LCD-screen on the front of the setup where it can be easily seen. The potentiometer next to the LCD-screen controls its brightness. Lastly, we placed a wooden plate on the backside, to attempt to hide the mess of wires.

Now the project is complete, as a final step you can upload the code to the arduino, and it should work! Press the button on the breadboard and the marbles should be released. Please note you might want to change some of the servo angles in the code to fit your setup.

Be the First to Share


    • Big and Small Contest

      Big and Small Contest
    • For the Home Contest

      For the Home Contest
    • Game Design: Student Design Challenge

      Game Design: Student Design Challenge