Aller au contenu


Photo
* * * * * 1 note(s)

[Projet Rover 2WD] Mon robot de surveillance mobile et télécommandé

Arduino Raspberry PI3 MIT Inventor 2 Rover UGV Robot mobile PID

273 réponses à ce sujet

#261 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 14 novembre 2018 - 06:42

Effectivement  Mike ,  il y a à gratter  !

 

Ci-dessous le code de test( avec les séquences de mouvement robot commentées volontairement dans la partie "void loop"  pour le test  se résumant à la partie initialisation + mouvement manuel des roues dans la boucle loop ) et le fichier de traces

 

=> Le comptage des ticks des 2 encodeurs fonctionnent correctement en tournant les roues à la main ( le code de lecture des ticks par interruption fonctionne donc)  !

=> La roue droite ne tourne pas  dans la fonction "MotorsSetup" ni non plus dans les conditions normales d'exécution du sketch avec les séquences de mouvement non commentéres dans la partie "void loop" , ce qui explique pourquoi il n'y a pas de comptage de ticks par l'encodeur

 

=> Pourquoi la roue droite ne tourne t'elle pas lorsque l'encodeur est initialisé ?

 

Note : En commentant "EncodersSetup(); // Init 2 encoders" dans la boucle "setup" pour un fonctionnement sans encodeurs , la route droite tourne normalement.

 

 

Traces de comptage des ticks des 2 encodeurs fonctionnent correctement en tournant les roues à la main

<Ard<Arduino : Setup Encoders>
<Arduino : Setup Motors>
<Arduino : AvancerRobot()>
<EncodA = -1492.00 , EncodB = 0.00>      //  Le moteur droit ne tourne pas ( donc pas de comptage ticks par encodeur )
<Arduino : ReculerRobot()>
<EncodA = 1423.00 , EncodB = 0.00>       // Le moteur droit ne tourne pas
<Arduino : ArreterRobot()>
<Arduino : Start loop
<EncodA = 123.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = -401.00>     // La roue droite tourne manuellement vers l'avant , comptage ticks OK par encodeur 
<EncodA = 0.00 , EncodB = -434.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = -305.00 , EncodB = 0.00>     // // La roue gauche tourne manuellement vers l'avant , comptage ticks OK par encodeur 
<EncodA = -319.00 , EncodB = 0.00>
<EncodA = -1.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>

Le code utilisé

/*************************************************************
Motor Shield Arduino - 2-Channel DC Motor - 10/11/2018
*************************************************************/
// ------- Bibiliothèques
#include <TimerOne.h> // Pour le timer

// ------ Pins MOTORS connectés à l'Arduino MEGA
#define PINMOTEURGAUCHEPWMA 3    // Arduino Shield motor gauche
#define PINMOTEURDROITPWMB 11    // Arduino Shield motor droit
#define PINBRAKEA 9              // Arduino Shield motor gauche
#define PINBRAKEB 8              // Arduino Shield motor droit
#define PINMOTEURGAUCHEDIRA 12   // Arduino Shield motor gauche
#define PINMOTEURDROITDIRB 13    // Arduino Shield motor droit
#define PINENCODGAUCHEA 18       // Encodeur A gauche
#define PINENCODGAUCHEB 19       // Encodeur B gauche
#define PINENCODDROITA 20        // Encodeur A droit
#define PINENCODDROITB 21        // Encodeur B droit

int SpeedMotor_A=123;
int SpeedMotor_B=123;
// volatile => pour toute variable qui sera utilise dans les interruptions

volatile int countDroit = 0; /* comptage de tick d'encoder qui sera incrémenté sur interruption " On change " sur l'interruption 0 */
volatile int countGauche = 0; /* comptage de tick d'encoder qui sera incrémenté sur interruption " On change " sur l'interruption 1 */
volatile double speedDroit = 0; // vitesse du moteur
volatile double speedGauche = 0; // vitesse du moteur


void setup() {
  
 SerialSetup();     // initialize the serial communication 
 EncodersSetup();    // Init 2 encoders
 MotorsSetup();      // Init 2 motors sans PID

}
 
void loop()
{
  Serial.println("<Arduino : Start loop");
  // AvancerRobot();
  delay(2000);
  // ArreterRobot();
  delay(20000);
  // ReculerRobot();
  delay(2000);
  
  Serial.println("<Arduino : End loop");
 
}

////////////////////////////////////////////////////

void counterDroit()
{
  bool statePINENCODDROITA = digitalRead(PINENCODDROITA);
  // Serial.println("CounterDroit");
  // Serial.print(statePINENCODDROITA);
  bool statePINENCODDROITB = digitalRead(PINENCODDROITB);
  // Serial.print(" , ");
  // Serial.print(statePINENCODDROITA);
  (statePINENCODDROITA ^ statePINENCODDROITB) ? countDroit-- : countDroit++; // régler ++ et -- pour que faire avancer => + inverser si nécessaire
}

// Encoder counter 2

void counterGauche()
{
  bool statePINENCODGAUCHEA = digitalRead(PINENCODGAUCHEA);
  // Serial.println("CounterGauche");
  // Serial.print(statePINENCODGAUCHEA);
  bool statePINENCODGAUCHEB = digitalRead(PINENCODGAUCHEB);
  // Serial.print(" , ");
  // Serial.print(statePINENCODGAUCHEB);
  (statePINENCODGAUCHEA ^ statePINENCODGAUCHEB) ? countGauche++ : countGauche--; // régler ++ et -- pour que faire avancer => +
}

// Timer pour calculer la vitesse grace aux encodeurs

void timerIsr()
{
  // asservissement en vitesse
  speedDroit = countDroit;
  countDroit = 0;
  speedGauche = countGauche;
  countGauche = 0;
  Serial.print("<EncodA = ");
  Serial.print(speedGauche);   // 6 ticks par tour x 34 tours par mn
  Serial.print(" , EncodB = ");
  Serial.print(speedDroit);  
  Serial.print(">");
  Serial.println("");
 
}


////////  Traitement ordres Robot
void ArreterRobot()
{
  Serial.println("<Arduino : ArreterRobot()>");
  analogWrite(PINMOTEURGAUCHEPWMA, 0); // Stop the motor by inertia , motor turn off
  analogWrite(PINMOTEURDROITPWMB, 0);  
  digitalWrite(PINBRAKEA, HIGH); // set the brake pins LOW to turn them off:
  digitalWrite(PINBRAKEB, HIGH); 
}

void AvancerRobot()
{
  // Move the motor forward
    Serial.println("<Arduino : AvancerRobot()>");
    digitalWrite(PINBRAKEA, LOW); // set the brake pins LOW to turn them off:
    digitalWrite(PINBRAKEB, LOW); 
    digitalWrite(PINMOTEURGAUCHEDIRA, HIGH);  // Set direction to High = Forward
    digitalWrite(PINMOTEURDROITDIRB, LOW);
    analogWrite(PINMOTEURGAUCHEPWMA, SpeedMotor_A);
    analogWrite(PINMOTEURDROITPWMB, SpeedMotor_B); 
  
}

void ReculerRobot()
{
  // Reverse the motors
  Serial.println("<Arduino : ReculerRobot()>");
  digitalWrite(PINBRAKEA, LOW); // set the brake pins LOW to turn them off:
  digitalWrite(PINBRAKEB, LOW); 
  digitalWrite(PINMOTEURGAUCHEDIRA, LOW);  // Set direction to Low = Backward 
  digitalWrite(PINMOTEURDROITDIRB, HIGH);  // Set direction to High = Backward 
  analogWrite(PINMOTEURGAUCHEPWMA, SpeedMotor_A);
  analogWrite(PINMOTEURDROITPWMB, SpeedMotor_B);
  // } 
}
void MotorsSetup()
{
  // set up all of the pins of the motor shield as outputs:
  Serial.println("<Arduino : Setup Motors>");
  pinMode(PINBRAKEA, OUTPUT);
  pinMode(PINMOTEURGAUCHEDIRA, OUTPUT);
  pinMode(PINMOTEURGAUCHEPWMA, OUTPUT);
  pinMode(PINBRAKEB, OUTPUT);
  pinMode(PINMOTEURDROITDIRB, OUTPUT);
  pinMode(PINMOTEURDROITPWMB, OUTPUT);
    // Move the motor forward
  AvancerRobot();
  delay(1000);
  ReculerRobot();
  delay(1000);
  ArreterRobot(); 

}  

void EncodersSetup()
{
  Serial.println("<Arduino : Setup Encoders>");
  // on initialise les entrées et sorties
  pinMode(PINENCODGAUCHEA, INPUT_PULLUP);
  pinMode(PINENCODGAUCHEB, INPUT_PULLUP);
  pinMode(PINENCODDROITA, INPUT_PULLUP);
  pinMode(PINENCODDROITB, INPUT_PULLUP);
 
  // Encoder quadrature counter
 attachInterrupt(digitalPinToInterrupt(PINENCODGAUCHEA),counterGauche, CHANGE);
 attachInterrupt(digitalPinToInterrupt(PINENCODDROITA),counterDroit, CHANGE);
 Timer1.initialize(1000000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz 
 Timer1.attachInterrupt( timerIsr );

}

void SerialSetup()
{
  Serial.begin(19200); // initialize the serial communication 
}


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#262 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 15 novembre 2018 - 03:39

Traces ... suite .

 

Le courant consommé par chaque moteur est disponible coté shield motor Arduino et est accèssible par un analogRead().

La fonction de lecture du courant moteur implémentée dans le sketch du robot a été transférée dans le sketch de test pour avoir accès à ces informations de courant consommé.

 

La trace montre que lors des ordres avancer ou reculer , le moteur droit à l'air bloqué vu que le courant est beaucoup plus important ( 3.3v = courant max de  2A ).

Au toucher il semble vibrer ou saccader un peu sans tourner.

 

Une mesure au multimètre de la tension appliquée au moteur droit lors des ordres avancer ou reculer reste nulle ou pratiquement nulle contrairement au moteur gauche

<Arduino : Setup Encoders>
<Arduino : Setup Motors>
<Arduino : AvancerRobot()>
<EncodA = -1472.00 , EncodB = 0.00>
Courant moteur A = 18.00 , Courant moteur B = 473.00>
<Arduino : ReculerRobot()>
<EncodA = 1299.00 , EncodB = 0.00>
Courant moteur A = 18.00 , Courant moteur B = 530.00>
<Arduino : ArreterRobot()>
<Arduino : Start loop
<Arduino : AvancerRobot()>
<EncodA = -1219.00 , EncodB = 9.00>
Courant moteur A = 20.00 , Courant moteur B = 513.00>
<EncodA = -1644.00 , EncodB = -2.00>
Courant moteur A = 109.00 , Courant moteur B = 530.00>
<Arduino : ArreterRobot()>
<EncodA = -215.00 , EncodB = 1.00>
Courant moteur A = 18.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 18.00 , Courant moteur B = 18.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 18.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 18.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 19.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 18.00>
<EncodA = 0.00 , EncodB = 0.00>
<Arduino : ReculerRobot()>
<EncodA = 902.00 , EncodB = 0.00>
Courant moteur A = 95.00 , Courant moteur B = 522.00>
<EncodA = 1628.00 , EncodB = 8.00>
Courant moteur A = 102.00 , Courant moteur B = 525.00>
<Arduino : End loop
<Arduino : Start loop
<Arduino : AvancerRobot()>
<EncodA = -113.00 , EncodB = -1.00>
Courant moteur A = 19.00 , Courant moteur B = 538.00>
<EncodA = -1608.00 , EncodB = -9.00>
Courant moteur A = 18.00 , Courant moteur B = 530.00>
<Arduino : ArreterRobot()>
<EncodA = -746.00 , EncodB = -1.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>
<EncodA = 0.00 , EncodB = 0.00>
Courant moteur A = 17.00 , Courant moteur B = 17.00>


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#263 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 545 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 novembre 2018 - 05:36

Bon alors si je résumme tu passe d'un problème où tu dis

=>avoir les moteur gauche + codeur qui fonctionnent bien et le moteur droit qui fonctionne mais que le codeur droit ne fonctionne pas
à 
=> avoir les moteur gauche + codeur qui fonctionnent bien et le codeur droit qui fonctionne mais que le droit droit ne fonctionne pas ? 

 

Du coup avant de se pencher sur le soft on va tester matériel et câblage ;) 

Du coup pour tester ton moteur : Test simple : 

Débranche le moteur de ta carte moteur met du jus sur les deux fils qui pilotent le moteur et regarde si il tourne ... 

Je ne me pencherais pas sur l'étude du soft tant qu'on aura pas validé que le matériel marche puis que le câblage est bien fait ;)
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#264 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 16 novembre 2018 - 05:35

Merci Mike pour le retour.

Si tu me permets , je vais reformuler

1) dans le Post #261

Les test sont faits avec un sketch unique  pour couvrir les tests avec encodeurs (ligne encodersSetup() non commenté ) et sans encodeurs (ligne encodersSetup() commenté )
 

void setup() {
 SerialSetup();     // initialize the serial communication
 EncodersSetup();    // Init 2 encoders à commenter pour version sketch sans encodeurs comme avant l'introduction des encodeurs
 MotorsSetup();      // Init 2 motors sans PID  avec séquence avancer() et reculer()
}

Les résultats

=> Le comptage des ticks des 2 encodeurs fonctionnent correctement en tournant les roues à la main ( le code de lecture des ticks par interruption fonctionne donc)  , cf traces fournies dans le post avec un extrait plus bas!

=> La roue droite ne tourne pas  dans la fonction "MotorsSetup" de la boucle "void setup" ni non plus dans les conditions normales d'exécution du sketch avec les séquences de mouvement de la partie "void loop" , ce qui explique pourquoi il n'y a pas de comptage de ticks par l'encodeur
 

void loop() {
  AvancerRobot();   
  delay(2000);
  ArreterRobot();
  delay(20000);
  ReculerRobot();
  delay(2000);
 }

Traces

 

<Arduino : Setup Encoders>
<Arduino : Setup Motors>
<Arduino : AvancerRobot()>
<EncodA = -1492.00 , EncodB = 0.00>      //  Le moteur droit ne tourne pas ( donc pas de comptage ticks par encodeur )
<Arduino : ReculerRobot()>
<EncodA = 1423.00 , EncodB = 0.00>       // Le moteur droit ne tourne pas ( idem )
<Arduino : ArreterRobot()>
<Arduino : Start loop
<EncodA = 123.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = -401.00>     // La roue droite tourne manuellement vers l'avant , comptage ticks OK par encodeur
<EncodA = 0.00 , EncodB = -434.00>
<EncodA = 0.00 , EncodB = 0.00>
<EncodA = -305.00 , EncodB = 0.00>     // // La roue gauche tourne manuellement vers l'avant , comptage ticks OK par encodeur
<EncodA = -319.00 , EncodB = 0.00>
<EncodA = -1.00 , EncodB = 0.00>
<EncodA = 0.00 , EncodB = 0.00>

2) Dans le post #262

 

je dis la meme chose après de nouveaux des tests avec le meme sketch + ajout affichage courant moteur :

Le moteur droit ne tourne pas  donc lecture encoder nulle mais avec un courant consommé par le moteur droit plus important que le moteur gauche.
Une légère vibration du moteur droit est ressentie au toucher .
Pas de tension mesurée aux bornes du moteur droit (contrairement au moteur gauche) lors des ordres avancer() ou reculer()

 

<Arduino : Setup Encoders>
<Arduino : Setup Motors>
<Arduino : AvancerRobot()>
<EncodA = -1472.00 , EncodB = 0.00>
Courant moteur A = 18.00 , Courant moteur B = 473.00>
<Arduino : ReculerRobot()>
<EncodA = 1299.00 , EncodB = 0.00>
Courant moteur A = 18.00 , Courant moteur B = 530.00>
<Arduino : ArreterRobot()>
<Arduino : Start loop
<Arduino : AvancerRobot()>
<EncodA = -1219.00 , EncodB = 9.00>
Courant moteur A = 20.00 , Courant moteur B = 513.00>
<EncodA = -1644.00 , EncodB = -2.00>                         //  vibration moteur droit ?
Courant moteur A = 109.00 , Courant moteur B = 530.00>
<Arduino : ArreterRobot()>

3) Derniers essais ce jour

Le moteur a été testé en débranchant le moteur de la carte moteur et en alimentant les deux fils qui pilotent le moteur , le moteur tourne dans les 2 sens en fonction de la polarité de la tension appliquée

Avec le sketch minimum du post #256 , meme problème pour le moteur droit qui ne tourne pas , la tension mesurée aux bornes d'alimentation du moteur est nulle lors des ordres avancer() ou reculer() ....  pb à orienter coté driver ?


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#265 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 545 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 16 novembre 2018 - 06:12

hum ... 

Fait un code ultra simple séparé qui permet de faire tourner les moteurs avec ton driver, si le code simple marche c'est que c'est on code actuel qui pose un problème ... 
genre gestion des interruptions incompatibles avec un pwm ou un truc du genre ... 

à creuser ...  J'espère qu'on va rapidement trouver =) 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#266 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 18 novembre 2018 - 12:32

@Mike118 , J'ai donc refais les essais avec  un sketch minimum pour les 2 moteurs et ordres avancer et reculer   , en retirant toutes les autres connexions sur les pins Arduino venant des capteurs US et des encodeurs.

 

Résultat :

 

- Le moteur droit ne tourne pas

- pas de tension appliquée aux bornes du moteur droit lors des commandes avancer et reculer par le shield moteur Arduino.

 

=> pas de commande moteur envoyée vers le moteur droit par la carte driver moteur !

=> Ca pointe à priori vers un problème HW Arduino ( Pin PWM / DIR entre la carte MEGA et le shield carte moteur ) 

 

La doc du shield motor Arduino .....   https://store.arduin...tor-shield-rev3

/*************************************************************
Motor Shield Arduino 2-Channel DC Motor Testing
*************************************************************/

void setup() {
  
  //Setup Channel A  ( moteur gauche)
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT);  //Initiates Brake Channel A pin
  pinMode(3, OUTPUT);  //Initiates PWM A

  //Setup Channel B ( moteur droite )
  pinMode(13, OUTPUT); //Initiates Motor Channel A pin
  pinMode(8, OUTPUT);  //Initiates Brake Channel A pin
  pinMode(11, OUTPUT);  //Initiates PWM B

  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
}

void loop(){
  
  //Motor A forward 
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  analogWrite(3, 123);   //Spins the motor on Channel A at half speed

  //Motor B forward 
  digitalWrite(13, LOW);  //Establishes forward direction of Channel B
  analogWrite(11, 123);    //Spins the motor on Channel B at half speed

  delay(3000);
  
  //Motor A backward 
  digitalWrite(12, LOW);  //Establishes backward direction of Channel A
  analogWrite(3, 123);    //Spins the motor on Channel A at half speed
  
  //Motor B backwardd 
  digitalWrite(13, HIGH); //Establishes backward direction of Channel B
  analogWrite(11, 123);   //Spins the motor on Channel B at half speed
    
  delay(3000);
    
}

Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#267 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 545 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 18 novembre 2018 - 01:10

 On sait que les moteurs marchent.

 

 

Il faut vérifier que : 

=> Il n'y a pas de fils foirés cassés ou mal connectés entre l'arduino et le driver.
=> Il n'y a pas de fils foirés cassés ou mal connecté entre le driver et le moteur. ( Exemple câble mal enfoncer dans le bornier ... ) 
=> Que l'arduino arrive bien à exercer les niveau logiques attendus 

 

Si il n'y a pas un de ces problème je crains que cela soit bien  ton driver qui est mort. 
 

 

Différents test à faire : 
 

Si tu as un multimètre vérifie les câbles  branchés sur les pins 13 8 et 11 ...
Ou direcetement inverse le câblage entre arduino est driver pour que le channel A soit piloté par 13 8 et 11 ...

 

Vérifie qu'il y a continuité entre le bornier du driver de moteur et la borne du moteur sur laquelle il est censé être connecté...

 

Une photo du montage en configuration minimale pourrait aussi éventuellement aider ... 


 


 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#268 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 18 novembre 2018 - 03:59

Merci @Mike pour les suggestions pertinentes .... as usual !

 

Le shield moteur Arduino utilisé s'enfiche sur la carte MEGA et il n'y a donc pas de fils entre ces 2 cartes , avec les pins communes accessibles sur le shield comme le montre la photo du shield installé .

 

1) Le bornier regroupe la connexion de la batterie ( 2 bornes gauche ) , du moteur A gauche ( 2 bornes du milieu et du moteur B droit ( 2 bornes de droite)

Egalement en face des connexions moteurs , 2 voyants par moteur indiqués A et B pour visualiser si une tension est appliquée au moteur correspondant ( cerclé en rouge).

 

=> Pas de tension visualisée sur ces voyants B confirme la mesure faite au multimètre sur la tension nulle appliquée au moteur droit lorque l'ordre avancer est envoyée aux moteurs.

 

 

2) Les pins communes au driver moteur et carte MEGA sont accessibles sur la carte driver enfichée au dessus de la carte MEGA ( PWM , DIR etc )

 

=> Pas de tension mesurée sur la pin 11 PWM droit  (LOW)  alors que la pin 3 PWM gauche a un niveau HIGH lorsque les moteurs avancent.

 

CONCLUSION : PIN 11 HS  sur la carte MEGA à priori et  impossible de prendre une autre pin PWM sur la carte driver moteur

 

 

3) Un test a été  refait sur la carte MEGA après avoir  enlevé le shield moteur .

 

=> La pin 11 PWM B à l'état HIGH fonctionne  correctement ( au voltmètre)

 

4) Un nouveau test sera fait avec le shield moteur ré-enfiché sur la carte MEGA

 

 

 

shield motor pb moteur droit.jpg


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#269 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 545 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 18 novembre 2018 - 07:34

Ah oui j'ai oublié que c'était un shield dans mes remarques ... 

=> Vérifie que tu as pas un petit court-circuit sur to shield qui bloquerait le niveau logique à 0 sur le pin 11; 

Un bon nettoyage de la carte avec une brosse à dent et de l'alcool pourrait éventuellement aider... 

 

Sur le principe il faut visuellement suivre la trace de la piste qui part du pin 11 sur le shield et regarder si il y a quelque chose qui peut poser problème sur le chemin ... 

J'ai déjà vu un coups de tournevis casser une piste et juste mettre un strap pour " sauter la piste cassée" à pu réparer le problème  

Si jamais tu ne trouves pas toi même le problème hésite pas à poster une photo du shield propre vu de près dessus et dessous , ça peut aider. 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#270 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 23 novembre 2018 - 12:30

Après désenfichage du shield moteur de la carte MEGA , l'examen de la pin 11 sur le circuit imprimé de la carte ne révèle pas de problème  , visuellement en tout cas

Ensuite nettoyage de la carte au pinceau et des pins  avec brosse à dent + vinaigre blanc   et remontage du shield sur la carte MEGA.

 

Une vérification de la tension appliquée sur les broches PWM gauche ( pin 3) et PWM droit ( pin 11)  sont grosso modo identiques à pleine vitesse et  demi vitesse  , mais pas de tension envoyée sur les bornes + et - du moteur droit contrairement au moteur gauche.

 

=> Je voterais quand meme pour un pb coté du shield driver moteur

 

 Grrr ....  en écrivant je viens de réaliser que j'ai oublié de faire une photo avant de remonter le shield !


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#271 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 545 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 23 novembre 2018 - 04:10

Tu as parlé des pins 3 et 11 mais pas du pin 8 qui d'après ce que tu as écrit sert à contrôler le "brake" ... 
Est ce que tu l'as bien contrôlé aussi mais que tu as oublié de le mentionné ? Ou bien est ce qu'il n'a pas été contrôllé ? 
 

Sinon en effet si le problème n'est pas sur le signal brake, c'est visiblement un problème sur le shield ... 

Mais c'est possiblement réparable ... 
 

Bon après au vu du temps passé c'est peut être plus rentable d'en acheter un autre ... Mais bon sur le principe j'aimerais bien savoir la panne qu'il y a eu =). 

Par contre je te propose de déplacer tous les messages liées à ce problème dans un autre sujet, avec dans ce sujet un lien pointant vers le sujet du problème pour ne pas trop interférer avec ton projet =) Mais bon c'est qu'une proposition, c'est ton sujet donc c'est toi qui décide =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#272 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 24 novembre 2018 - 01:04

Non je n'avais pas testé la pin 8 "Brake droit"  .

Le test  montre qu'il n'y a pas de pb car le niveau  de tension mesurée est le meme des 2 cotés ( tension des pin Brake A et brake à B l'état debrayé donc LOW , proche de 0V ).

 

=> Vu les tests faits je vais voir pour remplacer la carte driver moteur , bien qu'intellectuellement ce serait bien d'aller plus loin ...

=> Merci @Mike118 pour le support

 

En ce qui concerne le déplacement de tous les messages liés à ce problème de moteur droit , je préfère que cela reste dans ce sujet  , moyennant un petit nettoye pour enlever les détails superflus

 

 

Avancement de la version 2 du robot mobile : 

 

Realisé :

 

- Un nouveau chassis Makeblock à 2 roues motrices + 1 roue folle arrière

- Une carte Raspberry PI3 + Arduino Mega2560

- Deux motoréducteurs GM25-370CA avec encodeur en 3.3V + roues

- La meme app Android MIT Inventor2 avec retour video pour piloter le robot par Wifi

- Une batterie Lipo 3S 11.7V et 2200 mAh

- Un raspberry PI3 + Arduino Mega + shield moteur Arduino

- Un convertisseur 5A 12V-5V équipé  d'1 sortie 12V pour le driver moteurs et de 4 sorties 5V pour RPI3 , capteurs de distance

- Une Caméra Pi V2 NoIR pour vision nuit montée sur un servo pour balayage horitontal pour retour vidéo et détection de mouvement avec "motion"

- Un capteur ultrason SRF05 pour détection obstacles à l'avant du robot

- Un 2ème capteur ultrason HC-SR04 pour détection obstacles à l'arrière du robot

- Pilotage du robot en mode distant , en complément du mode local

- Odométrie PID et encodeurs ( fin test en suspens suite panne carte driver moteurs)

 

Reste à faire :

 

- IMU Centrale inertielle MPU-650

- Reprise test odométrie et correction de trajectoire après achat nouvelle carte driver moteure

- L'estimation de position du robot par odométrie + IMU

- Télémétrie ( distance capteur ultrasons  , tension batterie , Intensité consommé .....) vers l'app smartphone Android et vers la domotique

- Poste recharge autonome batterie

- L'intégration du robot en wifi avec le logiciel domotique Domoticz pour navigation autonome en cas d'intrusion détectée par un capteur de détection de mouvement

- Une page dashboard sur l'application domotique pour affichage de données dans un dashboard (caméra,tension et courant batterie , courant moteurs , log , ...)


Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#273 gerardosamara

gerardosamara

    Membre passionné

  • Membres
  • PipPipPip
  • 346 messages
  • Gender:Male
  • Location:Costa Rica & Bretagne
  • Interests:La vie sous les tropiques

Posté 02 janvier 2019 - 07:06

Grrrr ... mon Laptop a été volé et ca m'a bloqué quelque peu.
J'ai racheté un pc fixe seconde main à 300 dollars dans l'urgence ( Dell Optiplex 7010 , core17 + 8Gb + 1T ).
En attendant la livraison de ce PC , la télemétrie a été ajoutée dans l'écran l'app Android ( Tension batterie , Courant consommé , position du robot , Distance obstacle Av et Ar ).
Restera à ajouter le code qui va bien dans l'app Android et dans le robot)


Screenshot_20190102-113419.jpg

Pura vida

 

Ma chaine youtube  https://www.youtube....EQ5MTR3A/videos

Tutoriel MIT Inventor2  https://www.robot-ma...e-robot-mobile/


#274 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 371 messages
  • Gender:Male
  • Interests:Glenn

Posté 03 janvier 2019 - 09:49

Ah merde navré pour le laptop :'(


signature_01.png -->

 

Mon Tipeee
 




Répondre à ce sujet



  



Aussi étiqueté avec au moins un de ces mots-clés : Arduino, Raspberry PI3, MIT Inventor 2, Rover, UGV, Robot mobile, PID

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users