Motor de passo gira somente para um lado

não sei se é códico ou ligação motor gira somente para um lado
Código arduíno motor de passo e driver tb6600 com 4 botões, botão 1 girar motor sentido anti horário e quando soltar botão parar motor, botão 2 girar motor sentido horário quando soltar botão parar motor, botão 3 girar motor sentido horário valor pré definido e quando acionar fim de curso motor girar este mesmo valor, botão 4 girar motor sentido horário com outro valor pré definido e quando acionar fim de curso motor girar com este outro valor pré definido, segue o codigo

#include <Stepper.h>

// Definições do motor de passo
#define STEPS_PER_REVOLUTION 200
Stepper motor(STEPS_PER_REVOLUTION, 8, 9, 10, 11);

// Pinos dos botões
#define BUTTON_PIN_1 2
#define BUTTON_PIN_2 3
#define BUTTON_PIN_3 4
#define BUTTON_PIN_4 5

// Pinos dos fins de curso
#define ENDSTOP_PIN_1 6
#define ENDSTOP_PIN_2 7

// Variáveis de controle
bool motorRunning = false;
bool endstop1Reached = false;
bool endstop2Reached = false;

void setup() {
motor.setSpeed(300); // Defina a velocidade do motor aqui
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
pinMode(BUTTON_PIN_3, INPUT_PULLUP);
pinMode(BUTTON_PIN_4, INPUT_PULLUP);
pinMode(ENDSTOP_PIN_1, INPUT_PULLUP);
pinMode(ENDSTOP_PIN_2, INPUT_PULLUP);
}

void loop() {
// Botão 1 - Sentido anti-horário
if (digitalRead(BUTTON_PIN_1) == LOW) {
motorRunning = true;
motor.step(-1);
} else {
motorRunning = false;
}

// Botão 2 - Sentido horário
if (digitalRead(BUTTON_PIN_2) == LOW) {
motorRunning = true;
motor.step(1);
} else {
motorRunning = false;
}

// Botão 3 - Giro com valor pré-definido
if (digitalRead(BUTTON_PIN_3) == LOW) {
motorRunning = true;
motor.step(100); // Substitua pelo valor desejado
} else if (digitalRead(ENDSTOP_PIN_1) == LOW && motorRunning) {
motor.step(100); // Substitua pelo valor desejado
motorRunning = false;
}

// Botão 4 - Giro com outro valor pré-definido
if (digitalRead(BUTTON_PIN_4) == LOW) {
motorRunning = true;
motor.step(200); // Substitua pelo valor desejado
} else if (digitalRead(ENDSTOP_PIN_2) == LOW && motorRunning) {
motor.step(200); // Substitua pelo valor desejado
motorRunning = false;
}
}

Se voce ainda não leu o tópico:
" Como obter o melhor desse Fórum
recomendo que o faça.

E então poste mais informações para que possamos ajuda-lo melhor.

Qual arduino você está usando?
Poste um esquemático do seu projeto, pois não estou entendendo como voce ligou o motor no seu modulo tb6600 .

![WhatsApp Image 2023-08-28 at 15.04.57|281x500](upload://mlKTxN8mbLhOUcBrzmy5uxjE9Ro.jpe
botao 01 pino 2
botao 02 pino 3
botao 03 pino 4
botao 04 pino 5

fim de curso pino 6
step+ dir + 5v
step- dir - pinos 8 e 9

Perdão, acabei de ler o tópico que mencionou, sou novo aqui, a proxima duvida irei colocar tudo bem especificado

Esta foto não ajuda. Poste um esquemático, mesmo feito a mão livre.

Esta é a ligação placa driver fiz rapido aqui no cad
ai logico liguei certinho A+ A- B+ B-

Ok, esta biblioteca não se aplica para driver do tipo tb6600 .
Ela é para drivers de 4 pinos de entrada tal como o ULN24003, ULN2003, etc ou L298, L293.
Usando o driver tb6600 com esta biblioteca, vai sim girar somente para um lado, porque ela não controla a direção.

Uma solução para usar esta biblioteca é a seguinte (Gambiara :grinning:).
Selecione um pino para ligar em Dir ao invés de ligar no 9.
Escolhi o 12.
Teste com este codigo:

#include <Stepper.h>

// Definições do motor de passo
#define STEPS_PER_REVOLUTION 200
Stepper motor(STEPS_PER_REVOLUTION, 8,9,10,11);

// Pinos dos botões
#define BUTTON_PIN_1 2
#define BUTTON_PIN_2 3
#define BUTTON_PIN_3 4
#define BUTTON_PIN_4 5
#define dir 12

// Pinos dos fins de curso
#define ENDSTOP_PIN_1 6
#define ENDSTOP_PIN_2 7

// Variáveis de controle
bool motorRunning = false;
bool endstop1Reached = false;
bool endstop2Reached = false;
//-------------------------------------------------------------------
void setup() {
  motor.setSpeed(300); // Defina a velocidade do motor aqui
  pinMode(BUTTON_PIN_1, INPUT_PULLUP);
  pinMode(BUTTON_PIN_2, INPUT_PULLUP);
  pinMode(BUTTON_PIN_3, INPUT_PULLUP);
  pinMode(BUTTON_PIN_4, INPUT_PULLUP);
  pinMode(ENDSTOP_PIN_1, INPUT_PULLUP);
  pinMode(ENDSTOP_PIN_2, INPUT_PULLUP);
  pinMode(dir,OUTPUT);
}
//-------------------------------------------------------------------
void loop() {
  // Botão 1 - Sentido anti-horário
  if (digitalRead(BUTTON_PIN_1) == LOW) {
    motorRunning = true;
     digitalWrite(dir,HIGH);
    motor.step(1);
  } else {
    motorRunning = false;
  }

  // Botão 2 - Sentido horário
  if (digitalRead(BUTTON_PIN_2) == LOW) {
    motorRunning = true;
    digitalWrite(dir,LOW);
    motor.step(1);
  } else {
    motorRunning = false;
  }

  // Botão 3 - Giro com valor pré-definido
  if (digitalRead(BUTTON_PIN_3) == LOW) {
    motorRunning = true;
    digitalWrite(dir,HIGH);
    motor.step(100); // Substitua pelo valor desejado
  } else if (digitalRead(ENDSTOP_PIN_1) == LOW && motorRunning) {
    motor.step(100); // Substitua pelo valor desejado
    motorRunning = false;
  }

  // Botão 4 - Giro com outro valor pré-definido
  if (digitalRead(BUTTON_PIN_4) == LOW) {
    digitalWrite(dir,HIGH);
    motorRunning = true;
    motor.step(200); // Substitua pelo valor desejado
  } else if (digitalRead(ENDSTOP_PIN_2) == LOW && motorRunning) {
    motor.step(200); // Substitua pelo valor desejado
    motorRunning = false;
  }
}

Para este tipo de de driver, tb6600, o correto é usar a biblioteca " AccelStepper.h.
ref: "GitHub - waspinator/AccelStepper: Fork of AccelStepper

C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:5:1: error: 'Stepper' does not name a type; did you mean 'toupper'?
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // Pinos de controle do motor
^~~~~~~
toupper
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino: In function 'void setup()':
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:28:3: error: 'myStepper' was not declared in this scope
myStepper.setSpeed(100); // Velocidade do motor (ajuste conforme necessário)
^~~~~~~~~
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:28:3: note: suggested alternative: 'AccelStepper'
myStepper.setSpeed(100); // Velocidade do motor (ajuste conforme necessário)
^~~~~~~~~
AccelStepper
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino: In function 'void loop()':
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:36:5: error: 'myStepper' was not declared in this scope
myStepper.step(1);
^~~~~~~~~
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:36:5: note: suggested alternative: 'AccelStepper'
myStepper.step(1);
^~~~~~~~~
AccelStepper
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:40:5: error: 'myStepper' was not declared in this scope
myStepper.step(-1);
^~~~~~~~~
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:40:5: note: suggested alternative: 'AccelStepper'
myStepper.step(-1);
^~~~~~~~~
AccelStepper
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:56:5: error: 'myStepper' was not declared in this scope
myStepper.step(200); // Girar 200 passos (ajuste conforme necessário)
^~~~~~~~~
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:56:5: note: suggested alternative: 'AccelStepper'
myStepper.step(200); // Girar 200 passos (ajuste conforme necessário)
^~~~~~~~~
AccelStepper
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:61:5: error: 'myStepper' was not declared in this scope
myStepper.step(400); // Girar 400 passos (ajuste conforme necessário)
^~~~~~~~~
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:61:5: note: suggested alternative: 'AccelStepper'
myStepper.step(400); // Girar 400 passos (ajuste conforme necessário)
^~~~~~~~~
AccelStepper
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:66:5: error: 'myStepper' was not declared in this scope
myStepper.step(0);
^~~~~~~~~
C:\Users\Notebook Compaq\AppData\Local\Temp.arduinoIDE-unsaved2023728-276-18plw45.ioxwg\sketch_aug28a\sketch_aug28a.ino:66:5: note: suggested alternative: 'AccelStepper'
myStepper.step(0);
^~~~~~~~~
AccelStepper

exit status 1

Compilation error: 'Stepper' does not name a type; did you mean 'toupper'?

adicionei a accel e ja deu erro hahahhah vou tentar usar seu codigo

consegui resolver com o accelstepper muito obrigado
agora botão 1 vai para um lado e 2 para outro
porem o fim de curso quando acionado o motor teria que girar em sentido definido por botão 3 e 4, 3 um valor 4 outro se apertei botão 3 quando fim de curso acionado teria que girar aquele valor e se apertei 4 a mesma coisa, fim de curso quando acionado esta repetindo ultimo movimento debotão 1 e 2 só que ao contrario vou colar o code

#include <AccelStepper.h>

// Pinos de passo e direção do motor de passo
#define stepPin 2
#define dirPin 3

// Criação do objeto AccelStepper
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);

// Pinos dos botões
const int buttonCW = 4;     // Sentido horário
const int buttonCCW = 5;    // Sentido anti-horário
const int buttonSet1 = 6;   // Configuração 1
const int buttonSet2 = 7;   // Configuração 2
const int endStop = 8;      // Fim de curso

// Variáveis de estado
bool set1Active = false;
bool set2Active = false;

void setup() {
  // Configuração dos pinos dos botões como entradas com pull-up
  pinMode(buttonCW, INPUT_PULLUP);
  pinMode(buttonCCW, INPUT_PULLUP);
  pinMode(buttonSet1, INPUT_PULLUP);
  pinMode(buttonSet2, INPUT_PULLUP);
  pinMode(endStop, INPUT_PULLUP);

  // Configuração do motor de passo
  stepper.setMaxSpeed(1000);      // Velocidade máxima do motor (ajuste conforme necessário)
  stepper.setAcceleration(1000);  // Aceleração do motor (ajuste conforme necessário)
}

void loop() {
  // Verificações dos botões
  if (digitalRead(buttonCW) == LOW) {
    set1Active = false;
    set2Active = false;
    stepper.setSpeed(100); // Defina a velocidade
    stepper.runSpeed();
  }
  else if (digitalRead(buttonCCW) == LOW) {
    set1Active = false;
    set2Active = false;
    stepper.setSpeed(-100); // Defina a velocidade
    stepper.runSpeed();
  }
  else if (digitalRead(buttonSet1) == LOW) {
    set1Active = true;
    set2Active = false;
  }
  else if (digitalRead(buttonSet2) == LOW) {
    set2Active = true;
    set1Active = false;
  }
  
  // Movimento conforme configuração
  if ((set1Active || set2Active) && digitalRead(endStop) == LOW) {
    int stepsToMove = set1Active ? 200 : (set2Active ? 400 : 0);
    if (stepsToMove != 0) {
      stepper.moveTo(stepsToMove);
      stepper.runToPosition();
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.