• Post category:Nano
  • Post comments:0 commentaire
  • Post last modified:mars 12, 2022
  • Temps de lecture :6 min de lecture

Cycle décélération, accélération avec moteur DC (TT Moteur 130) + L298N et Arduino Nano *

 

 

    Prérequis :

Matériel :

  • 1 x Carte Arduino Nano
  • 1 x L298N
  • 2 x TT Moteur 130
  • 1 x Alimentation 9v
  • Fils de connexion
  • 1 x Breadboard

Version IDE :

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

#define borneEN1        6       // On branche "EN1" du L298N à la pin D6 de l'arduino
#define borneIN1        7       // On branche "IN1" du L298N à la pin D7 de l'arduino
#define borneIN2        8       // On branche "IN2" du L298N à la pin D8 de l'arduino
#define borneIN3        9       // On branche "IN3" du L298N à la pin D9 de l'arduino
#define borneIN4        10       // On branche "IN4" du L298N à la pin D10 de l'arduino
#define borneEN2        11       // On branche "EN2" du L298N à la pin D10 de l'arduino
unsigned long currentTime = 0; //Servira à stocker la valeur du temps écoulé millis();
unsigned long previousTime = 0; //Servira à stocker la valeur du temps actuelle
unsigned long tpsAcceleration = 20; //Defini le temps acceleration
unsigned long tpsDeceleration = 20; //Defini le temps deceleration
int vitesse = 0; //Variable pour stocker la vitesse (Entre 0 et 255 max).
int Etape = 1; //Etape de transition des actions

void setup() {
  Serial.begin(9600);
  // Déclaration des pins de l'Arduino en "sortie"
  pinMode(borneEN1, OUTPUT);
  pinMode(borneIN1, OUTPUT);
  pinMode(borneIN2, OUTPUT);
  pinMode(borneIN3, OUTPUT);
  pinMode(borneIN4, OUTPUT);
  pinMode(borneEN2, OUTPUT);
}

void loop() {
  //On stock la valeur du temps écoulé millis() dans notre variable
  currentTime = millis();
  //Affiche la vitesse dans le Moniteur Série
  Serial.println(vitesse);
  switch (Etape) {
    case 1:
      //Acceleration en Marche Avant
      Acceleration();
      MarcheAV();
      //Si moteur à atteind ça vitesse max (vitesse = 255)
      if (vitesse >= 255) {
        //On attend 2 secs et on change d'étape
        delay(2000);
        Etape = 2;
      }
      break;
    case 2:
      //Deceleration en Marche Avant
      Deceleration();
      MarcheAV();
      //Si moteur à atteind ça vitesse min (vitesse = 0)
      if (vitesse == 0) {
        //On attend 2 secs et on change d'étape
        delay(2000);
        Etape = 3;
      }
      break;
    case 3:
      //Acceleration en Marche Arrière
      Acceleration();
      MarcheAR();
      //Si moteur à atteind ça vitesse max (vitesse = 255)
      if (vitesse == 255) {
        //On attend 2 secs et on change d'étape
        delay(2000);
        Etape = 4;
      }
      break;
    case 4:
      //Deceleration en Marche Arrière
      Deceleration();
      MarcheAR();
      //Si moteur à atteind ça vitesse min  vitesse min (vitesse = 0)
      if (vitesse == 0) {
        //On attend 2 secs et on change d'étape
        delay(2000);
        Etape = 1;
      }
      break;
    default:
      break;
  }
}

void Acceleration() {
  //On augmente la vitesse de +1 si la valeur du temps écoulé - valeur du temps actuelle
  //et plus grande que notre temps d'acceleration
  if ((currentTime - previousTime) > tpsAcceleration) {
    //On met à jour notre valeur du temps actuelle
    previousTime = currentTime;
    vitesse++;
    vitesse = min(vitesse, 255); //Le code garantit qu'il ne dépasse jamais 255.
  }
  analogWrite(borneEN1, vitesse);
  analogWrite(borneEN2, vitesse);
}

void Deceleration() {
  //On diminue la vitesse de -1 si la valeur du temps écoulé - valeur du temps actuelle
  //et plus grande que notre temps deceleration
  if ((currentTime - previousTime) > tpsDeceleration) {
    //On met à jour notre valeur du temps actuelle
    previousTime = currentTime;
    vitesse--;
    vitesse = max(vitesse, 0); //Le code garantit qu'il ne sera jamais en dessous de 0.
  }
  analogWrite(borneEN1, vitesse);
  analogWrite(borneEN2, vitesse);
}

void MarcheAV() {
  // Configuration du L298N en "marche avant"
  digitalWrite(borneIN1, HIGH);
  digitalWrite(borneIN2, LOW);
  digitalWrite(borneIN3, HIGH);
  digitalWrite(borneIN4, LOW);
}

void MarcheAR() {
  // Configuration du L298N en "marche arrière"
  digitalWrite(borneIN1, LOW);
  digitalWrite(borneIN2, HIGH);
  digitalWrite(borneIN3, LOW);
  digitalWrite(borneIN4, HIGH);
}

 


 

Laisser un commentaire