Problème moteur DC

Bonjour à tous,

Je suis sur un robot et j'ai un soucis au niveau des moteurs, je me débrouille en prog mais en électronique j'ai encore du mal.

J'ai donc mis 4 moteurs DC connecté à un L233D pour changer le sens de rotation .
Je me suis fié à ce schéma :

J'ai également fait un script pour pouvoir communiquer en série avec l'arduino et lui envoyer des commandes tel que :

  • avant
  • recule
  • stop
  • gauche
  • droite

Pour moi le script fonctionne, le problème est surement "électrique". Effectivement lorsque j'ordonne au robot d'avancer les 4 moteurs s'actionnent bien mais au bout de 2-3 secondes, deux moteurs s’arrêtent en même temps.
Je ne comprends pas, serait-ce du au composant qui ne supporte pas un ampérage si élevé (les 4 moteurs sont branchés au même L233D ) ?
Ou peut-être y-a t-il un problème avec "l'élan" que prend les moteurs et donc un courant se créant qui "gênerait" le composant et ferait arrêter ces deux moteurs ?

Je précise également que dès que je relance la commande 'avance', les quatre moteurs s'activent de nouveau...

Merci d'avance à vous pour votre aide.

Jurams.

J'ai donc mis 4 moteurs DC connecté à un L233D pour changer le sens de rotation .

L293D je pense plutôt ...

2 moteurs je veux bien, mais 4 j'en doute, en tous cas pas dans les deux sens de rotation.

Ensuite de quels moteurs s'agit-il ?

Un schéma de câblage est indispensable.

Bonjour hbachetti ,

Merci pour ta réponse.
Voici le schéma :

Très bonne journée.

Jurams

Tu réponds à moitié.
Sans avoir une idée de la consommation des moteurs que dire ?
J'espère que tout ça n'est pas alimenté par une pile 9V :confused:

Les moteurs sont : Gebildet 8pcs DC3V-6V DC

j'ai branché en série deux batterie pour smarthphone de 5v pour avoir du 10v pour les quatre moteurs
sinon les moteurs ne bougent pas avec 5v.

voici le code :

int motor1_enablePin = 11; //pwm
int motor1_in1Pin = 3;
int motor1_in2Pin = 12;
 
int motor2_enablePin = 10; //pwm
int motor2_in1Pin = 8;
int motor2_in2Pin = 7;

int byte_read = 0;
int mem_byte_read = 0;

const int pingPin = 5;
int C;

unsigned long timeStart = 0;
unsigned long timeEcoule = 0;
bool obstacle = 0;
bool choicePower = 0; 
short power = 126;
 
void setup()
{
  Serial.begin(9600);
  
  //on initialise les pins du moteur 1
  pinMode(motor1_in1Pin, OUTPUT);
  pinMode(motor1_in2Pin, OUTPUT);
  pinMode(motor1_enablePin, OUTPUT);
 
  //on initialise les pins du moteur 2
  pinMode(motor2_in1Pin, OUTPUT);
  pinMode(motor2_in2Pin, OUTPUT);
  pinMode(motor2_enablePin, OUTPUT);
 
}
 
void loop()
{
  float litres, cm, inches, duration;
  byte_read = Serial.read();

  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);
  C =  digitalRead(duration);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

//  Serial.print(cm);
 // Serial.print("cm");
//  Serial.println();  
 
  if (cm != 0 && cm < 25 || obstacle == 1)//si obstacle à moins de 25cm
  {
    if (obstacle == 0){//on garde en mémoire la dernière position
     mem_byte_read = byte_read;
    Serial.print("Obstacle à ");
    Serial.print(cm);
    Serial.print("\n");
    byte_read = 50;//on recule 2 sec
    }
    obstacle = 1;
   
    if(timeStart == 0)
        timeStart = superMillis();
    timeEcoule = superMillis() - timeStart;
    if(timeEcoule > 2000 &&  byte_read != 52)//au bout on arrete de reculer et on tourne à droite
    {
        byte_read = 52;
    }
    if(timeEcoule > 3000 && byte_read == 52)//3sec on recupère l'ancienne action avant la détéction d'obstacle
    {
          timeEcoule = 0;
          obstacle = 0;
          byte_read = mem_byte_read;
    }
      
  }
  if(byte_read == 80 || choicePower)//'P'
  { 
   
    if(!choicePower)
     Serial.print("Choix de la puissance\n,"); 
    choicePower = 1;
    if(byte_read >= 49 && byte_read <= 53)
    {
      power = 500/(byte_read-'0');
      Serial.print("Puissance : "); 
      Serial.print(power); 
      Serial.print("\n");
      choicePower = 0;
      byte_read = 48;
    }
    
  }
  if(byte_read == 49){
    
    SetMotor2(power, true);
    SetMotor1(power, false);
    Serial.print("Avant\n,");
  }
  else if( byte_read == 50)
  {
    SetMotor2(power, true);
    SetMotor1(power, true);
    Serial.print("Arrière\n");
  }
  else if( byte_read == 51)
  {
    SetMotor2(power, false);
    SetMotor1(power, true);
    Serial.print("Gauche\n");
  }
  else if( byte_read == 52)
  {
    SetMotor2(power, true);
    SetMotor1(power, false);
    Serial.print("Droite\n");
  }
  else if(byte_read == 48)
  {
    SetMotor2(0, true);
    SetMotor1(0, true);
    Serial.print("STOP !\n");
  }

 
}



 
//Fonction qui set le moteur1
void SetMotor1(int speed, boolean reverse)
{
  analogWrite(motor1_enablePin, speed);
  digitalWrite(motor1_in1Pin, ! reverse);
  digitalWrite(motor1_in2Pin, reverse);
}
 
//Fonction qui set le moteur2
void SetMotor2(int speed, boolean reverse)
{
  analogWrite(motor2_enablePin, speed);
  digitalWrite(motor2_in1Pin, ! reverse);
  digitalWrite(motor2_in2Pin, reverse);
}

long microsecondsToInches(long microseconds)
{

  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  return microseconds / 29 / 2;
} 

unsigned long long superMillis()//retourne le nombre de milliseconde , gestion du temps sans stopper le programme
{
  static unsigned long nbRollover = 0;
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  
  if (currentMillis < previousMillis) {
     nbRollover++;
  }
  previousMillis = currentMillis;

  unsigned long long finalMillis = nbRollover;
  finalMillis <<= 32;
  finalMillis +=  currentMillis;
  return finalMillis;
}

8pcs TT Motor Robot Gear Motor,It Has Anti-interference Ability
Use for Electric Toy Products Such as Scientific Research Electronic Products, Robot Electric Human Body, Bubble Gun Toy Gun Body, Four-wheel Drive Toy Car, Aircraft Toy, Vibration Product, Etc.
Operating Voltage: 3V~6VDC.Batch Number:Double Axis 1:48
Load Current: ≤150mA (200mA MAX)
100% brand new and high quality

pourquoi ne pas donner toutes les infos ? Les demandeurs ne pensent pas que la personne de l'autre coté n'a pas forcément le temps ni les moyens ou simplement l'envie de faire toutes les recherches
4 moteur ensemble on est pas loin d'1A

D'accord merci pour la réponse.

Du coup avez vous des suggestions pour régler ce problème de courant ?

Merci encore.

Les moteurs sont : Gebildet 8pcs DC3V-6V DC

Des moteurs 6V maxi alimentés en 10V ?
Je ne sais que dire ...

juramsthe:
j'ai branché en série deux batterie pour smarthphone de 5v pour avoir du 10v pour les quatre moteurs
sinon les moteurs ne bougent pas avec 5v.

En même temps, comme une batterie de smartphone délivre entre 3,2 et 4V on doit plutôt se trouver dans la fourchette 6,4 à 8V. A quoi il faut soustraire la chute dans le L293D.

Il faudrait savoir de quoi juramsthe parle. Quand je lis 5V je crois qu'il s'agit de PowerBank ...

La solution : un multimètre pour voir ce qui se passe.

J'ai en ce moment un ARDUINO et un L293D en test sur mon bureau, avec un moteur qui pompe 1A sous 12V.
Il n'y a pas de raison pour que cela ne marche pas.

hbachetti:
Il faudrait savoir de quoi juramsthe parle. Quand je lis 5V je crois qu'il s'agit de PowerBank ...

Effectivement je n'avais pas pensé à ça que je n'associe pas naturellement au terme batterie.

Si c'est de power bank certaines se coupent automatiquement ! déjà eu se problème au bout d'un certains temps y a plus rien sur la sortie 5 v il faut alors redémarrer et ça refonctionne un moment ....
par contre ca fonctionne plus que 2 3 secondes

Merci à tous pour vos réponses,
Effectivement dès que je lui demande d'avancer, les moteurs s'activent et au bout de 2-3 secondes ils s'arrêtent.
Par contre je n'ai pas besoin de rallumer les batteries.

Le L293D c'est maxi 600 m A, alors 2 moteurs en //, m'étonne pas que ça disjoncte. Le "thermal shutdown" qui doit se déclencher probablement https://www.sparkfun.com/datasheets/Components/l293.pdf

Avez-vous essayé avec un seul moteur par sortie ?