by ftobler Aug 14, 2016
Download All Files

Thing Apps Enabled

Please Login to Comment

I printed out the control box that holds the arduino mega and the RAMPS. I noticed there's a space for what I assume must be a cooling fan.
And i guess it should be a 50mm x 50mm fan, but am a little puzzled as to whether the fan should "push" or "pull" the airflow over the boards.
And I assume that the intake and outlet "grill" should be on opposite sides.. correct?

Does anybody have a detailed bolts & nuts list?

Scroll down the webpage and most info is there. I printed out the 6 pages and most important parts are listed (bearings, screws, etc.) There's no exact number mentioned, but I just got a supply enough to cover (I hope :-)) )

Comments deleted.

What length shaft do I need for the stepper motors? Looks like i can get 60mm/1.5A, 48nn/1.68A, 40mm/1.3A, and 34mm/1.3A

Standard length of the shaft is 24mm.
you are referring to the motor length? That is up to you.

So how exactly does the arm attach to the base at the thrust bearing?

Nm. I figured out that I printed the base with a hole and the 2 nema motor mounts with a hole. I will add a bearing to each and attach with a bolt. I will also be adding a complete instruction manual for this. I don't know why people don't take the time to do this.

There are some pictures of this step in the description.

Sorry. I missed that. I still haven't seen a clear picture or schematic of the gripper wiring. Did I miss that too?

No, there is none.
In the code you can see the pins for the driver.

What program do you use to control the robot from your computer? I have power, but am struggling with connecting and controlling it.

I wrote a software which includes the sending of simple sequences. Some users are reporting it not to work stable on some Arduino boards.

It is intended that you either write arduino code for it, or write some software on the computer which writes to the serial port. You can also send it some data over a serial Terminal like the one integrated in arduino.


First trial looks good, I have added jumpers to achieve microstepping. Just one question about starting position. What could be ideal starting position for arm ?
Also when it runs below default code (G1 X10 Y100 Z0) , then I can use this point as my reference to maneuver the arm ?

Default gCode -->
G1 X0 Y120 Z120
G1 X10 Y100 Z0

I don't really understand your question. Thanks for the video.

The recommended startup procedure is:

M18 (stepper off)
G1 X0 Y19.5 Z134
(hold Arm manually in Endstop position)
M17 (Stepper on)
now you can go with G1 whereever you want.

Instead of the endstop position you can use every other position. you just have to "drive" to that position while steppers are off. then the kinematics model lets the arm drive correctly in cartesian coordinates. For example if you drive Z the robot really only drives in Z direction, not forward at all.

However if you don't want the kinematics model driving in cartesian coordinates then I recommend using a standard 3D Printer Software like Marlin or Repetier. There you can just drive the motors manually.

Thanks for your updates....I was missing point of setting up arm position towards end stop at start.Now everything looks fine.
Only thing I have to learn is to learn positions of gripper w.r.t X,Y,Z coordinates.

Thanks for this build, I was looking for something to share with my students which would be DIY Robot Arm. This appeared to me as very much Open Source and useful.
I have 3D Printing knowledge , Hardware knowledge along with programming. I am just have following questions :

  1. How would user know robot's original position , like 0,0,0 ?
  2. How would user know steppers are not moving far from its limit (Maybe it would have built in program , not checked yet)
  3. I am not good at maths, so how could I teach my students about calculations you done for movements ?

I have done printing of all parts and currently doing assembly. Good to see all parts are off the shelf , no need to do to much of search :)
I yet to try hardware tests and then actual robot test :)

Thanks again :)

  1. X0 Y0 Z0 is the center axle and therefore not possible. The Position X0 Y120 Z120 is Straight up and Horizontal. While at both mechanical endstops the position is X0 Y19.5 Z134 if i am not mistaken.

  2. That they don't skip steps? there is no such thing. 3D Printers don't recognize step skips too. Just don't overload it.

  3. Cartesian coordinates in X,Y,Z are converted to rotational angles for each of the motors.

Thanks for your reply. I have 3D printed parts and done initial check of firmware. Now it is time to integrate all mechanical parts and electronics hardware. Shall update my make soon.

Kannst du mir noch schreiben welche Stepper du verwendest?
ich verwende welche mit 12 V und 0,4 A, die wiegeschrieben sehr heiß werden.

grundsätzlich kommt es auf die Länge des Blechpakets, bzw des Motors an und weniger auf die Stromstärke. Die billigsten Motoren haben meist eine länge von 34mm, 54mm wäre da schon besser. Ich weiss nicht was für Motoren ich habe, sind ausm alten 3d drucker.

Ich habe vegessen bei grbl den wert $1 auf 255 zu stellen.
Nachdem ich das gemacht hatte, war das mit der Haltekraft OK, da jetzt die Motoren dauern mit Strom versorgt werden.
Das einzige Problem ist jetzt, dass die Motoren sehr heiß werden.
Vielen Dank

wenn die Motoren heiss werden ist der strom zu hoch. kann sein dass die Motoren das zwar noch perfekt aushalten, der 3d druck drumherum jedoch nicht.

Ich habe den Robotarm nachgebaut, das cnc shield funktioniert,. Ich kann den Arm mit den Motoren bewegen, aber leider haben die Stepper keine Haltekraft.
Nach dem Anheben des Armes senkt er sich wieder.
Was mache falsch???

Die Schrittmotortreiber haben ein kleines SMD Potentiometer. Dieses legt den Motorenstrom fest.

Stell den Motorenstrom stärker ein, bis die gewünschte Haltekraft erreicht wird. Die Motoren können sich bei erhöhtem Haltestrom deutlich erwärmen. Falls Messmittel verfügbar sind empfehle ich die Stromaufnahme zu messen um sicherzustellen das der gewünschte Effekt erzielt wird und die Spezifikation des Schrittmotors nicht überschritten wird.


suite à votre réponse (En tant que traceur avec un stylo, il devrait bien fonctionner),

Pourriez vous me conseiller un firmware compatible pour faire des dessins


For a pen plotter it is nessesary that the robot head moves on a flat plane. For that my own firmware has the right inverse kinematics model applied to it. That means you can send coordinate in XYZ and the controller calculates the correct motor positions. However my own firmware is not the fastest and smoothest available. You may have some problems with acceleration, especially with letters which have arcs in them. Programming advanced acceleration courves and smooth out a path is very hard, so my firmware takes it simple and stops for each line segment.

You can install a normal 3D Printer firmware like Repetier or Marlin, but they don't have the inverse kinematics and therefore don't move in XYZ coordinates. If you can compensate for that with other software or you pen holder design, then this is the better choice.


Merci pour votre reponse


Merci pour votre réponse,

Pourriez vous me donner des détails pour le branchement du gripper sur la ramps 1.4


In the arduino code you will find:





All other pin definitions are also in the pinout.h file


Une question, peut on utiliser votre magnifique bras comme plotter ou imprimante 3d


Bonjour Gil

My french is not good enough to answer that correctly :)

I think it is possible to use the arm as a 3D printer. I don't recommend it. From my side there is no support for that kind of usage. In my opinion it is not stable enough. Your print quality most likely suffers.

As a plotter with a pen it should work fine. If you draw round courves it might be slow.

The firmware I provide has XYZ inverse kinematics built in. That means you can draw in Cartesian coordinates. If you use a different firmware It might not have that.

There is a support group on facebook with a number of people working on different variations.
feel free to join and seek support. humans helping humans.


hello. for those who have successfully made a clone and having fun with it, I have written a python voice control programme to use my voice to move it around dynamically. Here is the source code:


you may reach me via fb.com/20sffactory if any guidance is needed and also see some demo on there.

thanks :)

Hello Ftobler, I have some problems with the stepper motors for Rotation, Lower and Higher. When I send the command to raise/lower the X, Y and Z axis, only the stepper motor which you labeled in your photo as "Higher" moves up or down. Did you make any changes in the wiring of the ramps 1.4 board or do you know how I can solve this? Thanks

Thingiverse is a little unstable to sustain meaningful discussions...

There is a support group on facebook with a number of people working on different variations of ftobler's arm.
feel free to join and seek support. humans helping humans.


Very useful project indeed... I'm a student and know programming a little bit. I have completed this robot assembly. Now it is ready to work. I added electric limit switches on the robot (as the guy done in this remix : https://www.thingiverse.com/thing:2040526). I want to home the robot on boot. How can I add this functionality in your given code? Thanks

RobotArm by FrN

Hello Ftobler, I would like to sincerely thank you for sharing the design and the firmware. I built a clone and am now running a separate program to control the arm with voice control. It is a lot of fun to test out ideas based on your work. Thank you.

I am sharing the tests that I run on your robot arm on my fb page, in case you are interested.

thank you once again.

would you like to attach a connection plan for the stepper motors? I have problems with the engines.

The motors make loud noises when responding.

the small engine, I do not know how to connect

möchtest du eventuell einen anschlussplan für die schrittmotoren beifügen? habe probleme mit den motoren.

Die motoren machen laute geräusche beim ansprechen.

der kleine motor weis ich nicht wie man anschließt


Hallo Gary

Go to Github, look into robotArm.ino and pinout.h.
In the ino file you can see which stepper is connected where on the ramps. In the pinout file you will find the pins for the gripper. Of course you can customize the pin layout.
If your steppers sound like steamhammers, check your microstepping. Set the jumpers to 16x. There is a low chance you have monopolar stepper motors, they dont work with these pololu drivers. Monopolar steppers have 6 wires.

I appreciate your bilangual attempt, but lets keep the comment section in a way everyone can read.

hey there! Awesome project man! for real!
I've been having a little issue though. hope you can help me =/
when i use the software v3 or v2 (v1 just doesnt fully work), sometimes i run into problems where pressing one of the axis actually activates more than one motor..
video example: https://www.youtube.com/watch?v=z4HEj7OlTEI

written ex:

Press Y+
output: stepper Z and Stepper Y will move 20
press Y-
output:stepper Z and Stepper Y will move -20

Any idea what could be causing it?

Hi, how do you know the initial position of the arm for inverse kinematics with steppers ?

look at the drawings, they are given in endstop position. Hold the robot in position by hand. with the steppers still off, drive the robot to the position and then lock the position in by turning on the steppers.

Hi ftobler,

Awesome robot arm! I wish I could use only the usual 'roller-skate' bearings :) I've got a bunch of them, so I guess I'll have to remix your designs a bit - any help with that?. I want to put there a hot end instead of the claw with a gimbal! Also was wandering if I could use the 28BYJ motors instead of Nema17 on the sides somehow.....eh so many questions and ideas - I think It would be cool to have something like a 'facebook communitiy/fan' page all about your RobotArm for makers( sharing solutions and ideas etc.)

Best makes, hope for help!

Nice work I'll like to know if you used SolidWorks to realize this proyect. If it's so I'd like to know if you could facilitate those files to me. My email is darwin.luque.98@gmail.com. Thank you, Greetings

nice work and used popular good softwares easy use, but ewerybody need have nema 23 motors and end stop home points, when you come new model were have strong good motors and zero home point ? then arm have alltime same place then start and move have stabile right ewerytime. i stay wait you new plan at body at nema 23 motors.

I have a problem when I move the robot using the software.
When it is connected, I'm only able to do 3-4 moves and after that, nothing...
I need to close the software and connect it again, but the same thing happens.
Do you have an idea on what could go wrong?
I've tried some moves with Repetier and Marlin firmware and it is OK.

Thank you (and it is a very nice project )

I have the same problem too, and I can not solve it

Please use the Arduino mega 2560 with ch340 chip.

Hello, I finally have it all built and now im onto what I thought would be the easy part, the electronics.

I have an arduino mega with RAMPS 1.4+drivers, a 12v 360W PSU, and everything hooked up. But I have no idea how to control this thing.

I found my COm number in device manager, I try to connect to it, says COM open, and im connected I guess. But pressing the buttons does nothing, and the log is not updating.

I tried using repetier host. I was able to connect, but all I got was no start command, forcing start. I Lowered the baudrate to 9600 (as low as repetier goes) and now it connects, but all I get is a dozen or two "rs" in the log. Looking through the code, it appears this means theres an unknown command sent.

What do I do? I want to use your software, not repetier host. In your software, my log is only

log: M18
log: G1 X0 Y120 Z120
log: M17
log: G1 X-20 Y120 Z120
log: G1 X-20 Y100 Z120
log: G1 X-20 Y100 Z140
log: M17
log: G1 X-20 Y80 Z140
log: G1 X-40 Y80 Z140
log: G1 X-40 Y80 Z160
rx: start

Then nothing, when pressing buttons or manual commands. Thanks

Hi first of all, congratulations for carrying out a project as complex as this, if you can help me, I did not understand the command very well
void RampsStepper :: stepRelative (int value)
value + = stepperStepPosition;
stepToPosition (value);

this command sets the new target position relative to the value the stepper currently is. E.g: the stepper motor is at position 1000 you step -10 steps relative, you end up at 990. These 990 only represent the actual new target for the stepper, it has not acutally rotated yet. If you want your stepper to rotate, you have to call update(). Update sends out 10 pulses to the driver, which makes the motor turn al little bit. The pulses are sent out really fast, so your stepper probably can't keep up on larger numbers. So just setting a value does not work.

The way it is used in the project is by using a function, which creates a smooth transition from position A to B using time as a parameter. In a background loop the new position is set constantly and update() takes care of sending it out to the hardware.

The standard transition function used is basically half a cosine wave.

Whats the difference between base + base w/ hole? Other than the hole? Whats the hole for?

Also, how much can the robot lift?

The hole is for accessing the screw for the rotation.
Depends on the rating of your motors and the point you are measuring from. You should find a value on your datasheet which goes like Force*Distance. If you increase the distance the force goes lower.

Thank you, also what is the purpose of the two M3 holes on the triplate? they dont appear to serve a purpose. Was there originally another attatchment meant to connect there? or maybe to hold the adapter board for the gripper's stepper motor?

Hello! Guys, i want to use an arduino uno, so i cant use ramps... can i use another shield, like cnc shield, to control the steppers?

Sure but its going to have to support 12v, four steppers and youll have to modify the code (pinouts more specifically)

I printed the robot arm and have everything assembled. The gripper part is drooping down. I think that the linkage is too long... Has anyone else had this issue and if so is there something I can do to fix it?

Comments deleted.

Do you have any Vaccuum Gripper?

you know what would be cool is if you were to make it sturdier you make it in to a 3d printer :O and have a second one to remove the print i know there a kickerstarter for something like but its so expensive and if this arm could do it then that be awesome


Hello, I find this page is so wonderful! I was so interested that I wanna try to follow your robot arm step by step based on what sources you provided us with. However, Unfortunately, I couldn't work it out...So I hope I would get some advice from makers here. I have used an Arduino mega 2560 and Ramps v1.4. And then I tried to operate what I made(see the pic of them) via Repetier..there is no reaction whenever I gave any signal to it. So, if possible, please let me progress my own work.

hello heung
Same problem as you.
For the moment i have installed the marlin firmware (Marlin-1.1.x) with arduino software. If you test with pronterface ( com :250000), you will see that it works , you can move the differents stepper motor.

Good morning to you, paulo64fr. I tried to solve what I had faced based on what you had told me on the comment.
But regretfully, I couldn't work what I made out.. I don't know why...I am being confused now..Let you know what I did for my work

1 . Download the source file provided from this page. ( https://github.com/ftobler/robotArm/ )
2 . Install the source code with my Arduino board after correcting the serial baud to 250000 as you said ( see Fig. 1 )
3 . Open Pronterface and click the button, Connect. ( see Fig. 2 )

I can't operate them and there is no reaction.. I am concerned about what steps I took. Could you help me more?
Last but not least, from what you said, What is the marlin firmware you used for your work? Would I learn your specific way of installing it with Arduino software ? I hope to meet you again here. Thanks for your consideration.

Hello heung
I am going to try to explain you what I made the first time, it's not so easy the first time to understand.
I think that if you want to be sure that your mega Arduino 2560 and ramp v1.4 work together, you have to install another firmware, for example that one http://github.com/MarlinFirmware/Marlin.
It is the generic driver marlin. After that you try to connect your card with pronterface. Normally it works. And you can test your stepper motor
Hold I can help you

As soon as I saw what you had commented, I tried. In comparison to what firmware we downloaded like Marlin 1.1.0RC3, I found that it did not work out. I just downloaded what the address you gave me. And I compiled it and it failed..So I am trying to find which one is wrong.
This figure is what I saw after compiling it. Thanks for your sincere answer :)

paulo64fr, Thanks !! I made a mistake of having connect to the board. Anyway, it was successful to operate it based on what source you had provided me with. I am so glad to work it well. So, what is the next step for me to accomplish what you would give me later? Thank you for your consideration, here is what I finally did !! :) --> https://www.youtube.com/watch?v=6Ct91PJZqGc

Comments deleted.

Thanks, paulo64fr. I am so glad to hear how to solve it.
Let me try what you recommend on coming weekdays.
Actually, what I have made is in my office.

The gripper has a metal linkage that connects the center circular part to the gripper fingers. How has everyone made it?

1mm steel wire.

hi, i from Mexico, i need know because my step motors, turn for one place, and how generate a secuency or move to manually

sorry, i don't see file doc2.pdf , where i can download it, please!

How does the Small gear securely attach to the shaft of the Stepper Motors?

Figured out. I had a M3 tap. I used that to make threads in the small gear.


When i try to compile show the error message: "In file included from /home/jaelson/Downloads/robotArm-master/Arduino/robotArm/robotArm.ino:3:0:
sketch/interpolation.h:4:21: fatal error: arduino.h: No such file or directory

include "arduino.h".

Any solution?


Jaelson Lima

On Windows it works fine, on Linux it semms not... Didn't know that.
Please try on Windows for now.

Thank You!

I have compiled on Win7 and is OK.

Is it possible for you to share the CAD files?

Thank You

There is a Zip Archive including some step files. Please use this.

Hi Ftobler,

First of all, thanks for you fantastic design!
I'm quite far with building my own RobotArm but I have some questions. Would you like to help me with it?
What sort of power supply did you use. I saw in the description you used a 12v power source from an old laptop.
Did you used it just for powering the ramps? And how many amps provides your power supply?

Further I'm a bit struggling with getting the firmware on the arduino mega. The arduino doesn't show up in the Arduino IDE. Is that because the 12v power supply isn't attached? Or do I have a different problem? It's my first real arduino project and I'm learning a lot! But on the electronics part I'm still a bit of a noob.

Thanks in advance!

a 12V power supply with about 2A or more should do fine. It all depends on which motors you use. I sometimes also take an old ATX power supply from a Computer. The 12V only power the ramps.

The Arduino should be fully powered over USB. Arduino has to be plugged in to a separate 5V supply, in my case it's my computer. Arduino should light up independently of the 12V. If you plug USB in and the Power LED is out, then he is most likely dead.

Thnx for your help!
I've been able to get the arduino alive. It was something with a driver for my pc...
The arm is almost done, the only thing I'm waiting for are the flanged bearings. You will see the result when it's done!

We are Dongsan High School in Incheon, Korea.
We were also experiencing problems that many users face.
An error has occurred when I use it for awhile.
(Issues such as causing logs to occur, such as rx : k)
But we solved the problem by accident.
It might be a solution that could not be applied to everyone, but our solution was too simple.
It was just changing the Arduino board.
We use Arduino mega 2560, and we switch to a board using the ch340 chip, and it works perfectly.
I hope others solve the problem in this way.
Thank you very much. ftobler and devil502.

Thank you very much for that solution! Its now working without any issues. For everyone with the same communication problem: just buy a cheap arduino mega clone with the ch340 chip, download the drivers for the chip and it should work!

Hi, First, thank you very much for your design it is a very nice robotic arm. I just have a question, where is the assembly manual? when I finish to assembly that robotic arm I going use for representing a assembly line with color sensor.Thanks.

Sry, there is no further manual.

'm having a problem where the arm stops responding - it seems that the serial connection is dropping about. When I run robotArm.exe or send GCode via Arduino Serial monitor I encounter this issue. After a certain number of commands (or time, not sure which yet) e.g. 5~10 Clicks on robotArm.exe or the equivalent GCode the system stops responding completely. Sometime the Log reports rx: k when this happens.

I've tried on multiple computers now and had the same problem. I've tried software_v2 as well as v1 with the same results.

I feel it's some problem with the serial communication but don't have much experience in that area. Do you have any thoughts or suggestions on this?

Please Help Please Help Please Help

I also have the same problem

I've made this robot arm, but I'm having the same problem with you.
Did you solve this problem?
I haven't solved it yet and I just look forward to it.
I just want someone to come up with a solution to this problem.
Or I just want you to create another program that can move this arm.
Then good bye.


hello, how did you move the 28byj-48 motor with the marlin program?

I gave up the designer's original program and switched to another program and an upper computer to control it

Did you succeed in controlling the robot arm with another program?
Excuse me, but can you tell me the program you use?

The program I'm using is Marlin

I have the same problem but i dont know how edit the marlin firmware for my gripper(that is to say 28byj-48 motor),can you share the code you have used, please :) thank

I don't know what is causing that issue, but I'm aware of its existance. Try using a plain Serial Console like PUTTY or the one in Arduino

I am sorry to have no knowledge of programming or software.
Can you tell me how to use a serial console or a command to move this arm?
Then good bye.

This is a nice design. I'm using MEGA2560+ramps1.4

When the robot is assembled, the program cannot be written. Can you give me the firmware for the full board?

mailbox:562323462@qq.com Thank you

I'm trying to develope my own software; need to calcuate steps of motors according to X,Y,Z axises. I mean, robot is in a 3d space. so when I send G1 X2Y3Z4 I want it to go 2-3-4 milimeters in that axis. In robotgeometry.cpp you already gave some mathematics, As I understood, Its a function that generates radian degrees of motors from axis movements in mm. Am I right? In calculation, is home position all zero?
When I convert radians to degrees and visualize on C# its movements doesnt make sense.

Please Help

Look into robotGeometry.pdf, there is everything you need.

The Zero Point is in the Robots Main Axies, So you can't get there. Try Z120 Y120 X0, which is straight up and horizontal.

Comments deleted.

Could you please help me about installing to software in arduino? When I try to install it ( I plug to pc and using arduino and trying to install which files in robotarm.) Then I got some failed about COM, So I need your help about software step

go to Tools >> Port and select your com port. If there are multiple, disconnect the arduino and look for the port, which does the same.

Okay. Thank you for your reply. I will try to like you said asap.

can u upload (main) turntable gear with tolerancy -0.01 and -0.05 and -0.10 because 0.01 isnt enough for me, i still feel gap

Sry, didn't saw the notification. will upload asap.
Edit: Uploaded them

Hi ftobler,
Is it possible to use MKS Gen V1.4 Control Motherboard ? or I must to buy Arduino Mega and RAMPS 1.4 for this RobotArm project?
Thank you.

I don't know. It claims to be compatible with all ramps firmware, so I guess you should try it.

I just would like to ask but how much do the components cost in USD

Without screws and some other minor stuff, you can get everything off ebay for about 60$.
You may have to buy other stuff like a fan, cable sleeve, some pin headers, utility Wiire, a USB cable, cable ties..

hope this helps.

Hi ftobler,

I'm having a problem where the arm stops responding - it seems that the serial connection is dropping about. When I run robotArm.exe or send GCode via Arduino Serial monitor I encounter this issue. After a certain number of commands (or time, not sure which yet) e.g. 5~10 Clicks on robotArm.exe or the equivalent GCode the system stops responding completely. Sometime the Log reports rx: k when this happens.

I've tried on multiple computers now and had the same problem. I've tried software_v2 as well as v1 with the same results.

I feel it's some problem with the serial communication but don't have much experience in that area. Do you have any thoughts or suggestions on this?

You are not alone with this error. Other are reporting it as well and I still don't know a solution.

After every command you send the robot must answer with an "ok". If not, something with the communication is not working properly.

I once had similar problems with a ramps/arduino conroller. I solved or or minimized a communication problem usind a few of ferrite beads at the usb and power lines. But no guarantee on that.

I changed the baud rate on the serial monitor and in the robotArm.ino setup() function down to 1200. It no longer freezes! However the robotArm.exe not longer works ... I guess you have programmed the baud rate somewhere in there? Would it be a simple matter of altering some line in the delphi code to change this?

Yes, I will make that change. And I also move everything to github.

Has anyone ideas of programs who control this arm? how do you make the programm to grab thnings and put it elsewehere?
The memory available on the arduino mega is not big to save big scetches..

I am using GRBL + UGCS but you can to use MARLIN + REPETIER or PRONTERFACE too.

Some ideas:

  • Turntable gear has bigger diameter and then smaler in the air , the trick is doing it without support is one layer (max 0.25mm) betwen them (bigger and smaller hole) after print u can cut it by knife, without it u have waste in the ohe and some layers fall down

  • The second big thing is: u have many gears with different tolerance , why ? it would be better make mount holes for motor with slot holes and adjusting motor position for perfect contacts gears and no pritn many gears and test it if is good or not

Have a nice day

Hello Florin,

First of all, thanks for making this great design. I have a question for you about the cooling fan that is mounted inside the Arduino case. Can you please tell me what type of fan you used. Hopefully even where to buy it . There is no information in the part list.

There is no mention, because I don't know the origin of that fan nor where to buy it.
The holes are 39mm apart and is about 11mm tall. That's all I know

Any chance that you have this sized for a NEMA 24 stepper? I already have a few on hand and would save me some money.

No, only Nema 17, sry.

Comments deleted.

Hi Ftobler, I'm trying to change the acceleration/deceleration value. Can you give me some suggestion?

use F in Gcode Commands.

ok i have buyed 6 endstops and will try out to edit your STL files to attach them, I have written a code with arduino who let mi control over bluetooth all 3 stepper with attached 6 enstops and it works quite well.
Now i am trying to find some software like Marlin or Sprinter to modify and use your arm to laser encrafer..
Did you have tryed any Pc software who could be editet to accomplished such task?

Sry, I don't have a recommedation.

Ok thx..have nice day

How many Endstops you using? i have buyed 6 of them for each stepper 2 , how to handle the gripper withoud endstoper?

I didn't use any endstops, so you have to plan that by yourself. The Only Thing I have is a mechanical (hard) endstop.
to "home" the gripper, I just close it. It's the same thing as applying clamping force to grab something.

hello , where is doc2.pdf

How have you put the jumpers on the ramps 1.4 board?
for your code i diddnt find out which you used in your case.

I used 1/16th microstepping. you will find guides in the web for your jumpers.

for A4988 drivers:
jumper Yes/No step size
1 2 3
no no no full step
yes no no half step
no yes no 1/4 step
yes yes no 1/8 step
no no yes 1/16 step
yes no yes 1/32 step
no yes yes 1/64 step
yes yes yes 1/128 step
from: http://reprap.org/wiki/RAMPS_1.4

thx alot but for A4988 wich i have the jkumpers need to be set "yes yes yes" like shown here if i am right?

Try it out, a wrong setting doesn't damage anything. just the motor speed is wrong which screws up kinematic formulas.

Good to know! The software stops after second or third commznd....
Maybe because my powersupply wich is 4x18650 akkus and 12v voltage regulator.
Getting my powersupply in gew weeks.

I have another question... are the nema17 stepper able for feedback to teach themovements by pulling the arm by hand?

No, they can't do that. At least not with a ramps or other normal drivers. But I guess it would be technically possiblel

Hi ftobler
i am wondering how did you protect the moving parts from exeting?
i read in the prvious post about a mechanical endstop. how much u use and where did u put them?
thx so far, realy like your thing !

Print the part stabilizer_endstop.stl. It is mounted behind the arm on the base.

Hey ftobler.

I almost up and runing with my robot.
But i am confused about the wiring for the stepmotors.
On your picture for wiring for stepmotors is in this order: Red,Green,Blue,Black
On an example it is in this order;Green,Red,Blue,Black http://www.geeetech.com/wiki/images/1/1d/Ramps_c_setting.jpg
With one is should i follow ?

An then a quisten about mainpower. Should the Arduino board printbord and RAMPS 1.4 have 12 volts mainpower connected in same time? Or only 12 volts in RAMPS 1.4 board ?
Will 12 volts connected only to the RAMPS 1.4 give power for Arduino board...

Hobe somebody have a wiring diagram for the robot.

Best Regards

Sebastian Trosborg

If you flip the connector, the direction of the motor should just reverse.

Ramps needs power for the motors, it self does not power the arduino. The arduino becomes power from your computer over usb. As far as I know the arduino has a schottky diode to protect the weaker source in case you have more of them connected, so I guess connecting the arduino to a additional power source should not lead to a short cirquit. But since it is a risk and totally redundant I recommend not connecting it.

Hi, nice job .
I'm building my own with your design.
Can you tell me if you glued the bearings ? With which kind of glue ?
How do you attached the main vertical axe ? Diameter of the he shaft used ?

Thanks in advance,


The shaft is a M6 (6mm) Threaded Rod. There is a list at the end of the Description.

I think I used superglue to glue the bearings in place, but I am not sure of that.

First of all, Thank you for making such an interesting project and intelegente, congratulations!
I'm trying to do the same progeto then change it, but are blocato, and already assembled the compartment cards, but when Facio some movement with his programa, both with vechi version as the new version, if it sees that the engines lose power and stop on programa me a rx message: k
You know what needs to be?
Thanks again !

I don't know the reason for that. Try it on another computer and also try to use a plain Serial console like Putty or the one in ArduinoIDE. You should be able to enter the G-codes directly. There is a table in the description.

I again have problems = (Help please if it is not difficult. Maybe you will consult me ​​in personal communication? My post prizrak_62@mail.ru The essence of the problem : As I understand it, you use an angular coordinate system, but I do not understand how the direction vectors are located .One of the directions does not work, it does not work that I connect to X on the Ramps board 1.4 I do not understand what it's connected with. What connectors do you use It seems to me that this one does not have adequate behavior on the commands from the computer, but I most likely do not understand it.I ask for personal consultations.Please write to the post office and there we will agree how it will be more convenient for us to communicate.I would be very grateful to your answer and assistance. Thank you.

I will write you a personal message here on thingiverse.

Hey. I collected a model of your robot. But I have problems with the firmware. During the firmware displays an error and writes
Exit status 1
'SetStepperEnable' was not declared in this scope

Just selects a line - setStepperEnable(false);

Help me please. In programming, I'm not at all selenium = (

Hi Phermer

Can you tell me which version of Arduino IDE you are using? Also there should be multiple tabs open, not just robotArm.ino. Because I wrote it some time ago, it is not the first time somehing changed and all of a sudden it does no longer compile correctly. Just tested it, compiles on 1.8.1 for me.

Regards, Florin

Thank you. The firmware is working. Since the hardware part is not right now = D

ftobler Great job, the software v2 loses connection to the port.
I am running in windows 10

Do you know the error?

Thank you.

Grateful for the shared project. Could you tell me which firmware you are using? thank you.

my Own. Take a look at the downloads.

and teeth gear of base (rotation around z axis ) seems need support because center hole change diameter to smaller , or best way is made one layer fill (0.25 or 0.2 mm thickness) as suport for small diameter which will be cut by knife (no slic3r suport needed)

I printet without any support.

I have a question
some screws are screwed directly on to plastics ?


I used PLA, it works fine. I don't know how it performs in other materials

thi is excelent design at first
is there some assembly plan ? where put which ballbearing / screw etc...
and endstops may be hall sensors and magnets
i sucessfully used it in my cnc laser engraver with ramps , u can use it directly , but must enable internal pullup (in arduino) and it works perfectly , U can attach magnet and hall sensor with superglue directly to PLA part

Sorry, there is no such guide. Try using the pictures and the animation video. You can always ask for another detail picture or information.

I have not used endstops at all, but your Idea with hall sensors and those magnets is interesting. The only thing I used is a hard mechanical endstop.

This is excellent! Thanks for putting it up here for us. I was watching the YouTube video and I noticed that the motion is not always smooth. Sometimes it jerks a little. Do you know the source of this, and how to fix it? Is it inherent to the design, or could it be fixed with different bearings, tighter gear meshing, timing belt, or something like that? I have no experience building articulated robots like this (only linear delta robots) so it's a mystery to me. Again, thank you!

My Rotation Motor is not the best. You might have noticed the color and size difference. In Addition to that, it's the only axies that is not preloaded, so any gear play causes troubles there.

The robot arm is very lightweight and I used a high movement speed. The speed peeks on large moves quite a bit in the middle, which hits some resonance points.

Maybe you could try some belt drives. I once designed the large pulleys for that, you can find the stl's on Tunnelplans or Edvard_hs remixes. I have never actually printed or tested them. You also need a adapted base and socket.

The other addition
the robot arm doesn't move linearly
ther is some area (small) where the robot is more or less linear
outside this area the robot draw some curves (in all the dimensions)
Thanks for your help

When you move the robot in 'home' position, meaning X0 Y120 Z120 it should be straight up and horizontal.
There might be small position errors, such as less linear courves, but they should be small and therefore tolearable.

Hi Florin
if you can advice me with my problem
If I move the robot in your software for example in direction Back and Forth, the robot arm moves Up and Down as well.
Meantime both axis (high and low) are working in the same time, but like not sinchronized.
Is it right ? if not what can be a reason?

The two most likely reasons are:

  • The two steppers are flipped, or they simply turn in wrong directions.
  • The Software does not know the positioning and interpolates them wrong.

It is intended that multiple steppers are turning on most moves simultaneously in kind of an non-linear way.

Another question about the gripper stepper.
Can you detail the wiring of this stepper on the RAMPS please ?

Thanks and thank you again for that great job !

Thank you for sharing this great job !
I don't see any indication / picture about endstops for homing.

How do you manage them (wiring on RAMPS ? Physically positionning ?).
And I don't even see homing command in the arduino software.

Could you please detail ?

Thanks !!

there is only a mechanical endstop.

The 28byj-48 pins are on the ramps AUX-1 connector. Pin 40, 59, 63 & 64.

Hi folk,
I am testing the arm and found that the gripper on/off button cause the stepper motor to rotate in the SAME direction.
Is that correct?

Certainly not. Try playing around with the wiring. There are 24 combinations you can get in total, most of them just vibrate a bit. Didnt know there is a single rotation combination.

Yes, bingo. I make it after a few trials. Thanks guy.

Your design is very good. You are strong in both.electronic and mechanical aspect. Have u got a A, distinction, in this project?

Do you use whatapps?

I once was courious getting more messages than usual. Found out that it has been maked as a 'Verified Thing'. I am a electrical engineering student. If you want to get in touch with me, write me a personal message.


First of all, nice job, awesome project!

I managed to put everything together, I run the software, X axis rotates ok, the other to axes are all over the place.

If I try to go from the endstop position to G1 X0 Y0 Z0 it goes up and forwards for a while then in starts skipping steps and drop the a whole different position.
If I go from endstop position to G1 X0 Y120 Z150 it goes down as intended and back up if I give Z120
But if I move to G1 X0 Y20 Z120 and then do the same moving the Z from 120 to 150 it doesn't go up and down it also goes slightly backward going down and slightly forward going up. Any idea on what's wrong?

PS: Are you Romanian?

X0 Y0 Z0 is inside the robot, so a bad idea.
Not sure what exactly goes wrong, probably some stepper wiring, so they turn in opposite directions.
The Position X0 Y120 Z120 is Straight up and Horizontal. Another Important one is X0 Y120 Z0, in which the height should be around equal to the center of the Big Gears.

PS: No, swiss.

Thanks for the reply, only now I had time to play with the arm.

I managed to get the arm to go from Endstop position to Home position (straight up and horizontal) and then to Bottom position, so I'm pretty sure I have those 2 axes right.

But now for some reason, when I change the X axis to rotate, the higher engine also moves, any ideas?

PS: Florin is a common Romanian name, that's why I asked :D

That is intentional. More accurately every motor moves. That is because the robot extends out while rotating. You only changed X, so you have to adjust Y to have the same radius. In other words, the gripper follows a tangential line around the center.

This animation might explain it better:

Yes, that makes sense :D thanks for the fast reply! I will add my print to the "I made one" section

have some one an complete bill of materials. I need details for the screws because i have to order them online.

There is a list named Nuts and Bolts at the bottom of the description, which provides some details.

Can u share your inverse kinematics equation? Have looked a bit thourgh the libs and arduino code, but havent had any luck yet.. Would be cool if you just could share it ;)

have a look at the very button of the file robotGeometry.cpp

Had a look on it, and are having a hard time understanding the rrot and rside? What is the purpose of this?

Sorry for begin newbish.

both of these calculations use the Formula of Pythagoras:
rrot calculates the distance of the effector from the center, so It is just the radius from top view.
rside is practically the same from the side, but it uses rrot as parameter, so Its result is independent from the actual rotation of the robot. The resulting radius is the distance from center to the effector, like in a rotation independent side view.

I think it's hard to describe this kind of geometric problem without a drawing, so tell me If you need one :)


Hm yea makes a little more sense now. But it would be very nice to get a drawing, to get a better understanding of it.
Many thanks! :)

Sry, took me a few days, until I got time. Added robotGeometry.pdf

Comments deleted.

Biiig thank u!

Hi, the firmware runs, but the software does not perform any movement, what could be wrong? Thank you.

I uploaded a new softwareversion, which includes a bugfix that could solve your problem. Basically some boards just have a bigger bootloader delay and miss part of the data, which results in a desinc.
Let me know if that worked for you.

Hi Florin. This is an excellent project, nicely done! I'm trying to run everything on an Arduino Uno, which is generally working, but I am seeing the desync you mentioned after a few seconds of running using software v2. Please let me know if you have a fix or if the Uno bootloader delay is simply too high.

@savery2, I don't have a uno, but on a nano, which has the same processor and it works fine and without desyncs. I already have an similar report where something like "rx: k" is logged.

Try sending the gcodes manual over a serial console like the one built in arduino. Use Carriage return.

Hi Florin, I keep seeing the desync problem, and I have so far tested two different Unos and a Mega (https://www.amazon.com/OSOYOO-MEGA2560-Control-ATMEGA2560-16AU-Compatible/dp/B00PD92EJ8/ref=cm_cr_arp_d_product_top?ie=UTF8). I was able to get rid of the desync by using a Teensy 3.2, but my board is a little messed up. Do you have any suggestions for getting rid of this problem? Or do you know what parts of the code I should change to modify any timeouts?

I am not sure about this, but you might be able to solve it using some Ferrite Cores on the Power supply Line and the USB cable. Other than that try using a laptop running on battery, so the only ground connection is over usb to the arduino.

Hi, it worked now, but I have 3 new stories.

1 The X and Z buttons are reversed, when I activate X the Z moves, the reverse also happens.

2 The movements are also limited, I can only move a few steps, after some movements do not move anymore, I need to hang up and connect again.

3 When moving the X, the Y moves along and with Z there is also interference in the movements of other engines.

@FilipeNeves, Sry the coordinate thing is proven to make some confusion.... For the ramps use: rotate=Z, lower=Y, higher=x. In case your steppers still turn in the wrong direction you can correct that in the wiring or edit the code and at line 53..55. Set a negative value for the particular stepper. It doesn't matter if you give a negative reduction ratio OR a negative steps per rev value. Just not both.

Also your firmware might not be aware of the physical position of the robot.

  • Power steppers down
  • Blindly move to endstop position
  • Move robot physically to endstop position and hold it there
  • Power steppers up again
  • Home position should now be straight up and horizontal

Today I finish the arm, and I have a problem with normal work.
Which engine is lower and which is higher?
The motor driving lowerShank is lower or higher?

the motor driving lowerShank is of course lower,

Ok, I'll make the adjustments to give feedback, thank you.

Thank you for this project. I have the whole thing built. Does the 28BYJ-48 need to be made bipolar? How does the it's driver connect to the ramps board?


The 28byj-48 pins are on the ramps AUX-1 connector. Pin 40, 59, 63 & 64.
The stepper itself is unipolar. and the driver board i used makes advantage of that. So the center of the coils is connected to gnd, while only one half is active.

I know it's asking a lot. Could you post a picture of your control box with everything connected?

uploaded a picture

Perfect. Thank you! I'll post a video when I get mine going.

when i go to upload a the files onto the board i keep getting fatal error and files cant be found. How can i resolve this?


move the files back in your sketch folder. Anyway arduino has changed something and i have to reupload the software at some point. If you get further errors and I remember right, you have to delete that error comment line which gets an error.

i moved them back and started to delete the code lines but now im basically deleting a lot of the code

For me, it now works with the newest version 1.6.12 without changes. Make sure you compile for Mega 2560.


Awesome design! I haven't been able to successfully get the supplied drivers and software working. I've ruled out any hardware issues by testing it with some simple sample code. I may have missed something in the programming process... I'm a bit of a noob.
I have just uploaded the supplied arduino firmware, and tried to run the delphi program. Any suggestions?
Thanks in advance for your help!


Hi Jacob. Can you write me a personal message with a bit more detail of what is working and what's not?

Hi, is there any scheme of connections to the ramps plate engines?

Rotation: Z
Lower: Y
Higher: X

What about the 28BYJ-48?

On the AUX-1 connector. Pin 40, 59, 63 & 64.

Hi, i did some reverse engineering on your inverse kinematics formula, and i think there's some error on your code :

high = acos((rside x 0.5) / 120.0) x 2.0;

should be

high = PI - 2.0 x acos((rside x 0.5) / 120.0) x 2.0

--just my 2 cent

pict : http://prntscr.com/cq2a7g
spreadsheet : https://docs.google.com/spreadsheets/d/1gfBSeQA2WDluc2JnoTfXELMQb2FrbmDfFHJOrWWFGjk/edit?usp=sharing

Both calculations are equally correct, mine is a slight bit simpler. comparing both ways, your Motor will turn in the reverse direction and it will turn 180 degrees offset. Both of these things do not really matter, because the motor Angle is always relative to a given starting point and the direction is depending on how you wire it.

Is it possible to share 3d files ? I want to change some places. It's not useable when convert stl's to solidworks files.

Hi, look for "step.zip"

I'm really glad. Thank You so much.

Why have I run out of Flang Bearings? I Order 10
2 - Base to socket
2 - Lower Shank
1 - Lever
1 - First Large Gear
1 - Second Large Gear
1 - Triplate

That leaves just 2 left, but the Upper Shank looks like it needs 4!

If I take off the Flang Bearings from the Large Gears, as the animation appears to suggest, that makes those assemblies supper sloppy.

Base to socket: Use 1 bearing and a washer.

Lower Shank: Do not use 2 bearings, because that is bolted to the Large Gear, which has a bearing.

For the both Pleuels, the 624zz bears are to be used at both ends? Is this true for all upper arm joints? And what holds these bearings in place? Large washers, friction ??

The 3 pleuels have 2 non flanged bearings each. Use a bit of glue if friction is not enough.

The washer and the bolt head is only allowed to touch the inner race. So the washers need to be small. They do not hold the bearing in the pleuel.

How does the Base stay on the Socket with the Thrust Bearing? I'm I supposed to use 2 F686zz Flanged Bearings and a M6 Rod to tie the two together?
And the F686zz Flanged Bearings have a 6mm hole, but no M6 bolts or rods are specified? What do I use? Seems using anything smaller would result in a lot of slop.
And what is the 3mm hole in the Socket and Gear Rotate for? There are no holes in the Thrust Bearing...

Figured out the Socket/ThrustBearding/GearRotate/Base assembly: Requires M6x20
And I see you added a Nuts and Bolts list, but there is already an error in it:
The M6x80 Threaded Rod, I assume goes at the top of the Base. But that hole is WAY too small for an M6 rod. You might be able to force an M5 into it, but then you'd have a lot of slop with the F686zz Flanged Bearings. Maybe supposed to use the 624zz bearings with an M5 Threaded Rod, not an M6???

If it does really require an M6 rod, the only ways to rectifiy this is to either drill out holes in top of the Base or Post and NEW Base with the correct sized holes.

The rotor with the Thrust Bearing has a bolt. It's listed as a M6x45mm, it is too long. But that is what I used.

The M6 Horizontal rod is the one the two large gears go onto. It is the only rod I used. On the video with the Animation on 0:36 you can see Flanged Bearings. Make sure you drill out and or Tap the holes on the base to fit M6 through it.

I designed the holes for the rod 5mm. That is the correct core drill diameter for M6. I normally tap large threads like M6, but on the small ones the heat friction melts the thread in the PLA. If nessecary you have to drill out the holes a screw goes through.

I tried getting an M6 threaded rod through that hole in the top of the base. No can do. So I will drill it out.
Thanks for the quick reply.

It would be really nice if you at least gave the lengths needed for each Mx bolt size. I just bought dozens of 'various' lengths of M3, M4, M5 bolts, nuts and washers (mailorder because there is NO local store here). And now just starting to assemgly the base I've discovered I didn't buy any M4x10 bolts!
Very Frustrating - especially considering shipping is more than the cost of the hardware...
Ugh. Now discovered I at least 4 M3x8 for the Nema17 mounts. Maybe need 12, but won't know until I get that far, eventually, without a parts list.

Set Screws!
Gonna need 6 M3x Set Screws (5-7mm). Not mentioned anywhere in the PDF or Description.
Mail order means I have to buy 50 at a time. Ugh
It's like a Scavenger Hunt...

Why didn't you ask in the first place?
You don't need set screws. Use normal M3x8mm for that. The base.stl already has enough clearance and new you will find a socket_clearanceWoSetScrew.stl which allows the use for the normal screws.

For the Nema17 Motors will you need M3x6mm

So there is a parts list with the lengths and quantity of bolts needed for this?
Where can I find that? 'Cause I still don't know what I need for the other two Nema17 mountings, the arm joints, the top gripper motor mounting, or the length of the M5 threaded rod...etc..

No there isn't. Have to make that first.

I added a 'Nuts and Bolts' section.

I'm unable to compile your firmware.
Getting following errors:

  • In function 'void executeCommand(Cmd)
  • warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  • printComment("parsing Error");

it is a warning, so it should compile. If not, simply delete that line.

Your "ingredients" list in the included PDF lists NEMA23 steppers, but everywhere else you seem to indicate NEMA17s. Which did you use in your arm?

Nema17. Thanks for asking.

Comments deleted.

Nice, no problem printing this parts.

Now I only need to wait for the bearings to arrive to finish the assembly.

Will use a MegaPi for control, will make a remix with a case for that controller board. (http://www.kreativadelar.se/shop/product/megapi---born-to-motion-control)

Very cool design.
How did you fixate the base on the socket/gearRotate?

I have added a picture in the description section. Search for "Base bearings detail view."

Basically I used 3 bearings. The large Thrust bearing, which takes the majority of the leverage forces, consists of loose parts, so It needs to be pressed together somehow. So I used two flanged bearings and a bolt for that. They fit on the gearRotate and the socket. I know one of the flanged bearings is a bit redundant. Do not overtight that bolt, you could damage the flanged bearings.

The base is mounted to the gearRotate with 4 M3x8mm screws. There is also place for 4 nuts which fit in the gearRotate. You have to assemble all the bearings and these 4 nuts before you are mounting the base.

If you prefer having a hole in your base to have access to the large bolt, let me know.

Thank you for your answer. I would very much like to have mount the bolt through the base, if you could make this possible it would be highly apriciated.

I have uploaded a new version of the base.

Thank you very much. I've already started assembling, and all bearings snaps perfectly firm into place very well made, sincere kudos.

Really like your design and very awesome sofware! But why didnt you use belts for driving the gears for more precision like http://www.thingiverse.com/thing:1204552 ?

3d print desktop robot arm(DARM)

Interesting Idea. I would see the need for that mainly at the z-Axis, because it's the only one that isn't under a constant preload.

Hi, is it possible to add limit switches to this arm? Or is there some way of homing currently? Thanks, this design looks awesome, can't wait to try it out when all my components get here!

for homing, there is the endstop. Hold your arm at the position and power up the stepper after that, then you are in a absolute position.

But there are issues. The Z-Axis doesn't have anything and the repeated accuracy isn't very great. Maybe microswitches would solve it.

Hello Florin,

It looks very good.
Is it possible to load a G-code from my 3D printer direct in your software programm?


Yes, but you have to convert a line like 'G1X5Y6' to something like 'G1 X5 Y6 Z70'. In Detail this means xyz must be present on every line and there has to be a space in between. But note, since it is a different application, some gcodes are also different.