Aller au contenu


Photo
- - - - -

Servo mouvements parasites


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

#1 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 25 juin 2021 - 01:32

Bonjour à tous,

 

Je suis un nouveau dans le domaine de l'Arduino.

 

J'ai un projet de bras 4 axes commandé en Bluetooth par un module Hc5 en arduino uno.

 

Quand je pilote un servo il réagit bien mais quand je pilote un des 3 autres servo dans mon projet, j'ai des mouvement parasites sur un autre servo non piloté.

 

On dirait un problème de masse, mais j'ai bien vérifié et la masse est bien branché.

 

Avez vous déjà eu ce genre de problème?

 

Servo: MG995



#2 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 25 juin 2021 - 04:52

Pourrais-tu nous mettre une image de ton montage et le code ?

Qu'appelles-tu mouvements parasites, des vibrations ou des mouvements de plusieurs degrés ?



#3 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 25 juin 2021 - 06:36

Cest des vibrations, on dirait que il reçoit un signal parasite

#4 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 25 juin 2021 - 08:07

 j'ai des mouvement parasites sur un autre servo non piloté.

Si ton servo a reçu une consigne, en phase d'initialisation par exemple, il essayera de maintenir la position si une force s'exerce sur lui.

Essaye de le déconnecter avec la méthode servo.detach() pour voir s'il vibre toujours.



#5 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 16 décembre 2021 - 07:42

Bonjour,
 
Je redémarre mon projet que j'avais mis de coté, je précise mon problème.
 
-Je fais mes essais moteur désaccouplé, ils sont libre et donc aucune force ne s'oppose.
-Au repos (sans consigne) les servos ne vibrent pas.
-Quand j'en commande un en bluetooth il effectue ses rotations, et les autres se mettent à faire un tout petit déplacement angulaire. (une sorte de vibration parasite).

 

Je n'ai aucune connaissance en code, je suis plus mécanicien, électricien. Ce projet est pour mes élèves, et je cale sur ce problème. Merci de votre aide

 

Le projet : https://www.instruct...DPrinted-Robot/

 

Le robot : http://www.eezyrobots.it/eba_mk2.html
 
Voici le code :

#include <SoftwareSerial.h>

#include <Servo.h> 
Servo myservo1, myservo2, myservo3, myservo4;

int bluetoothTx = 6;
int bluetoothRx = 7;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
  myservo1.attach(8);
  myservo2.attach(9);
  myservo3.attach(10);
  myservo4.attach(11);
  //Setup usb serial connection to computer
  Serial.begin(9600);

  //Setup Bluetooth serial connection to android
  bluetooth.begin(9600);
}

void loop()
{
  //Read from bluetooth and write to usb serial
  if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos; 
    Serial.println(realservo); 
    
    if (realservo >= 1000 && realservo <1180){
    int servo1 = realservo;
    servo1 = map(servo1, 1000,1180,0,180);
    myservo1.write(servo1);
    Serial.println("servo 1 ON");
    delay(10);

    }
    
    if (realservo >=2000 && realservo <2180){
      int servo2 = realservo;
      servo2 = map(servo2,2000,2180,0,180);
      myservo2.write(servo2);
      Serial.println("servo 2 On");
      delay(10);
      
    }
    
    if (realservo >=3000 && realservo < 3180){
      int servo3 = realservo;
      servo3 = map(servo3, 3000, 3180,0,180);
      myservo3.write(servo3);
      Serial.println("servo 3 On");
      delay(10);
      
    }
    
    if (realservo >=4000 && realservo < 4180){
      int servo4 = realservo;
      servo4 = map(servo4, 4000, 4180,0,180);
      myservo4.write(servo4);
      Serial.println("servo 4 On");
      delay(10);
      
    }
    
    
  }


}

 



#6 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 16 décembre 2021 - 07:56

Bonsoir,

comment est-ce que tu alimentes tes servos?

J'ai l'impression que tes servos sont assez gourmands en courant (jusqu'à 1.2A si j'ai bien compris), donc si ton alimentation est sous dimensionnée (ou tes câbles trop fins), il est bien possible que la tension d'alimentation chute.

Et pour autant que je sache, rien ne garanti qu'un servo garde la même position (à consigne donnée) si la tension change (par exemple si le servo compare la sortie d'un potentiomètre alimenter par la tension d'alim avec une référence de tension fixe).

 

Pour vérifier, tu peux :

1) regarder avec un oscilloscope si la tension d'alim est stable

2) si tu as une alimentation variable (type GBF : générateur basse fréquence) et que celui-ci est capable de te générer un signal de type DC+signal avec assez de courant, alors tu peux alimenter un servo et lui donner une consigne, et voir s'il vibre

3) si tu n'as pas le matériel, tu peux simplement alimenter un servo séparément des autres (penses à relier les masses), et si celui-ci ne vibre plus, ça confirme le problème d'alim


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#7 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 16 décembre 2021 - 08:05

Bonsoir, merci d'avoir pris le temps de me lire.

 

J'ai pensé aussi à un problème d'alim, j'ai donc ajouté une alimentation séparé pour les servos : MB102

 

Même si je débranche les 3 autres servos, que j'en laisse qu'un, si je commande les autres, le servo qui reste branché fait aussi des mouvement parasites.



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 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 décembre 2021 - 08:16

Enlève les delay dans ton code.


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 !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#9 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 16 décembre 2021 - 08:58

Enlève les delay dans ton code.

Merci pour l'aide, mais malheureusement cela n'a rien changé.



#10 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 16 décembre 2021 - 09:23

Personnellement, je commencerais par faire un programme très minimaliste pour voir comment réagit le servo.

Quelque chose comme ça :

#include <Servo.h>
Servo Srv4;
 
void setup() {
  Srv4.attach(4); Srv4.write(0); 
}
 
void loop() {
  for(int i=0;i<=180;i++){  Srv4.write(i); delay(10);  }
  for(int i=180;i>=0;i--){  Srv4.write(i); delay(10);  }
}

Quels servos utilises-tu ? Des SG90S, comme sur les liens que tu donnes ?



#11 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 16 décembre 2021 - 09:37

Personnellement, je commencerais par faire un programme très minimaliste pour voir comment réagit le servo.

Quelque chose comme ça :

#include <Servo.h>
Servo Srv4;
 
void setup() {
  Srv4.attach(4); Srv4.write(0); 
}
 
void loop() {
  for(int i=0;i<=180;i++){  Srv4.write(i); delay(10);  }
  for(int i=180;i>=0;i--){  Srv4.write(i); delay(10);  }
}

Quels servos utilises-tu ? Des SG90S, comme sur les liens que tu donnes ?

Oui j'ai commandé les servo ici, il y a trois MG995 et un SG90, le problème apparait sur les 4 servos.

 

Que dois faire ce code?



#12 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 16 décembre 2021 - 10:21

La seule différence entre le lien instructable et mon code mon câblage et mon matos, c'est que j'utilise un module bluetooth HC-05 au lieu du HC-06 préconisé dans le projet EEZYbotarm.

 

Je ne vois pas d'autre différence.



#13 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 16 décembre 2021 - 10:52

Es ce que je peux rajouter du code après :

if (realservo >= 1000 && realservo <1180){
int servo1 = realservo;
servo1 = map(servo1, 1000,1180,0,180);
myservo1.write(servo1);
Serial.println("servo 1 ON");
delay(10);


Pour arrêter de faire bouger les servos 2 3 et 4 quand on reçoit une consigne du 1 ? Et ainsi de suite 1 3 4 - 1 2 4 - 1 2 3

#14 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 17 décembre 2021 - 08:28

Que dois faire ce code?

As-tu quelques connaissance en C, ou pas du tout ?

Ce code fait exécuter un mouvement au servo de 0° à 180°, puis de 180° à 0°.

 

Pourrais-tu nous faire une photo de ton installation ?



#15 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 17 décembre 2021 - 09:26

E388E679-7A56-44DB-8474-381C16B853B8.jpeg 69A3968B-B271-458B-9B93-A124A73020E8.jpeg BAA3DC01-8F60-4EBB-9253-4F8E5ACE7ABF.jpeg

Jai pas beaucoup de notion en C mais je peux essayer de comprendre, et jai envie

#16 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 17 décembre 2021 - 10:00

Dans mon petit programme, le fil orange du servo (le signal) est relié à la pin4. C'est pour cela que je l'ai appelé Srv4.

Dans la fonction setup(), Srv4 est rattaché à la pin4 et le servo est initialisé à la position 0°.

Dans la fonction loop(), il y a 2 boucles. La première commande un mouvement de 0° à 180°, puis la deuxième boucle commande un mouvement de 180° à 0°.

En résumé, le palonnier du servo fait des allers et retours.

 

Exécute ce programme et vois si tout fonctionne correctement.

 

Puis tu mettras les deux lignes de la fonction loop() en commentaire.

Dans la fonction setup(), tu modifieras l'instruction Srv4.write(0); par Srv4.write(180);

Avec une valeur à 180°, si ton servo vibre, tu baisseras à 175°, puis 170° etc. jusqu'à ce qu'il ne vibre plus.

Puis, tiens nous au courant.

 

Ton installation me semble correcte.



#17 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 17 décembre 2021 - 10:28

Je viens d'essayer ton code, ça fonctionne parfaitement, il fait ses allers et retours de 180°.

 

Je reviens sur mon cas, c'est quand le moteur ne reçoit pas de consigne sur son pin par exemple le (9), et qu'un autre moteur reçoit une consigne par exemple le (10) que le moteur (9) se met à se déplacer de quelques degrés. Comme si il recevait une fausse information en bluetooth.

 

Au repos et sans consigne rien ne bouge (ça ne "vibre" pas). Et quand un moteur reçoit une consigne ça fonctionne bien pour le moteur commandé (mais un autre moteur se met a faire un aller retour de un ou deux degré.

 

Comme si "les seuils de déclenchement" du hc-05 en bluetooth n’était pas bon. 

 

Au début j'avais l'impression que c'était un problème de masse mais maintenant j'ai l'impression que c'est un problème de commande.



#18 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 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é 17 décembre 2021 - 12:07

Tous tes essais tu les fais bien sans les delay ? 
Ton problème ressemble beaucoup à un problème de temporisation " bloquante " ce qui est typique de l'usage du delay comme tu le fais. Ton code doit avoir aucun delay. 

Si il y en a supprime les. 

Si il y en a plus, comment tes Serial.print pour voir si ça change quelque chose. 

Ensuite plutôt que faire un map ajuste l'opération au cas par cas ...

Si entre 1000 et 1180 fait juste -1000 sur la valeur,   -2000 -3000 et -4000 pour les autres.

#include <SoftwareSerial.h>

#include <Servo.h> 
Servo myservo1, myservo2, myservo3, myservo4;

int bluetoothTx = 6;
int bluetoothRx = 7;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
  myservo1.attach(8);
  myservo2.attach(9);
  myservo3.attach(10);
  myservo4.attach(11);
  //Setup usb serial connection to computer
  Serial.begin(9600);

  //Setup Bluetooth serial connection to android
  bluetooth.begin(9600);
}

void loop()
{
  //Read from bluetooth and write to usb serial
  if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos; 
    Serial.println(realservo); 
    
    if (realservo >= 1000 && realservo <1180){
      int servo1 = realservo - 1000;
      myservo1.write(servo1);
    }
    
    if (realservo >=2000 && realservo <2180){
      int servo2 = realservo - 2000;
      myservo2.write(servo2);
    }
    
    else if (realservo >=3000 && realservo < 3180){
      int servo3 = realservo - 3000;
      myservo3.write(servo3);
    }
    
    else if (realservo >=4000 && realservo < 4180){
      int servo4 = realservo - 4000;
      myservo4.write(servo4);
    }
    
    
  }


}

Si ça pose toujours problème c'est peut être le soft serial qui fait ce temps " bloquant " qui perturbe les servo ...


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 !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#19 yupach

yupach

    Membre

  • Membres
  • 13 messages

Posté 17 décembre 2021 - 12:28

Même résultat avec ton code, après j'ai pas vraiment compris ce que tu me dis de modifier pour tester



#20 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 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é 17 décembre 2021 - 04:36

Même résultat avec ton code, après j'ai pas vraiment compris ce que tu me dis de modifier pour tester

 

Le code que j'ai posté contenait les modifications dont je parlais.

Est ce que tu peux mettre le bluetooth sur le Serial pour tester au lieu d'utiliser le soft serial ? 

On a presque éliminé toute les sources possible venant du code. Si en virant le soft serial ça le fait toujours alors ça doit être un problème élec, d'alim ou autre.


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 !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 





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

0 members, 0 guests, 0 anonymous users