Bonjour rapapar
Voilà un exemple, il nécessite la bibliothèque AccelStepper
.
Les 3 pin du driver, DIR, STEP et ENA sont gérées, à toi de mettre tes propres numéros de pin.
C'est essayé avec un Nema17 et un driver A4988, sans micros pas.
Tu peux choisir la plage du pot:
const int potValMin = 0; // Valeur minimum du potentiomètre
const int potValMax = 1023; // Valeur maxinimum du potentiomètre
Ainsi que l'amplitude du mouvement du MPAP:
const int mpapPosMin = 0; // Position minimum du mpap
const int mpapPosMax = 200; // Position maximum du mpap
La transposition se fait ici:
int mpapTarget = map(analogRead(potPin), potValMin, potValMax, mpapPosMin, mpapPosMax);
Tout ça est, bien sûre, à affiner
Le programme:
/*
Name: ARDFR_rapapa_PotToMpap.ino
Created: 16.07.2023
Author: jpbbricole / rapapa
Le moteur pas à pas suit un potentiomètre
*/
#include <AccelStepper.h> // https://www.arduino.cc/reference/en/libraries/accelstepper/
// https://www.pjrc.com/teensy/td_libs_AccelStepper.html
//------------------------------------- Moteur pas à pas (mpap)
const int mpapDirPin = 5; // Pin du signal DIR driver A4988
const int mpapStepPin = 6; // Pin du signal STEP
const int mpapEnaPin = 7; // Pin du signal ENA
const int mpapDriverType = 1; //Stepper Driver, 2 driver pins required
const int mpapEnaOnStat = LOW; // Etat du signal ENA actif
const boolean mpapDirReverse = true; // Pour inverser DIR
AccelStepper mpap(mpapDriverType, mpapStepPin, mpapDirPin);
const int mpapPosMin = 0; // Position minimum du mpap
const int mpapPosMax = 200; // Position maximum du mpap
//------------------------------------- Pozentiomètre (pot)
const int potPin = A0; // Connexion du potentiomètre
const int potValMin = 0; // Valeur minimum du potentiomètre
const int potValMax = 1023; // Valeur maxinimum du potentiomètre
unsigned long potReadTempo = 50; // Tempo de lecture du potentiomètre
unsigned long potReadMillis = millis(); // Tempo de lecture du potentiomètre, chrono
void setup()
{
Serial.begin(115200);
// DIR STEP ENA
mpap.setPinsInverted(mpapDirReverse, false, true); // Inverser DIR si nécessaire
mpap.setEnablePin(mpapEnaPin);
mpap.setMaxSpeed(1200);
mpap.setAcceleration(8000);
mpap.enableOutputs(); // Activer les signaux du MPAP
}
void loop()
{
if (millis() - potReadMillis >= potReadTempo)
{
int mpapTarget = map(analogRead(potPin), potValMin, potValMax, mpapPosMin, mpapPosMax); // https://www.arduino.cc/reference/en/language/functions/math/map/
mpap.moveTo(mpapTarget);
potReadMillis = millis();
}
mpap.run(); // S'il y a encore des pas à faire
}
A+
Cordialement
jpbbricole