Imagine | Develop | Create
This is a fun little delta robot that is mostly 3D printed with no special parts. The delta robot uses 3 stepper motors to move.
The parts do not need to be printed with high quality but it helps.
Some of the parts of the robot are difficult to print because they are a sphere. When the print starts (depending on printing settings), the spheres do not have much to start printing on. After some experimenting, I worked out it was better to drop the part down into the bed by 0.2-0.3mm (Z=-0.2 or -0.3mm).
After the prints finished printing its best to file/sand the sphere and the sphere socket to make them smooth. Avoid taking too much off.
Starting from the top and working down the robot stating with the base. The base is where the motors and limit switches are mounted. The base will also be used to hold the robot while in operation. The limit switch will be used to HOME the robot.
After the motors and limit switches are mounted the arms can be attached to the motor. Ensure the arm is the correct way around with notch facing away from the robot.
Next is to assemble the connecting rods, the connecting rods are used to connect the arms/motors to the platform. Connect the parallel 3d part to the middle of 2 connecting rods with M3 screws, it will be best if you first drill the parallel 3d part with a 3mm to make the screw more smooth. The parallels will ensure the connecting rods do not rotate out of the sockets.
Next, add 2 springs to the connecting rods, 1 at the top and 1 at the bottom, going between each side. The springs will help the spheres of the arms and the platform stay within there socket.
After the connecting rods are assembled, they can be attached to the robot. 1 at a time, attach the connecting rod from the arm to the platform. I used a bit of graphite powder on the spheres and sockets to help them slide around easily. The first end of the connecting rods is easy to get in place, the other is not as much. you will need to force each side of the connecting rod a little bit apart and push it into place. try not to pull them too far apart, you don't want to bend the part. Once in place, the connecting rod should stay in place, they could pop out when the robot puts them in tight angles.
The controller is an Arduino UNO with a CNC sheld. X, Y and Z Stepper motor drivers are used to control the stepper motors. Each arm has 1 stepper motor and 1 limit switch. The limit switch is connected to the corosponding axis pin and ground (if the stepper motor uses the X axis driver, then it will use the X limit switch)
The sotfware is below and requires 2 libraries, DeltaKinematics and AccelStepper. DeltaKinematics is used to calulate the forward and inverse kinematics of the delta robot. The AccelStepper is used to control the stepper motors. Both have links below.
Delta Kinematics library: https://github.com/tinkersprojects/Delta-Kinematics-Library
AccelStepper library: https://www.arduinolibraries.info/libraries/accel-stepper
Gcode library: https://github.com/tinkersprojects/G-Code-Arduino-Library
#include <DeltaKinematics.h> #include <AccelStepper.h> #define Multiplier 91.02222222 #define HomeAngle -79 //11 degrees from vertical or 79 degrees from horizontal #define Speed 1000 #define Acceleration 50000000.0 #define AStepPin 2 #define BStepPin 3 #define CStepPin 4 #define ADirPin 5 #define BDirPin 6 #define CDirPin 7 #define ALimitPin 9 #define BLimitPin 10 #define CLimitPin 11 #define enablePin 8 DeltaKinematics DK(0.040,0.126,0.035,0.035); AccelStepper stepperA(1,AStepPin,ADirPin); AccelStepper stepperB(1,BStepPin,BDirPin); AccelStepper stepperC(1,CStepPin,CDirPin); void setup() { Serial.begin(115200); pinMode(ALimitPin, INPUT_PULLUP); pinMode(BLimitPin, INPUT_PULLUP); pinMode(CLimitPin, INPUT_PULLUP); pinMode(enablePin, OUTPUT); digitalWrite(enablePin,HIGH); stepperA.setMaxSpeed(Speed); stepperA.setSpeed(Speed); stepperA.setCurrentPosition(0); stepperA.setAcceleration(Acceleration); stepperB.setMaxSpeed(Speed); stepperB.setSpeed(Speed); stepperB.setCurrentPosition(0); stepperB.setAcceleration(Acceleration); stepperC.setMaxSpeed(Speed); stepperC.setSpeed(Speed); stepperC.setCurrentPosition(0); stepperC.setAcceleration(Acceleration); Serial.println("START"); Serial.println("Enabling"); Enabled(); Serial.println("HOME"); HomeMachine(); Serial.println("SETTING"); } void loop() { DK.x = 0.000; DK.y = 0.000; DK.z = -0.100; SetMotors(); // cal of inverse Delta Kinematics is done inside SetMotors() delay(3000); DK.x = 0.000; DK.y = 0.050; DK.z = -0.100; SetMotors(); // cal of inverse Delta Kinematics is done inside SetMotors() delay(3000); DK.x = 0.000; DK.y = -0.050; DK.z = -0.100; SetMotors(); // cal of inverse Delta Kinematics is done inside SetMotors() delay(3000); } void SetMotors() { Serial.print("Error"); Serial.println(DK.inverse()); // cal inverse Delta Kinematics double A = DK.a*Multiplier; double B = DK.b*Multiplier; double C = DK.c*Multiplier; Serial.println(DK.a); Serial.println(DK.b); Serial.println(DK.c); Serial.println(DK.x); Serial.println(DK.y); Serial.println(DK.z); Serial.println(); stepperA.moveTo(A); stepperB.moveTo(B); stepperC.moveTo(C); while(stepperA.distanceToGo() != 0 || stepperB.distanceToGo() != 0 || stepperC.distanceToGo() != 0) { stepperA.run(); stepperB.run(); stepperC.run(); } } void Enabled() { digitalWrite(enablePin,LOW); } void Disabled() { digitalWrite(enablePin,HIGH); } void HomeMachine() { while(digitalRead(ALimitPin) == HIGH || digitalRead(BLimitPin) == HIGH || digitalRead(CLimitPin) == HIGH) { if(digitalRead(ALimitPin) == HIGH) { stepperA.move(-10); stepperA.run(); } if(digitalRead(BLimitPin) == HIGH) { stepperB.move(-10); stepperB.run(); } if(digitalRead(CLimitPin) == HIGH) { stepperC.move(-10); stepperC.run(); } } stepperA.setCurrentPosition(HomeAngle*Multiplier); stepperB.setCurrentPosition(HomeAngle*Multiplier); stepperC.setCurrentPosition(HomeAngle*Multiplier); }
This is a fun little delta robot that is mostly 3D printed with no special parts. The delta robot uses 3 stepper motors to move.
The parts do not need to be printed with high quality but it helps.
Some of the parts of the robot are difficult to print because they are a sphere. When the print starts (depending on printing settings), the spheres do not have much to start printing on. After some experimenting, I worked out it was better to drop the part down into the bed by 0.2-0.3mm (Z=-0.2 or -0.3mm).
After the prints finished printing its best to file/sand the sphere and the sphere socket to make them smooth. Avoid taking too much off.
Starting from the top and working down the robot stating with the base. The base is where the motors and limit switches are mounted. The base will also be used to hold the robot while in operation. The limit switch will be used to HOME the robot.
After the motors and limit switches are mounted the arms can be attached to the motor. Ensure the arm is the correct way around with notch facing away from the robot.
Next is to assemble the connecting rods, the connecting rods are used to connect the arms/motors to the platform. Connect the parallel 3d part to the middle of 2 connecting rods with M3 screws, it will be best if you first drill the parallel 3d part with a 3mm to make the screw more smooth. The parallels will ensure the connecting rods do not rotate out of the sockets.
Next, add 2 springs to the connecting rods, 1 at the top and 1 at the bottom, going between each side. The springs will help the spheres of the arms and the platform stay within there socket.
After the connecting rods are assembled, they can be attached to the robot. 1 at a time, attach the connecting rod from the arm to the platform. I used a bit of graphite powder on the spheres and sockets to help them slide around easily. The first end of the connecting rods is easy to get in place, the other is not as much. you will need to force each side of the connecting rod a little bit apart and push it into place. try not to pull them too far apart, you don't want to bend the part. Once in place, the connecting rod should stay in place, they could pop out when the robot puts them in tight angles.
The controller is an Arduino UNO with a CNC sheld. X, Y and Z Stepper motor drivers are used to control the stepper motors. Each arm has 1 stepper motor and 1 limit switch. The limit switch is connected to the corosponding axis pin and ground (if the stepper motor uses the X axis driver, then it will use the X limit switch)
The sotfware is below and requires 2 libraries, DeltaKinematics and AccelStepper. DeltaKinematics is used to calulate the forward and inverse kinematics of the delta robot. The AccelStepper is used to control the stepper motors. Both have links below.
Delta Kinematics library: https://github.com/tinkersprojects/Delta-Kinematics-Library
AccelStepper library: https://www.arduinolibraries.info/libraries/accel-stepper
Gcode library: https://github.com/tinkersprojects/G-Code-Arduino-Library