Auteur Sujet: bonjour à tous  (Lu 3379 fois)

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
bonjour à tous
« le: avril 02, 2021, 03:29:06 pm »
bonjour

voici mon petit projet pour mon musée

j'ai une voie de démonstration en HO DC (pas de digital)
sur la quelle j'aimerais faire des navettes automatique
je vous symbolise la voie ---------<=========>------- (excuser moi pour le schéma rudimentaire en rouge)
pour se faire je voudrais utiliser mon Arduino uno avec des contacts ILS
 https://www.ebay.fr/itm/Module-ILS-Interrupteur-lame-souple-3-3V-5V-Arduino-reed-switch-MKA14103-/123653306363
de chaque coté
1 relais pour piloté le module de freinage et de démarrage progressif
1 relais inverseur de polarité
le temp d arrêt est gérer par l' Arduino
il me faut aussi un bouton "start" et un arrêt après 2 allé retour
pouvez-vous m'aider svp 

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2567
  • 100% Arduino et N
    • Voir le profil
Re : bonjour à tous
« Réponse #1 le: avril 02, 2021, 04:58:51 pm »
Bonjour,

Votre projet est sympa, mais on ne voit pas les éléments de recherche que vous auriez pu faire dans le site Locoduino (éditorial et forum) pour construire ce projet à partir de l'expérience et le partage d'autres modélistes.

S'il y a une truc qu'on ne peut pas faire à votre place, c'est ça  ???

Je suis certain que vous allez trouver votre bonheur rapidement.

Cordialement,
Dominique

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : bonjour à tous
« Réponse #2 le: avril 02, 2021, 07:28:05 pm »
bonsoir
merci pour votre aide

Sur se merveilleux site, j'ai vue plein de chose génial, mais je voudrais commencer simple avec  le vas et viens en DCC c'est se qui ma donné des idées
j'ai déjà commencé un début de programme avec lequel j'essaye de créer une tempo avec delay ou millis pour le temp d'attente, j'ai simulé mes ILS par des boutons poussoir et mes relais 5v par des DELs (avec resistance)
je précise que mon grand réseau N est gérer par ordinateur mais la j y suis pour rien lol
par contre pour tout les animations des réseaux je pense utiliser des Arduinos
je vais essayer de vous mettre mon début de programme demain ne pas rire svp   

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2567
  • 100% Arduino et N
    • Voir le profil
Re : bonjour à tous
« Réponse #3 le: avril 02, 2021, 07:37:16 pm »
Surtout prenez votre temps pour relire votre programme et le tester avec des Serial.print pour afficher les états.
Vous avez bien commencé à mettre en place quelques outils, c’est bien !

On préférerait ne pas rigoler en le lisant  ;D
« Modifié: avril 03, 2021, 09:32:32 am par Dominique »
Cordialement,
Dominique

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
voici mon début

voie HO 1 train
int ILS1 = 2;   //entrée voie A actionne
                     //1° relais 5V (K1) "arret" pendant 20 seconde
                    //2° après 15 seconde enclenche le relais 5V (K2)
                   //inverseur sens de marche
             
int ILS2 = 3; //entrée voie B actionne
                  //1° relais 5V (k1) "arret" pendant 20 seconde
                //2° après 15 seconde relache le relais 5V (K2)
              //inverseur sens de marche

int K1 = 4;             // relais "arret"
int K2 = 5;             // relais "inverseur"
[color=red]int timeDelay1 = 20000; // tempo d'arret
int timeDelay2 = 15000; //tempo avant inversion[/color]

unsigned long debounceTimeStamp;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void setup() {
 pinMode (ILS1, INPUT_PULLUP);
 pinMode (ILS2, INPUT_PULLUP);
 pinMode (K1, OUTPUT);
 pinMode (K2, OUTPUT);
}

void loop() {
  if (reading != lastButtonState) {
    // reset  debounce temps
    lastDebounceTime = millis();
}
« Modifié: avril 03, 2021, 01:31:16 pm par frederic »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2567
  • 100% Arduino et N
    • Voir le profil
Re : bonjour à tous
« Réponse #5 le: avril 03, 2021, 01:25:05 pm »
Et alors ?
Cordialement,
Dominique

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : bonjour à tous
« Réponse #6 le: avril 03, 2021, 01:31:46 pm »
je suis perdu je cherche comment avec millis crée mes tempos avant l'action du relais
« Modifié: avril 03, 2021, 01:36:39 pm par frederic »

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : bonjour à tous
« Réponse #7 le: avril 03, 2021, 01:49:16 pm »
essai avec millis
int ILS1 = 2;  //entrée voie A actionne
              //1° relais 5V (K1) "arret" pendant 20 seconde
              //2° après 15 seconde enclenche le relais 5V (K2)
              //inverseur sens de marche
             
int ILS2 = 3; //entrée voie B actionne
              //1° relais 5V (k1) "arret" pendant 20 seconde
              //2° après 15 seconde relache le relais 5V (K2)
              //inverseur sens de marche

int K1 = 4;             // relais "arret"
int K2 = 5;             // relais "inverseur"
//int timeDelay1 = 20000; // tempo d'arret
//int timeDelay2 = 15000; //tempo avant inversion
//int millis1 = 20000;
//int millis2 = 15000;
 int temps1;
     
    if(millis()-temps1> 20000)
   
 int temps2;
     
    if(millis()-temps2> 15000)


unsigned long debounceTimeStamp;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void setup() {
 pinMode (ILS1, INPUT_PULLUP);
 pinMode (ILS2, INPUT_PULLUP);
 pinMode (K1, OUTPUT);
 pinMode (K2, OUTPUT);
}

void loop() {
  if (reading != ILS1) {
    // reset  debounce temps
    lastDebounceTime = millis();

 if (reading != ILS2) {
    // reset  debounce temps
    lastDebounceTime = millis();

   
}

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2567
  • 100% Arduino et N
    • Voir le profil
Re : bonjour à tous
« Réponse #8 le: avril 03, 2021, 02:11:43 pm »
Vos pouvez regarder l’exemple “blink without delay”  qui est l’exemple typique dont vous avez besoin.

Je vous conseille de chercher un peu avant de décréter “je n’y arrive pas”. Ce n’est pas pour vous embêter, c’est pour vous permettre de devenir bon et autonome plus tard.

Faites attention au type des données : millis() retourne un unsigned long, pas un int.
Lisez aussi souvent le menu aide/référence.
« Modifié: avril 03, 2021, 02:16:18 pm par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2567
  • 100% Arduino et N
    • Voir le profil
Re : bonjour à tous
« Réponse #9 le: avril 03, 2021, 02:20:17 pm »
Cordialement,
Dominique

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : bonjour à tous
« Réponse #10 le: avril 03, 2021, 07:13:22 pm »
merci pour ton aide
oui je l ai lue [code
int ILS1 = 2;  //entrée voie A actionne
              //1° relais 5V (K1) "arret" pendant 20 seconde
              //2° après 15 seconde enclenche le relais 5V (K2)
              //inverseur sens de marche
             
int ILS2 = 3; //entrée voie B actionne
              //1° relais 5V (k1) "arret" pendant 20 seconde
              //2° après 15 seconde relache le relais 5V (K2)
              //inverseur sens de marche

int K1 = 4;             // relais "arret"
int K2 = 5;             // relais "inverseur"

int timeDelay = false;


void K10()
{
  if (digitalRead(ILS1) == HIGH && !ILS1)
  {
    ILS1 = !ILS1;  // ILS1 active le relais K1
   
 
   
   
  else if (K1 == LOW && intervalle >860) {
    K1 = HIGH;
    digitalWrite(4, K1);
    dateDernierChangement4 = dateCourante; // après 860 mon relais K1 se desangage
  }

}   
void setup()
{

}

void loop()
{
 
  }]

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : bonjour à tous
« Réponse #11 le: avril 03, 2021, 07:17:10 pm »
le Blink without Delay est très intéressant merci je regarde demain en détail
bonne soirée

msport

  • Hero Member
  • *****
  • Messages: 1735
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : bonjour à tous
« Réponse #12 le: avril 03, 2021, 07:24:29 pm »
Je suggère la lecture de la série d'article La programmation, qu’est ce que c’est ?
https://www.locoduino.org/spip.php?article7 et suivants (voir en  bas des articles)

pour éviter de poster des programmes qui ne passent pas à la compilation, faute d'une déclaration complète des variables et de la présence d'instructions dans les déclarations.

Mais, effectivement,  avant de se lancer dans l'écriture du code, il vaudrait mieux lister au brouillon la logique (en pseudo code) enchainant ce qu'on veut réaliser, avec les entrées d'un coté et les sorties de l'autre, et la logique au milieu. Ce qui vous permettra de lister toutes les variables dont vous avez besoin.
Cordialement

frederic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : bonjour à tous
« Réponse #13 le: juillet 25, 2021, 08:28:50 pm »
bonjour la team

après une absence pour prendre le temps de mieux connaitre la programmation sur Arduino
voici mon nouveau code pouvez-vous me dire se que vous en pensé
sachant que le train entre sur la zone d'arrêt et d'inverseur "inverseur activé"const int Broche_ILS1 = 3; //ILS commande d'arret (on relais 1 pendent une durer x)
const int Broche_ILS2 = 4; //ILS commande de l'inverseur de polariter après un temps x

const int Broche_LED1 = 6; //LED1 commande d'arret activé
const int Broche_LED2 = 7; //LED2 commande de l' inverseur activé

const int Broche_RELAIS1 = 9;  //arret
const int Broche_RELAIS2 = 10;  //inverseur

int Etat_ILS1 = 0;    //arret
int Ordre_Tempo1 = 0; //arret
int Moteur1 = 0;      //arret

int Etat_ILS2 = 0;     //inverseur
int Ordre_Tempo2 = 0;  //inverseur
int Moteur2 = 0;       //inverseur

unsigned long Temps_Actuel1;      //arret
unsigned long Temps_Precedent1;   //arret

unsigned long Temps_Actuel2;      //inverseur
unsigned long Temps_Precedent2;   //inverseur

unsigned long Tempo_Repos1 = 10000;      //arret

unsigned long Tempo_Repos2 = 8000;      //inverseur


void setup()
{

 Serial.begin (9600);
 pinMode(Broche_ILS1, INPUT_PULLUP);     //arret
 pinMode(Broche_LED1, OUTPUT);          //arret
 pinMode(Broche_RELAIS1, OUTPUT);        //arret

 pinMode(Broche_ILS2, INPUT_PULLUP);    //inverseur
 pinMode(Broche_LED2, OUTPUT);          //inverseur
 pinMode(Broche_RELAIS2,OUTPUT);        //inverseur

}
void loop()
{
//debut Loop arret
 Temps_Actuel1 = millis();
 Etat_ILS1 = digitalRead(Broche_ILS1);

 if (Etat_ILS1 == HIGH)
 {
    digitalWrite(Broche_LED1,HIGH);
    Temps_Precedent1 = Temps_Actuel1;
    Ordre_Tempo1 = 1;
 }
 if (Ordre_Tempo1 == 1)
 {
    if ((Temps_Actuel1 - Temps_Precedent1) < Tempo_Repos1) {
      Moteur1 = 1;
    }
    else {
      Moteur1 = 0;
      Ordre_Tempo1 = 0;
    }
 }

 if (Moteur1 == 1)
 {
   
    digitalWrite(Broche_RELAIS1, HIGH);
    }
    else
    {
      digitalWrite(Broche_LED1, LOW);
      digitalWrite(Broche_RELAIS1, LOW);
      }
      //fin Loop arret et debut LOOP inverseur
 Temps_Actuel2 = millis();
 Etat_ILS2 = digitalRead(Broche_ILS2);

 if (Etat_ILS2 == HIGH)
 {
    digitalWrite(Broche_LED2,HIGH);
    Temps_Precedent2 = Temps_Actuel2;
    Ordre_Tempo2 = 1;
 }
 if (Ordre_Tempo2 == 1)
 {
    if ((Temps_Actuel2 - Temps_Precedent2) < Tempo_Repos2) {
      Moteur2 = 1;
    }
    else {
      Moteur2 = 0;
      Ordre_Tempo2 = 0;
    }
 }

 if (Moteur2 == 0)
 {
   
    digitalWrite(Broche_RELAIS2, HIGH);
    }
    else
    {
      digitalWrite(Broche_LED2, LOW);
      digitalWrite(Broche_RELAIS2, LOW);
      }
     //fin LOOP inverseur
     //affichage serie
     Serial.print("; Etat_ILS1:"); Serial.print(Etat_ILS1);
     Serial.print("; Etat_ILS2:"); Serial.print(Etat_ILS2);
}

msport

  • Hero Member
  • *****
  • Messages: 1735
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : bonjour à tous
« Réponse #14 le: juillet 25, 2021, 10:15:37 pm »

Bonjour,

juste quelques remarques :
pour que votre programme soit lisible par d'autres, utilisez des noms significatifs pour vos données incluant la fonction comme Arret et Inverse dans le nom. Et indentez correctement les if.
Vos ILS sont certainement à chaque extrémité, donc commencez par écrire un programme de va-et-vient qui inverse le sens à chaque extrémité.
Vous l'enrichirez ensuite avec un compteur pour l'arrêter au bout de deux fois ou avec un arrêt par temporisation. Il faut choisir.
Par ailleurs, la fonction PULLUP maintient une entrée à HIGH tant qu'elle n'est pas mise au GND. Le module à ILS élimine probablement les rebonds, son sens est à vérifier si il est bien LOW quand un aimant est présent et en tenir compte dans votre programme.

Mais testez donc votre programme et dites nous ce que vous en pensez.

Cordialement
Cordialement