2

I'm building a little project to move the stepper motor according to the time the person keeps the switch pressed, and the longer the time, higher the speed. The code I'm using increases the speed and I can see it at Serial Monitor, but the stepper motor don't change. I would like to know if is it possible to change the speed of the stepper without the use of a potentiometer and how?

#include <Stepper.h>
const int ForwardLimitSwitchPin = 2;
const int ReverseLimitSwitchPin = 3;
const int StepperStepPin = 4;
const int StepperDirectionPin = 5;
const int LimitSwitchActivated = LOW;  // Limit switch grounds pin
const int StepperMaxRPM = 255;//default = 100


const int swDireita = 13;
const int swEsquerda = 12;
int velMotor = 0;

static const unsigned long REFRESH_INTERVAL = 1000; // ms
static unsigned long lastRefreshTime = 0;

boolean flag;

//Stepper stepper(200, StepperStepPin, StepperDirectionPin);
Stepper stepper(200, 8, 9, 10, 11);


void setup() {
  pinMode(swDireita, INPUT);
  pinMode(swEsquerda, INPUT);

  digitalWrite(swDireita, HIGH);
  digitalWrite(swEsquerda, HIGH);

  pinMode(ForwardLimitSwitchPin, INPUT_PULLUP);
  pinMode(ReverseLimitSwitchPin, INPUT_PULLUP);
  stepper.setSpeed(StepperMaxRPM);


  Serial.begin(115200);
}

void loop() {
  while (digitalRead(swDireita) == 0) {
    motorDireita();
  }

  velMotor = 0;

  while (digitalRead(swEsquerda) == 0) {
    motorEsquerda();
  }

  velMotor = 0;

  while (digitalRead(swDireita) == 0 && digitalRead(swEsquerda) == 0) {
    motorParado();
  }
  velMotor = 0;
}

void motorParado() {
  Serial.print("Ambos ativados, parada");
  Serial.print("\n");
  stepper.setSpeed(0);
  stepper.step(0);

}


void motorDireita() {
  //51 por segundo para 5 seg total
  /*if(!flag){
    flag = true;
    velMotor = 51;

    }else */
  if (velMotor < 255 && millis() - lastRefreshTime >= REFRESH_INTERVAL) {
    lastRefreshTime += REFRESH_INTERVAL;
    velMotor += 25;
  }

  //int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
  //int motorSpeed = map(velMotor, 0, 1023, 0, 255);

  Serial.print("direita ativada, velocidade: ");
  Serial.print(velMotor);
  //Serial.print(motorSpeed);
  Serial.print("\n");

  stepper.setSpeed(velMotor);
  //stepper.setSpeed(motorSpeed);
  stepper.step(1);
}

void motorEsquerda() {
  //51 por segundo para 5 seg total

  if (velMotor < 255 && millis() - lastRefreshTime >= REFRESH_INTERVAL) {
    lastRefreshTime += REFRESH_INTERVAL;
    velMotor += 51;
  }

  Serial.print("Esquerda ativida, velocidade: ");
  Serial.print(velMotor);
  Serial.print("\n");

  stepper.setSpeed(velMotor);
  stepper.step(-1);
}
gre_gor
  • 6,669
  • 9
  • 47
  • 52

1 Answers1

1

For anyone who came here, I've found the solution. It looks like the bipolar stepper motor just move with certain speeds {80,100, 160, 180, 200,220, 255}, and my code goes all over 0-255, so I just altered the code to go to certain speeds based on the time the Switch is pressed! Thanks for the help xD

#include <Stepper.h>

/*
  const int ForwardLimitSwitchPin = 2;
  const int ReverseLimitSwitchPin = 3;
  const int StepperStepPin = 4;
  const int StepperDirection = 5;
*/
const int StepperMaxRPM = 255; //default = 100

const int swDireita = 13;
const int swEsquerda = 12;
int velMotor = 80;

static const unsigned long REFRESH_INTERVAL = 1000; //ms
static unsigned long lastRefreshTime = 0;

//Stepper stepper(200, StepperStepPin, StepperDirectionPin);
Stepper stepper(200, 8, 9, 10, 11);

void setup() {
  Serial.begin(115200);

  pinMode(swDireita, INPUT);
  pinMode(swEsquerda, INPUT);

  digitalWrite(swDireita, HIGH);
  digitalWrite(swEsquerda, HIGH);

  stepper.setSpeed(StepperMaxRPM);
}

void loop() {
  while (digitalRead(swDireita) == 0) {
    motorDireita();
  }
  while (digitalRead(swEsquerda) == 0) {
    motorEsquerda();
  }
  while (digitalRead(swEsquerda) == 1 && digitalRead(swDireita) == 1) {
    Serial.print("to aqui");
    velMotor = 0;
    stepper.setSpeed(velMotor);
    Serial.print(velMotor);
  }
}

void motorDireita() {
  if (millis() - lastRefreshTime >= REFRESH_INTERVAL) {
    lastRefreshTime += REFRESH_INTERVAL;
    switch (velMotor) { //80//100//160//180//200//220//255
      case 0:
        Serial.print("antes: ");
        Serial.print(velMotor);
        velMotor = 80;
        stepper.setSpeed(velMotor);
        break;
      case 80:
        velMotor = 100;
        stepper.setSpeed(velMotor);
        break;
      case 100:
        velMotor = 160;
        stepper.setSpeed(velMotor);
        break;
      case 160:
        velMotor = 180;
        stepper.setSpeed(velMotor);
        break;
      case 180:
        velMotor = 200;
        stepper.setSpeed(velMotor);
        break;
      case 200:
        velMotor = 220;
        stepper.setSpeed(velMotor);
        break;
      case 220:
        velMotor = 255;
        stepper.setSpeed(velMotor);
        break;
    }
  }
  Serial.print(velMotor);
  Serial.print("\n");
  stepper.step(1);
}

void motorEsquerda() {
  if (millis() - lastRefreshTime >= REFRESH_INTERVAL) {
    lastRefreshTime += REFRESH_INTERVAL;
    switch (velMotor) { //80//100//160//180//200//220//255
      case 0:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 80;
        stepper.setSpeed(velMotor);
        break;
      case 80:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 100;
        stepper.setSpeed(velMotor);
        break;
      case 100:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 160;
        stepper.setSpeed(velMotor);
        break;
      case 160:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 180;
        stepper.setSpeed(velMotor);
        break;
      case 180:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 200;
        stepper.setSpeed(velMotor);
        break;
      case 200:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 220;
        stepper.setSpeed(velMotor);
        break;
      case 220:
        Serial.print("antes ");
        Serial.print(velMotor);
        velMotor = 255;
        stepper.setSpeed(velMotor);
        break;
    }
  }

  Serial.print(velMotor);
  Serial.print("\n");
  stepper.step(-1);
}