Faire touner un moteur pap dans le sens inverse

Bonjour tout le monde,

Je suis en train de commencer un programme, mais me voilà déjà bloqué... Mon but est qu'avec l'aide d'un joystick, mon moteur tourne dans le sens inverse des aiguilles d'une montre (si le joystick est en position basse) et dans le sens des aiguilles d'une montre (s'il est en position haute). J'ai donc d'abord commencé avec la fonction map, mais cela n'a pas marché. J'ai donc continué avec un fonctionnement plus primitif, mais qui me convient avec des "if et else".

Le résultat obtenu est que quelle que soit la valeur du joystick, la roue tourne toujours dans le même sens, sauf quand le joystick est à la position neutre ou le moteur ne tourne pas. Pourtant, en vérifiant dans la console, les valeurs renvoyées pour la vitesse sont correctes. Je pense donc que c'est la fonction setSpeed qui ne prend pas de valeur négative et donc ce n'est pas de cette façon qu'il faut faire.

Voici mon code et merci d'avance pour votre aide!

#include <AccelStepper.h>

// Broches de contrôle du moteur
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11

// Broche du potentiomètre
#define potPin A0

// Créer un objet AccelStepper
AccelStepper stepper(AccelStepper::FULL4WIRE, motorPin1, motorPin3, motorPin2, motorPin4);

void setup() {
  // Vitesse maximale et accélération du moteur
  stepper.setMaxSpeed(2000);
  stepper.setAcceleration(500);
  Serial.begin(9600);
}

void loop() {
  // Lire la valeur du potentiomètre
  int potValue = analogRead(potPin);
  Serial.println(potValue);
  Serial.println("-----");

  float motorSpeed = 0; // Initialiser la vitesse à 0
  
  // Déterminer la vitesse en fonction de la valeur du potentiomètre
  if (potValue < 440) {
    motorSpeed = -2000; // Faire tourner dans le sens inverse avec une vitesse négative
  } else if (potValue > 600) {
    motorSpeed = 2000; // Faire tourner dans le sens normal avec une vitesse positive
  }
  
  // Convertir la valeur lue en une vitesse pour le moteur
  Serial.println(motorSpeed);
  Serial.println("-");
  
  // Définir la vitesse du moteur
  stepper.setSpeed(motorSpeed);
  
  // Faire avancer le moteur d'une étape
  stepper.runSpeed();
  
}

merci d'avance !!!

Cette librairie dispose d'une documentation complète.
https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ae79c49ad69d5ccc9da0ee691fa4ca235

setSpeed()
void AccelStepper::setSpeed	(	float 	speed	)	
Sets the desired constant speed for use with runSpeed().

Parameters
[in]	speed	The desired constant speed in steps per second. 
Positive is clockwise. 
Speeds of more than 1000 steps per second are unreliable. 
Very slow speeds may be set (eg 0.00027777 for once per hour, approximately. 
Speed accuracy depends on the Arduino crystal. Jitter depends on how frequently you call the runSpeed() function. 
The speed will be limited by the current value of setMaxSpeed()

vitesse positive sens horaire
vitesse négative sens antihoraire
une vitesse > à 1000 pas/sec n'est pas fiable

loop() est supposée s'exécuter plusieurs milliers fois par seconde pour que le moteur tourne correctement.
Les Serial.print() ralentissent très sérieusement la boucle (surtout avec un débit à 9600 bauds).
Une fois que tu t'es assuré que ton potentiomètre était bien lu, il n'est pas nécessaire de les conserver.

dans wokwi votre code à l'air de fonctionner (j'ai viré des print, baissé la vitesse et passé le moniteur série à 115200 bauds)

finalement c'etait une erreur de ma part au niveau des branchements je n'avais pas relier les ground ensemble merci de votre aide !

1 Like

merci d'être revenu nous donner le fin mot de l'histoire

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