// Controle de motor - CNC Shield
// EIXO X: Quantidade de Passos para Distância (50 mm): ????;
// EIXO Y: Quantidade de Passos para Distância (50 mm): ????;
// EIXO Z: Quantidade de Passos para Distância (50 mm): ????;
// Alimentador: Quantidade de Passos para soldagem: ????;
// Vref para motores 42-34 (eixos X, Y e Z): 500 mV
// Vref para motores 42-40 (Alimentação de Estanho): 800 mA
// Definição dos pinos
#define stepPin 2 //Passo eixo X
#define dirPin 5 // Direção eixo X
#define stepPin1 3 //Passo eixo Y
#define dirPin1 6 // Direção eixo Y
#define stepPin2 4 //Passo eixo Z
#define dirPin2 7 // Direção eixo Z
#define stepPin3 12 //Passo Alimentador
#define dirPin3 13 // Direção Alimentador
#define inicial 9 // Início de Soldagem - Verificar terminal
#define FimDeCursoZ 8 // Fim de Curso Eixo Z (VERMELHO)
#define FimDeCursoY 10 // Fim de Curso Eixo Y (AZUL)
#define FimDeCursoX 11 // Fim de Curso Eixo X (AMARELO)
int x = 0;
int y = 0;
int z = 0;
int w = 0;
void setup() {
// Definindo ambos os pinos acima como saída
pinMode(stepPin,OUTPUT); // EIXO X
pinMode(dirPin,OUTPUT); //EIXO X
pinMode(stepPin1,OUTPUT); //EIXO Y
pinMode(dirPin1,OUTPUT); //EIXO Y
pinMode(stepPin2,OUTPUT); // EIXO Z
pinMode(dirPin2,OUTPUT); // EIXO Z
pinMode(stepPin3,OUTPUT); // ALIMENTADOR
pinMode(dirPin3,OUTPUT); // ALIMENTADOR
pinMode(inicial, INPUT_PULLUP);
pinMode(FimDeCursoZ, INPUT_PULLUP);
pinMode(FimDeCursoY, INPUT_PULLUP);
pinMode(FimDeCursoX, INPUT_PULLUP);
}
////////////TERMINAL 1////////////
void loop() {
// Habilita o motor para que se movimente em um sentido particular
if (digitalRead(inicial) == 0){
delay(5000);
digitalWrite(dirPin1,HIGH); //AVANÇO DO Y
// Contagem de pulsos para que o motor gire
for(int y = 0; y < 1000; y++) {
digitalWrite(stepPin1,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin1,LOW);
delayMicroseconds(500);
}
digitalWrite(dirPin,HIGH); //AVANÇO DO X
// Contagem de pulsos para que o motor gire
for(int x = 0; x < 3000; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin2,HIGH); //AVANÇO DO Z
// Contagem de pulsos para que o motor gire
for(int z = 0; z < 8000; z++) {
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin3,LOW); //ALIMENTADOR
// Contagem de pulsos para que o motor gire
for(int w = 0; w < 800; w++) {
digitalWrite(stepPin3,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin3,LOW);
delayMicroseconds(500);
}
//////// TERMINAL 2 ////////////
//Aguarda 1 segundo e reinicia o loop
delay(1000);
digitalWrite(dirPin2,LOW);//RECUO DO Z
// Contagem de pulsos para que o motor gire
for(int z = 0; z < 300; z++) {
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
//Inverte o sentido de rotação
digitalWrite(dirPin,LOW);//RECUO DO X
// Contagem de pulsos para que o motor gire
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin2,HIGH); //AVANÇO DO Z
// Contagem de pulsos para que o motor gire
for(int z = 0; z < 300; z++) {
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin3,LOW); //ALIMENTADOR
// Contagem de pulsos para que o motor gire
for(int w = 0; w < 800; w++) {
digitalWrite(stepPin3,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin3,LOW);
delayMicroseconds(500);
}
//////// TERMINAL 3 ////////////
//Aguarda 1 segundo e reinicia o loop
delay(1000);
digitalWrite(dirPin2,LOW);//RECUO DO Z
// Contagem de pulsos para que o motor gire
for(int z = 0; z < 300; z++) {
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
//Inverte o sentido de rotação
digitalWrite(dirPin,LOW);//RECUO DO X
// Contagem de pulsos para que o motor gire
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin2,HIGH); //AVANÇO DO Z
// Contagem de pulsos para que o motor gire
for(int z = 0; z < 300; z++) {
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin3,LOW); //ALIMENTADOR
// Contagem de pulsos para que o motor gire
for(int w = 0; w < 800; w++) {
digitalWrite(stepPin3,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin3,LOW);
delayMicroseconds(500);
}
//Aguarda 1 segundo antes de executar a próxima instrução
delay(1000);
digitalWrite(dirPin2,LOW);//RECUO DO Z
// Contagem de pulsos para que o motor gire
for(int z = 0; z < 300; z++) {
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
//////// HOME ////////////
//Aguarda 1 segundo e reinicia o loop
delay(2000);
while (digitalRead(FimDeCursoZ)!= 0) {
digitalWrite(dirPin2,LOW);//RECUO DO Z
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
delay(2000);
while (digitalRead(FimDeCursoY)!= 0) {
digitalWrite(dirPin1,LOW);//RECUO DO Z
digitalWrite(stepPin1,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin1,LOW);
delayMicroseconds(500);
}
delay(2000);
while (digitalRead(FimDeCursoX)!= 0) {
digitalWrite(dirPin,LOW);//RECUO DO Z
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
}