< Arduino N° 58 | > Arduino N° 60 |
Pilotaggio di un motore "a passo" (detto anche "passo-passo" o "stepper motor") attraverso un sensore di posizione.
Un potenziometro, comandato esternamente, segnala la posizione del cursore ad un ingresso analogico. La scheda Arduino, comandata da questo sketch, fa tutto il resto.
Lo spostamento angolare del motore è relativo a quello operato sulla manopola del potenziometro.
Importante è la determinazione del valore iniziale di posizione del motore.
Per il pilotaggio del motore a passo occorre una interfaccia che nel nostro caso può essere rappresentata dal modulo di pilotaggio motori con L298. Il modulo in questione è in grado di pilotare due motori in continua o un motore passo-passo.
Nel caso di alimentazione "esterna" del modulo L298 è necessario predisporre il relativo ponticello (jumper) in modo opportuno.
/* ------------------------------ Inizio programma ---------------------------------------------------
* Stepper Motor Knob
* A stepper motor follows the turns of a potentiometer
* (or other sensor) on analog input 0.
*
* http://www.arduino.cc/en/Reference/Stepper
* This example code is in the public domain.
* Modified by Achille De Santis - 13-06-2020
*/
#include <Stepper.h>
#define STEPS 200 // dai "dati di targa" del motore; in questo caso: 1.8 DEG/step.
// questo parametro determina la "precisione" della movimentazione, cioè l'angolo di un passo.
// ---------- I/O ---------------------------------
#define P1 7 // abilitazione alla partenza
#define POT 0 // A0 ingresso analogico, collegato al potenziometro di posizione
#define A 8
#define B 9
#define C 10
#define D 11
// ------------------------------------------------
Stepper stepper(STEPS,A,B,C,D); // presenta una istanza della classe stepper, specificando
// il numero di passi del motore ed i piedini ad esso collegati.
bool m; // variabile di stato, consenso alla partenza del motore (0)
const int vel=30; // predispone la velocità del motore a 30 giri/min
int previous; // valore precedente di lettura dall'ingresso analogico.
int val; // valore analogico
void intestazione()
{ Serial.println(" ---------------------------------------------- ");
Serial.println(" - Tecnatron - ing. Achille De Santis - ");
Serial.println(" - Stepper MotorKnob - ");
Serial.println(" - V. 3.1 del 25-06-2020 - ");
Serial.println(" ---------------------------------------------- ");
}
void setup()
{
Serial.begin(9600); // setto la velocità di comunicazione
intestazione(); // intestazione, inviata alla seriale
pinMode(P1, INPUT_PULLUP);
stepper.setSpeed(vel); // stabilisce la velocità del motore
val = analogRead(POT); // legge inizialmente il sensore
previous = val; // e stabilisce la posizione iniziale.
}
void loop()
{
val = analogRead(POT); // legge il sensore
m = digitalRead(P1); // legge il valore di abilitazione
if (m==0)
{
stepper.step(val - previous); // esegue i passi da fare, positivi o negativi.
previous = val; // aggiorna il valore alla posizione attuale.
Serial.print("valore attuale: "); Serial.println(val); // stampa la posizione attuale
}
}
// -------------------- Fine programma --------------------------------------------------------
Simulazione:
Argomenti correlati: Arduino N° 57 - Controllo Motore passo-passo - esempio
Nessun commento:
Posta un commento