X-Y unit almost for free by WillemvD 3d model
3dmdb logo
Thingiverse
X-Y unit almost for free by WillemvD

X-Y unit almost for free by WillemvD

by Thingiverse
Last crawled date: 3 years ago
No linear bearings and steel shafts. but a printed rail. No expensive nema14 stepper, but a mini geared stepper motor that comes for an unbelievable price. The pulleys cost less than one dollar each and should have a bore of 5mm. All parts (except for the rollers) print in one run.
An ATtiny is excellent to control one axis. However, if you want to combine two linear systems to an X-Y plotter, you better use an Arduino board combined with two ULN2003 ic's. The motor and Arduino boards function very well at 4.5 volts (three AA or AAA batteries). Don't expect the highest grade of accuracy, much depends on the clearance between the rolls and the rail. Clean up the rolls by sanding them. If needed, increase the diameter with tape.
Combining two systems is easy if you use the cross to couple them.
Before combining two units with the cross, remove the rolls for easy access and reinstall them when finished.
Use some PTFE spray or grease to minimize friction.
The speed is excellent for laser engraving.https://youtu.be/KBsERsjMnhUhttps://youtu.be/fH1miyz9LqY
This sketch can be adapted by changeing the number of steps.
//NanoFull step mode
//512 >> 360 degrees 1.4 step/degree
int M1A = 2; int M1B = 3; int M1C = 4; int M1D = 5;
int M2A = 9; int M2B = 10; int M2C = 11; int M2D = 12;
int t=3;
void setup()
{
pinMode(M1A, OUTPUT); pinMode(M1B, OUTPUT); pinMode(M1C, OUTPUT); pinMode(M1D, OUTPUT);
pinMode(M2A, OUTPUT); pinMode(M2B, OUTPUT); pinMode(M2C, OUTPUT); pinMode(M2D, OUTPUT);
}
void loop()
{
//Motor 1
for (int x=0; x<20;x++){
digitalWrite(M1A, HIGH); digitalWrite(M1B, HIGH); digitalWrite(M1C, LOW); digitalWrite(M1D, LOW); delay(t);
digitalWrite(M1A, LOW); digitalWrite(M1B, HIGH); digitalWrite(M1C, HIGH); digitalWrite(M1D, LOW); delay(t);
digitalWrite(M1A, LOW); digitalWrite(M1B, LOW); digitalWrite(M1C, HIGH); digitalWrite(M1D, HIGH); delay(t);
digitalWrite(M1A, HIGH); digitalWrite(M1B, LOW); digitalWrite(M1C, LOW); digitalWrite(M1D, HIGH); delay(t);}
for (int x=0; x<30;x++){
digitalWrite(M1A, HIGH); digitalWrite(M1B, LOW); digitalWrite(M1C, LOW); digitalWrite(M1D, HIGH); delay(t);
digitalWrite(M1A, LOW); digitalWrite(M1B, LOW); digitalWrite(M1C, HIGH); digitalWrite(M1D, HIGH); delay(t);
digitalWrite(M1A, LOW); digitalWrite(M1B, HIGH); digitalWrite(M1C, HIGH); digitalWrite(M1D, LOW); delay(t);
digitalWrite(M1A, HIGH); digitalWrite(M1B, HIGH); digitalWrite(M1C, LOW); digitalWrite(M1D, LOW); delay(t);}
//Motor 2
for (int x=0; x<20;x++){
digitalWrite(M2A, HIGH); digitalWrite(M2B, LOW); digitalWrite(M2C, LOW); digitalWrite(M2D, HIGH); delay(t);
digitalWrite(M2A, HIGH); digitalWrite(M2B, HIGH); digitalWrite(M2C, LOW); digitalWrite(M2D, LOW); delay(t);
digitalWrite(M2A, LOW); digitalWrite(M2B, HIGH); digitalWrite(M2C, HIGH); digitalWrite(M2D, LOW); delay(t);
digitalWrite(M2A, LOW); digitalWrite(M2B, LOW); digitalWrite(M2C, HIGH); digitalWrite(M2D, HIGH); delay(t);}
for (int x=0; x<30;x++){
digitalWrite(M2A, LOW); digitalWrite(M2B, LOW); digitalWrite(M2C, HIGH); digitalWrite(M2D, HIGH); delay(t);
digitalWrite(M2A, LOW); digitalWrite(M2B, HIGH); digitalWrite(M2C, HIGH); digitalWrite(M2D, LOW); delay(t);
digitalWrite(M2A, HIGH); digitalWrite(M2B, HIGH); digitalWrite(M2C, LOW); digitalWrite(M2D, LOW); delay(t);
digitalWrite(M2A, HIGH); digitalWrite(M2B, LOW); digitalWrite(M2C, LOW); digitalWrite(M2D, HIGH); delay(t);}
}

Tags