Un plateau tournant avec un moteur pas à pas

Bonjour à tous,

Je me tourne vers vous aujourd'hui après avoir passé de nombreuses heures à chercher en vain quelque chose qui me paraissait pourtant si simple à première vue. Mais là,j'avoue que je ne m'en sors pas du tout...

Je travaille depuis un moment sur un plateau tournant, il est composé ainsi :

Un moteur pas à pas Longruner 17HD48002H-22B (Type Nema 17)
Une carte Arduino Nano (Elegoo - ATmega328P)
Un driver moteur A4988
Une alim 12V 4A
Un bouton poussoir à verrouillage
Un potentiomètre de 10k

Le montage est simple, niveau électronique aucun soucis, le moteur fonctionne et le reste aussi.

Mais c'est un niveau du code que je suis perdu.

Voilà ce que je souhaiterai :

Lorsque le potentiomètre est en position medium, le moteur ne tourne pas. Quand il est tourné vers la gauche, le moteur tourne dans un sens (avec une accélération croissante en fonction de la position). Et la même chose, dans le sens inverse de l'autre coté.

J'aimerais aussi pourvoir limiter la vitesse du moteur, parce que là, il est vraiment trop rapide lorsqu'il est au maximum.

J'ai déjà un petit bout de code, mais il ne fait que faire tourner le moteur, certe, la vitesse est réglable, mais je n'ai pas réussi à faire ce que je souhaitais..

 // Defines pins numbers
const int stepPin = 3;
const int dirPin = 4; 
int customDelay,customDelayMapped; // Defines variables
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
 
  digitalWrite(dirPin,HIGH);
}
void loop() {
  
  customDelayMapped = speedUp(); 
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(customDelayMapped);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
  int customDelay = analogRead(A1); // Reads the potentiometer
  int newCustom = map(customDelay, 0, 1023, 1000, 4000); 
  return newCustom;  

}

J'ai avancé de mon coté en dénichant ceci , lien, mais j'avoue ne pas avoir réussi avec ça. J'ai également trouvé pas mal d'informations sur des liens qui n'utilisent pas de drivers et ou sont déclarés les 4 pins, mais je ne sais pas passer de l'un à l'autre..

Donc si quelques personnes un peu plus savantes que moi pouvaient me venir en aide se serait vraiment sympa! Je ne demande pas la réponse sur un plateau, mais il est vrai que pour un néophyte, il n'est vraiment pas toujours évident de trouver ce que l'on cherche, et encore moins de le comprendre quand on tombe dessus!

Merci de m'avoir lu, et merci à ceux qui pourront m'aiguiller,

Edwin

La librairie AccelStepper permet accélération, décélération, positionnement, vitesse constante, etc.

Tu devrais jeter un œil ici : https://www.makerguides.com/a4988-stepper-motor-driver-arduino-tutorial/

Quand il est tourné vers la gauche, le moteur tourne dans un sens (avec une accélération croissante en fonction de la position)

C'est l'accélération qui est croissante ou la vitesse?
Je suppose gradué le potentiomètre entre -1 et +1, en le mettant au milieu, le moteur doit être arrêté.
si il est sur +1, il doit tourner dans un sens, si je le mets sur 0.5, il doit tourner dans le même sens mais moitié moins vite.

Si en le mettant sur 0,5 il part lentement va de plus en plus vite jusqu'à atteindre sa vitesse finale -> c'est bien l'accélération

Si la vitesse dépend uniquement de la position du potentiomètre, c'est la vitesse qui est croissante en fonction de la position.

Hello, désolé, je n'ai pas pu avancer ces derniers jours, tout d'abord, merci @hbachetti pour le lien, effectivement il y a l'air d'avoir beaucoup d'infos, je me penche dessus dès demain.

Comme tu l'as dis @Vileroi,

vileroi:
C'est l'accélération qui est croissante ou la vitesse?
Je suppose gradué le potentiomètre entre -1 et +1, en le mettant au milieu, le moteur doit être arrêté.
si il est sur +1, il doit tourner dans un sens, si je le mets sur 0.5, il doit tourner dans le même sens mais moitié moins vite.

Si en le mettant sur 0,5 il part lentement va de plus en plus vite jusqu'à atteindre sa vitesse finale -> c'est bien l'accélération

Si la vitesse dépend uniquement de la position du potentiomètre, c'est la vitesse qui est croissante en fonction de la position.

Je souhaiterai que, (je reprends ici ta graduation -1;+1) si le potentiomètre est sur +0.5, le moteur démarre en sens horaire lentement est accélère jusqu'à atteindre 0.5x80tr/min, donc 40tr/min, la moitié de sa Vmax.

Si je positionne le potentiomètre sur -1, le moteur tourne dans le sens antihoraire , il démarre doucement, jusqu'à atteindre sa Vmax de 80tr/min.

J'espère être assez clair, j'ai un peu de mal à expliquer les choses parfois aha,

Merci pour votre aide!

La première chose à faire, quand ton programme ne fait pas ce que tu veux, c’est de mettre des Serial.print() des bonnes variables aux bons endroits (ça se réfléchit).

  Serial.printf ( "delai = " ); Serial.println ( customDelay );

Tu les enlèves quand tu as trouvé l’erreur. Ou ltu les mets en // commentaires, ça peut resservir…