Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - ferdi68

Pages: [1] 2
1
Discussions ouvertes / Re : Cde Servos
« le: mars 08, 2018, 11:03:07 pm »
Bonsoir,
j'ai une dernière question: est il possible de décaler en temps un des servos d'une porte, tout cela pour donner l'impression d'une ouverture de demi-porte et la 2eme légèrement décalée en temps

Cordialement
Fernand

2
Discussions ouvertes / Re : Cde Servos
« le: mars 04, 2018, 02:08:39 pm »
Bonjour Jean-Luc,
j' ai détecté un probleme: lors de la mise sous tension un des servos fait plusieurs tours complet avant de se stabiliser et ensuite il fonctionne normalement
c'est pas bon pour la porte en question ,vu qu'elle n'a qu'une course de 90°
que faire?
Cordialement
Fernand

3
Discussions ouvertes / Re : Cde Servos
« le: mars 03, 2018, 08:07:21 pm »
Merci Jean-Luc ca fonctionne a merveille super
Cordialement et bonne soirée
Fernand

4
Discussions ouvertes / Re : Cde Servos
« 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

5
Discussions ouvertes / Re : Cde Servos
« 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

6
Discussions ouvertes / Re : Cde Servos
« 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?

7
Discussions ouvertes / Re : Cde Servos
« le: mars 02, 2018, 05:17:30 pm »
Ok pigé c

8
Discussions ouvertes / Re : Cde Servos
« 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

9
Discussions ouvertes / Re : Cde Servos
« 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

10
Discussions ouvertes / Re : Cde Servos
« le: mars 01, 2018, 02:01:31 pm »
Merci Jean-Luc
Le SlowMotionServo c'est super mais comment l'intégrer dans le programme avec la commande bouton?
Cordialement
Fernand

11
Discussions ouvertes / Re : Cde Servos
« le: février 28, 2018, 11:22:19 am »
Bonjour et merci de votre reponse
J'ai en fait une remise avec 5 portes, donc 10 demi-portes a commander
je vais de ce pas chercher votre nouvelle biblio
merci
Fernand

12
Discussions ouvertes / Re : Cde Servos
« le: février 28, 2018, 09:53:24 am »
#include <Servo.h>
 
const byte SERVO_A_ANGLE_MIN = 0;
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX = 2;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN = 3;
 
const int angleMin = 900;
const int angleMax = 1750;
 
Servo monServo;
int vitesse = 0;
int angle = angleMin;
byte etatServo = SERVO_A_ANGLE_MIN;
 
const int pinBouton = 0; /* le bouton est connecté à la broche A0 */
 
const boolean PRESSE = true;
const boolean RELACHE = false;
 
boolean etatBouton = RELACHE;
 
const byte AUCUN_EVENEMENT = 0;
const byte EVENEMENT_PRESSE = 1;
const byte EVENEMENT_RELACHE = 2;
 
/*
 * fonctions de gestion du poussoir
 */
boolean lirePoussoir()
{
    boolean resultat = RELACHE;
    if (analogRead(pinBouton) > 512) {
        resultat = PRESSE;
    }
    return resultat;
}
 
byte lireEvenement()
{
    byte evenement;
    boolean nouvelEtat = lirePoussoir();
    if (nouvelEtat == etatBouton)
        evenement = AUCUN_EVENEMENT;
    if (nouvelEtat == PRESSE && etatBouton == RELACHE)
        evenement = EVENEMENT_PRESSE;
    if (nouvelEtat == RELACHE && etatBouton == PRESSE)
        evenement = EVENEMENT_RELACHE;
    etatBouton = nouvelEtat;
    return evenement;
}
 
/*
 * La fonction setup() est exécutée 1 fois
 * au démarrage du programme
 */
void setup()
{
  monServo.attach(2);
}
 
/*
 * La fonction loop() est exécutée
 * répétitivement
 */
void loop()

{
    /* actualisation de l'angle du servo */
    monServo.writeMicroseconds(angle);
 
    angle = angle + vitesse;
 
    if (angle > angleMax) {
        angle = angleMax;
        vitesse = 0;
        etatServo = SERVO_A_ANGLE_MAX;
    }
    else if (angle < angleMin) {
        angle = angleMin;
        vitesse = 0;
        etatServo = SERVO_A_ANGLE_MIN;
    }
 
    /* lecture de la commande de l'utilisateur */
    byte evenement = lireEvenement();
 
    if (evenement == EVENEMENT_PRESSE) {
        switch (etatServo) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
                vitesse =  1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
                break;
            case SERVO_A_ANGLE_MAX:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
                vitesse = -1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
                break;
        }
    }
 
    delay(3);

ceci est le programme actuel qui fonctionne
j'aimerais commander mes 10 portes de dépot alors que dois je faire
Cordialement
Fernand

13
Discussions ouvertes / Re : Cde Servos
« le: février 27, 2018, 04:14:04 pm »
bonjour,
tout cela est ok et je viens de charger la biblio de Modeleisenbahn N concernant la commande du servo avec un bouton poussoir et ca fonctionne bien
ce que j'aimerais savoir c'set
1. comment ralentir le mouvement du servo
2. que dois-je faire maintenant pour rajouter d'autres servos avec leurs boutons correspondant?
Merci de votre aide

14
Discussions ouvertes / Re : Cde Servos
« le: février 19, 2018, 04:25:04 pm »
oui , le servo fonctionne et l'angle de 90° est correct, le servo fait des va et vient

15
Discussions ouvertes / Cde Servos
« le: février 19, 2018, 01:20:12 pm »
que dois-je faire pour commander un servo avec un bouton
: une impulsion demmarage du servo , 2eme impulsion retour dans sa position initiale

Pages: [1] 2