Controllo Motore PassoPasso

Ciao a tutti ragazzi,

oggi ho un quesito sicuramente semplice… per chi è piu pratico di me per lo meno :smiley: :smiley: :smiley:

sto costruendo un sistema di controllo molto banale per un motorino passo passo (del tipo 28BYJ-48 da kit in attesa di sostituirlo).

In pratica dovrei, tramite un potenziometro, regolarne la direzione di rotazione in tre step: ORARIO , STOP e ANTIORARIO.

Il progetto è quasi completo, ovvero riesco a fare quello che ho detto qui sopra se non fosse che per le rotazioni non riesco a renderle proporzionali (a variare la velocita partendo dal centro che corrisponde allo STOP)

questo è lo sketch attuale! … le note tra —> // sono l’ultimo tentativo di rendere graduale la curva di accelerazione, ma non funziona

 #include <Stepper.h>
const int stepsPerRevolution = 600;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
int stepCount = 0;

//int const velo = 0;
//int const velant = 0;

void setup() {
}
void loop() {
  int sensorReading = analogRead(A0);
  int direzione = map(sensorReading, 30, 900, 0, 10);
  Serial.print (direzione);
  delay(15);
  if (direzione < 4) {

    myStepper.setSpeed(30);
    myStepper.step(stepsPerRevolution / 100);

    // int velo = map(sensorReading, 512, 900, 1, 30);
  }
  else if (direzione > 6) {

    myStepper.setSpeed(30);
    myStepper.step(-stepsPerRevolution / 100);

    // int velant = map(sensorReading, 30, 512, 30, 1);
  }
  else if (direzione == 5) {
    myStepper.setSpeed(0);
    myStepper.step(0);
  }
}

sapete aiutarmi?

potresti espandere il range invece di comprimerlo
int direzione = map(sensorReading, 30, 900, 0, 10)
così hai solo 5 cifre per parte se facessi
int direzione = map(sensorReading, 30, 900, 0, 1000);
dove 500 è lo stop ne avresti 500 per regolare la velocità

Ho provato ad aumentare, ma non so perche se supero 30 si blocca il motore :frowning: :frowning: :frowning:

io veramente intendevo così

#include <Stepper.h>
const int stepsPerRevolution = 600;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
int stepCount = 0;

//int const velo = 0;
//int const velant = 0;

void setup() {
}
void loop() {
   int sensorReading = analogRead(A0);
   int direzione = map(sensorReading, 30, 900, 0, 1000);
   Serial.print (direzione);
   delay(15);
   if (direzione < 450 && direzione > 350) {

      myStepper.setSpeed(30);
      myStepper.step(stepsPerRevolution / 100);

      // int velo = map(sensorReading, 512, 900, 1, 30);
   } else if (direzione < 350 && direzione > 300) {

      myStepper.setSpeed(25);
      myStepper.step(stepsPerRevolution / 100);

      // int velant = map(sensorReading, 30, 512, 30, 1);
   } else if (direzione < 300 && direzione > 250) {

      myStepper.setSpeed(20);
      myStepper.step(stepsPerRevolution / 100);

   } else if (direzione < 250 && direzione > 200) {

      myStepper.setSpeed(15);
      myStepper.step(stepsPerRevolution / 100);

   } else if (direzione < 200 && direzione > 150) {

      myStepper.setSpeed(10);
      myStepper.step(stepsPerRevolution / 100);
   } else if (direzione < 1500 && direzione > 50) {

      myStepper.setSpeed(5);
      myStepper.step(stepsPerRevolution / 100);
      if (direzione < 650 && direzione > 550) {

         myStepper.setSpeed(30);
         myStepper.step(-stepsPerRevolution / 100);

         // int velo = map(sensorReading, 512, 900, 1, 30);
      } else if (direzione < 750 && direzione > 650) {

         myStepper.setSpeed(25);
         myStepper.step(-stepsPerRevolution / 100);

         // int velant = map(sensorReading, 30, 512, 30, 1);
      } else if (direzione < 800 && direzione > 750) {

         myStepper.setSpeed(20);
         myStepper.step(-stepsPerRevolution / 100);

      } else if (direzione < 850 && direzione > 800) {

         myStepper.setSpeed(15);
         myStepper.step(-stepsPerRevolution / 100);

      } else if (direzione < 900 && direzione > 850) {

         myStepper.setSpeed(10);
         myStepper.step(-stepsPerRevolution / 100);
      } else if (direzione  > 900) {

         myStepper.setSpeed(5);
         myStepper.step(-stepsPerRevolution / 100);
      } else if (direzione < 550 && direzione > 450) { // beccare proprio il centro è difficile,
         myStepper.setSpeed(0);                        // così c'è un po di margine
         myStepper.step(0);
      }
   }

se al contrario vuoi aumentare la velocità dello stepper oltre al valore 30, non puoi farlo in modo diretto, devi accellerare gradualmente (puoi vedere la libreria accelstepper.h per questo)

Ok, provo subito.
Grazie Patrick!

Ottimo! funziona, grazie mille Patrick!!!!!!

prego :slight_smile: