Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

arduino dmx et servo moteur



  1. #1
    moell

    arduino dmx et servo moteur


    ------

    bonjour,

    je cherche a contrôler des moteurs depuis un jeux d'orgues de théâtre, mes driver moteur (sabertooth) acceptent les commandes émanant de la lib servo.h

    mon arduino est couvert d' un shield dmx , et mes tests son validés,
    toutefois je cherche à réguler différemment mes vitesses de rotation, je m'explique:

    je reçois une valeur 8 bit via dmx donc entre 0 et 255,
    mon programme (qui suit) l’interprète sur une valeur "servo" soit 0 ->180

    -à 90 mon moteur est arrêté et Sa vitesse augmente en s'en éloignant dans un sens ou dans l'autre (vers 0 en avant et vers 180 en arriere)

    (je dis mon moteur mais j'en ai 6 qui fonctionnent à l'identique.)

    je cherche a améliorer mon code pour n'avoir que les basses valeurs car je n'ai pas besoin de vitesse, mais sur une longue courbe,
    Pour résumer je veux avoir des valeurs "servo" (désolé si je manque de clarté, je ne suis pas trop scientifique ) comprise entre 85 et 95 seulement sur toute la course de mon potentiomètre (0->255)

    est-ce compréhensible ?

    par mesure de facilité j'ai une zone neutre de 122 à 133 pour compenser le manque de fiabilité de mes potards d'ou les -5.5 et +5.5 dans le code suivant

    voici le code et merci à toutes les bonne volonté qui nous hissent vers la connaissances ...
    Code:
    //dmx  progressif avec stop et stabil  ///
    
    /*adressage st 2-3-5 on !!ATTENTION le grand master doit etre à full
     
    
    */
    #include <Conceptinetics.h>
    #define DMX_SLAVE_CHANNELS   6
    #include <Servo.h>
    Servo myservo1;
    Servo myservo2;
    Servo myservo3;
    Servo myservo4;
    Servo myservo5;
    Servo myservo6;
    
    DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );
    
    void setup() {             
    
      myservo1.attach(11, 1475,1525); //  pin 11  controle moteur1
      myservo1.write(90);//stabilise a 0
      myservo2.attach(10); //  pin 10 controle moteur2
      myservo2.write(90);//stabilise a 0
      myservo3.attach(9); // pin 9 controle moteur3
      myservo3.write(90);//stabilise a 0
      myservo4.attach(6); // pin 6 controle moteur4
      myservo4.write(90);//stabilise a 0
      myservo5.attach(5); //  pin 5 controle moteur5
      myservo5.write(90);//stabilise a 0
      myservo6.attach(3); // pin 3 controle moteur6
      myservo6.write(90);//stabilise a 0
      dmx_slave.enable ();  
      dmx_slave.setStartAddress (101);
    }
    
    
    void loop() 
    {
     
       
      unsigned char dmx1 = dmx_slave.getChannelValue (6);
      unsigned char dmx2 = dmx_slave.getChannelValue (5);
      unsigned char dmx3 = dmx_slave.getChannelValue (4);
      unsigned char dmx4 = dmx_slave.getChannelValue (3);
      unsigned char dmx5 = dmx_slave.getChannelValue (2);
      unsigned char dmx6 = dmx_slave.getChannelValue (1);
      
      
       
              //moteur1
      
      if ( dmx1 <= 122)
        myservo1.write(dmx1/1.4+5.5);
      else if ( dmx1 >= 133 )
        myservo1.write(dmx1/1.4-5.5);
     else 
        myservo1.write(90);
      
              //moteur2
      
       if ( dmx2 <= 122 )
        myservo2.write(dmx2/1.4+5.5);
      else if ( dmx2 >= 133 )
        myservo2.write(dmx2/1.4-5.5);
     else 
        myservo2.write(90);
     
     
    
      
                 //moteur3
                
                 
       if ( dmx3 <= 122 )
        myservo3.write(dmx3/1.4+5.5);
      else if ( dmx3 >= 133 )
        myservo3.write(dmx3/1.4-5.5);
     else 
        myservo3.write(90);
                
                
                //moteur4
    
    
      if ( dmx4 <= 122 )
        myservo4.write(dmx4/1.4+5.5);
      else if ( dmx4 >= 133 )
        myservo4.write(dmx4/1.4-5.5);
     else 
        myservo4.write(90);
        
        
                  //moteur5
        
      
                
       if ( dmx5 <= 122 )
        myservo5.write(dmx5/1.4+5.5);
      else if ( dmx5 >= 133 )
        myservo5.write(dmx5/1.4-5.5);
     else 
        myservo5.write(90);
        
    
      
                 //moteur6
      
      if ( dmx6 <= 122 )
        myservo6.write(dmx6/1.4+5.5);
      else if ( dmx6 >= 133 )
        myservo6.write(dmx6/1.4-5.5);
     else 
        myservo6.write(90);
        
    }

    -----
    Dernière modification par moell ; 22/09/2014 à 18h01.

  2. #2
    r4ph

    Re : arduino dmx et servo moteur

    Salut, dans la référence sur les librairies Arduino, cherche la fonction map() éventuellement constain() mais je pense pas que tu en aura besoin vu que le dmx est de 0 à 255.

Discussions similaires

  1. Servo-moteur
    Par Greggou dans le forum Technologies
    Réponses: 8
    Dernier message: 11/06/2011, 14h33
  2. Transformer un servo-moteur en moteur à courant continu
    Par taz6cle dans le forum Électronique
    Réponses: 14
    Dernier message: 15/05/2011, 17h59
  3. servo-moteur.
    Par jpl57 dans le forum Électronique
    Réponses: 10
    Dernier message: 23/08/2007, 11h30
  4. servo moteur
    Par vinz02 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/01/2006, 08h12
  5. servo moteur
    Par biscotte dans le forum Électronique
    Réponses: 5
    Dernier message: 14/04/2004, 12h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.