Auteur Sujet: Cde Servos  (Lu 30465 fois)

ferdi68

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Cde Servos
« Réponse #15 le: mars 02, 2018, 05:03:33 pm »
Bonjour Jean-Luc
Je viens de Charger   L'update SlowMotionServo 1.3.0
Question/ les servos sont bien branchés sur pin3 et 4 et le bouton sur analog pin  ?
car rien ne bouge
cordialement
Fernand

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Cde Servos
« Réponse #16 le: mars 02, 2018, 05:04:30 pm »
Le bouton sur 5. Quand on appuie dessus, il met en contact la broche 5 avec la masse (GND).
Cordialement

ferdi68

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Cde Servos
« Réponse #17 le: mars 02, 2018, 05:08:29 pm »
Bonjoiur Jean-Luc
Ca fonctionne, le bouton dois bien etre sur pin5sur digitalPWM ?
maintenant comment dois-je faire pour rajouter les portes suivantes

Cordialement
Fernand

ferdi68

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Cde Servos
« Réponse #18 le: mars 02, 2018, 05:17:30 pm »
Ok pigé c

ferdi68

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Cde Servos
« Réponse #19 le: mars 02, 2018, 05:20:24 pm »
pour les portes suivantes dois-je faire un copier-coller et simplement changer le Nr des pins correspondant?

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Cde Servos
« Réponse #20 le: mars 02, 2018, 05:22:46 pm »
C'est ça.

Mais je suis en train de préparer un objet Remise pour encapsuler les deux servos et le bouton. Ça sera plus facile à répliquer. Ça sera dans l'article qui, si mes camarades du comité de rédaction sont ok, sortira demain.

Cordialement
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Cde Servos
« Réponse #21 le: mars 02, 2018, 05:31:32 pm »
Notez que vous ne pourrez sans doute pas alimenter les 10 servos avec l'Arduino, il faut une alimentation 5V séparée qui alimentera les servos (seulement) et il faut relier la masse de l'Arduino à la masse de cette alimentation.
Cordialement

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 915
  • HO avec DCC++
    • Voir le profil
Re : Cde Servos
« Réponse #22 le: mars 03, 2018, 09:36:03 am »
Bonjour Jean-Luc,

Un servo que l'on a pris soin de détacher après utilisation avec la fonction ServoDetach consomme t'il toujours du courant ? Le but de cette question est de savoir s'il est possible malgré tout de se passer d'alimentation externe lorsque l'on n'utilise jamais plus d'un servo à la fois (sur 10 par exemple). Quel nombre de servos est-il raisonnable de ne pas dépasser en liaison directe avec l'Arduino ?

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Re : Cde Servos
« Réponse #23 le: mars 03, 2018, 09:55:22 am »
Bonjour Christophe,

Un servo que l'on a pris soin de détacher après utilisation avec la fonction ServoDetach consomme t'il toujours du courant ?

Oui, autant qu'un servo non détaché (asservi en position) qui ne force pas. Sur mes micro-servos HobbyKing, je mesure 6,1mA au repos. Si il force ou est en mouvement c'est 40 à 60 mA voire jusqu'à 150mA si il force beaucoup mais mon multimètre moyenne et ça monte sans doute ponctuellement plus haut, plus de 200mA car mon multimètre affiche 1 parfois sur ce calibre.

Citer
Le but de cette question est de savoir s'il est possible malgré tout de se passer d'alimentation externe lorsque l'on n'utilise jamais plus d'un servo à la fois (sur 10 par exemple). Quel nombre de servos est-il raisonnable de ne pas dépasser en liaison directe avec l'Arduino ?

De mémoire j'avais essayé et ça fonctionne jusqu'à 5-6 avec ces servos là. Ensuite le régulateur de l'Arduino déclare forfait. En théorie il monte à 1A mais il chauffe et la protection thermique se déclenche.

Je rectifie : j'étais alimenté en USB et là c'est ton ordi qui va couper l'USB si tu dépasses 500mA

Jamais essayé avec l'arduino alimenté via VIN mais 500mA me semble la limite également.
« Modifié: mars 03, 2018, 10:11:35 am par Jean-Luc »
Cordialement

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Cde Servos
« Réponse #24 le: mars 03, 2018, 10:27:38 am »
D'après la fiche de spécification des régulateurs utilisés sur les UNO, on ne peut dépasser ~1W de dissipation, ce qui est atteint  avec 150 mA (7Vx150 mA) si on alimente en 12V sur le Vin - moins sur les Nano. On peut aller un peu plus loin en alimentant en 7,5 V. (2,5V x 400mA)
En 5V USB, certain ports dits + délivrent 1A et plus, comme d'ailleurs certaines alimentations et Power Bank.
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Cde Servos
« Réponse #25 le: mars 03, 2018, 11:27:19 am »
ferdi68, l'article est publié : http://www.locoduino.org/spip.php?article159  :)
Cordialement

ferdi68

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Cde Servos
« Réponse #26 le: mars 03, 2018, 05:38:20 pm »
Bonsoir Jean-Luc,

j'ai configuré mon programme pour 5 remise, mais probleme: je n'ais pas assez de pins pour la 5eme quelle est la solution?

ci joint mon programme
#include <Servo.h>
#include <SlowMotionServo.h>
#include <Bounce2.h>

SMSSmoothBounce myServoRight;
SMSSmoothBounce myServoLeft;
Bounce myButton;

const byte servoRightPin = 4;
const byte servoLeftPin = 3;
const byte buttonPin = 5;
const byte ledPin = 13;

void setup()
{
  pinMode(ledPin, OUTPUT);
  /* when the button is pressed, the input is LOW */
  pinMode(buttonPin, INPUT_PULLUP);

  myButton.attach(buttonPin);
  /* scan interval for debounce */
  myButton.interval(5);

  myServoRight.setMin(750);
  myServoRight.setMax(1800);
  myServoLeft.setMin(1100);
  myServoLeft.setMax(2200);
 
  myServoRight.setSpeed(1.5);
  myServoLeft.setSpeed(1.5);

  myServoLeft.setReverted(true);
 
  myServoRight.setInitialPosition(0.0);
  myServoLeft.setInitialPosition(0.0);
  myServoRight.setPin(servoRightPin);
  myServoLeft.setPin(servoLeftPin);
  digitalWrite(ledPin, HIGH);
}

void loop()
{
  static float servoTarget = 0.0;

  /* update the state of the button */
  myButton.update();
  /* update the position of the servo */
  SlowMotionServo::update();
 
  if (myServoRight.isStopped() && myServoLeft.isStopped()) {
    digitalWrite(ledPin, LOW);
    if (myButton.fell()) {
      /* look at the button only when the servo is stopped */
      /* change the target */
      servoTarget = 1.0 - servoTarget;
      /* set the new target for the servo */
      myServoRight.goTo(servoTarget);
      myServoLeft.goTo(servoTarget);
      digitalWrite(ledPin, HIGH);
    }
  }
}
est juste ou y a t'il des erreurs?

Cordialement
Fernand

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Cde Servos
« Réponse #27 le: mars 03, 2018, 05:52:50 pm »
Les pins A0 à A5 peuvent également être des pins numériques. Elles ne sont pas uniquement des entrées analogiques

Et je ne vois qu'une seule remise dans le programme. Avez vous lu l'article publié ce matin ? notamment le sketch à la fin.
Cordialement

ferdi68

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Cde Servos
« Réponse #28 le: mars 03, 2018, 07:08:05 pm »
#include <Bounce2.h>
#include <Servo.h>
#include <SlowMotionServo.h>

class Remise {
  private: SMSSmoothBounce mPorteDroite;
  private: SMSSmoothBounce mPorteGauche;
  private: Bounce mBoutonOverture;
  private: bool mPosition; /* false = fermé, true = ouvert */

  public: void demarre(const byte pinBouton, const byte pinServoPorteDroite, const byte pinServoPorteGauche);
  public: void gereRemise();
};

void Remise::demarre(const byte pinBouton, const byte pinServoPorteDroite, const byte pinServoPorteGauche)
{
  pinMode(pinBouton, INPUT_PULLUP);
  mBoutonOverture.attach(pinBouton);
  mBoutonOverture.interval(5); /* rafraichissement toutes les 5ms */
  mPorteDroite.setMin(900);
  mPorteDroite.setMax(1750);
  mPorteDroite.setSpeed(1.7);
  mPorteGauche.setMin(1100);
  mPorteGauche.setMax(2000);
  mPorteGauche.setSpeed(1.7);
  mPorteGauche.setReverted(true); /* La porte gauche a un mouvement inverse */
  mPorteDroite.setInitialPosition(0.1);
  mPorteGauche.setInitialPosition(0.1);
  mPorteDroite.setPin(pinServoPorteDroite);
  mPorteGauche.setPin(pinServoPorteGauche);
  mPosition = false;
  /* ferme les porte au démarrage */
  mPorteDroite.goTo(0.0);
  mPorteGauche.goTo(0.0);
}

void Remise::gereRemise()
{
  mBoutonOverture.update(); /* met à jour l'état du bouton */
  if (mPorteDroite.isStopped() && mPorteGauche.isStopped())
  {
    /* si un mouvement était en cours, il est terminé */
    if (mBoutonOverture.fell()) {
      /* appui sur le bouton, on démarre le mouvement */
      if (mPosition) {
        /* la remise est ouverte, la cible pour la fermer est 0.0 */
        mPorteDroite.goTo(0.0);
        mPorteGauche.goTo(0.0);
        mPosition = false;
      }
      else {
        /* la remise est fermée, la cible pour l'ouvrir est 1.0 */
        mPorteDroite.goTo(1.0);
        mPorteGauche.goTo(1.0);
        mPosition = true;
      }
    }
  }
}

/* Instance de Remise */
Remise remise1;

/* les broches */
const byte pinServoDroitRemise1 = 2;
const byte pinServoGaucheRemise1 = 3;
const byte pinBoutonRemise1 = 4;

Remise remise2;

/* les broches */
const byte pinServoDroitRemise2 = 5;
const byte pinServoGaucheRemise2 = 6;
const byte pinBoutonRemise2 = 7;

Remise remise3;

/* les broches */
const byte pinServoDroitRemise3 = 8;
const byte pinServoGaucheRemise3 = 9;
const byte pinBoutonRemise3 = 10;

Remise remise4;

/* les broches */
const byte pinServoDroitRemise4 = 11;
const byte pinServoGaucheRemise4 = 12;
const byte pinBoutonRemise4 = 13;

Remise remise5;

/* les broches */
const byte pinServoDroitRemise5 = A0;
const byte pinServoGaucheRemise5 = A1;
const byte pinBoutonRemise5 = A3;


void setup()
{
  remise1.demarre(pinBoutonRemise1, pinServoDroitRemise1, pinServoGaucheRemise1);

  remise2.demarre(pinBoutonRemise2, pinServoDroitRemise2, pinServoGaucheRemise2);

  remise3.demarre(pinBoutonRemise3, pinServoDroitRemise3, pinServoGaucheRemise3);

  remise4.demarre(pinBoutonRemise4, pinServoDroitRemise4, pinServoGaucheRemise4);

  remise5.demarre(pinBoutonRemise5, pinServoDroitRemise5, pinServoGaucheRemise5);
}

void loop()
{
  SlowMotionServo::update();
  remise1.gereRemise();
}


voila je m'étais trompé de programme, excusez moi

il doit manquer quelque chose car seule la remise1 fonctionne

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Cde Servos
« Réponse #29 le: mars 03, 2018, 07:11:19 pm »
Oui,

Dans loop, il faut appeler gereRemise() pour chaque remise sinon leur bouton respectif n’est pas lu.
Cordialement