Aluminum Extrusion 3D Printed Gantry

by OliShor in Circuits > Arduino

477 Views, 6 Favorites, 0 Comments

Aluminum Extrusion 3D Printed Gantry

Image (14).jpg
Image (19).jpg
Working Model of a Gantry

Hello! My name is Oli, and I'm excited to share with you my gantry project. This build was inspired by my passion for 3D printing, and I wanted to create something that not only fuels this interest but also serves as a versatile solution for various projects.

Throughout the development process, I've envisioned multiple applications for this gantry system:

  1. Drawing Machine: Pen is attached to the middle and is used to draw based on some code.
  2. Laptop Cleaner: A device that moves across a laptop screen to wash and dry it.
  3. Claw Machine: A fun, interactive project that demonstrates the gantry's precision.
  4. Modular Storage Solution: Collaborating with a friend, we're exploring how the gantry could optimize storage by relocating objects and eliminating the need for access pathways.
  5. Industrial Applications: Although these are not feasible with the scale of my gantry it is easy to see the use for a gantry and mine could be used in scale models.

For this project, I've utilized 5V motors to drive the gantry. While these were chosen primarily based on availability, I recommend experimenting with higher-power motors if speed is a critical factor for your specific application.

Join me as we explore the possibilities of this versatile gantry system!

Downloads

Supplies

  1. 5 segments of 500mm long 20x20mm aluminum extrusion
  2. Link here
  3. 2050mm of timing belt
  4. Link here
  5. 9 POM Wheels
  6. Link here
  7. Arduino UNO
  8. Link here
  9. 4 28BYJ-48 5V stepper motors
  10. Link here
  11. 4 ULN 2003 Motor drivers
  12. Link here
  13. 25 Male to Female cables
  14. Link here
  15. 4 internal corner brackets
  16. Including 2 pins for each
  17. Link here
  18. 9 M5xmmx30mm screws
  19. Link here
  20. 9 M5 nuts
  21. Link here
  22. 12 M4x20mm screws
  23. Link here
  24. 10 M4 nuts
  25. Link here
  26. 6 M4 threaded inserts
  27. Link here
  28. 18 spacers
  29. Link here
  30. 3 GT2 Timing Belt Pulleys.
  31. 20 Teeth 8mm Bore Aluminum Synchronous Wheel
  32. Link here

3D Print the Casings

printing.png
printed.png
side casings after printing.png
middle casing image.png

Print out the following 3mf's. The side casings will be used for the y axis motion. There are two of each part because there will be one on each side of the gantry. The middle casing is a little bit different, and it is used for the x axis of the movement. I used 0.16mm layer height. I would not recommend going much higher as I used 0.24 and some of the parts don't fit tougher. The side casing file requires a bit of support as it is standing up. I recommend tree support for this.

Assemble the Frame

Screenshot 2024-12-16 220832.png

Use four of the 50mm long 20x20 aluminum extrusion to create a square. Join the corners using the internal corner brackets and tighten the pins into the extrusion so that they will not fall lose.

Prep the Side Pieces

bigger holes in the middle.png
Image (7).jpg

Place in M5 screw coming out from the two bigger holes in the middle of the one piece of side casing that was printed earlier. Add 3 spacers and a nut at the end and tighten it down. Do this for both of the side casings as well as the one for the middle casing.

Attach the First Side Casings

Casing with Screws.png
Image (10).jpg
Image (9).jpg
Image (8).jpg

Use the 3D printed parts from earlier for this step. From the 3mf labeled side casings you will make one of the two parts. Place the peice of the casing with the outline of the extrusion up agents the inside of the frame from earlier. Take one of the pieces that has just holes in the side and place it on the other side of the excursion so that they are clamping around it. Place 3 wheels between the two pieces of plastic lined up with the holes shown above. Use the M5 screws in order to tighten the casings so that they stay on the extrusion and hold the wheels in place. Use a bolt on the other side to fasten the screw.

Attach the Second Side Casing

Side view of the casings.png

Attach the second side casing in the exact same way as the first side casing. Ensure that they are a mirror image of each other. Before tightening down the casing, place the last bit of excursion in the hole that it fits in on the first casing and then in on the second casing before screwing it in.

Attach the Middle Casing

Image (17).jpg

In a similar fashion, that the two side casings were attached attach the parts from the middle casing 3mf. Attach it to the middle bar that you added in in the last step. Ensure to include all 3 wheels and tighten down the screws with bolts. The orientation of this part does not matter at this moment.

Attach All 4 Motors

Image (6).jpg

I used the holes in the side of the casings to attach the motor. I used M4x20mm screws through the holes and screwed them with a threaded insert. Make sure that the wires are pointing upwards. I attached a MXL Series Corrosion-Resistant Timing Belt Pulley with one flange to each motor.

Assemble Electrical for All Moters

circut.png
Image (15).jpg
circut.png

Use the following electrical diagram to use your Arduino and motors to integrate everything to one single joystick. The two motors for the side casings can be put on in whichever order but the one for the middle casings must be in the specified pins. Note: If you are just looking at the image, make sure to expand it to see the whole thing.

Coding for Movement

Connect your Arduino to your laptop and open the UI. Use the following code to move the gantry. It is also included in file format so you can just open it and upload it to your Arduino.


// Include the Stepper library

#include <Stepper.h>


// Define number of steps per revolution

const int stepsPerRevolution = 2048; // for 28BYJ-48 stepper motor


// Initialize steppers on the ULN2003 pins

Stepper stepper1(stepsPerRevolution, 2, 4, 3, 5); // IN1, IN3, IN2, IN4

Stepper stepper2(stepsPerRevolution, 6, 8, 7, 9); // IN1, IN3, IN2, IN4

Stepper stepper3(stepsPerRevolution, 10, 12, 11, 13); // IN1, IN3, IN2, IN4 (new motor)


// Joystick pins

const int VRx = A0;

const int VRy = A1;


// Variables for joystick values

int xValue, yValue;

int motorSpeed = 10; // Adjust this value to change motor speed


void setup() {

 // Set motor speeds (RPM)

 stepper1.setSpeed(motorSpeed);

 stepper2.setSpeed(motorSpeed);

 stepper3.setSpeed(motorSpeed);

 

 // Initialize joystick pins as inputs

 pinMode(VRx, INPUT);

 pinMode(VRy, INPUT);

}


void loop() {

 // Read joystick values (0-1023)

 xValue = analogRead(VRx);

 yValue = analogRead(VRy);

 

 // Convert joystick values to motor steps

 int xSteps = map(xValue, 0, 1023, -5, 5);

 int ySteps = map(yValue, 0, 1023, -5, 5);

 

 // Move stepper3 based on left-right joystick movement

 if (abs(xSteps) > 1) {

  stepper3.step(-xSteps);

 }

 

 // Move stepper1 and stepper2 in unison based on up-down joystick movement

 if (abs(ySteps) > 1) {

  stepper1.step(-ySteps);

  stepper2.step(ySteps);

 }

 

 // Small delay to prevent the motors from stuttering

 delay(5);

}

Downloads

3D Print Slots for Timing Belts

side casings.png

3D prints 4 of the following (there are 2 in each file so you only need to print the file two times). I printed them on default setting, and they do require a bit of support.

Downloads

Scure Timing Belts to Both Sides.

Image (13).jpg
Image (12).jpg
Image (11).jpg

Use one M4 screw as well as a bolt on the inside of the aluminum excursion to fasten the clip to the frame. You can then adjust the tension to whatever works best. This took a lot of fiddling to get it just right. I used zip ties to ensure that the timing belt didn't slip out of place.

Platform for the Electronics

Image (16).jpg

I used a 50cm x 15cm piece of spare plywood and lay it across the two edge pieces of the gantry to hold the electronics. I added in two screws on the x axis similar to how we put the timing belt in place which helped to hold up the plywood.

Customize Z Axis for Intended Use

Image (18).jpg

I have put in a motor on the bottom of the middle casing. This motor is not currently hooked up however there are endless possibilities. I am planning on attaching a spool to it and using it like a claw machine. Furthermore, this is a very good scale model of a storage solution where you are able to move things around with the gantry. The new motor would be implemented in the same way however it would require a new method of input for the motion if it were not automated.