Aller au contenu


Photo
- - - - -

moteur DC ne tourne pas lorsque servo "attaché"

servo attach moteur dc

  • Veuillez vous connecter pour répondre
24 réponses à ce sujet

#1 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 15 août 2017 - 10:36

Bonjour à tous,

 

Novice en la matière, je suis en train de mettre au point un robot "éviteur" d'obstacles. J'utilise pour ce faire 

  • 2 moteur DC (+ L298 stepper motor)
    • M1 pin 2, 3, 4
    • M2 pin 7, 8, 9
  • 1 servo moteur pin 10
  • 1 capteur ultrason

Mon problème est le suivant, lorsque rien n'est déclaré dans le programme au niveau du servo, tout fonctionne correctement, les moteurs tournent en même temps.

Mais lorsque je configure le servo et que je l'"attache" au pin adéquat, un des deux moteurs ne tourne plus lorsque le servo fonctionne...?

 

Comment cela se fait-il?

 

Merci d'avance pour vos lumières :)

 

H



#2 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 15 août 2017 - 10:58

Après quelques recherches, je suis tombé sur ce post.

 

D'après ce que je peux lire, je ne serais pas censé alimenter mon servo avec l'arduino...

Si tel est bien le cas, devrais-je alimenter le servo à l'aide du L298 (alors que les deux moteurs DC y sont déjà branchés)?

 

Quid?



#3 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 15 août 2017 - 11:15

1. Passage par la case présentation

2. Quel modèle d'arduino utilises-tu ? Uno ? Officiel ?

3. Schéma de branchement électrique (par exemple avec Fritzing ou Paint) ?

4. Les moteurs DC doivent être alimentés au travers d'une interface de puissance (un driver L298 par exemple), les petits servos qui ne demandent pas trop de courant peuvent être alimentés directement depuis l'arduino (voir les limites de courant admissible)


R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#4 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 16 août 2017 - 07:28

5. le code que tu as utilisé. :)


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#5 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 16 août 2017 - 04:17

  1. Fait!
  2. Arduino UNO | Officiel
  3. marquez.png
  4. J'utilise un L298. Les moteurs DC sont alimentés par des piles AA, le servo également
  5. Je posterai le code dès ce soir :)

Fichier(s) joint(s)

  • Fichier joint  marquez.png   612,2 Ko   0 téléchargement(s)


#6 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 16 août 2017 - 04:24

Le câblage me semble OK, a mon avis il y a deux possibilités :

1) Erreur dans le code

2) Résistance interne des piles trop élevée, donc elles ne peuvent pas alimenter le moteur ET le servo en même temps. Tu peux essayer d'alimenter le servo directement pas l'arduino si elle est branchée en USB, ou d'utiliser un autre groupe de piles pour le servo.



#7 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 16 août 2017 - 04:39

Merci pour cette réponse rapide.
 
PS: Je constate que j'ai oublié de mentionner un condensateur sur le circuit du servo.
 
En fait, avant d'alimenter le servo avec la source des moteurs DC, j'alimentais le servo via la UNO (et donc l'USB), mais le problème était le même. Il s'agirait donc plus d'un problème de programmation...

#8 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 16 août 2017 - 04:45

Il est ou le condensateur ? Entre les fils rouge et noir du servo ?



#9 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 16 août 2017 - 05:58

oui c'est exactement ça!



#10 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 16 août 2017 - 09:57

Et voici le code:

#include <Servo.h>

Servo neck;

// variable pour le pin connecté à la commande du servo
int pinNeck=10; 

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  
  pinMode(pinNeck,OUTPUT);
  digitalWrite(pinNeck,LOW);
  neck.attach(pinNeck);
  
  Serial.begin(9600);
}

void loop() {
  avancer();
  scanner();
} 

void avancer(){
  
   /* rouler TOUT DROIT 
      gauche: avant
      droite: avant
   */
  //right wheel
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  analogWrite(9,150);

  //left wheel  
  digitalWrite(4, HIGH);
  digitalWrite(2, LOW);
  analogWrite(3,150);  
}

void tournerADroite(){

  /* tourner à DROITE 
      gauche: avant
      droite: arriere
  */
  //left wheel
  digitalWrite(4, HIGH);
  digitalWrite(2, LOW);
  analogWrite(3,150); 
  
  //right wheel
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  analogWrite(9,150); 

  delay(700);
}

void tournerAGauche(){

  /* tourner à GAUCHE
      gauche: avant
      droite: arriere
  */ 
  //left wheel
  digitalWrite(4, LOW);
  digitalWrite(2, HIGH);
  analogWrite(3,150); 
  
  //right wheel
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  analogWrite(9,150); 
  
  delay(700);
}

void scanner(){
  neck.write(76); //devant
  delay(500);
  neck.write(126);
  delay(500);
  neck.write(160); 
  delay(500);
  neck.write(76);  
  delay(500);
  neck.write(36);
  delay(500);
  neck.write(6);
  delay(500);
 }



#11 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 17 août 2017 - 09:05

Est ce que ton programme fonctionne lorsque tu débranches ton servomoteur. Tu ne changes rien à ta programmation, tu déconnectes juste le servomoteur. Si tes deux moteurs tournes cela vient de la batterie pas assez puissante.

 

Quelle est la consommation de ton servomoteur et de tes moteurs.

 

Si en déconnectant ton servomoteur un des tes moteurs DC ne tourne toujours pas cela doit être le programme.....Mais où alors me diras tu.......

 

Franchement je pencherais plutôt pour un appel de courant trop fort au démarrage de ton servo et tes piles s'écroulent même si elle sont neuves.....C'est quoi déjà la puissance d'une pile AA. Elles sont en parallèle, en série je pense....!!!



#12 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 17 août 2017 - 09:10

C'est aussi ce que je pensais, mais le problème est toujours là en alimentant le servo par le 5V de l'arduino (donc l'USB).

Mais en même temps, je ne vois pas d'erreur dans le code. Il n'est pas idéal, mais pas faux non plus.



#13 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 17 août 2017 - 09:22

Héhé !! Les piles AA (LR6) sont données à +/- 2600 mA/h !!!

 

Essaye ton programme sans connecter le servo..............



#14 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 17 août 2017 - 09:34

@telson
Je ne peux pas répondre à toutes tes questions maintenant car je suis au bureau, mais je peux déjà te dire que les piles sont des piles 1,5V ou 1,2V et qu'il y en a 4 en parallèle dans un boitier.
Ce qui est étrange, c'est que le problème se pose également même si le servo est alimenté par l'arduino (USB).

@maximusk
Pourrais-tu m'indiquer ce qui n'est pas idéal dans le code? De quelle façon pourrais-je l'optimiser?

Merci d'avance :)

#15 arobasseb

arobasseb

    Membre chevronné

  • Administrateur
  • PipPipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)
  • Interests:Informatique, robotique et sciences technique en générale.

Posté 17 août 2017 - 09:47

C'est quel moteur qui ne tourne pas, toujours le même (genre le M2) ou ça dépends ?



#16 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 17 août 2017 - 09:48

 pinMode(pinNeck,OUTPUT);
 digitalWrite(pinNeck,LOW);

Cette partie n'est pas super utile, c'est normalement déjà fait par Servo.attach

void scanner(){
  neck.write(76); //devant
  delay(500);
  neck.write(126);
  delay(500);
  neck.write(160); 
  delay(500);
  neck.write(76);  
  delay(500);
  neck.write(36);
  delay(500);
  neck.write(6);
  delay(500);
 }

Je suppose que le but, c'est d'avancer, et d'utiliser la fonction scanner pour voir s'il y a un obstacle, pour tourner ou s'arrêter. Comme elle est écrite ici, tu as 6 delay de 500ms, soit 6 secondes. C'est long. Ton programme n'aura pas la main pendant 6 secondes, c'est beaucoup trop, tu n'auras pas le temps de t'arrêter et tu finiras dans l'obstacle. Tu devrais utiliser quelque chose comme simpletimer, qui te permet d'appeler une fonction à intervalles réguliers (genre faire bouger le servo toutes les 500ms), sans bloquer le programme.

 

Après je ne peux pas trop t'en dire plus, le programme n'est pas complet.

 

J'ai aussi un doute sur le fait que les piles soient en parallele. Sinon tu n'as qu'une tension de 1.5V, et le servo ne pourrait pas fonctionner.



#17 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 17 août 2017 - 09:59

Salut,
Il n'y a pas un petit pb sur le câblage ? La ligne du bas sur la plaque d'essai n'est pas reliée au positif de la batterie. Ça pourrait expliquer sauf si l'usb manque sur le schéma.

#18 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 17 août 2017 - 10:23

Je pense que c'est l'USB qui n'est pas dessiné sur le schéma, parce que 4 piles AA ça fait 6V, donc si le positif de la batterie est reliée, l'arduino risque de ne pas trop apprécier (et au prix des arduino officielles, ça serait dommage).



#19 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 17 août 2017 - 10:34

@arobasseb
Oui, c'est toujours le M2

@maximusk
Effectivement c'est bien cela que je veux faire. Merci pour le conseil, je testerai cela dès que possible.
Concernant les piles en série et ou parallèle, tu as très probablement raison.
Désolé pour la confusion, mon niveau de connaissance en électricité n'est pas encore optimal. Je n'irais pas jusqu'à dire que comme les piles sont parallèles dans le boitier le branchement est parallèle, mais on en est pas loin... :D

#20 horkets

horkets

    Membre

  • Membres
  • 12 messages

Posté 17 août 2017 - 10:43

@path
@maximusk

les 4 piles sont branchées sur une des lignes verticale de la breadboard.
J'utilise cette ligne comme une sorte de multiprise pour alimenter et le servo et les moteurs dc (L298).

Je n'ai effectivement pas représenté l'USB. j'alimente l'arduino via le pc pour l'instant et j'ai relié la ligne du bas de la breadboard à l'arduino pin 5V et GND.
L'idée serait d'alimenter l'arduino avec un pile carrée lorsque tout fonctionnera correctement.





Aussi étiqueté avec au moins un de ces mots-clés : servo, attach, moteur dc

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

0 members, 0 guests, 0 anonymous users