3D Printed Theo Jansen Style Octopod Robot (Arduino Based)

by MertArduino in Circuits > Arduino

393 Views, 6 Favorites, 0 Comments

3D Printed Theo Jansen Style Octopod Robot (Arduino Based)

Build a walking robot: Theo Jansen style 3D printed octopod

Hi everyone! In this project, I will show you an amazing eight-legged robot in the Octopod style! It is made entirely from 3D-printed parts and moves with a cool mechanism inspired by the Jansen Mechanism. Two simple DC motors power the legs, allowing them to move in a smooth and balanced way. A simple Infrared sensor circuit and controller were used to control the robot. I will start the project by assembling the 3D pieces step by step, just like a puzzle, so let's get started!

3D Parts and Hardware

Ekran Resmi 2024-12-29 18.44.40.png
Thumbnail kopyası (2).png
Thumbnail kopyası.png

The project consists of a total of 79 pieces of 3D parts, but don't be intimidated, the main parts are 55 pieces in total and their thickness is approximately 3 millimeters. The remaining 24 pieces are clip-washer 3D parts. I did the printing with Bamboo Lab A1 in standard, i.e. medium quality, the printing time for all parts took about 6 hours.

I avoided using a single color when printing the parts, my aim was to ensure that you can easily distinguish the joints and main parts during assembly. At first I printed in one color and completed the assembly and then I realized that it would be difficult for viewers or readers to distinguish the parts, so I hope that the parts with different colors will make it easier for you during assembly.

During the assembly of the 3D parts, 2 pieces of simple DC Gear Motor were used as hardware, usually sold as a set with wheels and is very popular among Makers. Technically, it is usually operated in the range of 5 to 6 Volts and has a speed of about 200 to 255 RPM.

In addition, a total of 18 bolts and 4 nuts were used during assembly. Dimensions are below:

  1. 8 pieces M3 12MM bolts (for base, top and sides)
  2. 4 pieces M3 25MM Bolts (for DC Motors)
  3. 4 pieces M3 Nut (for DC Motors)
  4. 2 pieces M3 20MM bolts (for axe-drive)
  5. 2 pieces M3 16MM bolts (for axe-drive)
  6. 2 pieces M2 12MM Bolt (for axe-mtr)

Assembly of the Chassis

Ekran Resmi 2024-12-29 18.45.34.png
Ekran Resmi 2024-12-29 18.50.05.png
Ekran Resmi 2024-12-29 18.50.38.png
Ekran Resmi 2024-12-29 18.50.50.png
Ekran Resmi 2024-12-29 18.51.12.png
Ekran Resmi 2024-12-29 18.51.52.png
Ekran Resmi 2024-12-29 18.52.10.png

In this section we will first assemble the chassis. First of all, fix the Right and Left Side models to the Base model using M3 12MM bolts. But, without fully tightening the bolts of any side, place the Upper model and complete the assembly by tightening all the bolts.

Mounting of DC Gear Motors

Ekran Resmi 2024-12-29 18.54.43.png
Ekran Resmi 2024-12-29 18.55.43.png
Ekran Resmi 2024-12-29 18.56.18.png
Ekran Resmi 2024-12-29 18.56.28.png
Ekran Resmi 2024-12-29 18.57.36.png
Ekran Resmi 2024-12-29 18.58.22.png
Ekran Resmi 2024-12-29 18.58.33.png
Ekran Resmi 2024-12-29 18.58.41.png
Ekran Resmi 2024-12-29 18.59.09.png
Ekran Resmi 2024-12-29 18.59.43.png
Ekran Resmi 2024-12-29 18.59.53.png
Ekran Resmi 2024-12-29 19.00.32.png
Ekran Resmi 2024-12-29 19.00.45.png
Ekran Resmi 2024-12-29 19.01.01.png
Ekran Resmi 2024-12-29 19.01.34.png
Ekran Resmi 2024-12-29 19.02.18.png
Ekran Resmi 2024-12-29 19.02.34.png

In this section, we will mount the DC Gear Motors, first of all, insert 4 pieces of M3 25MM bolts into the bolt inputs on the Right and Left Sides. Then place the models named axe-mtr.stl on the DC motor shafts. Thread the DC motors onto the M3 25MM bolts on the chassis and tighten the bolts by installing M3 nuts. Insert the axle part with the long shaft in the model file containing the parts named axe-drive.stl into the motors (axe-mtr model) and fix it by tightening with M2 12MM screws. Now we can move on to the leg assembly.

Joining the Legs

Ekran Resmi 2024-12-29 19.03.04.png
Ekran Resmi 2024-12-29 19.04.49.png
Ekran Resmi 2024-12-29 19.05.33.png
Ekran Resmi 2024-12-29 19.06.28.png
Ekran Resmi 2024-12-29 19.07.01.png
Ekran Resmi 2024-12-29 19.30.35.png
Ekran Resmi 2024-12-29 19.30.48.png
Ekran Resmi 2024-12-29 19.31.25.png
Ekran Resmi 2024-12-29 19.32.11.png
Ekran Resmi 2024-12-29 19.32.24.png
Ekran Resmi 2024-12-29 19.32.42.png
Ekran Resmi 2024-12-29 19.33.08.png

This section requires a total of 8 Leg (leg.stl) parts, 4 on each side. To join the first legs (i.e. the ones in purple in the image, the first ones to be attached to the motor), joint models called inks_1.stl are used. These have a shorter shaft. Insert the joining parts into the leg parts as shown in the image and use the clips clip-washer.stl to fasten them.

Next, joint models called inks_2.stl are used to join the second legs (i.e. the parts in dark green in the image, the parts that will overlap the purple leg). These have a longer shaft. Insert the joining parts into the leg parts as shown in the picture and use clip-washer.stl to secure the clips.

Finally, after the joined parts we have a total of 8 legs, now place the purple leg (the one closer to the motor and with the shorter shaft) on the bottom and the dark green leg (the one with the longer shaft) on top of it (so that they overlap). Then place the longer axe-main.stl model in the shaft hole above and the shorter axe-main.stl model in the shaft hole below. The legs are now ready to be inserted into the chassis! In the next step we will assemble the legs to the chassis.

Placing and Assembling the Legs on the Chassis

Ekran Resmi 2024-12-29 19.33.26.png
Ekran Resmi 2024-12-29 19.35.02.png
Ekran Resmi 2024-12-29 19.35.43.png
Ekran Resmi 2024-12-29 19.36.15.png
Ekran Resmi 2024-12-29 19.36.26.png
Ekran Resmi 2024-12-29 19.36.53.png
Ekran Resmi 2024-12-29 19.37.32.png
Ekran Resmi 2024-12-29 19.38.03.png
Ekran Resmi 2024-12-29 19.38.44.png
Ekran Resmi 2024-12-29 19.39.03.png
Ekran Resmi 2024-12-29 19.39.25.png
Ekran Resmi 2024-12-29 19.40.00.png
Ekran Resmi 2024-12-29 19.40.23.png
Ekran Resmi 2024-12-29 19.41.26.png
Ekran Resmi 2024-12-29 19.41.47.png
Ekran Resmi 2024-12-29 19.42.02.png
Ekran Resmi 2024-12-29 19.43.02.png
Ekran Resmi 2024-12-29 19.44.57.png
Ekran Resmi 2024-12-29 19.45.14.png

In fact, it might be a bit complicated to explain this section in writing, so I have added markers to some of the shared images to make it easier (of course you can also refer to the video for this section).

On both sides of the chassis, there are two square mounting holes for the axe-main.stl parts that we previously attached to the legs. Insert the axe-main.stl parts into these holes as shown in the image and insert the legs into the chassis. In the meantime, you should insert the part with a circle-shaped hole from the inks_1.stl parts in the purple legs to the motor shaft. The part of the dark green leg with the circle-shaped hole should remain free in this position, it will be inserted at a later step. Then insert the second leg into the chassis in the same way.

After the purple colored parts (in inks_1.stl) are attached to the motor shaft, insert the circle-shaped shaft separator part in axe-drive.stl into the motor shaft with the purple colored parts on the bottom. Place the short shaft axle part from the model file containing the parts named axe-drive.stl on the previously fixed motor axle and fix it with M3 20MM bolts.

Now, place the leg parts with the circle-shaped hole in the dark green legs on the axle with the short shaft, and then fix them with M3 16MM bolts by placing the circular washer with the center hole in the axe-drive.stl model file.

Finally, attach the clip-washer-bg.stl parts to the ends of the axe-main.stl parts on the top and bottom of the chassis. That's all, the 3D part assembly of the robot is now complete!

Circuit

Ekran Resmi 2024-12-29 19.49.22.png
1914221938255.png
1914361154487.png
1914077864516.png
1913520930888.png
Ekran Resmi 2024-12-29 19.47.31.png
Ekran Resmi 2024-12-29 19.48.09.png
Ekran Resmi 2024-12-29 19.45.42.png
Ekran Resmi 2024-12-29 19.49.37.png
Ekran Resmi 2024-12-29 19.50.04.png
Ekran Resmi 2024-12-29 19.50.25.png

Now that the 3D parts of the robot are complete, we can take a look at the circuit. You can actually create the circuit with an Arduino board and a motor driver shield, but in this project I will use a two-in-one circuit board of my own design. I used this circuit board in a previous project and it was very much appreciated by my followers.

https://www.pcbway.com/project/shareproject/Make_at_least_5_Robot_Projects_with_one_Board_.html

So I made some updates and shared the final version on the PCBWay project page. This board design is simple but very efficient, it combines a motor driver and a microcontroller, making it easy for projects involving motors. When designing the PCB prototype, I took care to choose components that are easy to find and solderable.

https://www.pcbway.com/project/shareproject/Build_a_Walking_Robot_Theo_Jansen_Style_3D_Printed_Octopod_41bd8bdb.html

The board basically consists of three main components, an ATmega328P, an L293D motor driver, I used a CH341 chip for easy programming via USB. Only, the CH341 USB chip might seem a bit difficult to solder. But using a simple soldering iron, apply a small amount of solder to the pads on the PCB where the chip will be mounted, then align the chip legs correctly and complete the soldering with the soldering iron. If you are not experienced with soldering, you can use PCBWay's assembly board service and they will send you a ready-to-use board.

Among the images, I have shared an image of the Bill of Materials and a Designator image with the positions of the components.

The circuit uses an infrared remote control and receiver for wireless control. The IR remote control and receiver is a very functional and simple product, suitable for robotics and hobby DIY applications. It is usually sold as a 2-in-1 set.

Usually Kit includes:

  1. Remote controller (approx. 21 buttons)
  2. 38 kHz 1838B IR Receiver Module
  3. Jumper cables

A 3S 7.4-volt Li-Ion battery was also chosen to power the circuit. Just connect the motors and the infrared sensor to the circuit as follows, then insert the circuit board and battery into the robot.

  1. Motor A1 = Digital 2
  2. Motor A2 = Digital 4
  3. Motor B1 = Digital 11
  4. Motor B2 = Digital 10
  5. IR Pin = Digital 12

Now that the robot mechanism and circuit are complete, it's time to program it!

Source Code

Ekran Resmi 2024-12-29 19.51.23.png
Ekran Resmi 2024-12-29 19.51.51.png
Ekran Resmi 2024-12-29 19.53.05.png
Ekran Resmi 2024-12-29 19.54.14.png
Ekran Resmi 2024-12-29 19.55.33.png
Ekran Resmi 2024-12-29 18.42.19.png

Before moving on to the main source code, we need to find out which commands, i.e. HEX values, the buttons on the remote control send. Download the infrared remote control command finder code I shared in the attachment and open it with Arduino IDE.

In this and the main code we used an IR library, first we need to install the IR library, and make sure you have installed version 2.6.0 of the library. The library GitHub link is here: https://github.com/Arduino-IRremote/Arduino-IRremote , but as you can see in the image, you can easily install the library by searching for IRremote using the Arduino IDE library tool.

Then define the pin to which the infrared receiver is connected and upload the code to the board. Then open the serial monitor and press the buttons you will use on the remote control, you will see the commands for the buttons on the screen. Remember to make a note of the commands because they will be used in the next step.

Main Code

If you have received the commands for your controller, we can move on to the main code (Motor_Control_IR_Code). Download the code and open it with Arduino IDE, and make the following changes:

  1. Update the pins to which the motors are connected
  2. Update the pin to which the IR receiver sensor is connected
  3. Update HEX values received from the remote control

The loop() function handles commands received from an infrared (IR) remote control and controls the motors accordingly.

  1. IR signal detection: Commands are read and processed from the IR sensor.
  2. Avoiding repeated commands: If the same command is received consecutively, it is ignored, and only new commands are processed.
  3. Command matching and motor control: The received command is matched against predefined HEX values, and the corresponding motor function is executed:
  4. FWRD: Motors move forward
  5. BKWD: Motors move backward
  6. LEFT: Motors turn left
  7. RGHT: Motors turn right
  8. STOP: Motors stop
  9. IR receiver reset: The IR receiver is reset to be ready for the next signal.
  10. Error handling and timing: A small delay is applied when the sensor is busy, ensuring stable operation.

If everything is ready, upload the code to the board, if you are using the printed circuit board I designed, you need to select the board as Arduino UNO.

Now it's time to control the robot! Thanks for reading, I hope it has been a helpful resource for your projects. Have a great making!