[Programmation] 2 Servo moteurs et 5 DC Moteurs sur un arduino uno R3
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

2 Servo moteurs et 5 DC Moteurs sur un arduino uno R3



  1. #1
    SwannMeca

    2 Servo moteurs et 5 DC Moteurs sur un arduino uno R3


    ------

    Bonjour à tous, voilà j'ai un problème et j'espère trouver mes réponses ici.



    Mises en contexte :

    Je fabrique actuellement un robot qui doit pouvoir se déplacer sur une platerforme et récupérer des objets à l'aide d'un bras articulé (2 membrures) qui possède une pince pour saisir les objets.

    Actuellement j'ai une limite de 6 piles AA, de 1.5 V chaque.
    Ma source de tension atteint donc un maximum de 9V.

    J'arrive à contrôler le bras mécanique (2 servo moteurs) indépendamment via la télécommande infra rouge.

    J'arrive à contrôler le déplacement du robot lorsque les servo moteurs ne sont pas branchés.



    Comme moteurs, je possède :

    - 4 moteurs DC de 6V pour déplacer mon robot;
    lien : https://abra-electronics.com/electro...-1360-rpm.html

    - 2 servo moteurs analogiques FS5106B afin de contrôler le bras articulé
    lien : https://www.gotronic.fr/art-servomot...106b-25829.htm

    - 1 moteur DC pour ouvrir et fermer la pince du robot.
    lien : https://abra-electronics.com/electro...v30.html?sl=fr


    Mon problème:

    Lorsque je branche mon robot, les servo moteurs s'initialisent à leur valeur initiales : celui à la base du bras 90 degrés et le second à 0 degrés.

    Mais dès lors que je veux envoyer une commande de déplacement au robot (avancer), les servo moteurs cessent de fonctionner (je supposer une absence de tension), donc retour à 0 degrés puis reviennent à leur position initiale. Sans que le robot ne se déplace. On dirait que tout le courant va aux servos moteurs pour garder sa position initiale et ne va jamais aux moteurs DC.

    Résulat, mon robot ne fonctionne pas lorsque je mets le bras articulé et le déplacement ensemble.

    Ma question : est-ce possible de fournir du courant aux moteurs DC tout en alimentant les servos moteurs en continu pour que le bras articulé reste à sa position donnée ?

    Si oui quel est le problème selon vous, et qu'est-ce que je dois faire svp.



    Mes composants électroniques :

    - 1 télécommande infrarouge pour commander le robot.

    - 1 récepteur infrarouge

    - 1 carte arduino uno R3

    - 1 L298N V3 4 motor driver. (pour contrôler les 4 moteurs DC continu afin de se déplacer)
    lien : https://fr.aliexpress.com/item/32481...yAdapt=glo2fra

    - 1 breadboard

    - 1 motor control board pour contrôler le min moteur dc 3v de la pince.


    Mes branchements :

    J'ai alimenté directement les 6 piles (qui sont en série) au L298N V3 motor driver. Les 4 moteurs DC 6v y sont branchés.
    J'ai branché les 8 in aux 4 moteurs. Et les 8 output aux pins 2 à 9 de l'arduino.

    À la sortie 5V du L298N V3, j'ai branché sur la ligne A de mon breadboard
    À la sortie GND du L298N V3, j'ai branché sur la ligne B de mon breadboard.

    Les branchements suivants sont en parallèle sur le breadboard :
    2 servos moteurs qui sont reliés aux pins 10 et 11 de l'arduino.
    l'entrée de courant va au Vin de l'arduino Uno et la terre au GND.

    Et mon capteur infra rouge est connecté directement à la sortie 5V de l'arduino uno, la terre au Gnd et au pin A5.



    Le lien de mon code. Ici je n'ai pas encore créé la fonction pour la pince et donc le 5e moteur DC étant donné l'existance du problème actuel.




    Merci de vos réponses.

    -----

  2. #2
    SwannMeca

    Re : 2 Servo moteurs et 5 DC Moteurs sur un arduino uno R3

    Le code arduino se trouve ici :

    Code:
    #include <IRremote.h>
    #include <Servo.h>
    
    Servo monServoBase;
    Servo monServoBras;
    int positionDuServoBase = 90;
    int positionDuServoBras= 0;
    // C++ code
    //
    
    
    IRrecv receiver(A5); // create a receiver object of the IRrecv class
    decode_results results; // create a results object of the decode_results class
    int in1 = 2;
    int in2 = 3;
    int in3 = 4;
    int in4 = 5;
    int in5 = 6;
    int in6 = 7;
    int in7 = 8;
    int in8 = 9;
    
    
    void setup()
    {
      Serial.begin(9600); // begin serial communication with a baud rate of 9600
      receiver.enableIRIn(); // enable the receiver
      receiver.blink13(true); // enable blinking of the built-in LED when an IR signal is received
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
      pinMode(in3, OUTPUT);
      pinMode(in4, OUTPUT);
      pinMode(in5, OUTPUT);
      pinMode(in6, OUTPUT);
      pinMode(in7, OUTPUT);
      pinMode(in8, OUTPUT);
    digitalWrite(in1, 0);
    digitalWrite(in2, 0);
    digitalWrite(in3, 0);
    digitalWrite(in4, 0);
    digitalWrite(in5, 0);
    digitalWrite(in6, 0);
    digitalWrite(in7, 0);
    digitalWrite(in8, 0);
      monServoBase.attach(11);
      monServoBras.attach(10);
      monServoBase.write(positionDuServoBase); 
    monServoBras.write(positionDuServoBras); 
    
    }
    
    void loop()
    {
    if (receiver.decode(&results)) { // decode the received signal and store it in results
     Serial.println(results.value, HEX);
     if (results.value==0xFF18E7){ // FLECHE HAUT == AVANCER
      digitalWrite(in1, 0);
      digitalWrite(in2, 1);
      digitalWrite(in3, 1);
      digitalWrite(in4, 0);
      digitalWrite(in5, 1);
      digitalWrite(in6, 0);
      digitalWrite(in7, 0);
      digitalWrite(in8, 1);
    
     }
     if (results.value==0xFF4AB5){ // FLECHE BAS = RECULER
      digitalWrite(in1, 1);
      digitalWrite(in2, 0);
      digitalWrite(in3, 0);
      digitalWrite(in4, 1);
      digitalWrite(in5, 0);
      digitalWrite(in6, 1);
      digitalWrite(in7, 1);
      digitalWrite(in8, 0);
    
     }
     if (results.value==0xFF38C7){ // OK == ARRÊT
      digitalWrite(in1, 0);
      digitalWrite(in2, 0);
      digitalWrite(in3, 0);
      digitalWrite(in4, 0);
      digitalWrite(in5, 0);
      digitalWrite(in6, 0);
      digitalWrite(in7, 0);
      digitalWrite(in8, 0);
     }
      if (results.value==0xFF10EF){ //tourner gauche
    digitalWrite(in1, 1);
    digitalWrite(in2, 0);
    digitalWrite(in3, 1);
    digitalWrite(in4, 0);
    digitalWrite(in5, 1);
    digitalWrite(in6, 0);
    digitalWrite(in7, 1);
    digitalWrite(in8, 0);
    delay(200);
      digitalWrite(in1, 0);
      digitalWrite(in2, 0);
      digitalWrite(in3, 0);
      digitalWrite(in4, 0);
      digitalWrite(in5, 0);
      digitalWrite(in6, 0);
      digitalWrite(in7, 0);
      digitalWrite(in8, 0);
      }
    if (results.value==0xFF5AA5){ //tourner droite
      digitalWrite(in1, 0);
    digitalWrite(in2, 1);
    digitalWrite(in3, 0);
    digitalWrite(in4, 1);
    digitalWrite(in5, 0);
    digitalWrite(in6, 1);
    digitalWrite(in7, 0);
    digitalWrite(in8, 1);
    delay(200);
      digitalWrite(in1, 0);
      digitalWrite(in2, 0);
      digitalWrite(in3, 0);
      digitalWrite(in4, 0);
      digitalWrite(in5, 0);
      digitalWrite(in6, 0);
      digitalWrite(in7, 0);
      digitalWrite(in8, 0);
    }
    
    
    
    if (results.value==0xFFA25D){ // Bouton 1. avancer servo moteur à la base
      if  (positionDuServoBase <141){
         positionDuServoBase =  positionDuServoBase +4;
         monServoBase.write(positionDuServoBase);
        Serial.println(positionDuServoBase);
      }
      }
    
    
    
    if (results.value==0xFF629D){ // Bouton 2. reculer servo moteur à la base
      if (positionDuServoBase>5){
        positionDuServoBase =  positionDuServoBase -4;
        monServoBase.write(positionDuServoBase);
        Serial.println(positionDuServoBase);
      }
    }
    
    if (results.value==0xFFE21D){ // Bouton 3. avancer 2nd servo moteur au bras
      if  (positionDuServoBras <174){
         positionDuServoBras =  positionDuServoBras +8;
         monServoBras.write(positionDuServoBras);
        Serial.println(positionDuServoBras);
      }
      }
    
    if (results.value==0xFF22DD){ // Bouton 4. reculer 2nd servo moteur au bras
      if (positionDuServoBras>9){
        positionDuServoBras =  positionDuServoBras -8;
        monServoBras.write(positionDuServoBras);
        Serial.println(positionDuServoBras);
      }
    }
    
    
    
      // print the values in the Serial Monitor
     receiver.resume(); // reset the receiver for the next code
    }
    delay(50);
    }
    
    
    
    //FONCTION DÉCODAGE DES BOUTONS : 
    //1 : FFA25D
    //2 : FF629D
    //3 : FFE21D
    //4 : FF22DD
    //5 : FF02FD
    //6 : FFC23D
    //7 :FFE01F
    //8 : FFA857
    //9 : FF906F
    //0 : FF9867
    //* : FF6897
    //# : FFB04F
    //< : FF10EF
    //FLECHE HAUT : FF18E7
    //> : FF5AA5
    //FLECHE BAS : FF4AB5 
    //OK : FF38C7

  3. #3
    gienas
    Modérateur

    Re : 2 Servo moteurs et 5 DC Moteurs sur un arduino uno R3

    Bonjour SwannMeca et tout le groupe

    Bienvenue sur le forum.

    Citation Envoyé par SwannMeca Voir le message
    … j'ai un problème et … Le lien de mon code …
    Les pièces jointes doivent être obligatoirement sur le serveur du forum pour ne pas être perdues car elles ne sont que temporaires sur les sites étrangers et peuvent être remplacés par des objets illégaux à l’insu de ton plein gré.

    Le code est à mettre entre des balises code.


    Pendant la phase de mise au point, pour éviter les problèmes d’alimentation, il est prudent de séparer les alimentations de puissance de celles du contrôle.

    Même dans la solution finale, des protections sont à prévoir. Les démarrages et parfois les arrêts d’éléments inductifs peuvent générer des parasites redoutables.

Discussions similaires

  1. [Autre] Projet servo-moteurs et Arduino
    Par invitedce47fea dans le forum Électronique
    Réponses: 29
    Dernier message: 25/09/2018, 18h50
  2. [Autre] Problème d'alimentation servo moteurs
    Par inviteb50b4b98 dans le forum Électronique
    Réponses: 7
    Dernier message: 09/07/2018, 17h18
  3. [Outils/Fab/Comp] Servo Moteurs - Capteurs - Carte Arduino
    Par invite45dd1122 dans le forum Électronique
    Réponses: 5
    Dernier message: 08/02/2017, 16h19
  4. Moteurs pas à pas ou servo
    Par invite65be0568 dans le forum Électronique
    Réponses: 2
    Dernier message: 27/12/2006, 13h31
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...