Dual stepper motor shield buttons

Dual stepper motor shield buttons aggiunge due pulsanti per ciascun motore stepper per controllare il corrispondente motore passo-passo.

Dual stepper motor shield buttons

I due motori stepper possono essere controllati in modo automatico, come hai letto nel precedente articolo, o aggiungendo dei pulsanti puoi decidere tu i movimenti da inviare alla dual stepper motor.

Userai 4 pulsanti, due per ciascun motore, con cui definire una rotazione in senso orario od antiorario.

Schema di collehamento dei bottoni

Lo schema dei collegamenti l’ho derivato, con un fotoritocco, da quello pubblicato dalla DFRobot perché non ho trovato la libreria per fritzing relativa alla dual stepper motor shield buttons:

Stepper motor shield schema

in pratica ho collegato ai pin digitali liberi i quattro pulsanti ciascuno con una propria resistenza di pull-up.

Riuscirai in questo modo ad ottenere un circuito semplice da realizzare e, sopratutto, facile da programmare.

Come funziona la dual stepper motor shield buttons

La dual stepper motor shield buttons usa i pulsanti per controllare i motori stepper seguendo questa modalità:

  • pulsante connesso al pin 9 sposta il motore in X in senso orario;
  • pulsante connesso al pin 10 sposta il motore in X in senso antiorario;
  • pulsante connesso al pin 11 sposta il motore in Y in senso orario;
  • pulsante connesso al pin 12 sposta il motore in Y in senso antiorario;

la velocità di rotazione è stabilita dallo sketch ed i micro step sono impostati nella configurazione dello sketch.

Sketch di controllo

Lo sketch di controllo è reso semplice dal collegamento elettronico in cui ciascun pulsante è collegato ad un singolo pin digitale:

const byte M1dirpin = 4;
const byte M1steppin = 5;
const byte M2dirpin = 7;
const byte M2steppin = 6;

const byte ButtM1cw  = 9;
const byte ButtM1ccw = 10;
const byte ButtM2cw  = 11;
const byte ButtM2ccw = 12;

void setup() {
  pinMode(M1dirpin,OUTPUT);
  pinMode(M1steppin,OUTPUT);
  pinMode(M2dirpin,OUTPUT);
  pinMode(M2steppin,OUTPUT);
  
  pinMode(ButtM1cw, INPUT);
  pinMode(ButtM1ccw,INPUT);
  pinMode(ButtM2cw, INPUT);
  pinMode(ButtM2ccw,INPUT);  
}

void loop() {
  if (digitalRead(ButtM1cw)  == 0)      { digitalWrite(M1dirpin,LOW);  goStepM1(); }
  else if (digitalRead(ButtM1ccw) == 0) { digitalWrite(M1dirpin,HIGH); goStepM1(); }
  
  if (digitalRead(ButtM2cw)  == 0)      { digitalWrite(M2dirpin,LOW);  goStepM2(); }
  else if (digitalRead(ButtM2ccw) == 0) { digitalWrite(M2dirpin,HIGH); goStepM2(); }
}

void goStepM1() {
	digitalWrite(M1steppin,LOW);
    delayMicroseconds(2);
    digitalWrite(M1steppin,HIGH);
    delay(1);
}

void goStepM2() {
    digitalWrite(M2steppin,LOW);
    delayMicroseconds(2);
    digitalWrite(M2steppin,HIGH);
    delay(1);
}

Descrizione dello sketch

le prime quattro linee sono identiche a quelle descritte nel precedente articolo a meno della definizione che ho preferito fare usando la costante ( const ) in byte;

linee 06-09: definici i pin a cui sono collegati i pulsanti, ricorda che hai messo le resistenze in pull-up;

linee 12-20: imposta le modalità di funzionamento per ogni singolo pin;

linea 24: verifica il valore letto sul pin ButtM1cw e confrontalo con il valore 0, ossia pulsante premuto, in modo da poter impostare la rotazione in senso orario passando il valore LOW al pin M1dirpin e invocare la funzione goStepM1() per far avanzare il motore M1;

linea 25: in alternativa alla linea 24 se il pulsante ButtM1ccw è premuto imposti ad HIGH il valore di M1dirpin in modo che la rotazione del motore sia impostata in verso contrario al precedente;

linee 27-28: esegui le stesse operazioni per i pulsanti ButtM2 e per i pin M2dirpin;

linee 31-36: definisci la funzione goStepM1() il cui compito è far avanzare il motore M1 nel verso impostato alle linee 24 e 25 usando come sistema quello descritto nel precedente articolo;

linee 38-43: definisci la funzione goStepM2() il cui compito è far avanzare il motore nella direzione definita dalle linee 27 e 28;

Test dello sketch dual stepper motor shield

Collegati i pulsanti ed i motori alla dual stepper motor shield puoi provare lo sketch:

Ora puoi personalizzare il tuo progetto per controllare il movimento di una piccola CNC o similare.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/dual-stepper-motor-shield-buttons.html

5 comments

1 ping

Skip to comment form

    • Vasilis on 27 dicembre 2017 at 10:27
    • Reply

    Hi, I want to make this. https://steppertune.com….. I bought the motors and DRV8825.

    1. Hi Vasilis,
      good project. I think that isn’t a open-source, or open-hardware project. You can buy it from the author site.
      Otherwise you could write the sketch yourself or could ask the sketch and the schema to the author.

    • Vasilis on 27 dicembre 2017 at 23:09
    • Reply

    Ok thanks.

    • John Pedersen on 23 agosto 2018 at 08:57
    • Reply

    Ciao Mauro Alfieri
    Da quando avevo acquistato un doppio scudo motore passo-passo bipolare per l’Arduino DRV8825 (DR10023) e 2 pezzi. NEMA 17 Stepper Motor Bipolar 1.8Deg 39Ncm 42x40mm. Ho cercato su Internet e ho trovato il tuo sito web dove è descritto molto bene e ho mostrato come testare la configurazione.
    Ma dal momento che io sono un principiante nel campo dell’elettronica e Arduino, ho usato il cablaggio dei pulsanti, ma non sono riuscito a ottenere alcun senso nel contesto, ma quando ho visto l’immagine in alto i fili erano anche cablato in modo diverso così ora funziona.
    Poiché è difficile vedere quanti resistori Ω sono, ho usato resistori da 22 K Ω
    So che il colore del cavo è diverso dalle semplici marche, ma sul gradino Nem 17 i motori sono di colore del piombo
    2B – blu
    2A – rosso
    1A – nero
    1B – verde
    Quando stavo testando il vikede layout non così la risoluzione dei problemi dopo un lungo periodo ho scoperto che la mia carta ha solo 8 di I / O al Arduino Uno (0, 1, 2, 3, 9, 10, 11, 13) quando il tuo hanno 10 I / O
    Quindi nello schizzo sulla riga 09 sono stato modificato in (09 const byte ButtM2ccw = 3;) quindi ora funziona
    Sono andato sul sito web di DFrobot e ho trovato la scheda dove c’è solo 8 I / o. Quindi DFrobot deve aver cambiato la scheda dopo aver effettuato la configurazione di prova, ma ovviamente hanno mantenuto lo stesso nome.
    https://www.dfrobot.com/wiki/index.php/Stepper_Motor_Shield_For_Arduino(DRV8825)_SKU:DRI0023
    Sul mio involucro della carta ci sono
    DFRobot
    DR 10023
    Stepper Motor Shield for Arduino
    Made in China 2018-04-11
    Ma per il resto pensavo che fosse davvero un buon setup di prova.
    Dal momento che non sono un’aquila nella lingua, io uso google translate
    Sono affiliato con Stevns MakerSpace
    https://www.facebook.com/groups/stevnsmakerspace/
    Cordialmente, John Pedersen Denmark

    1. Ciao John,
      ottimo lavoro e grazie per la condivisione.
      Non ho compreso la domanda, puoi scriverla in inglese se preferisci.

  1. […] sketch puoi utilizzare quello presentato nell’articolo “Dual stepper motor shield buttons” in cui con due pulsanti puoi controllare l’aperture e la chiusura della mano […]

Lascia un commento

Your email address will not be published.

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