Today I present my first Delta robot made with Arduino. The Delta robot structure was designed by a professor at the Technical University of Lausanne in 1985. It is a parallel robot, and within two decades has become the star of pick and place industrial robots . The delta robot distinctive elements are two:
- The robot geometry which simplifies the equations of motion (kinematics)
- The great idea to anchor the robot upside down so that it has the motors connected to the base. This is very important because while the robot works, the motors remain attached at the base, allowing the robot to have arms very light. Lightness means low friction, low inertia, low power motors, precision, speed, fast acceleration and deceleration.
These are two examples of delta robot:
These aren’t laboratory prototypes, but commercial robots and they cost about 50-60.000 euros. I tried to build a simple delta robot with Arduino. My Delta robot works like the commercial Delta robot, ie, in inverse kinematics. Given a point x, y, z in space, in real time Arduino calculates the angles of the servomotors that allow to reach that point in space.
The Delta robot has two triangular plates. A higher which is fixed and the lower is free. The servo motors are fixed to the top plate. The gripping tool (i.e. an electromagnet, a gripper, a vacuum suction cup), is fixed to the lower plate. The two plates are triangular equilateral, that is, equal sides and equal angles of 60 °.
The Delta has 3 servo motors and two arms for each servo. One is integral with the servo. The other arm is free to rotate in all directions and it is connected to the lower small triangle. In order to ensure the free turning, the second arm is linked with ball joints. To find the ball joints has not been easy. I found something about the steering of the machine model. Just search on google “joint Uniball” and you can find little cheap joints.
A very good explanation about the the Delta robot geometry and a very effective explanation of inverse and direct kinematics formulas can be found here . You can find also the code that calculates the inverse kinematic.
These are some Delta robot pictures (with an ATtiny85 microcontroller).
The end effector can be used with different tools. I tried a vacuum syringe and a drawing pen.
These below are some videos with different tools.
The first experiment with a simple trajectory (a circle).
The Delta robot drove by a mouse with Processing. The code is available here.
The Delta robot in pick and place configuration. The code is available here.
The Delta robot drawing. This is a first draft. The code is available here.





#1 by Hoon Wei Kent on 8 November 2011 - 20:00
Quote
hello there.. The Delta robot drove by a mouse with Processing look cool… can i know what software you use to interface with the mouse ?
#2 by robottini on 8 November 2011 - 20:33
Quote
the code is linked inside the post: http://robottini.altervista.org/wp-content/uploads/2011/10/DeltaArduProc.zip
There is the Arduino and Processing code.
#3 by davide on 24 May 2012 - 11:37
Quote
Hi,
congratulations for this excellent tutorial.
Hi have tried to replicate it, but my arduino reset every time after 15-20 seconds.
I have a separate 5v supply for the servo, with common mass, but arduino is still resetting…
#4 by robottini on 24 May 2012 - 11:56
Quote
I think this is an electrical problem.
Test only the Arduino/ATtiny85, without servos connected.
Connect one servo and test, then connect the second etc.
The servos have to be a separate power (5-6) and ALL the grounds have to be connected.
Can you explain how the servos power is made? batteries? which kind?
#5 by Ricardo Alves on 14 January 2013 - 23:27
Quote
Hi Davide.
I had a that problem when working with arduino and servos. I came to a conclusion, that happen when Arduino can’t give current to all devices. The solution is to feed all devices through external voltage sources, that did the trick to me.
#6 by Malte on 21 March 2013 - 02:01
Quote
Hi, I am having trouble with getting the Processing to send the data to the board. The Processing gets the mouse movements and coverts to data but the data doesn`t get to the Arduino. Could you help me ?
PS: My english isn`t very good.
#7 by robottini on 22 March 2013 - 05:39
Quote
Do you see any data coming from Processing to Arduino in the Serial Monitor?
Is the serial port in Processing the right serial port? es. 0 or 1 etc?
Can you explain more in deep the problem?
#8 by Malte on 23 March 2013 - 03:42
Quote
First of all thank you for helping me.
No I don’t see the data in the Serial Monitor.
When I try to change the Serial port a get an error “ArrayIndexOfBoundsException: 2″ and
Stable Library
=========================================
Native lib Version = RXTX-2.2pre2
Java lib Version = RXTX-2.1-7
WARNING: RXTX Version mismatch
Jar version = RXTX-2.1-7
native lib Version = RXTX-2.2pre2
Exception in thread “Animation Thread” java.lang.ArrayIndexOutOfBoundsException: 2
at DeltaArduProc___Proc.setup(DeltaArduProc___Proc.java:36)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)
#9 by robottini on 25 March 2013 - 18:41
Quote
In this part of the code:
void setup() {
size(600,600);
// open serial port
myPort = new Serial(this, Serial.list()[0], 19200);
frameRate(100);
noCursor();
}
in the instruction:
myPort = new Serial(this, Serial.list()[0], 19200);
the program take the first serial port. You can see witch is your port in this mode:
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 19200);
The first port you see after the println(Serial.list()); is the Serial.list()[0], the second is Serial.list()[1] and so on.
So, you can find your right port.
#10 by sabih toor on 17 May 2013 - 16:06
Quote
Hello! I am also building a delta robot. I want to know what is the ratio of arm and forearm in delta robot????
I need urgent help….plz reply me soon, thanks!
#11 by robottini on 18 May 2013 - 07:27
Quote
12 cm upper arm, 25 cm lower arm