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





@ Mon, 2010-08-23 01:13
Control via iPhone
Hi guys! I would like to manage this delta robot via iphone. I found a way to control arduino via iphone. You can see an example in this link:
http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=152
Could someone help me to modify processing code to communicate with TouchOSC? I think I could use a XY pads? Is it possible?
Please help me. Thanks a lot, Filippo
@ Mon, 2010-08-23 02:07
draft
I have written a draft. Could someone check it please? Ufortunely I haven't an iphone for testing. Anyway someone could check my new processing code. Basically I have changed just some rows. Here my code:
import oscP5.*; // Load OSC P5 library
import netP5.*; // Load net P5 library
import processing.serial.*;
OscP5 oscP5;// Set oscP5 as OSC connection
Serial myPort; // The serial port:
int servo1 = 0;
int servo2 = 0;
int servo3 = 0;
int serialBegin = 255;
float X,Y
void setup() {
size(600,600);
myPort = new Serial(this, Serial.list()[1], 115200);
frameRate(100);
noCursor();
}
void oscEvent(OscMessage theOscMessage) { // This runs whenever there is a new OSC message
String addr = theOscMessage.addrPattern(); // Creates a string out of the OSC message
// if(addr.indexOf("/1/toggle") !=-1){ // Filters out any toggle buttons
X=theOscMessage.get(0).floatValue();
Y=theOscMessage.get(1).floatValue();
}
}
void draw() {
background(255);
triangle(width/2, height, 0, 200, width, 200);
servo1 = 100-int(dist(width/2,0,X,Y)/6);
servo2 = 100-int(dist(0,height,X,Y)/6);
servo3 = 100-int(dist(width,height,X,Y)/6);
strokeWeight(3);
line(300,200,X,Y);
line(150,400,X,Y);
line(450,400,X,Y);
println("X "+X);
println("Y "+Y);
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);
}
@ Thu, 2010-08-19 17:14
Dimensions and some more details
Fantastic job! Could you please tell us some more details? For exaple PushRods length and basament disposition. Where can I buy PushRods like this?
thanks a lot to all of you.
@ Fri, 2010-07-23 12:02
Enhancing your project
Thanks for posting your bot, it inspired me to copy and enhance... See my blog post at http://prutsers.wordpress.com/2010/07/23/delta-robot-using-wii-and-arduino/
The enhancements are:
- control using a Wii Nunchuck
- proper XYZ positioning, full inverse kinematics
- standalone, all calculations done on Arduino
Thanks again, have fun!
@ Fri, 2010-07-23 13:07
....
I have no word to express my impresion,i just want to say i want to make one .
@ Wed, 2010-06-16 20:03
servos?
Can you tell me which servos did you use in this delta robot?
@ Thu, 2010-06-17 12:58
servo's
He,
@ Thu, 2010-06-17 17:08
metal sticks
And those metal sticks that keep the servos connected with this thing on the top of your delta robot where did you get them?
@ Sun, 2010-04-25 10:52
I would like to make one
I would like to make one above my table and attach a griper :D now how does that sound?
@ Sun, 2010-02-14 10:10
Help
code the error is.
In function 'void loop()':
error: 'serialTeller' was not declared in this scope
can you help me
Thanks
@ Sun, 2010-02-14 10:13
i got it int
i got it
int serialTeller;
thanks
@ Wed, 2009-12-23 21:47
Great .. ! Go DELTA ..
Great .. !
Go DELTA ..
=)
AlNets
@ Sun, 2009-09-27 16:59
burn
@ Mon, 2009-09-28 03:53
You did RTFM(website) right?
You did RTFM(website) right? Everything is explained for beginners. A little research and 2 seconds with google would have taken you there.
Maybe you should start simpler, by getting an LED to flash, then test out some servos and play with serial data before you jump right in the deep end.
@ Sun, 2009-09-27 16:54
Thanx!!
@ Sun, 2009-09-27 11:15
Nop
@ Sun, 2009-09-27 11:21
Download and install
@ Sun, 2009-09-27 10:07
Help :(
@ Sun, 2009-09-27 10:43
Did you install processing
@ Sun, 2009-09-27 07:51
Error
When I compile the code posted above, it's giving an error:
In function 'void loop()':
error: 'serialTeller' was not declared in this scope
whats wrong?
@ Sun, 2009-09-27 09:26
serialTeller hasn`t been
serialTeller hasn`t been declared, so basically the Arduino doesn`t know what it`s supposed to be. In C you must declare variables before they are used.
I`m not sure what it is supposed to be so you might have to wait until the author comes back to respond. He did say it`s not in english, so if anyone knows what Teller means it could give a clue as to its purpose.
As a start try adding the line int serialTeller; up at the top with the other variables.
@ Thu, 2009-09-24 20:18
FlexPicker
A good example of an industrial deltabot on BotJunkie : the FlexPicker.
@ Mon, 2009-09-14 22:28
Inverse and forward kinematics
Hi mjcbruin!
I found an interesting program in C language to calculate X Y Z based on the angles of the three servos and the other way around (you want to go to X Y Z, what angles must the servos have?) I translated this into a Visual Basic 6.0 program.
Would you be able to test this ? I plan to build my own Deltabot, but that will take some time...You are living in the Netherlands??
Hans
@ Thu, 2010-07-15 23:18
Hi!
My name is Oscar Im new in this forum, Can you send me a source code that you have in C or VB 6.0 please?
Oscar
@ Tue, 2009-09-08 16: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 22:01
Another Link In
@ Tue, 2009-09-08 02: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 10: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 21: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-16 11: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.
@ Thu, 2009-09-10 00:28
Yeah. Those conrad guys are
@ Wed, 2009-09-09 22:16
I am going to create reasons
@ Thu, 2009-09-10 19: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 22: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.
@ Thu, 2009-09-10 19:31
Remember the Soup Nazi in
@ Fri, 2009-09-11 21:25
Pity
@ Tue, 2009-09-08 00:02
it's amazing! I wonder what
The way you are doing with processing to control it it's a really good idea! Congrats!!
@ Mon, 2009-09-07 23:21
make it draw
@ Sun, 2009-09-06 12: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 12:21
Excellent! Thanks a lot mjc.
@ Fri, 2009-09-04 23:25
haha thats great! awesome
@ Tue, 2009-09-01 13: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 15:07
It can`t tilt because of the
@ Tue, 2009-09-01 15: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 13: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.
@ Mon, 2009-08-31 19: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 19:21
Next!
@ Mon, 2009-08-31 15:18
gr8 idea
@ Mon, 2009-08-31 09:31
Very Original
@ Mon, 2009-08-31 02:37
Beautiful.