Building and improving the Thor+ robot arm

Building a 6-axis robot arm based on the AngelLM's Thor robot and the add-on's and improvements of dannyvandenheuvel.

Similar projects worth following
This is the buildlog of the Thor+ robot I'm building right now.
The original author is AngelLM who created the Thor robot.
DannyvandenHeuvel created the Thor+ robot which is an improved version with many add-ons.

I was looking for a 6DOF robot arm to print. 

The first project I found was the Mantis Robot Arm. This is a nice robot arm but the project seams to be abandoned.

Then somebody pointed me to the Thor OpenSource 3D printable Robotic Arm from Angel LM. I loved this design but I was missing the feedback sensors.

And then I found the 'Thor' robot with addons and GUI from Dannyvandenheuvel. This is the Thor robot arm with a lot of addons and improvements. Danny added the feedback sensors in V2.02. 

In this project I will share my building of experience of Danny's version of the Thor robot. 

Day18 (v2).zip

For more info look at the Day 18 log

Zip Archive - 17.57 MB - 11/05/2017 at 15:24


Power Supply Enclosure v1.step

For more info look at the Day 17 log

step - 7.50 MB - 11/05/2017 at 11:57


Zip Archive - 2.33 MB - 09/17/2017 at 15:10



For more info look at the Day 15 log

Standard Tesselated Geometry - 1.22 MB - 09/10/2017 at 17:35



For more info look at the Day 15 log

Standard Tesselated Geometry - 1.24 MB - 09/10/2017 at 17:35


View all 10 files

  • Day 22: The external Nextion display

    Sepio01/06/2018 at 12:54 3 comments

    Calibration tip

    The external Nextion display is finally printed. I had some calibration problems with my printer. All rectangle where shaped as diamonds. I tried to calibrate the printer multiple times but every time i measured the corners with a geo-triangle they where not perpendicular.

    After a while I really didn't understand why it wasn't working. Then I laid the test print on the green cutting mat and it was already perfect the first time. The only corner that wasn't perpendicular was that of the cheap chinese geo-triangle......

    My free tip. Don't use a cheap chinese geo-triangle for calibration purposes. That doesn't work ;-)

    External display

    In my previous log I already told that I moved the display external. Now its finally printed and its available below.

    The display chips become extremely hot so I created some vent holes on the top, bottom and on the back. This makes it possible to lay it flat on the table or put it upright.

    On the inside there is a small black cover on top of the SD card reader. The cable is fastened with a tiewrap. I also dit put a flattened transistor cooling fins on top of the CPU? Its becomes extremely hot.  

    This is the top of the display. The big hole is for the SD card. I used a spring as a strain relief on the cable. Its also possible to use some heat shrink tube.

    On the back of the back panel there is a square (with all those small holes). This adds some structure and it can also be used to screw a custom mount on the back. 

    You can use self threaded screws or "5mm long m3 Threaded Brass Knurl Round Insert Nuts" to mount the back to the front (just put them on a long screw and user a lighter to warm the nut. Then press it into the hole. The m3 nut is 5.5 mm the hole is 5mm.. 

    As a cable I used a cut USB cable. Such a cable contains 4 wires and is shielded. Inside the base the shielded wire is connected to ground. In the display it isn't connected (The wire with the yellow shrink tube). 

    The new version can be download here. It also still includes the previous version with the display on top.

  • Day 21: Separating the Nextion display

    Sepio12/23/2017 at 13:34 1 comment

    The Nextion was fitted in the base cover. This way it wasn't easy to read and it was also dangerous to operate. 

    After a question of Olaf I tried to tilt the display on the base plate. But that wasn't working because the robot arm could collide with it.

    So I removed it from the base and made it like a tablet on a cable. This way its easier to keep in your hands and if the cable is long enough you can stay out of reach of the robot arm. It's also easier during programming because you don't have to remove the base cover to get to the SD card of the Nextion display. As a cable you can use a cut USB cable. (You need a shielded 4 wire cable).

    I am currently printing this new design. If everything fits then I will make it downloadable below.

    Below a rendered preview of the new design.

  • Day 20: Latest Version

    Sepio12/11/2017 at 12:22 7 comments

    I am happy with the current setup. I added support for the LPD3806-600BM rotary encoder. Its replaces the potmeter in the Base and in Art3LowerBody. (A rotary encoder makes it possible to continue rotating).

    The wiring.

    Fully assembled

    The PCB in the new compartment:

    The rotary encoder I used (from ebay). It works with 5V and gives a 3.3V output which can be used on both the 3.3v due and the 5v arduino.

    This version of the model is downloadable here:

    (It takes a while for the browser to render. Or press the download button on the right top to download the model).

    If you open this file in Fusion 360 (free for home use) then you are able to open the tree. Under "Printed Parts" you find all parts. Right click and choose "Save to stl" to make it printable.

    Now I'am going to start to connect al wires and start developing the software.

  • Day 19: Taller Art4LowerBody + New Art4PCBBody

    Sepio11/11/2017 at 13:23 1 comment

    Just a small preview. The printer is printing the new components right now.
    I made the Art4LowerBody 15mm taller. Now I should be possible to use the 232-2GT belts instead of the 208-2GT belts. This way a Gap of about 14 mm is created between the Art56MotorCoverRing and the stepper motors.

    I also created a 25 mm PCB compartment below the Art4LowerBody. This compartments is optional. I want to add a PCB to connect the electronics in the Upper part to the slipring in the Art4Transmission column.

    The upper part with room for the PCB. The lower yellow ring and the black ring above are optional. The upper yellow part can also be mounted on the base without it.

    And the lower part. This stays unchanged.

  • Day 18: Redesign of Art3 and Art4

    Sepio11/05/2017 at 13:09 8 comments

    I did a redesign of the Art 3 upper and lower body and the Art4 Axle. In Art 3 I added a fan and 2 bearings. I also changed the orientation of the mounting screws between the upper and lower body so It can be separated without removing the covers of Art 2.

    I changed the Art4 transmission Axle. The gearhead is a separate piece. The shaft itself is wide enough for another 24 wire slipring.

    The Art 3 lower body. I moved the mounting points for the upper body to the upper body. Now it can be printed like below. I also moved the screw holes to the front and the back. It is now possible to leave this part connected to the lower base and add the upper body separately. There is also room for a 40x40 fan.

    The fan intake. The fan is mounted on the inside.

    The fan from the inside.

    Below all the new/changed parts of the Art 3 upper body and the Art 4 shaft.

    The left orange parts can be glued and screwed together. This makes printing easier.

    I used two bearings on the Art4 Axle.

    The upper bearing. (The extra holes around the bearing are just holes to save some plastic). The two holes on the side are for ventilation.

    The lower bearing and the ventilation holes.

    There is some room for the air to escape.

    The bearing fix. The inner ring has to go on the inside and can be used to push the bearing on its place.

    This way the bearing is fixed at its place,

    The extra holes are for setting the belt tension of the ART5 and 6 motors.

    There is a small bump on the axle which can be aligned with the hole on the gear. This way the screw thread will work. (In a later stadium i used a knife to remove the bump. By rotating the gear 60 degrees it is possible to increase or decrease the length of the axle and the force on both bearings. 

    The gear-head can be screwed with 6 self taping screws on the shaft. A printed hollow screw adds some strength and can be used to hold everything at its place during the build. 

    The outside ring of the slipring has to be removed.

    The outside is about 20mm. The hole inside the Axle is 22mm. Is used some foam tape and some electric tape to make the slipring a little bit thicker.

    Now it can be pressed inside the base. 

    I also changed a few parts of Art 5 and 6. I added some holes for the nuts on the ring which fixes the Art 6 Axle. This way it can be tightened better. 

    The art 4 has changed slightly. There is a little bit extra room for the motors in the upper position. This makes adding the belts easier.

    I used two rotation sensors on the Art56MotorCoverRing

    Everything mounted. Look at the two new black spacers on the outside of the axle.

    The STL's and design files

    Below the latest step files and stl's of al the new and changed parts.

    Day18 (v2).zip

    The bearings I used are 6806 2RS (30x42x7mm) and 6810 2RS (50x65x7). I ordered them for 21,50 euro including shipment from

    Next: Another redesign to fix a problem. 

    With the new setup I have created a small problem. There just isn't enough room for all the wires. I am going to change...

    Read more »

  • Day 17: Power supply enclosure

    Sepio11/05/2017 at 11:55 2 comments

    The last few weekends I made an enclosure for the power supply. It's a little bit over designed but it was nice to design something from scratch.

    The enclosure has an emergency button to cut the power of the 5 and 25V line and 2 separate volt and amp meters with a cut of switch for the 5V en the 24V line.

    There are some ventilation holes on the back side. 

    The 24V fan is always on.

    I use a small 24V to 5V DC to DC step down convertor.

    The wiring of the display, the meters and the buttons.

    All the components I used.

    And the design files of the enclosure.

    Power Supply Enclosure v1.step

  • Day 16: Redesign of Body 4, Covers 5 and some small changes to the gripper.

    Sepio09/17/2017 at 14:33 2 comments

    The last few days I changed some parts. I added some 40x40x11mm cooling fans to the ART4BottomBody . There isn't much room but it fits. I have test printed it and everything fits but i made some of the walls too thin (on the left and right side of the vent holes). 
    I also tested if I could fit the GT2 208 mm belts but the motors can go high enough. So i ordered GT2 232 mm belts. If they are too long then I have to change the mounts between the upper and lower body. In the image below on the top the motor mount (and motor) are touching the mount with the screw hole.

    On the left of the left fan hole (and on the right of the right hole) the wall is too thin. The downloadable version (below) is 1mm thicker.

    Because of the fan holes the ART5 covers didn't fit anymore. So I recreated them. Below the Base part.

    And the upper part. I also made them in two parts. This way it is possible to use two colors and it can be printed with less print support.

    This is the way Danny designed it. (But his downloadable STL is different). I added the screw holes for the covers. 

    I changed the gripper mounting plate to a trapezium so both parts will stay together and the existing screw holes will keep them together. The GripServoMount has some extra room for the servo (on the bottom). The GripMountB is a little bit thicker. I also added the GripGear.stl (which was missing in Danny's version). The ART56 interface place also contains a hole for future usage.

    Below the gripper. On the right side of the servo there is some extra room.

    To mount the gripper from right to left:

    - GripServoMount

    - Washer

    - Plastic ring with bearing

    - Large gripper with bearing

    - Washer

    - Small gripper with bearing

    - Plastic ring with bearing

    - Washer

    - GripMountB

    I might redesign Axle 6 again. Olaf made a comment on how to wire the gripper. I would like to do that by making this Axle hollow and use large bearings on the outside of the shaft. 

    So I already added a hole to the Art56Interface (on the right side).

    Danny asked about my printer. Below my print setup. I have a Ultimaker 2 Extended + with top cover and door. I use some Alkotip wipes to clean the glass plate before printing. After cleaning I use a (very) little bit of 3DLAC.

    The Art4UpperBody is currently printing. The Art5Top Covers are almost finished. 

    Below the changed parts:

    - Day The Body4 and Cover5 parts are untested. Next week I can tell if everything fits.

    - Step file of version 3.05

  • Day 15: Redesign of Art56MotorCoverRing

    Sepio09/10/2017 at 10:54 11 comments

    I didn't like the way the ART56 gears are mounted. So I decided to redesign it. Below the renderings of this new design

    Below on the bottom the old version. There is just a few mm to mount the screw which forms Axle 6. In the new version a real axle is used and it is guided by two bearings. There is also room for one or 2 rotation sensors on Axle 6.

    Also the bearings of Axle 5 are removed. I splitted this axle into 2 parts. The axles can be "screwed" into placed by placing them into a electrical screwdriver. They are fixed inside the new part so the rotation sensor will work.

    First put a bearing on the top side. (You can reuse the old bearings).

    Then put the other bearing on the bottom side.

    Use a flat tool to push the bearing in it's hole.

    The axle will be mounted like this. From right to left. 

    - The big gear

    - 2 M5 spacers

    - A bearing on the top side

    - A bearing on the bottom side

    - Another M5 spacer.

    - The Axle6Fixer that prevents the axle from moving up or down.

    - (If there is room another 5MM spacer. I didn't use one)

    - One or two rotation sensors.

    The makerblock rotation sensor doesn't support a full 360 degrees rotation. If you mount 2 of them on the same Axle then it will be possible to measure all directions.

    Use a electrical screw driver to screw the Art56GearPlateAxleHolder_01 on the axle. It will be a tight fit.

    The axle with the holder can now be fitted into the big gear. 

    My version was 15mm and the hole is 16mm so I used some tape to make the axle a little bit wider. The downloadable version is 15.5 mm. (it has to be removable)

    To make the rotation sensor work the Axle has to be fixed inside the gear. This way it is still removable and by using the 3 screws for the Art56Interface it is possible to keep everything in the right place.

    Add 2 M5 spacers.

    And mount everything together.

    Make sure the gears align perfectly. It is possible to remove or add a M5 spacers (two steps up) to change the gap between the gears.

    This is how it will look with the gripper mounted.

    There is enough room for the belts. I will have to find a way to wire the rotation sensors.

    I might drill a hole on the bottom of the ring for the wires. This way the electrical wire will stay out of the belts way.

    I am going to change the small gears also. There is about 29 mm room on both sides of the axle. 2 bearings and the pulley are 27mm.  

    The hole inside the gear is too big. I am going to make the hole smaller for the pulley. And on the other side I will add some plastic to add a bearing. (The gear has to be able to rotate freely on it's axle.

    On the axle it will be mounted like this:

    - 1 or 2 M5 spacers

    - The pulley

    - The small gear

    - Bearing

    - A few M5 spacers


    Below the new gears. This is the first version and there are two small problems. The bearing can't go deep enough and the screw hole to fix the pulley and the gear is 0.5mm off. The second version is printing right now. The second version can be downloaded below.

    I added a bearing. The axle hole in the plastic gear is a little bit bigger. And I made 2 version. One for a 20x6mm pulley shaft and another for a 16x7mm pulley shaft.

    One M5 spacer is needed.

    The final result.

    Below the rendering of the new structure.

    The changed and new parts can be downloaded here:

    - Art56SmallGear_For16x7PulleyShaft_01.stl
    - Art56SmallGear_For20x6PulleyShaft_01.stl      

  • Day 14: Art 5 and 6 test fit.

    Sepio09/03/2017 at 10:44 1 comment

    Below a few photo's of the construction of Art 5 and 6. There is one big axle. The small orange gears and Pulleys are (going to be) connected with a screw. They will freely rotate on the Axle and are driven by two motors.

    The middle part with the ring contains a nut on which the Art 6 Axle with the big orange gear is mounted.

    If both the left and right small orange gear are rotating in the same direction then Art 6 is going up or down. If  the small gear are rotating in the opposite direction then Art 6 is rotating.

    But I don't really understand how it has to be mounted. The hole in small orange gear is much bigger then the GT2 pulley. There is also to much room on the Axle. The small gears are supposed to rotate freely on the axle but the aren't any spacers to prevent them to go up or down the axle.

    There is a nut in de orange part with the axle. A screw is used to hold the big gear of Axle 6 on top of the small gears. But there are no bearings inside Axis6. And if it rotates the screw becomes looser.

    If all parts can rotate and stay into the right place then it will work. So I might redesign this.

    Below a few photo's of the idea I have. I have added a piece of black tape on the Axle 6. I want to cut it on the left side of the tape. Then I have 2 parts. One part with the big gear and one part with the shaft.

    This way I can redesign the "big ring" part and add two bearings (the bearings shown are to big). The shaft is thick enough to use 3 3mm screws to fix both parts together. This way it can still be mounted together and the shaft is fixed between two bearings. (I might even be able to keep the shaft hollow to guide some wires)

    I am also going to redesign the two small gears so the pulley will fit tightly. Small ball bearings will be added to the small gears.

  • Day 13: Building Art 3

    Sepio09/03/2017 at 10:18 1 comment

    Last week I printed al the Art3 Parts. 

    First I had to cut the GT2 belt to length. I used the Art2 body parts as a mounting template.

    After a few tries the pulley was having the right length.

    Now it was time to mount it al together. There is just enough slack to mount the belt. The cover contains the bearing and this will tighten the belt.

    Below the inside of the lower part of Art 3. I already mounted the motor. A potentiometer or optical rotation sensor will be added later.

    This is the top part of Art 3. It contains a custom bearing.

    Below all the parts for this custom bearing. The green ball are 6mm airsoft balls. The small black part is the plug.

    Just hold the inside and the outside of the bearing in place and fill the hole with balls.

    By rotating the inner part the balls are traveling to the bottom and the hole is free to insert the next ball.

    I used some tape to hold the plug in place. The plug will fit in the hole of the outer part on the left side.

    There is a small gap between the orange Art4 part and the Black Art 3 part.

    Below the Art 3 upper and lower part are mounted together.

    In the future I might change the custom ball bearing because it has to much slack. I want 2 bearings to keep this axis as steady as possible. I already ordered a few different sized 6xxx series ball bearings.

View all 23 project logs

Enjoy this project?



Justin wrote 10/19/2022 at 20:41 point

Love the project. Thank you so much for having such awesome documentation.

  Are you sure? yes | no

venala3016 wrote 05/25/2021 at 12:38 point

Very interesting project on that you are working I am also doing the same job here on pjsbuildingservices site and this will help me to boost my projects quality.

  Are you sure? yes | no

maecky wrote 05/30/2019 at 16:28 point


Great Project! I am trying to build my own Thor+ robot. Can you please tell me what servo you did use in your project?

  Are you sure? yes | no

PaddyCube wrote 05/15/2019 at 06:35 point

Don't blame me for my question. I recently discovered that I can build a 6DOF arm with my printer. This is great and will be my next project.

Because I never found any video of people using their robots for anything useful, I want to ask what it can be used for (really). Sure it is a great project to learn lots about robotics, firmware and maybe ROS too.

Can it be used for anything useful at all? I want a robot that is able to act as laser engraver or mill thin plywood. What about millind PCB boards or large 3D printer? Sure I could build a CNC machine for this but it would more cool to have a CNC robot.

Never found any information about precision. Did you ever test your robot or even did you ever powered it up?

  Are you sure? yes | no

Justin wrote 10/24/2022 at 18:08 point

If you try to use this kind of arm for a CNC robot I think you'll probably run into issues with the accuracy and rigidity of this arm. I'm thinking to use mine for automating my 3d printer into a mini manufacturing line.

  Are you sure? yes | no

mark wrote 04/23/2019 at 18:27 point

Thanks Sepio!, Since the original Thor design do you think that Thor+ and your changes have increased the max payload from the original 750g? Any idea what it might be now?

  Are you sure? yes | no

Adi Singh wrote 07/05/2018 at 06:07 point

What firmware did you use for the Ultratronics board and the Arduino nano? Any chance you can share the software you used to control the steppers?

  Are you sure? yes | no

Bassamalghram wrote 08/05/2019 at 21:31 point

I have the same question

  Are you sure? yes | no

Peter Wilkinson wrote 06/14/2018 at 11:44 point

I tried to create stl files from the fusion 360 project and hit issues because the claw alignment is slightly out. I can't for the life of me figure out how to rotate it so it is in line with the X Y Z planes so it will print flat. Any ideas?

  Are you sure? yes | no

Naturobotic wrote 02/12/2018 at 13:03 point


Could you make a BOM list or at least what additional orders you have done that are different than AngelLM's BOM.
I'm in the process of printing and ordering the parts, missing something will give me the de-motivational 2 month delay.
I'll document every step, in the similar matter you did, and I plan on simply replicating your work.


  Are you sure? yes | no

Sepio wrote 02/12/2018 at 15:53 point

Thank you for the compliments. 

Sorry but I don’t have a BOM. I used Danny’s list. If you open the design file in Fusion 360 then you can see all printed and non printed parts. Most of them are named correctly. 

  Are you sure? yes | no

Naturobotic wrote 02/20/2018 at 13:36 point

Thanks Sepio,

Which firmware did you use for the ultratronics board?

  Are you sure? yes | no

Sepio wrote 02/20/2018 at 15:32 point

I didn’t use a firmware. I am still learning how the arduino stuff works. I am momentarily trying to use I2C to talk to the usb host for the ps4 controller.

  Are you sure? yes | no

Olaf Baeyens wrote 02/20/2018 at 21:23 point

I2C with the PS4 controller LOL

First you need pull up resistors, Danny warned me about this and he was right.

Second I think there is a bug in the firmware on I2C that does not happen when you use Serial. You may encounter this issues (mine was with a PS3)

  Are you sure? yes | no

Sepio wrote 02/21/2018 at 01:28 point

Thank you Olaf. But why are you connecting the usb host controller to the analog pins and not the 2 dedicated I2C ports on the right? I am already using 2 pull up resistors.

  Are you sure? yes | no

Eridilson Silva wrote 12/19/2017 at 18:21 point

Hi Sepio... Man !! your work is amazing, Danny has done a tremendous piece of engeneering and you must be very proud to have Danny saying that your work is fantastic. I will start my Thor in Jan. 2018. I have a Tevo Black Widow and I will try to do a amazig job as you´ve done. PTEG is a very dificult filament to work. I have already lose lots of printings using it until I discovered I have to deal with my room´s temperature too. I will do a  cover to my Black Widow... I hope it will help me. Sepio I downloaded your STEP files but my Solid Works couldn´t import them . An error occoured on phase two. Can you please make it avaiable in parasolid (*.x_t, *.x_b) ... if possible. Thank you - Congratulations again. Have a nice Christmas eve. 

  Are you sure? yes | no

Sepio wrote 12/19/2017 at 18:27 point

Hi Eridilson,

The latest version can be found here.

Click at the link on the bottom of this blog. Click open in browser en you will see the latest version of the modal and a download button in the upper right corner. There you can download all formats.

I used PETG for some black parts. But it was difficult to print. So I returned to PLA and decided to add fans to all parts with motors. I want to use PWM and a thermistor to cool those motors below the 65 degrees PLA can handle.

  Are you sure? yes | no

donskit30 wrote 09/18/2017 at 04:29 point

Were  there any exceptions to the 3D material use for your print on certain parts. AngeL said he used PLA for all parts?

  Are you sure? yes | no

Sepio wrote 11/11/2017 at 09:07 point

Sorry for the late reaction.

Most of the parts I printed are printed with PLA. Some are printed with PETG. I added fans to all the parts with motors because they will get hot. Now it should be no problem to use PLA. 

  Are you sure? yes | no

dannyvandenheuvel wrote 09/03/2017 at 13:25 point

Your doing fantastic work! It's a pleasure to watch your progress, I even want to change my weak parts by your ideas. thanks!

  Are you sure? yes | no

dannyvandenheuvel wrote 08/15/2017 at 16:47 point

Shielding cables:

Generally shielded wires are only grounded on one end. Splicing shouldn't be a problem.That depends. General rule is:If you want to keep EMI inside the cable, ground both ends. If you want to keep the EMI outside the cable, ground one end.So if a signal is small in magnitude (think audio signal like microphone circuit) ground one end to keep interference from outside corrupting the signal inside the cable (including interference created by a ground loop if you were to ground both ends).If you are connecting something like a strobe signal (large AC signal) go ahead a ground both ends as goal is to make sure what is inside doesn't radiate to the outside (groundloop induced corruption of the large strobe signal is a non-issue).In the case of an RS-232 signal you have a fairly large signal [5V or more Peak to peak) running at almost 10KHZ baseband frequency (or more)]. Radiated harmonics could cause all sort of issues. Hence, ground both ends. 
I grounded one side on the ultra board. No problems detected after it.

  Are you sure? yes | no

Olaf Baeyens wrote 08/15/2017 at 19:58 point

I learned something new!

  Are you sure? yes | no

Olaf Baeyens wrote 08/14/2017 at 11:44 point

Nice work!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates