Ci sono vari modi per pilotare un motore passo-passo. Nel mio caso ho un motore 28BYJ-48
e una scheda di controllo ULN2003
In questo modo e' facilissimo pilotare il motore passo-passo.
Come si vede la scheda di controllo richiede:
- +5V
- GND
- 4 GPIO di Arduino (per controllare i 4 avvoglimenti del motore in questione)
L'alimentazione deve essere esterna ad Arduino
Nel mio caso siccome ho una batteria a 9V ho creato un semplice regolatore DC-DC di tensione in modo da ottenere i 5V richiesti per l'alimentazione del motore.
Regolatore DC-DC
Lo schema del circuito di un semplice regolatore DC-DC e' semplicissimoQui sotto un semplice schema di come ho montato il regolatore su una breadboard:
Ecco come ho realizzato velocemente il regolatore sulla basetta:
Ok a questo punto sulle due piste in basso (filo giallo e bianco) ho i +5V e GND con cui alimentero' il motore passo passo e la scheda di controllo.
Collegamento motore ad Arduino
Adesso ho collegato il motore alla scheda di controllo e questa ad Arduino come spiegato qui sotto.Il motore ha un connettore con 5 fili. Lo collego alla scheda (entra in una sola direzione).
Dopo di cio' ho inserito i fili dell'alimentazione in questo modo:
- filo rosso -> GND
- filo marrone -> +5V
Adesso collego questi due fili alla breadboard all'uscita del regolatore DC-DC
Il filo rosso in corrispondenza del filo giallo sulla breadboard (GND)
Il filo marrone in corrispondenza del filo bianco sulla breadboard (+5V)
A questo punto ho collegato la scheda di controllo del motore ad Arduino come spiegato qui sotto.
- filo nero --> pin IN1 della scheda motore
- filo marrone --> pin IN2 della scheda motore
- filo rosso --> pin IN3 della scheda motore
- filo arancione --> pin IN4 della scheda motore
Dal lato Arduino:
- filo nero --> pin 8
- filo rosso --> pin 9
- filo marrone --> pin 10
- filo arancione --> pin 11
Nota
Come notate i pin 9 e 10 sono invertiti per far si che il motore possa giare in senso orario e antiorario.
Immagino che queso sia un problema della schedina da 2$.
Quindi tutto sommato solo invertendo i fili abbiamo risolto il problema.
A questo punto ho collegato la batteria alla breadboard rispettando la polarita'.
Arduino Sketch
Ho creato questo semplice sketch (basato su stepper_oneRevolution) che rimane in attesa di input dal monitor seriale di arduino#include <Stepper.h> const int stepsPerRevolution = 4; int readByte = 0; char buff[255]; //contiene i dati ricevuti int steps = 0; // initialize the stepper library on pins 8 through 11: Stepper myStepper(stepsPerRevolution, 8,9,10,11); void setup() { // set the speed myStepper.setSpeed(4096); // initialize the serial port: Serial.begin(9600); } void clear_buff() { int i = 0; for (i=0; i < 255; i++) buff[i] = 0; } void loop() { clear_buff(); delay(100); if ((readByte = Serial.available()) > 0) { // insert the number of step (+ or -) manually trhough serial monitor Serial.readBytes(buff, readByte); steps = atoi(buff); Serial.println(steps); myStepper.step(steps); } }
Inserisci il numero di step e il verso in cui si vuole che il motore giri:
- 2048 : il motore compie un giro completo in senso orario
- -2048: il motore compie un giro completo in senso antiorario
- 1024: il motore compie mezzo giro in senso orario
Dopo varie prove ho verificato che i valori 4 per stepsPerRevolution e 4096 per la velocita' di rotazione sono i migliori. In questo modo il motore compie un giro completo in circa 6 secondi.
Potete variare questi due valori ma fate in modo che il prodotto dei due valori sia sempre 16384.
Verifica Funzionamento
Come sempre verifichiamo che il tutto funzione come previsto!!!
Come sempre chiunque abbia idee e migliorie e' il benvenuto.
Nessun commento:
Posta un commento