IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Comment vérifier l'état de fonctionnement d'un module L298N


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2019
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 74
    Par défaut Comment vérifier l'état de fonctionnement d'un module L298N
    Bonjour,

    Comment vérifier l'état de fonctionnement du L298N

    Je m'explique. Je tente de télécommander à l'aide d'une télécommande TV la base d'un robot.
    Pour cela j'utilise une carte Uno, un Sensor shield V5.0, le L298N et 2 moteurs d'aspirateurs Samsung Navibot branchés sur les bornes du L298N. Celui-ci est alimenté par la batterie de ce même aspirateur robot soit 24V.

    Le programme a l'air de fonctionner. La télécommande m'envoie bien sur le scope les codes G, D, AV, AR sous forme de chiffres. Je pense avoir bien connecté tous mes câbles sur les cartes.

    Le problème est que les moteurs ne tournent pas et le testeur ne m'affiche rien en sortie de bornes L298N

    Je soupçonne donc que cette carte ne fonctionne pas. Comment savoir si ce L298N est toujours fonctionnel ?

    Cordialement.

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Babbone

    Pourrais-tu mettre ton programme en ligne?

    Cordialement
    jpbbricole

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2019
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 74
    Par défaut
    Merci de votre intérêt.

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    /* **********************************************************
     *                                                          *
     *                                                          *
     *  Remote Controlled Robot Car (TV - Infrared Remote (IR)) *
     *                                                          *
     *                                                          *
     ************************************************************/
     
    /* include library */
    #include <IRremote.h>
     
    /* define IR sensor pin */
    int IRsensorPin = 12;
     
    /* define the some functions used by the library */
    IRrecv irrecv(IRsensorPin);
    decode_results results;
     
    /* define L298N motor drive control pins */
    int RightMotorForward = 2;    // IN1
    int RightMotorBackward = 4;   // IN2
    int LeftMotorForward = 5;     // IN3
    int LeftMotorBackward = 6;    // IN4
     
     
    void setup(){
     
      /* initialize motor control pins as output */
      pinMode(LeftMotorForward,OUTPUT);
      pinMode(RightMotorForward,OUTPUT);
      pinMode(LeftMotorBackward,OUTPUT);
      pinMode(RightMotorBackward,OUTPUT);
     
      /* start serial communication to see hex codes */
      Serial.begin(9600);
      irrecv.enableIRIn();
    }
     
    void loop(){
     
      /* if the sensor is receive any signal */
      if (irrecv.decode(&results)){
     
        /* print the hex code value on the serial monitor */
        Serial.println(results.value);
        delay(5);
     
        /* resume function according to hex code */
        irrecv.resume();
      }
     
      /* if the incoming data is "defined hex code" then run the motors functions */
      /* instead of zeros "0000", write the hex codes of your remote control */
      if(results.value == 322||2370) MotorForward();
      if(results.value == 325||2373) MotorBackward();
      if(results.value == 323||2371) TurnRight();
      if(results.value == 321||2369) TurnLeft();
      if(results.value == 320||2368) MotorStop();
     
    }
     
    /* FORWARD */
    void MotorForward(){
      digitalWrite(LeftMotorForward,HIGH);
      digitalWrite(RightMotorForward,HIGH);
      digitalWrite(LeftMotorBackward,LOW);
      digitalWrite(RightMotorBackward,LOW); 
    }
     
    /* BACKWARD */
    void MotorBackward(){
      digitalWrite(LeftMotorBackward,HIGH);
      digitalWrite(RightMotorBackward,HIGH);
      digitalWrite(LeftMotorForward,LOW);
      digitalWrite(RightMotorForward,LOW);
    }
     
    /* TURN RIGHT */
    void TurnRight(){
      digitalWrite(LeftMotorForward,HIGH); 
      digitalWrite(RightMotorForward,LOW);
      digitalWrite(LeftMotorBackward,LOW);
      digitalWrite(RightMotorBackward,HIGH);
    }
     
    /* TURN LEFT */
    void TurnLeft(){
      digitalWrite(RightMotorForward,HIGH);  
      digitalWrite(LeftMotorForward,LOW);
      digitalWrite(LeftMotorBackward,HIGH);
      digitalWrite(RightMotorBackward,LOW);
    }
     
    /* STOP */
    void MotorStop(){
      digitalWrite(LeftMotorBackward,LOW);
      digitalWrite(RightMotorBackward,LOW);
      digitalWrite(LeftMotorForward,LOW);
      digitalWrite(RightMotorForward,LOW);
    }
    Les moteurs sont alimentés que par le + et le moins. Je n'ai pas connectés les encodeurs pour l'instant.

    Cordialement

  4. #4
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Babbone

    J'ai contrôlé ton programme, l'erreur essentielle est dans la comparaison de 2 valeurs avec la fonction OR ou ||.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(results.value == 322||2370)
    A de forte chances d'être toujours VRAI. En fait tu fais une fonction OR entre ces 2 valeur, mis tu ne testes pas cette condition OR cette condition.

    Donc touts les tests
    if(results.value ==.....
    sont VRAI, donc les fonctions sont toutes executées en suivant et comme le dernier test est
    if(results.value == 320||2368) MotorStop();
    tes 2 moteurs sont arrêtés.

    Tandis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(results.value == 322||results.value == 2370)
    Donne VRAI, seulement si une condition OR l'autre condition est remplie.

    Je me suis "permis" de réorganiser une partie du programme et ai ajouté quelques print afin de mieux voire le déroulement du programme.
    Le "travail" des sorties est également bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    /* **********************************************************
     *                                                          *
     *                                                          *
     *  Remote Controlled Robot Car (TV - Infrared Remote (IR)) *
     *                                                          *
     *                                                          *
     ************************************************************/
     
    /* include library */
    #include <IRremote.h>
     
    /* define IR sensor pin */
    int IRsensorPin = 12;
     
    /* define the some functions used by the library */
    IRrecv irrecv(IRsensorPin);
    decode_results results;
     
    /* define L298N motor drive control pins */
    int RightMotorForward = 2;    // IN1
    int RightMotorBackward = 4;   // IN2
    int LeftMotorForward = 5;     // IN3
    int LeftMotorBackward = 6;    // IN4
     
     
    void setup(){
     
      /* initialize motor control pins as output */
      pinMode(LeftMotorForward,OUTPUT);
      pinMode(RightMotorForward,OUTPUT);
      pinMode(LeftMotorBackward,OUTPUT);
      pinMode(RightMotorBackward,OUTPUT);
     
      /* start serial communication to see hex codes */
      Serial.begin(9600);
      irrecv.enableIRIn();
    }
     
    void loop(){
     
      /* if the sensor is receive any signal */
      if (irrecv.decode(&results)){
     
        /* print the hex code value on the serial monitor */
        Serial.println(results.value);
        delay(5);
     
        /* resume function according to hex code */
        irrecv.resume();
    }
     
      /* if the incoming data is "defined hex code" then run the motors functions */
      /* instead of zeros "0000", write the hex codes of your remote control */
    	if (results.value !=0)
    	{
           if(results.value == 322||results.value == 2370) MotorForward();  
           if(results.value == 325||results.value == 2373) MotorBackward();  
           if(results.value == 323||results.value == 2371) TurnRight();  
           if(results.value == 321||results.value == 2369) TurnLeft();  
           if(results.value == 320||results.value == 2368) MotorStop();  
     
          results.value = 0;
    	}
     
    }
     
    /* FORWARD */
    void MotorForward(){
      digitalWrite(LeftMotorForward,HIGH);
      digitalWrite(RightMotorForward,HIGH);
      digitalWrite(LeftMotorBackward,LOW);
      digitalWrite(RightMotorBackward,LOW); 
     
      Serial.println("MotorForward");
    }
     
    /* BACKWARD */
    void MotorBackward(){
      digitalWrite(LeftMotorBackward,HIGH);
      digitalWrite(RightMotorBackward,HIGH);
      digitalWrite(LeftMotorForward,LOW);
      digitalWrite(RightMotorForward,LOW);
     
      Serial.println("MotorBackward");
    }
     
    /* TURN RIGHT */
    void TurnRight(){
      digitalWrite(LeftMotorForward,HIGH); 
      digitalWrite(RightMotorForward,LOW);
      digitalWrite(LeftMotorBackward,LOW);
      digitalWrite(RightMotorBackward,HIGH);
     
      Serial.println("TurnRight");
    }
     
    /* TURN LEFT */
    void TurnLeft(){
      digitalWrite(RightMotorForward,HIGH);  
      digitalWrite(LeftMotorForward,LOW);
      digitalWrite(LeftMotorBackward,HIGH);
      digitalWrite(RightMotorBackward,LOW);
     
      Serial.println("TurnLeft");
    }
     
    /* STOP */
    void MotorStop(){
      digitalWrite(LeftMotorBackward,LOW);
      digitalWrite(RightMotorBackward,LOW);
      digitalWrite(LeftMotorForward,LOW);
      digitalWrite(RightMotorForward,LOW);
     
      Serial.println("MotorStop");
    }
    A+
    Cordialement
    jpbbricole

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Bonjour,
    Citation Envoyé par Babbone Voir le message
    le L298N et 2 moteurs d'aspirateurs Samsung Navibot branchés sur les bornes du L298N.
    questions : ton L298 se trouve sur un shield ? Si oui lequel ? Sinon, tes moteurs sont des moteurs pas à pas ou à courant continu ? As-tu pensé aux diodes de roues libres ?

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 643
    Par défaut Avanti
    Bonjour,

    J'ai repris la proposition de correction de jpbbricole et me suis intéressé aux codes en regardant leur valeur en hexadécimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if(results.value == 322 || results.value == 2370) MotorForward();  // 0x142, 0x942
     if(results.value == 325 || results.value == 2373) MotorBackward(); // 0x145, 0x945
     if(results.value == 323 || results.value == 2371) TurnRight();     // 0x143, 0x943
     if(results.value == 321 || results.value == 2369) TurnLeft();      // 0x141, 0x941
     if(results.value == 320 || results.value == 2368) MotorStop();     // 0x140, 0x940
    Il semble que seul le bit 11 les différencie c'est à dire 0x800. Il est donc possible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     switch(results.value & 0x7FF) {
       case 322 : MotorForward();  break;
       case 325 : MotorBackward(); break;
       case 323 : TurnRight();     break;
       case 321 : TurnLeft();      break;
       case 320 : MotorStop();   
       }
    Le code & 0x7FF garde seulement les 11 premiers bits (de 0 à 10). Si des bits supérieurs devraient être conservés (s'il existe des codes utiles > 4095) on pourrait utiliser & 0xF7FF en 16 bits et & 0xFFFFF7FF en 32bits.

    Salutations

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2019
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 74
    Par défaut Merci a vous
    Vu l'heure bonjour,
    je vais tester toutes ces modifs ce week-end.
    Oui le L298N est bien un shield Driver moteur a double pont H et les moteurs sont des pas à pas. J'aimerais bien les utiliser a fond. D'ailleurs je ne suis pas certain d'utiliser le bon driver.


    Merci à vous cordialement

  8. #8
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Des moteurs pas à pas ? Ok. Ce sont des moteurs 4 fils ? Tu as bien 1 shield par moteur ? Vérifie tes connexions : si ton moteur ronronne quand tu lances ton script, tu t'es trompé dans les connexions des bobines. Il faut soit inverser la polarité d'une bobine, soit tu as connecté un des fils de la bobine A avec l'un des fils de la bobine B.

    Ensuite, il est clair que le L298 n'est pas adapté à tous les moteurs pas à pas. Si tu délivres trop de puissance d'un coup, ton moteur "déraille", fait énormément de bruit en tournant.

    Peux-tu me donner la référence du shield utilisé ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2019
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 74
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Des moteurs pas à pas ? Ok. Ce sont des moteurs 4 fils ? Tu as bien 1 shield par moteur ?
    Image du shield que j'utilise.

    Nom : L298N.png
Affichages : 1344
Taille : 110,8 Ko

    Image connexion moteur samsung

    Nom : Moteur samsung.jpg
Affichages : 1328
Taille : 164,3 Ko

    Bon, alors j'ai testé le croquis de jpbbricole en appliquant les modifs de Guesset (méthode du switsch)

    Sur la base robot que je suis entrain de tester (avec les moteurs samsung) cela ne fonctionne toujours pas. Par contre j'ai téléversé le croquis sur un autre robot moteur 6V et ça fonctionne.

    Donc c'est le module L298N qui est mort. Je vais le changer et peut-être en rajouter un deuxième. Un pour chaque moteur. Je pense que c'est un bon conseil.

    Cordiales remerciement à vous

  10. #10
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Babbone
    Citation Envoyé par Babbone Voir le message
    moteurs d'aspirateurs Samsung Navibot branchés sur les bornes du L298N.

    Est-ce-que ton moteur ressemble à ceci ou à cela?

    Cordialement
    jpbbricole

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment vérifier l'état d'un programme ?
    Par nico974_0 dans le forum MATLAB
    Réponses: 6
    Dernier message: 30/05/2012, 15h00
  2. [Procédure stockée]comment faire pour vérifier l'état d'un job
    Par HelpmeMM dans le forum Développement
    Réponses: 5
    Dernier message: 28/04/2009, 16h11
  3. Comment vérifier si le GarbageCollector fonctionne
    Par amoniaque dans le forum VB.NET
    Réponses: 4
    Dernier message: 20/04/2009, 08h53
  4. Comment vérifier l'état de ma session
    Par luimême dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/12/2007, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo