BendableWood TreadTank


The treadtank is a motor controlled vehicle build with the function of bending wood. The function we’ve used to create the bendable pattern is included in the code and follows the theoretical principles of bending wood. The tank is created for the purpose of entertainment and to illustrate the ramifications of the bendable wood pattern. Also included in this in guide is a guide for setting up a joystick controller for the tank, which enables the user to control wireless from a distance.

NOTE: This guide will not cover how to radio control the TreadTank. Look under the section: "JOYSTICK" for radio control of the TreadTank.

To begin with you should decide the parameters of which you would like the tank. The bigger, the longer it takes to laser cut.

The pre-defined size of the platform is 21 cm x 12,5 cm x 6 cm. The treads are 3 cm wide.


1x HDF 3 millimeter 90x103cm
2x Servo motors
1x Servo motor connection components
1x Arduino
1x SRF Shield (For Joystick implementation)
2x Weld Nuts (M8)
1x 8mm Studding (15cm)
1x Battery pack / Power Bank
4x Plastic Rivets


1x Glue Gun (This is your secret weapon. Very important. )
1x Laser Cutter
1x Functional Computer
1x Saw (for cutting the studding)
1x Exacto knife
1x Phillips Screwdriver
1x Processing (software application)

Download Project

You can download the zip file for the project here:

The zip file contains a folder with the used code and a PDF for the laser cutting.

NOTE: The files in the folder does NOT contain the files for the joystick application. To download this follow this link:


Download the pdf from the zip file as explained above and transfer it to the computer attached to the laser cutter.

This is how it should look:

Once you have the PDF, upload it in CorelDraw on your machine attached to the laser cutter. Then export from CorelDraw to a PLT file and open the PLT file in your laser cutter software.

Make sure to adjust the speed, power and corner power of the laser cutter accordingly to your laser cutter and the material you use.

The duration of the laser cutting can last anywhere from 30 min. to an hour. So arm yourself with patience.

Once the laser cutting is complete follow the instructions below for connecting components.


The wheels:

You need to assemble 4x wheels in total. 2x front wheels which will be connected to the servo motors, and 2x rear wheels which will be connected to the 8mm studding.

All 4 wheels will mostly be assembled in the same way.

For the assemble of the first wheel you will need: 2x gears, 2x circles with mounting grid holes and 1x wheel plate.

You start by taking one gear and one circle with mounting grid holes.
Align the circle with gear so that they are perfectly aligned, and glue the gear to the circle by applying glue with glue gun in between the gears.

follow the pictures as shown below:

Note: Make sure you don’t glue between the actual gears, and make sure that there is no glue between the circle and the gear. Please refer to the final picture.

Repeat this step for the other gear and circle with mounting grid holes.
Once the glue has dried, take the wheel plate and mount the plate to one of the parts you have just glued together. Make sure the plate is 90 degrees to the circle.

Glue the wheel plate to the circle and hold it in place until the glue has dried. Once the glue has dried do the same with the other circle.

You should now have the following:

Repeat this process for all the 4 wheels.

Rear Wheels:

NOTE: The Rear Wheels are the wheels attached to the studding.

NOTE: If glue has escaped on top of the gear (Like at the picture below) you will need to cut the excess away with an exacto knife.

The rear wheels needs a little extra attention. For this part you will 1x assembled wheels, 1x circle with a small hole and 1x 8mm welding nut (Not shown in the picture below).

This needs to happen a little fast so that the glue doesn’t dry in the middle of process: Apply a small amount of glue in between the outer diameter of the circle and the small hole.
Afterwards position the circle and align the circle with the gear so that they are perfectly aligned.
Hold and squeeze the circle to gear until the glue has dried.

NOTE: Make sure there is no glue between the gears and inside the small circle.

Once the glue has dried between the gear and the circle, you need to align the 8mm welding nut with the the small hole.

Once they are aligned, apply glue around the welding not and hold it in place.

If you have assembled both the rear wheels it should look like this:

Once the weld nuts are attached the rear wheels will be attached to the body in the latter section: "THE FINAL ASSEMBLY".

The Front Wheels:

NOTE: The front wheels are the wheels attached to the servomotors

To assemble the front wheels simply follow the instructions already explained for assembling wheels. Attaching the Front Wheels to the servo motors will be explained in the section: "THE FINAL ASSEMBLY".

Once you are done you should have something like this:

Repeat this process with the second rear wheel.

The Body:

The body of the tank consists of the box. To assemble the box, you put all the pieces together except for the top if you wish to implement changes or joystick. In that case putting the top on is the last piece. The top is the grid piece.

Assemble the sides first. Once those are stuck together, you can mount it to the bottom piece (Bottom piece is the one without the mounting grid).

Attach the servomotors to the box. They need to go from the outside in. It is very tight fit getting the servos in. Be careful that you do not break the side

NOTE: Make sure that you hold the servos all tight into box and completely aligned with the sides.

Glue the Servo motors to the box. Put a line of glue on the top of servo.
And a bit of glue in the lower screw holes on the servo.

We have included mounting holes for an Arduino Uno R3. The arduino is used to drive the servos. Remember that for this project we have used the remote controlled joystick to control our TreadTank but you can use your own code to control the tank if you want.

To mount the Arduino you need to align the board in the 4 holes opposite of the servo motors. Once they are aligned you can snap it in place using the plastic rivets.

This is how it looks with all the things inside including the joystick receiver and power bank.

You can now put the lid on.
The final product of this process should look like this:

The treads:

To assemble the belt we’ve used glue. Our secret weapon. Other solutions are up for grabs, but be cautious as to not get glue on the inside of the tread. Getting glue on the inside of the tread might cause the gear wheels to “pop” out of the tread holes.

To glue the belt together start by putting each end together and glue each side together.

Make sure the sides are aligned perfectly up against each other.


Front Wheels:

Once the wheels are assembled and the box is assembled, you need to mount the front wheels to the servo motors.

Attach the servo component to the servo and screw it in place with the black screw from the servo bag.
Apply glue to one of the front wheels on one side.
Hold it in place on the servo until the glue has dried.
Make sure to do it on both sides.

Rear Wheels:

Put the studding through the two rear holes and screw the rear wheels onto the studding

Once the front and rear wheels are assembled it should like this:

Now that the wheels are in place all you need is to attach the treads. To do this you simply stretch the tread around the wheels on both sides, so that the gear wheels fit in the holes of the tread.

It might easier if you put the robot body on a small platform so you can easily get the belt around.

Fit the teeth from the gear into the holes on the tread in one end.
Stretch it down to the opposite end and get it around the opposite gear and fit it into the gear holes on the tread again.
Should look like this.


import processing.pdf.*;

// material thickness - the gridsystem is equal to the thickness of the material

// the parant mfab class used as a neutral container or canvas. (materialthickness,inset,offset) mfab canvas = createCanvas(4.0f, 0.3f, 0.2f, 145, 140, "Bendable Wood TreadTank", "David & Nikolai");

void setup() {   size(800, 800, P2D );

  setupElements(); } // This function creates a bendable pattern void bendablePattern(float x, float _y, float _width, float _height, float _spacing, boolean _box) {   // If box is true then create a rectangle around the pattern   if (box)   {     canvas.addRect(x, y, width, height);   }   // Creates the pattern   float length = _width/spacing;   for (int i=0; i < length; i++)   {     canvas.addLine(x+spacing*i, y, (height/2)-spacing, 90);     canvas.addLine(x+spacingi, _y+_height/2+_spacing, (_height/2)-_spacing, 90);     canvas.addLine(_x+_spacing/2+_spacingi, y+spacing/2, height-spacing, 90);   } }

// This function creates the tank treads void tankTreads(float x, float _y, float _treadHeight, float _holeLength, float _holeHeight, int _holeAmount) {   // Calculates the tread length based on the hole amount and length   float _treadLength = _holeLength*3*holeAmount;   // Creates the box around the tread   canvas.addRect(x, y, treadLength, treadHeight);   // Calculates the spacing needed between the bendable lines   float spacing = (holeLength*2)/6;

  for (int i = 0; i < holeAmount; i++) {     // Make gear holes     canvas.addRect(x+holeLength*3*i, y+1, holeLength, holeHeight);     canvas.addRect(x+holeLength3i, y+treadHeight-12.5, _holeLength, _holeHeight);   }   // Make bendable pattern   float _loopLength = _holeAmount;   for (int i = 0; i < _loopLength; i++) {     for (int p = 0; p < 3; p++) {       canvas.addLine(_x+_holeLength+_spacing+_spacing2p+_spacing6i+_holeLengthi, y, treadHeight/2-spacing/2, 90);       canvas.addLine(x+holeLength+spacing+spacing*2*p+spacing6i+holeLength*i, y+treadHeight/2+spacing, treadHeight/2-spacing, 90);     }     for (int l = 0; l < 2; l++) {       canvas.addLine(x+holeLength+spacing*2+spacing2l+spacing*6*i+holeLengthi, _y+_spacing, _treadHeight-_spacing2, 90);     }   } } void setupElements() {   setupMFab();   // Define how many generic wheels you want. This includes the gears   int wheelAmount = 4;   // Spawns the tank treads based on (X coordinate, Y coordinate, Height of the tread, Length of the holes, How wide the holes needs to be and how many holes you want)   tankTreads(2, 6, 12, 1.6, 1.5, 25);   tankTreads(2, 19, 12, 1.6, 1.5, 25);   // Spawns the wheels, gears and wheel connectors based on how many you defined up above.   for (int i = 0; i < wheelAmount; i++) {     for (int w = 0; w < 2; w++) {       canvas.addPopCircle(6+15w+152i, 37.5, 11.25);       canvas.addMountHoleRow(6.5+15w+152i, 33, 11, 90);       canvas.addSVG(1+16w+32i, 106, "gear.svg");     }

    mfab hjulforbinder = canvas.addTackyRectPiece(2+9*i, 43, 6, 10, ""); // 60, 60, 16, 10 = LTSTRAIGHT;     hjulforbinder.bottom.lType = LTSTRAIGHT;     hjulforbinder.left.lType = LTINVERSED;   }

  // Initiliaze robotPlatform   mfab robotPlatform = generateInsetBox(2, 56, 53, 13, 31, canvas);

  // Add Servo & Circle holes   robotPlatform.front.addServoHole(4, 8);   robotPlatform.back.addServoHole(4, 8);   robotPlatform.front.addPopCircle(48.5, 11, 2);   robotPlatform.back.addPopCircle(48.5, 11, 2);

  // Mounting Grid, 3, 25, 25);, 3, 20, 3);, 25, 20, 3);

  // HOLES FOR ARDUINO UNO   float ArdMountHolesX = 33;   float ArdMountHolesY = 9;   float XMB = 0;   float YMB = 0;   float holeDia = 0.75;

  robotPlatform.bottom.addPopCircle(ArdMountHolesX + XMB, ArdMountHolesY + YMB, holeDia);   robotPlatform.bottom.addPopCircle(ArdMountHolesX + XMB+(50.8/4), ArdMountHolesY + YMB + (15.2/4), holeDia);   robotPlatform.bottom.addPopCircle(ArdMountHolesX + XMB, ArdMountHolesY + YMB + (45.6/4), holeDia);   robotPlatform.bottom.addPopCircle(ArdMountHolesX + XMB+(50.8/4), ArdMountHolesY + YMB + (43.1/4), holeDia);, 6.5, 20, 17);

  // Create mounting wheels   for (int i = 0; i < wheelAmount/2; i++) {     mfab mountWheeli = canvas.addPopCircle(6+15*i, 130, 11.25);     mountWheeli.addPopCircle(0, 0, 2);   } } void makeholes(mfab container, float x, float _y, int _length) {   for (int i = 0; i < _length; i++)   {     container.addCircle(x, _y + i*2, canvas.toGrid(4));   } } void draw() {   drawMFab(); }


In the link below you can find your setup for the wireless joystick. This will help to control the tank from the wireless controller. Without this application the tank is primarily for aesthetics.

In case the Joystick application is a little too much to take on. You should be able to find plenty of example code for servo motors on this website:


We hope you had great fun making this! We surely did!

Improvements to be made

Obviously this design is not perfect. Here are some improvements you can think about:

  • Make the gear and the tread fit better
  • Better way to mount the wheels to servo
  • Better way to mount the rear wheels
Share on : Twitter, Facebook or Google+