Drawing Delta Robot, made with Anton as part of Dorkbot Bristol's Draw project.
It's all Anton's fault, really. He suggested a delta robot, we built a quick lashup to see how it worked, and the lashup became permanent. Here's the lashup, built with gluegun and things we had lying around.
Servos are regular 7 quid Futabas, from the very helpful Mad On Models in Newport, along with servo arms, balljoints, and rod with M2 threaded ends. Well, they come threaded on one end, you need to get an M2 tap and thread the other end yourself.
Initial inspiration was from this sweet little delta by mjcbruin. Maths and geometry code (which built on Arduino with no change) to convert XYZ to servo angles came from this marvellous post by mzavatsky. A point to note - the constants for the machine base and effector dimensions in there (e and f) are the sides of the triangles that comprise the base and effector, not the center->pivot distances! Multiply the radius by 3.466, 2/tan(30) to get the side length.
The overall stiffness of the thing is sensitive to the stiffness of the servo arms and servo mounts. We went from plastic extra-long servo arms to all-metal servo arms, and I expect we'll go to home-made extended arms.
With a rigid base, metal servo arms, and less shonky spacers holding the ball joints:
Here's the range sensor, a Sharp GP2D120XJ00F. Nominal range is 4->30 cm. You can see the IR spot (visible to my camera, but not to the eye) is projected at right angles to the sensor base. The beam comes out of the lens in the square housing, not the lens in the rectangular recess.
The sensor is positioned so that projected spot is as close as is practical to the drawing point. It's also mounted 40mm up from the effector base, because these sensors go mad and give increasing range readings when the real range is below their minimum.
Analogue noise was a problem with the Sharp range sensor to start with. We smooth it with a 10k/100nF filter, and use screened cable, and got rid of a lot of jitter. The sensor only updates every 38mS, so we are not losing any useful signal.
First drawing tests, using a Pentel brush pen
We showed it off in more or less this form to Dorkbot Bristol and Draw. It needs more work to be an interesting project for Draw - specifically, an input device, so it is a mediated-drawing experience as opposed to a wobbly plotter. But it was clear there there were interesting possibilities in controlling the wobbliness (by managing the effector acceleration) and scale of the drawing.
Here's the range sensor doing its thing:
Next steps will be to get the range measurement integrated into the drawing, lengthen the servo arms, and try some other drawing instruments.
Current Arduino source is here. It mostly draws a house.
Things we've learned:
The working volume is a segment of a roughly spherical shell. The ratio of servo arm length to base size governs the angular width of the segment, and the servo arm length governs the thickness of the segment.
We want to work within a disc-shaped volume. We started with short servo arms, and that gave us a thin shell which didn't contain a big flat disc (if you see what I mean). Don't make the servo arms too short.
The Arduino Servo library takes integer degrees as an input, and we need more resolution than that. With the 1-degree resolution, the motion is inevitably rather gritty and jerky. We now talk to the servo library in microseconds now, with writeMicroseconds, giving us about 6 times the resolution. That works much better.
All our geometry is done in floats. Even with all the trig, we still only take a few milliseconds per loop. I was expecting a floating-point performance problem, but in fact the Arduino is plenty fast enough for our purposes.
A couple of switches to trigger setup behaviours have proved useful - one to drive the effector to its nominal origin, for pen setup, and one which does a detach() on the servos, which turns off the servo PWM signals and makes them go floppy.
A couple of helpful resources for the Sharp range sensors are here and here
Here are a few more pictures of the final build, to show more detail:Home | Artefacts| Random