Delta bot
| Attachment | Size |
|---|---|
| Delta_bot_1.jpg | 62.42 KB |
| Delta_bot_2.jpg | 55.39 KB |
| Delta_bot_3.jpg | 59.11 KB |
Hallo everybody, this is my first LMR entry (not the first robot I build)
I made this delta robot over the weekend.
About two week ago i saw a video of an industrial delta robot and i was intrigued by the simplicity of the principle but the complexity of the movements it could make.
So i thought, I'm gonna make one.
So i bought three servos some ball joints and some aluminum strip.
The metal base plate I had laying around. Just as some some nuts and bolts.
I used an arduino i took out of another robot i build (i will post that one here two)
I programmed the arduino so it reads serial data, and I made a mouse interface that sends the serial data.
And in actually turned out to be as simple as I thought it to be.
But now I have a delta bot I should do something with it.
I'm not quite sure what.
I had the idea to make more of these and use them as lags for a two, four or six legged robot.
It will work well I think, but it's a bit expansive to make six of these.
Delta bot and it's interface

Top view

Delta Bot




@ Sun, 2009-08-30 15:59
What an awesome idea and I
What an awesome idea and I actually have a bunch of those ball joints from tamiya laying around.
Would you care to share the arduino and processing code?
@ Sun, 2009-08-30 17:04
Nice
@ Sun, 2009-08-30 19:45
That's awesome
@ Sun, 2009-08-30 19:48
Kewl! nice moves. very smooth
@ Mon, 2009-08-31 01:37
Beautiful.
@ Mon, 2009-08-31 08:31
Very Original
@ Mon, 2009-08-31 14:18
gr8 idea
@ Mon, 2009-08-31 18:15
Lovely
It's a nice piece of work. A little tweak to the maths and I imagine you could have it maintain its Y regardless of X and Z. I like to put names o nthings. I suppose it's a kind of tethered holonomic drive. A "Killough platform."
Imagine the applications. A few hundred miniaturised versions of this, arranged in an array and they could be used to maneuvre loads around in aircraft loading bays, for example, or pass widgets round a production line.
@ Mon, 2009-08-31 18:21
Next!
@ Tue, 2009-09-01 12:26
level head
I really like how the top platform stay level at all time, but cant help but wonder, it can tilt, right?
Or is it always level, no matter what?
My head is slow today, so I cant figure it out myself right now...
@ Tue, 2009-09-01 14:07
It can`t tilt because of the
@ Tue, 2009-09-01 14:21
Yes you're right about the
Yes you're right about the parallel arms.
http://www.youtube.com/watch?v=GTz1MAasQq8&feature=relatedBut the stewart platform is somewhat of a different principle right?
Is hasn’t the rotating "arms" at the base.
If you make a delta robot with six arms, I’m not sure it would work like a stewart platform because of the extra joint in the arm.
By the way, there are pick and place robots with four arms. And they function the same way as with three arms if I’m not mistaken.
@ Sat, 2009-09-05 12:05
Same Principle
Yeah, I think it's the same principle. The stewart platform is often made with linear actuators, but if you think about the way the rotating servos are arranged, they're doing exactly the same job as linear actuators. OKay, the maths will be slightly different, because once they slow down sinusoidally as they approach their extents.
Pretty sure the joints are just ball and socket joints.
@ Fri, 2009-09-04 22:25
haha thats great! awesome
@ Sun, 2009-09-06 11:17
Code
Sorry for the late respnse ezekiel181 and electrictape22, but you're still intrested here is the code.
It's pretty sloppy programmed, there are no comments and variable names are in dutch but here you go:
-------------------------------------------------------------------------
Arduino code:
#include <SoftwareServo.h>
SoftwareServo servo1;
SoftwareServo servo2;
SoftwareServo servo3;
int servo1Pos = 90;
int servo2Pos = 90;
int servo3Pos = 90;
int servo1Afwijking = -2;
int servo2Afwijking = 8;
int servo3Afwijking = 8;
int data = 0;
void setup(){
pinMode(13, OUTPUT);
servo1.attach(10);
servo2.attach(11);
servo3.attach(12);
//pinmode
Serial.begin(115200);
}
void loop(){
if (Serial.available() > 0) {
// read the incoming byte:
data = Serial.read();
if (data == 255){
delay(7);
if (Serial.available() > 0) {
servo1Pos = Serial.read();
}
}
if (data == 254){
delay(7);
if (Serial.available() > 0) {
servo2Pos = Serial.read();
}
}
if (data == 253){
delay(7);
if (Serial.available() > 0) {
servo3Pos = Serial.read();
}
serialTeller = 0;
} else {
serialTeller++;
}
if (serialTeller >1000){
servo1Pos = 90;
servo2Pos = 90;
servo3Pos = 90;
}
if (serialTeller < 2000){
SoftwareServo::refresh();
}
}
if (servo1Pos < 30){
servo1Pos = 30;
}
if (servo2Pos < 30){
servo2Pos = 30;
}
if (servo3Pos < 30){
servo3Pos = 30;
}
if (servo1Pos > 130){
servo1Pos = 130;
}
if (servo2Pos > 130){
servo2Pos = 130;
}
if (servo3Pos > 130){
servo3Pos = 130;
}
servo1.write(servo1Pos-servo1Afwijking);
servo2.write(servo2Pos-servo2Afwijking);
servo3.write(servo3Pos-servo3Afwijking);
}
-------------------------------------------------------------------------
Precessing code:
import processing.serial.*;
Serial myPort; // The serial port:
int servo1 = 0;
int servo2 = 0;
int servo3 = 0;
int serialBegin = 255;
void setup() {
size(600,600);
myPort = new Serial(this, Serial.list()[1], 115200);
frameRate(100);
noCursor();
}
void draw() {
background(255);
triangle(width/2, height, 0, 200, width, 200);
servo1 = 100-int(dist(width/2,0,mouseX,mouseY)/6);
servo2 = 100-int(dist(0,height,mouseX,mouseY)/6);
servo3 = 100-int(dist(width,height,mouseX,mouseY)/6);
strokeWeight(3);
line(300,200,mouseX,mouseY);
line(150,400,mouseX,mouseY);
line(450,400,mouseX,mouseY);
println("X "+mouseX);
println("Y "+mouseY);
if (servo1 < 0){
servo1=0;
}
if (servo2 <0){
servo2=0;
}
if (servo3 <0){
servo3=0;
}
if (mousePressed && (mouseButton == LEFT)) {
servo1 -= 20;
servo2 -= 20;
servo3 -= 20;
}
if (mousePressed && (mouseButton == RIGHT)) {
servo1 += 40;
servo2 += 40;
servo3 += 40;
}
//println("servo1 "+servo1);
//println("servo2 "+servo2);
//println("servo3 "+servo3);
//Serial.write
myPort.write(255);
//delay(10);
myPort.write(servo1+30);
//delay(10);
myPort.write(254);
//delay(10);
myPort.write(servo2+30);
//delay(10);
myPort.write(253);
//delay(10);
myPort.write(servo3+30);
//delay(10);
}
@ Sun, 2009-09-06 11:21
Excellent! Thanks a lot mjc.
@ Mon, 2009-09-07 22:21
make it draw
@ Mon, 2009-09-07 23:02
it's amazing! I wonder what
The way you are doing with processing to control it it's a really good idea! Congrats!!
@ Tue, 2009-09-08 01:58
Here`s a suggestion, stick a
Here`s a suggestion, stick a marker on it and have it draw PCB traces for etching :)
I got a pack of tamiya ball joints last week to do this but they don`t have the same range of motion as yours. From eyeballing it I would guess they can move about 10-15 degrees either way from center but I was hoping for much more. I`m wondering how much approximately is the maximum angle the ball joints on yours can move?
I found these ball joints. Unlike the tamiya these have no bolt on the ball and just from the picture they have a much greater degree of freedom.
@ Tue, 2009-09-08 09:09
ball joints
I have used these ball joints, but I used smaller nuts, these. That creates some extra movement.
Further, I haven't done anything with the delta bot yet, no time :(
But I thought a cutter would be cool, so you could carve 3D objects from plastic foam or something.
Although I think the programming could get a little complex.
@ Wed, 2009-09-09 20:59
Conrad Says:
Helaas kunnen wij geen winkelwagen voor u aanmaken.
Wij kunnen geen winkelwagen voor u aanmaken.Dit kan 2 oorzaken hebben.
1. U gebruikt een verouderde link. Roep de pagina opnieuw op.Pagina opnieuw oproepen
2. Uw browser accepteert geen cookies. Activeer in uw browser de toepassing van cookies en probeer het opnieuw. Wilt u bestellen zonder gebruik te maken van cookies, klik dan op onderstaande link:Verder zonder cookies
Heeft u vragen? Stuur dan een mail naar webmaster@conrad.nl
@ Wed, 2009-09-09 21:16
I am going to create reasons
@ Thu, 2009-09-10 18:13
Cries
It would be a good battle cry for paranoid folk who keep cookies permanently switched off.
But what does the header mean: "We can't cart for you"?
@ Thu, 2009-09-10 18:31
Remember the Soup Nazi in
@ Fri, 2009-09-11 20:25
Pity
@ Thu, 2009-09-10 21:15
Continue without using cookies
As far as I understand it, the link you were following, contains a reference to a session for which you don't have the correct cookie. The page shows the wrong error message. It says: "We were unable to create a shopping cart for you." The two options state "you might be using an old link: retry loading the page" and "You might have cookies disabled: continue without cookies" but they both throw you to a home page.
My guess is that when someone tries to add an article to their shopping cart, but the session cannot be found, the website assumes you have disabled cookies in your browser and it shows this page.
Because the session reference is used in all URLs copied from the Conrad website, this effectively makes deep-linking directly to an article or product impossible.
Good shop, Conrad, but a lousy website.
@ Wed, 2009-09-09 23:28
Yeah. Those conrad guys are
@ Wed, 2009-09-16 10:24
Sorry
Try it this way:
go to conrad.nl and seach for product number 223417 for the balljoints and numer 248778 for the m2 nuts.
@ Tue, 2009-09-08 15:57
Nice
My delta bot is posted on:
Hack a day
http://hackaday.com/2009/09/07/arduino-powered-delta-robot/
and
Make magazine
http://blog.makezine.com/archive/2009/09/arduino_based_delta_robot.html
I didn't post them
@ Wed, 2009-09-09 21:01
Another Link In