Auteur Sujet: Passage a niveau en numérique  (Lu 59138 fois)

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #15 le: octobre 04, 2017, 05:51:47 pm »
Suite,
Je n'arrive pas à fier le lien entre mon décodeur sdec4 et la carte arduino. Lorsqu'un canton est occupé le pan se ferme et  s'ouvre dès qu'un autre canton est libéré.Il faut donc que le servo fasse dans un premier temps un aller et dans un deuxième un retour.
Et la je bloque

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #16 le: octobre 04, 2017, 05:57:37 pm »
J'ai rien compris  :)

Ce que j'avais compris : le S-DEC-4 est un décodeur. Quelles sont ses sorties de commandes ? que produisent-elle comme signal ?
Cordialement

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #17 le: octobre 04, 2017, 06:23:00 pm »
https://www.locgeek.com/fr/2014/08/decodeurs-accessoires-ldt-sa-dec-4-dc-s-dec-4-dc/

si il s'agit bien de cela, la sortie est à impulsion, sur relais.
pour simplifier le câblage, il faut utiliser le contact NO entre entrée arduino et Ground en la déclarant en pullup :
pinMode (2, INPUT_PULLUP);
puis faire un
    if (digitalRead (2) == LOW)
    {
      // Actions à faire lorsque le bouton est pressé.
       ...
    }

http://www.locoduino.org/spip.php?article122

Cordialement

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #18 le: octobre 04, 2017, 08:14:10 pm »
Il s'agit bien de ce décodeur. par contre après, je n'ai pas tout saisi

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #19 le: octobre 04, 2017, 10:48:47 pm »
Pas d'autre solution que d'acquérir les bases : voir le site éditorial :
http://www.locoduino.org/spip.php?article217

et bien sur https://www.arduino.cc/en/Guide/HomePage

et/ou en testant les exemples : dans l'IDE : fichiers /exemples
Cordialement

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Re : Passage a niveau en numérique
« Réponse #20 le: octobre 05, 2017, 09:36:13 am »
https://www.locgeek.com/fr/2014/08/decodeurs-accessoires-ldt-sa-dec-4-dc-s-dec-4-dc/

si il s'agit bien de cela, la sortie est à impulsion, sur relais.
pour simplifier le câblage, il faut utiliser le contact NO entre entrée arduino et Ground en la déclarant en pullup :
pinMode (2, INPUT_PULLUP);
puis faire un
    if (digitalRead (2) == LOW)
    {
      // Actions à faire lorsque le bouton est pressé.
       ...
    }
Que signifient ...

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #21 le: octobre 05, 2017, 09:55:13 am »
Ils doivent être remplacés par ce qui doit être fait si la commande connectée à la broche 2 arrive. Dans ton cas, assigner une position destination au servo (goTo(), goToMin ou goToMax dans SlowMotionServo)
Cordialement

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #22 le: octobre 05, 2017, 11:49:39 am »
Je suis vraiment nul. Voici ce que j'ai ecrit. Lorsque j'actionne le relais, Le servo fonctionne normalement en allers retours sans discontinuer. Il n'y a pas d'arret lorsque j'actionne le contact du relais

#include <Servo.h>
#include <SlowMotionServo.h>

SMSSmooth myServo; /* Servo with linear trajectory */
float target = 0.0;

void setup() {
  myServo.setInitialPosition(target);
  myServo.setMinMax(700, 2000);
  myServo.setPin(3); /* the servo is connected to pin 3 */
 
pinMode (2, INPUT_PULLUP);
 }
void loop() {
  if (myServo.isStopped()) {
    target = 1.0 - target;
    myServo.goTo(target);
  }
  if (digitalRead (2) == LOW)
  {
  // Actions à faire lorsque le bouton est pressé.
     digitalWrite(pinMode, HIGH);
  }
  SlowMotionServo::update();
}
« Modifié: octobre 05, 2017, 11:55:43 am par Jean-Luc »

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #23 le: octobre 05, 2017, 11:54:44 am »
À vrai dire, dans ton programme, il n'y a rien qui positionne le servo en fonction de ce qui est reçu du décodeur. C'est donc normal que tu aies le même comportement que dans l'exemple de SlowMotionServo.

1 - comment le décodeur est-il connecté à l'Arduino, sur quelles broches ? : schéma, photos
2 - si j'ai bien compris ce qu'a expliqué sport, il faut deux entrées, une qui fera que le servo ira à sa position max et une qui fera que le servo ira à sa position min.
Cordialement

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #24 le: octobre 05, 2017, 12:07:30 pm »
J'ai connecté un relais au décodeur qui fait office de bouton poussoir. Ensuite le relais sur les fiches GND et 2.
Photo jointe
« Modifié: octobre 05, 2017, 12:26:03 pm par simonp19 »

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #25 le: octobre 05, 2017, 12:13:17 pm »
OK

Donc ce que tu veux : quand le relai est collé, le servo va à une des deux positions, quand il ne l'est pas pas les servo va à l'autre ?
Cordialement

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #26 le: octobre 05, 2017, 12:26:36 pm »
oui tout a fait

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #27 le: octobre 05, 2017, 12:35:32 pm »
C'est pas compliqué

Le code suivant devrait fonctionner :

#include <Servo.h>
#include <SlowMotionServo.h>

const byte brocheDeCommande = 2; /* la broche où le relai est connecté */

SMSSmooth servoPAN; /* Servo with SMOOTH trajectory */

void setup() {
  servoPAN.setInitialPosition(0.0);
  servoPAN.setMinMax(700, 2000);
  servoPAN.setPin(3); /* the servo is connected to pin 3 */
  pinMode (brocheDeCommande, INPUT_PULLUP);
}

void loop() {
  if (servoPAN.isStopped()) {
    float destination;
    if (digitalRead(brocheDeCommande) == LOW) {
      /* le relai est collé, on va à la position 1.0 */
      destination = 1.0;
    }
    else {
      /* le relai n'est pas collé, on va à la position 0.0 */
      destination = 0.0;
    }
    servoPAN.goTo(destination);
  }
  SlowMotionServo::update();
}
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #28 le: octobre 05, 2017, 12:46:46 pm »
Note qu'il y a moyen de se passer du relai  :)
Cordialement

simonp19

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Passage a niveau en numérique
« Réponse #29 le: octobre 05, 2017, 12:51:55 pm »
Par quel myen?