Faire correspondre la position d'une glissière en fonction de la valeur d'un potentiomètre (nema 17)

Salut :slight_smile:
je cherche à réaliser un slider qui en gros en fonction de la positon d'un potentiomètre de 0 à 100% va de la position gauche droite et suit la commande pour aller là où on lui dit précisément. Comme déplacer l'axe X d'une CNC avec un potar quoi.
Je me dis que le plus simple c'est de passer par un arduino pour compter les impulsions.
Enfin j'en sais rien du coup si quelqu'un peu me mettre sur la bonne voie merci !
c'est pour un nema 17
il me reste un peu d'électronique de coté : Mega 2560 + ramps1.4 + 3 drivers
Y'a un marlin 2 dessus déjà mais je pense pas que ce soit utile pour faire un truc simple et autonome si ?

Pas de problème pour programmer Arduino sinon je fais aussi des firmware sur le pico zero avec le sdk en C
Pas de problème pour faire un circuit si nécessaire.

Merci :slight_smile:

Bonjour,
Il serait préférable si tu espères des réponses de lire le message d’accueil et d’appliquer les recommadations.

En l’etat actuel le titre n’est pas conforme (Il doit etre representatif du sujet car il est utilisé par le moteur de recherche du forum) et il est un peu difficile de comprendre ce que tu veux faire, donc pas simple d’aider.

1 Like

vous n'avez pas de potentiomètre ?

quelle est la question alors ?

1 Like

Bonjour rapapar
En gros, tu lis le pot qui te donne de 0 à 1023, le langage Arduino te donne la fonction map() qui permet de transposer ces valeurs en valeurs de déplacement de ton moteur.
Si tu veux un exemple...

Cordialement
jpbbricole

Parfait merci beaucoup du coup de pouce !

alors si tu as un exemple sous le coude c'est encore mieux merci :slight_smile:

Bonjour rapapa

OK, dans le courant de la journée.

Cordialement
jpbbricole

1 Like

si, d'ailleurs ce sera un linéaire

je sais dev mais je ne connais pas bien l'environnement et j'ai rien trouvé rapidement du coup je demande qu'on me lance sur la bonne voie :slight_smile:

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 :wink:

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

2 Likes

Ha oui tu m'as carrément écrits le programme, c'est super sympa !! merci beaucoup!! :star_struck:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.