A delta robot is a simple robot that uses three servos to move an end effector. The end effector stays in a fixed orientation relative to the base but is free to move in three dimesions.
In this project I have mounted a digital clock face (composed of four 7-segment LEDs) to the end effector of the robot. This means the clock face can be moved in a circle to represent the passing seconds but it remains in a fixed orientation relative to the case.
I know it's not very interesting to watch a clock tick off the seconds, but if you watch 'til the end of the video the alarm is kind of interesting.
Step 1: Parts
Case - basketball display case - http://www.containerstore.com/shop?productId=10001589&N=&Ntt=basketball
Servo mounts - purchase or make your own
Servos - Futaba 3003 or similar - http://www3.towerhobbies.com/cgi-bin/wti0001p?&I=LXH288&P=ML
Servo horns (a selection usually come with the servos)
Brass rectangle section - http://www3.towerhobbies.com/cgi-bin/wti0001p?&I=LXR851&P=7
4-40 threaded rods - http://www3.towerhobbies.com/cgi-bin/wti0001p?&I=LXD872&P=ML
4-40 ball joints (12) - http://www3.towerhobbies.com/cgi-bin/wti0001p?&I=LX2546&P=7
Clock and control
STM32 Discovery Board
7805 Regulator (2)
7 Segment Display (4)
SAA1064 LED Driver
LM386N Audio Amplifier
Push Button Switch (5)
10K Trimpot (4)
4.7KOhm Resistor (2)
220uF 25V Capacitor
100uF 25V Capacitor (4)
10uF 25V Capacitor (2)
0.001uF Capacitor (2)
2N2222A Transistor (2)
Step 2: Base and servo mounts
I built the entire clock into a clear acrylic box meant for displaying basketballs.
This first step is perhaps the most critical. A delta robot relies on geometry and it is important to get the servos lined up correctly.
Mark the central point on the back wall of your case and then draw three axis outward with 120 degrees between each.
You can either purchase servo mounts or as I did create some out of a piece of aluminium section.
The servos need to be mounted so that the servo horns are equidistant from the central point and the center of the lower arm falls along the axis. For my design this meant the servo horn lined up with the marked axis.
In this case the distance from central point to the servo axis is approximately 50mm.
Step 3: Lower arms
Each of the three lower arms is identical.
I made the arms out of brass rectangular section 90mm long.
At one end I drilled two small holes and screwed in two ball joints. I then filled the end with epoxy to prevent the ball joints from moving or falling out.
The other end of the lower arm needs to connect to the servo. To do this I cut two slots in a large round control horn such that I could slide the rectangular brass section into place. I then fixed the horn to the arm by filling the end of the brass tube with epoxy.
Step 4: Upper arms
There are six identical upper arms.
Cut six lengths of 4-40 threaded rod to length (105mm).
Screw the 12 ball joint sockets onto the rods.
Pay special attention to make each arm the same length; delta robots work due to the geometry of the arms so any differences in length affect the end result.
Step 5: End effector
The end effector is the business end of the robot; it is here where you will attach any tools etc.
To create the end effector I started with three lengths of brass tube 30mm long.
At one end of each piece I attached two ball joint studs in the same way I did for the lower arm.
The three pieces are combined to form something resembling a 3 armed boomerang. To do this I cut and filed a piece of aluminium to form a center piece. I then pushed each arm onto the center and applied a small amount of solder where each piece of brass met.
It was on to this piece that I attached the clock face. A set of circuit boards comprising of the four 7-segment LED displays and the SAA1064 LED display driver was created and attached to the end effector using nylon screws. By using an I2C LED driver only four wires were needed to connect the clock face to the main circuit board (data, clock, power and ground).
Step 6: Main circuit board
The main circuit board is based around the STM32 Discovery Board. I will not go into too much detail as people are likely to have their own preferences as to which microcontroller they wish to use. The attached schematic should serve as a good starting point.
Power is supplied by two 7805 regulators, one dedicated to driving the servos while the second one provides power for the rest of the circuit.
There are five buttons to provide the following functions
- Set alarm (hold down and use hour/minute buttons)
- Set hour
- Set minute
- Alarm On/Off
An LM386 Audio Amplifier is used to drive a 8Ohm speaker for the alarm.
Step 7: Assembly
Now that you have all the parts assembly is straight forward (although a little fiddly).
Find the center of rotation for each servo and then attach the lower arm so that it points straight out.
Attach two upper arms to each lower arm.
Attach the end actuator to the upper arms.
Mount the main circuit board and the function buttons.
Attach the clock face to the main board using a flexible four wire cable.
Step 8: Control
Now that you have your delta robot you will want to make it do something.
As I said previously you will probably have your own preferences as to what microcontroller you want to use; in my case it was a STM32 Discovery Board.
The attached block diagram shows the various modules I created for this project and which peripherals they control.
I believe that the various modules are fairly self explanatory and hopefully you will find them well commented if you are trying to follow them.
Perhaps the most interesting module is the robot control module (robot.c). The code translates an X,Y,Z coordinate into three corresponding servo angles.
The source of the XYZ coordinates could be
A computer via RS232/USB.
A joystick, Wii controller or Kinect system (that would be really cool).
A fixed sequence of positions.
A calculated position based on some other input (e.g. clock (my case), camera).
In the code you will find a number of parameters that are used for the calculations. It doesn't matter what linear measurement system you use as long as you are consistent. Angles are in radians.
Lower arm length - the length from the center of the servo control horn to the center of the two ball joint studs.
Upper arm length - the length between the centers of the two ball joint sockets.
Base offset - the distance from the center of the base to a point directly below the servo horn center.
End actuator offset - the distance from the center of the end actuator the the center of the two ball joints on each arm.
The XYZ coordinate is defined as
X the distance towards servo 1 from the center of the base.
Y the distance perpendicular to X in the plane of the base.
Z the distance out from the plane formed by the three servo horn centers.
There is one additional thing; it is not possible to set up the lower arms such that the neutral point of each servo corresponds exactly to an angle of 90 degrees. You will need to introduce a calibration parameter for each servo. In my case I used three trimpots and calculated a calibration angle based on the ADC value measured for each one.