Décélération bouton arduino

Bonjour,
j'ai besoin d'aide pour faire un programme avec moteur CC qui, lorsque que j'appuie sur un bouton, le moteur décélère jusqu'à l'arrêt.
Merci de me répondre sur tinker cad si possible merci beaucoup

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour hugo_si

Voilà un exemple, la valeur PWM qui varie est pwmValue, le bouton est scruté toutes les 500 millisecondes. A toi d'utiliser pwmValue pour commander ton moteur CC.
Il y a des informations qui s'affichent dans la console à 115200.

Tinkercad:
image
et tu verra, dans l'oscillo, la variation du signal PWM

Cordialement
jpbbricole

une autre approche où le bouton est scruté en permanence et une machine à état gère le freinage une fois le bouton appuyé

c'est pas tinkercad mais vous pouvez voir le code et simuler. la console affiche la vitesse en PWM une fois que vous appuyez le bouton.

const byte pinBouton = 2;
const byte pinMoteur = 3; // prendre une pin capable de faire un PWM
enum : byte {A_FOND, FREINAGE, STOP} etat;

const uint32_t deltaT = 250; // on baisse la vitesse toutes les 250ms lors du freinage
const int deltaV = -5; // on décréments  le PWM de 5 en 5 lors du freinage 

int vitesse; // pwm entre 0 et 255

void reglerVitesse(int v) {
  vitesse = constrain(v, 0, 255);
  analogWrite(pinMoteur, vitesse);
  Serial.print(F("Vitesse = ")); Serial.println(vitesse);
}

void gestionArretMoteur() {
  static uint32_t chrono;

  switch (etat) {
    case A_FOND:
      if (digitalRead(pinBouton) == LOW) { // appui
        etat = FREINAGE;
        chrono = millis() - deltaT;
        Serial.println(F("Freinage demandé."));
      }
      break;

    case FREINAGE:
      if (millis() - chrono >= deltaT) {
        chrono += deltaT;
        vitesse += deltaV;
        if (vitesse <= 0) {
          etat = STOP;
          vitesse = 0;
          Serial.print(F("Arrêt moteur -> "));
        }
        reglerVitesse(vitesse);
      }
      break;

    case STOP:
      break;
  }
}

void setup() {
  pinMode(pinBouton, INPUT_PULLUP);
  pinMode(pinMoteur, OUTPUT);
  Serial.begin(115200); Serial.println();

  etat = A_FOND;
  reglerVitesse(255); // on met le moteur à fond

}

void loop() {
  gestionArretMoteur();
}

Bonjour, jpbbricole
Tout d'abord merci beaucoup mais je n'ai pas de programme pour faire fonctionner ce système, je sais pas si c'est possible que vous me le fournissiez.

bien à vous

Merci pour votre aide, c'est super !
Mais je fait comment pour intégrer un moteur cc ?

Le PWM gère l’alimentation du moteur

Bonjour hugo_si

Pour "piquer" un code d'un Tinkercad publique, il faut cliquer
image
et sur
image

int pwmValue = 255;
const int pwmUsaerPin = 9;

const int decrementPwmStep = 5;     // Pas pas de 5
unsigned long decrementTempo = 500;     // Toutes les 1/4 de secondes
unsigned long decrementMillis = millis();

const int decrementBouton = 7;     // Bouton pour décrémenter

void setup()
{
	Serial.begin(115200);
	delay(500);
	
	pinMode(decrementBouton, INPUT_PULLUP);
	pinMode(pwmUsaerPin, OUTPUT);

	analogWrite(pwmUsaerPin, pwmValue);
}
void loop()
{
	if (millis()-decrementMillis >= decrementTempo)
	{
		if (digitalRead(decrementBouton) == LOW)
		{
			pwmValue -= decrementPwmStep;
			pwmValue = constrain(pwmValue, 0, 255);
		}
		
		Serial.println("PWM = " + String(pwmValue));
		analogWrite(pwmUsaerPin, pwmValue);
		
		decrementMillis = millis();
	}
	
}

Cordialement
jpbbricole

bon j'ai trouvé comment rajouter un moteur.

eh merci

eh merci
bien à vous

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