Stepper 28BYJ-48 sketch variabile

Stepper 28BYJ-48 sketch variabile segue i due precedenti articoli dedicati al motore passo-passo 28BYJ-48.

stepper 28BYJ-48 arduino top

In particolare in questo articolo ho deciso di utilizzare altri due pulsanti, connessi sempre in matrice, per regolare la velocità del motore.

Puoi leggere i due precedenti articoli qui:

Stepper 28BYJ-48 arduino

Stepper 28BYJ-48 arduino sketch

in cui sono descritti prima le caratteristiche del motore e del driver e poi uno sketch di esempio per controllarlo con due pulsanti.

Tornando allo stepper 28BYJ-48 sketch variabile iniziamo con aggiungere due pulsanti allo schema che già conosci.

Circuito di controllo per lo stepper 28BYJ-48 sketch variabile

allo schema originale aggiungi quindi due pulsanti che userai per cambiare la velocità di rotazione del motore:

schema 28BYJ-48 arduino due pulsanti

i primi sue pulsanti, quelli sulla sinistra, li userai per avviare la rotazione in senso orario o antiorario ed i due aggiunti li userai per variare la velocità.

Prima di passare allo sketch

Un passaggio importante è capire e segnare tutti i valori letti alla pressione di ciascun pulsante, questo metodo ti permette di distinguere quale pulsante stai premendo.

La lettura dei pulsanti avviene, in questo esempio, attraverso il pin A0 e con l’utilizzo del comando analogRead().

Puoi utilizzare uno degli esempi presenti nell’IDE Arduino, ad esempio: AnalogReadSerial

/*
  AnalogReadSerial

  Reads an analog input on pin 0, prints the result to the Serial Monitor.
  Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
  Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/AnalogReadSerial
*/

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}

che è già pronto per leggere dal pin A0 e mostrarti i dati sul monitor seriale.

Eseguito l’upload su arduino non devi far altro che aprire il monitor seriale, premere uno alla volta i pulsanti e segnare per ciascun pulsante il valore letto.

Nel mio caso i valori letti sono stati:

  • nessun bottone premuto: 1023
  • pressione del bottone 1: 512
  • pressione del bottone 2: 683
  • pressione del bottone 3: 768
  • pressione del bottone 4: 820

Ora che conosci i tuoi valori potrai scrivere in modo semplice il tuo stepper 28BYJ-48 sketch variabile.

Stepper 28BYJ-48 sketch variabile

Lo sketch che ti propongo oggi è identico a quello visto nell’articolo di Lunedì solo con la differenza di due linee aggiunte:

#define A 2
#define B 3
#define C 4
#define D 5
#define button A0 // no 1023, 1 - 512, 2 - 683, 3 - 768, 4 - 820

#define NUMBER_OF_STEPS_PER_REV 512
int us=1000;

void setup() {
  Serial.begin( 115200 );
  pinMode(A,OUTPUT);
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT);
}

void loop(){
  int i=0;
  
  if (analogRead(button) >= 500 && analogRead(button) <= 530) { 
    while(i<NUMBER_OF_STEPS_PER_REV) {
      forwardStep();
      i++;
    }  
    delay(200);
  }
 

  if (analogRead(button) >= 650 && analogRead(button) <= 700) { 
    while(i<NUMBER_OF_STEPS_PER_REV) {
      backwardStep();
      i++;
    }  
    delay(200);
  }

  if (analogRead(button) >= 730 && analogRead(button) <= 780) { us +=10; delay(100); Serial.println( us );}
  if (analogRead(button) >= 800 && analogRead(button) <= 840) { us -=10; delay(100); Serial.println( us );}
}

void write(int a,int b,int c,int d){
  digitalWrite(A,a);
  digitalWrite(B,b);
  digitalWrite(C,c);
  digitalWrite(D,d);
}

void forwardStep(){
  Serial.println( "halfStep" );
  write(1,0,0,0); delayMicroseconds(us);
  write(1,1,0,0); delayMicroseconds(us);
  write(0,1,0,0); delayMicroseconds(us);
  write(0,1,1,0); delayMicroseconds(us);
  write(0,0,1,0); delayMicroseconds(us);
  write(0,0,1,1); delayMicroseconds(us);
  write(0,0,0,1); delayMicroseconds(us);
  write(1,0,0,1); delayMicroseconds(us);
}

void backwardStep(){
  Serial.println( "reverseStep" );
  write(1,0,0,1); delayMicroseconds(us);
  write(0,0,0,1); delayMicroseconds(us);
  write(0,0,1,1); delayMicroseconds(us);
  write(0,0,1,0); delayMicroseconds(us);
  write(0,1,1,0); delayMicroseconds(us);
  write(0,1,0,0); delayMicroseconds(us);
  write(1,1,0,0); delayMicroseconds(us);
  write(1,0,0,0); delayMicroseconds(us);
}

le due linee aggiunte sono:

if (analogRead(button) >= 730 && analogRead(button) <= 780) { us +=10; delay(100); Serial.println( us );}
if (analogRead(button) >= 800 && analogRead(button) <= 840) { us -=10; delay(100); Serial.println( us );}

la linea 38 e la linea 39.

La prima delle due valuta la pressione del terzo pulsante ed incrementa di 10 il valore della variabile us attendendo, sempre come metodo di anti rimbalzo per il pulsante 100 millisecondi.

Il valore di us sarà trasferito al monitor seriale dopo essere stato impostato.

La linea 39 si comporta in modo del tutto analogo valutando la pressione del secondo pulsante e decrementando us di 10 ad ogni pressione.

In questo modo potrai variare il tempo che intercorre tra l’eseguzione di una fase e la successiva ottenendo una variazione della velocità di rotazione.

Conclusioni e suggerimenti

Noterai, usando lo stepper 28BYJ-48 sketch variabile che al di sotto di un certo valore di microsecondi il motore non si muove: questo è causato dall’eccessiva velocità a cui i comandi arrivano alle fasi a cui il motore non riesce a dare seguito in modo corretto.

Un altro effetto che noterai è che a fase molto veloci corrisponde una inferiore coppia sviluppata e che diminuendo la velocità di esecuzione la velocità diminuisce a vantaggio della coppia sviluppata.

Prova e sperimenta con i motori passo-passo come questo e restituiscimi un feedback nei commenti.

 

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/stepper-28byj-48-sketch-variabile.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.