Program cnc arduino.
I want help to program a movable xy table.
I have tried to google to find similar code and use copy paste I have no programming skills.
However time is running away and I am stuck in project.
My client have a sushi robot.
This machine dropping about 35 pices of nigiri(riceballs)per minute.
1 person is lifting these Nigiri and placing them in lines on a tray.
very simple repetive task. On this tray worker make 12 lines with 5 Nigiri in every line. So the table movement is Y -axis about 5cm steps repeated 5 times) then
x axis should move 2-3 cm repeted 12 times with some spacings between lines.
When full tray stop.
I have built a xy table under the sushi machine and need help to have program correctly move this table for positioning the dropping nigiri in place in tray.
I found and modifyed a code that almost works. (added below short version)
I mecanically tried to sort out the different travel distance for x axis and y
by using different leadscrews. Then I have speed problem and non smooth movement instead.
So code needs separation for x and y.
hardware that I use.
* arduino uno
* cnc shield version 3.0 with a4988 drivers
* Nema 17 motor 42BYGH 1.5A (17HS4401)
* 4 pices 3 pin end stop switches
Standard Leadscrew 8 mm
m8 screw
Extra sensor for possible cycle start stop input.
* Reflective Photoelectric 3pin IR Infrared Obstacle Avoidance Sensor Module for arduino)
This code below almost works.
The problem with this code is I want to be able decide the x steps and Y steps separately. Example y axis 20400 steps and x - axis 10 000 steps.
.....................................................................................................
#define EN 8
//Direction pin
#define X_DIR 5
#define Y_DIR 6
//Step pin
#define X_STP 2
#define Y_STP 3
//DRV8825
int delayTime=30; //Delay between each pause (uS)
int stps=20400;// Steps to move
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
digitalWrite(dirPin, dir);
delay(1000);
for (int i = 0; i < steps; i++) {
digitalWrite(stepperPin, HIGH);
delayMicroseconds(delayTime);
digitalWrite(stepperPin, LOW);
delayMicroseconds(delayTime);
}
}
void setup(){
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
}
void loop(){
step(false, X_DIR, X_STP, stps); // Rad nr +1
step(false, X_DIR, X_STP, stps); // Rad nr +2
step(false, X_DIR, X_STP, stps); // Rad nr +3
step(false, X_DIR, X_STP, stps); // Rad nr +4
step(false, X_DIR, X_STP, stps); //Rad nr +5
step(false, Y_DIR, Y_STP, stps); // Radbyte nr +1
step(false, Y_DIR, Y_STP, stps); // Radbyte nr +1
step(false, Y_DIR, Y_STP, stps); // Radbyte nr +1
step(true, X_DIR, X_STP, stps); // Rad nr -6
step(true, X_DIR, X_STP, stps); // Rad nr -7
step(true, X_DIR, X_STP, stps); // Rad nr -8
step(true, X_DIR, X_STP, stps); // Rad nr -9
step(true, X_DIR, X_STP, stps); // Rad nr -10
step(false, Y_DIR, Y_STP, stps); // RADBYTE NR +2
step(false, Y_DIR, Y_STP, stps); // RADBYTE NR +2
step(false, Y_DIR, Y_STP, stps); // RADBYTE NR +2
// I cut away some cycles of same info here is
delay(10000);
step(false, X_DIR, X_STP, stps); // Rad nr +1
step(false, X_DIR, X_STP, stps); // Rad nr +2
step(false, X_DIR, X_STP, stps); // Rad nr +3
step(false, X_DIR, X_STP, stps); // Rad nr +4
step(false, X_DIR, X_STP, stps); //Rad nr +5
step(true, Y_DIR, Y_STP, stps); // Radbyte nr +1
step(true, Y_DIR, Y_STP, stps); // Radbyte nr +1
step(true, Y_DIR, Y_STP, stps); // Radbyte nr +1
step(true, X_DIR, X_STP, stps); // Rad nr -6
step(true, X_DIR, X_STP, stps); // Rad nr -7
step(true, X_DIR, X_STP, stps); // Rad nr -8
step(true, X_DIR, X_STP, stps); // Rad nr -9
step(true, X_DIR, X_STP, stps); // Rad nr -10
step(true, Y_DIR, Y_STP, stps); // RADBYTE NR +2
step(true, Y_DIR, Y_STP, stps); // RADBYTE NR +2
step(true, Y_DIR, Y_STP, stps); // RADBYTE NR +2
delay(10000); // replace full Nigir tray.
}