LOCODUINO

Chenillard de DEL

.
Par : Christian, Dominique, Guillaume

DIFFICULTÉ :

Le chenillard est un ensemble de DEL dont le programme présenté ci-après contrôle leur allumage et leur extinction les unes à la suite des autres.

Une des applications réelles sur un réseau peut être les feux dans un virage serré.

Une petite vidéo pour mieux comprendre :

Les pré-requis

Vous pouvez très bien arrêter votre lecture à ce stade pour essayer de faire comme l’animation pour vous entraîner à coder et à brancher correctement. Vous pourrez ensuite comparer votre code avec celui ci-dessous.

Pour quel arduino ?

Le code est écrit pour un Arduino Uno, mais facilement transposable à un autre type d’arduino. Il est toutefois écrit avec la commande Delay() ce qui nécessite une adaptation pour rajouter d’autres effets par exemple de lumière.

Le matériel nécessaire

Pour cette animation, il faut :

  1. un ordinateur et l’IDE Arduino installé : « Installation de l’IDE Arduino »
  2. l’arduino UNO et son câble USB
  3. des fils et une plaque de prototypage
  4. 6 DEL ainsi que 6 résistances : 220 ohms

Si vous ne savez pas ce que c’est ces bidules, « Un minimum pour jouer rapidement avec un Arduino » vous aidera.
Où les acheter, jetez un œil à « Où acheter ? ».

Les branchements

Pour le prototypage, les branchements sont réalisés sur une breadboard. « Les indispensables du prototypage » explique comment utiliser une breadboard.

Figure 1
Figure 1
Montage sur platine d’essai du chenillard de DEL

La figure 1 montre le montage à réaliser.

Le programme

Le programme ci-après est à recopier dans l’interface de l’IDE d’Arduino. Il y a même un bouton télécharger à la fin.

/*
 * Programme pour arduino uno
 * Projet APTE Loco-Revue
 * par C. Bézanger Octobre 2013
 * Licence GNU GPLv3
 *
 * Ce programme réalise un chenillard.
 * Il fait flasher successivement six DEL oranges relées aux sorties 4 à 9
 * Puis il réalise une pause de 500 millisecondes avant de recommencer
 */

// Initialisation des lignes 4 à 9 en sortie
void setup () {
  pinMode (4, OUTPUT) ;
  pinMode (5, OUTPUT) ;
  pinMode (6, OUTPUT) ;
  pinMode (7, OUTPUT) ;
  pinMode (8, OUTPUT) ;
  pinMode (9, OUTPUT) ;
}

// Fonction loop
void loop () {
  // Extinction de toutes les DEL au départ du programme
  for (byte i = 4 ; i <= 9 ; i++) {
    digitalWrite (i, LOW) ; // éteint la DEL reliée à la broche i
  }
  
  // Boucle pour faire flasher les DEL
  for (byte i = 4 ; i <= 9 ; i++) {
    digitalWrite (i, HIGH) ; // allume la DEL sur broche i
    delay (50) ; // durée du flash 50 millisecondes
    digitalWrite (i, LOW) ; // éteint la DEL
  }
  
  // délai de 500 millisecondes
  delay (500) ;
  
  // Recommence la séquence
}

37 Messages

  • Un chenillard de DEL 1er juillet 2017 16:01, par Taloche

    bonjour
    j’ai testé pour faire un aller-retour en recopiant la boucle for avec décrément !
    malheureusement cela ne fonctionne pas :

    for (byte i = 9 ; i <= 4 ; i--) {
        digitalWrite (i, HIGH) ; // allume la DEL sur broche i
        delay (50) ; // durée du flash 50 millisecondes
        digitalWrite (i, LOW) ; // éteint la DEL
     }

    j’ai laissé tel quel le setup ...
    merci d’avance

    Répondre

    • Un chenillard de DEL 1er juillet 2017 17:04, par Christian

      Bonjour,

      Il suffit de changer votre signe <= en >= et bien faire i-- pour décrémenter.
      En effet, vous allez parcourir les LED en partant de la 9 et en allant vers la 4, donc i doit toujours être supérieur ou égal à 4 (condition pour que la boucle continue). Dès qu’il devient égal à 3, la boucle s’arrête.

      Répondre

  • Un chenillard de DEL 18 juin 2018 01:19

    bonjour

    je débute en arduino et j’ai des soucis pour programmer
    que signifie byte ? et pk i correspond a une broche alors qu’on l’ a pas déclaré en tant que variable

    Répondre

    • Un chenillard de DEL 18 juin 2018 10:46, par Christian

      Byte signifie octet en anglais, soit une information stockée en mémoire sous la forme de 8 bits pouvant prendre la valeur 0 ou 1. Cela fait 256 possibilités en binaire et un byte a donc une valeur comprise entre 0 et 255 (soit 256 possibilités).
      En programmation, il faut parler un peu l’anglais et si ce n’est pas le cas pour vous, vous pouvez toujours chercher avec Google traduction la signification d’un terme. Et petit à petit, vous vous accoutumerez.
      Par contre, je ne comprends pas votre question sur pk i ???
      Si vous débutez en Arduino, je vous conseille de lire l’article http://locoduino.org/spip.php?article217 Arduino, toute première fois !

      Répondre

      • Un chenillard de DEL 19 juin 2018 17:49, par An

        Je pense que « pk i » signifie « pourquoi i ». Sur un forum destiné à des lecteurs divers et variés, il faut écrire en français et en toutes lettres !
        Dans la section :

          for (byte i = 4 ; i <= 9 ; i++) {
            digitalWrite (i, LOW) ; // éteint la DEL reliée à la broche i
          }

        le fait d’écrire « byte i = 4 » déclare la variable i de type byte et l’initialise avec la valeur 4. La variable i est donc bien déclarée.
        Hors-sujet : comment faites-vous pour insérer du code formaté dans les messages ?

        Répondre

        • Un chenillard de DEL 20 juin 2018 08:30, par Jean-Luc

          Bonjour,

          comme ceci :

          <code class="arduino sans_telechargement">
          int i ;
          </code>

          Donne

          int i;

          Répondre

        • Un chenillard de DEL 20 juin 2018 10:19, par Christian

          Merci An d’avoir répondu clairement à la question et surtout d’avoir précisé qu’il faut rédiger en français et en toutes lettres.
          Lorsqu’une question est posée, nous sommes prévenus par mail et nous faisons tout notre possible pour répondre : cela nous prend du temps, et si nous devons en consacrer encore plus pour comprendre une abréviation ou du charabia, ce n’est pas normal.
          De même, et d’une façon plus générale et sans rapport avec ces derniers échanges, relisez-vous et corrigez vos fautes. Il peut en rester une ou deux car c’est difficile de se relire, mais quand une question est truffée de fautes d’orthographe à chaque ligne, c’est un manque de respect pour la personne à qui elle s’adresse, d’autant que ce forum a un correcteur orthographique incorporé.
          Nous ne sommes pas des Académiciens, mais nous veillons à ce point car LOCODUINO est lu dans tous les pays francophones, et parfois même ailleurs. Il est également de bon ton de renseigner un nom et une adresse mail : celle-ci n’apparaît pas mais permet d’être prévenu de la réponse. Merci de votre compréhension.
          (La question hors sujet a été traitée par Jean-Luc avant mon intervention : merci à lui)

          Répondre

  • Un chenillard de DEL 5 novembre 2018 18:24, par brunodujura

    Bonjour,

    Je me demandais s’il était autorisé d’utiliser la boucle for dans le setup afin de diminuer le nombre de lignes vu que vous ne l’aviez pas fait.
    J’ai donc testé à tout hasard

    for (byte i = 4 ; i <= 9 ; i++ )
    {
        pinMode(i, OUTPUT);
    }

    et cela fonctionne.

    Mais peut-être y a t-il une raison pour ne pas le faire ?

    Bruno, débutant

    Répondre

    • Un chenillard de DEL 5 novembre 2018 18:39, par Christian

      Bonjour Bruno,

      Bien sûr que cela fonctionne car la fonction setup est une fonction comme les autres qui peut recevoir n’importe quel code utilisable pour Arduino. Par contre, ce code n’est exécuté qu’une seule fois, contrairement à la fonction loop qui est exécuté en boucle (loop = boucle en anglais) ou bien une fonction définie par l’utilisateur qui est exécutée chaque fois qu’elle est appelée.
      On peut donc utiliser des boucles "for" sans problème dans la fonction setup et effectivement, cela diminue le nombre de lignes. La raison pour laquelle je ne l’ai pas fait est que cela me semblait plus clair pour un article écrit pour des débutants en Arduino.
      Mais bravo à vous d’avoir su vous poser la question et d’avoir essayé pour vous rendre compte que cela peut se faire. Vous allez découvrir avec Arduino tout un monde d’expérimentations passionnantes.

      Répondre

  • Un chenillard de DEL 17 octobre 2019 21:11, par bruno

    Bonjour,

    Pourquoi les lignes 25 à 27 concernant l’extinction des Led

    Je les ai supprimées et cela fonctionne toujours....

    Merci,

    Bruno

    Répondre

  • Un chenillard de DEL 30 octobre 2019 01:00, par Christian

    Bonjour Bruno,
    Les lignes 25 à 27 ne sont effectivement pas nécessaires car dès que la séquence est lancée, les LED restent dans le bon état pour la suite du déroulement.
    En fait, cette boucle sert à ce que l’état de départ (dès allumage de la carte Arduino) soit toutes LED éteintes et il aurait été préférable de placer cette boucle dans le setup après les pinMode.
    Christian

    Répondre

  • Un chenillard de DEL 15 février 2021 12:53, par Daniel

    Salut svp dans un chenillard les Led doivent s’allumer l’une après l’autre je pense mais quand vous parlez de "flasher" et dans votre code,ces LED ne s’allument pas simultanément ?

    Répondre

    • Un chenillard de DEL 15 février 2021 13:54, par Christian

      Dans l’exemple développé dans cet article, il n’y a qu’une seule LED allumée à la fois, et l’ordre dans lequel les LED s’allument donne effectivement l’effet lumineux d’un flash qui se propage de LED en LED.
      Ecrire des programmes d’effets lumineux est aujourd’hui simplifié grâce à la bibliothèque LightEffect que Locoduino a écrite et qui figure sur le site d’Arduino : pour plus de détails sur cette bibliothèque, reportez-vous à cet article : https://www.locoduino.org/spip.php?... .

      Répondre

  • Un chenillard de DEL 19 décembre 2021 10:39, par thuault

    Bonjour

    Débutant en Arduino , pour une application d’horloge je souhaite lancer plusieurs chenillards en simultané mais je bloque !!
    Merci pour votre aide

    André

    Répondre

    • Un chenillard de DEL 19 décembre 2021 11:16, par Christian

      Comment voulez-vous qu’on vous aide avec aussi peu de détails ?
      Application d’horloge ? Qu’entendez-vous par cela ? Que voulez-vous obtenir exactement ? Et pour quoi en faire ?
      Plusieurs chenillards en simultané ? Sur quelles sorties et aussi combien de sorties ?
      Le seul indice que je puisse vous donner, c’est d’utiliser la fonction millis() et non delay() puisque vous voulez faire des tâches en simultané.
      Mais il vaudrait mieux ouvrir un fil sur notre forum pour trouver de l’aide car cet emplacement n’est fait que pour parler de l’article en question.
      Et surtout, ne soyez pas avare de détails ; si vous voulez être aidé, il faut que les autres comprennent ce qui vous pose un problème (matériel ou logiciel, quelle carte utilisée, etc.)
      Enfin, je vous rappelle que Locoduino traite de modélisme ferroviaire et qu’il existe des forums plus appropriés pour tout ce qui concerne la domotique, la robotique ou l’art en général. Sur ces forums, vous pourrez peut-être trouver quelqu’un qui a déjà réalisé un projet similaire au vôtre.

      Répondre

  • Un chenillard de DEL 20 octobre 2022 08:41, par jeepee0407

    Bonjour,
    Voici une version simplifié programmée sur une carte Arduino Mega chenillard 8 LED
    [code]
    /*
    * Programme pour arduino Mega2560
    * les 8 LED sont Branchées sur le PORTC
    * LED 1 pin 37 ; LED 2 pin 36 ; LED 3 pin 35 ; LED 4 pin 34 ;
    * LED 5 pin 33 ; LED 6 pin 32 ; LED 7 pin 31 ; LED 8 pin 30 ;
    *
    */
    int r=1 ; // registre
    void setup ()
    DDRC = B11111111 ;// mettre Toute le PORT C en Sortie

    void loop ()
    for (int i = 0 ; i<8 ; i++)
    int p = r << i ; // décalage du registre de droite vers la gauche "00000001 se décale 00000010"
    PORTC = p ; // Mise a HIGH de tout le PORT C selon le registre p
    delay(80) ;
    PORTC = !PORTC ;// Complément du PORT C "00000001 passe a 00000000"
    delay(80) ;

    [/code]

    Répondre

    • Un chenillard de DEL 20 octobre 2022 09:45, par Christian

      Cette intervention aurait dû se retrouver sur le forum car elle ne concerne pas l’article ci-dessus qui est fait pour des débutants (voir https://www.locoduino.org/spip.php?... ).
      Effectivement, on peut toujours passer par les PORT du microcontrôleur plutôt que par des digitalWrite, mais cela demande déjà quelques connaissances sur le structure interne du microcontrôleur.
      Et quitte à mettre un programme, il faut le mettre en totalité car il manque des accolades dans votre programme et la compilation est impossible. Mais je pense que tout le monde peut rectifier...
      Merci tout de même de votre participation.

      Répondre

  • Un chenillard de DEL 6 novembre 2022 08:24, par pierre

    Bonjour, est ce que c’est possible de le faire fonctionner avec une trentaine de LEDs. Merci bien

    Voir en ligne : Chenillard

    Répondre

    • Un chenillard de DEL 6 novembre 2022 09:47, par Christian

      Sur une carte Uno, vous n’avez que 20 sorties numériques, donc vous êtes limités à 20 LED. Mais si vous prenez une carte Mega, vous pouvez tout à fait mettre 30 LED. Dans ce cas, la limitation est fixée par le courant que peut délivrer la carte, soit 200 mA au maximum. Ce qui représente 200/30 = 6,66 mA par LED. Choisissons 5 mA par LED pour avoir un petit coefficient de sécurité, il ne reste plus qu’à calculer la valeur de résistance de limitation comme indiqué sur ce site.
      Une autre façon de faire à partir d’une carte Uno est d’utiliser un CI 74HC595 qui permet d’étendre le nombre de sorties : avec 3 sorties de la carte Uno, on commande jusqu’à 8 LED. Pour faire un chenillard à 30 LED, il vous faudra quatre 74HC595, mais ceci concerne déjà une technique qui demande de connaître un peu Arduino.

      Répondre

  • Un chenillard de DEL 6 novembre 2022 09:38, par msport

    Bonjour,
    un Arduino ne peut pas fournir directement le courant pour 30 LED.
    Il faut utiliser un circuit intermédiaire tel l’ULN2803 et une alimentation extérieure
    avec un module comme celui-ci :

    Voir en ligne : module ULN2803A

    Répondre

  • Chenillard de DEL 15 décembre 2023 11:07, par jean noel caillet

    Bonjour, et merci pour toutes les aides que vous donnez aux débutants dont je fais partie.
    Je voudrais faire un chenillard dont la longueur en nombre de DEL serait aléatoire (entre 5 et 13 DEL),
    et dont le delai de répétition de la boucle serait aléatoire entre 1 et 10 minutes.

    Est-ce que je peux remplacer la ligne
    for (byte i = 4 ; i <= 9 ; i++) par
    for (byte i = random(1,5) ; i <= random(9,13) ; i++)
    et est-ce que je peux remplacer la ligne
    delay (500) ; par
    delay(random(60000,600000) ;
    Je vous remercie par avance.
    Bien cordialement.

    Répondre

    • Chenillard de DEL 16 décembre 2023 15:34, par Christian

      J’ai essayé car je n’en avais pas la moindre idée.
      Cependant, j’ai préféré extraire la fonction random de la boucle et définir un index de départ et un index de fin avec random :

      int iStart = random(1,5) ;
      int iStop = random(9,13) ;
      for (byte i = iStart ; i <= iStop ; i++) ...

      Puis j’ai affiché ces index dans le moniteur : comme cela était cohérent, j’ai monté une Uno et trois LED (sur 2, 8 et 12) que j’avais sous la main pour autre chose. Visiblement cela fonctionne. Parfois une seule LED, parfois 2 parfois 3.

      15:32:20.500 -> 3 11
      15:32:22.915 -> 2 10
      15:32:25.416 -> 2 11
      15:32:27.838 -> 2 9
      15:32:30.294 -> 3 11
      15:32:32.860 -> 1 12
      15:32:35.234 -> 4 10

      Faite de même pour la fonction delay.

      Répondre

  • Chenillard de DEL 15 décembre 2023 11:13, par jean noel caillet

    Clarification pour une de mes question précédentes.
    La modification que je proposais pour rendre aléatoire la longueur du chenillard, ne concernait bien sur
    que la boucle d’allumage des DEL.
    Merci.

    Répondre

    • Chenillard de DEL 16 décembre 2023 15:34, par Christian

      J’espère avoir bien compris ce que vous vouliez savoir.
      Cdlt.

      Répondre

      • Chenillard de DEL 16 décembre 2023 16:59, par jean noel

        Bonsoir Christian,
        Merci pour votre réponse et votre aide très rapides. Vous aviez bien compris mon besoin. Je viens de modifier le code en conséquence, puis l’ai compilé et téléversé sur ma carte. Il ne me reste plus qu’à commander les LED et resistances afin de finir mon projet. Mille mercis ! Je vous souhaites de belles fêtes de fin d’année.
        Cordialement.

        Répondre

        • Chenillard de DEL 17 décembre 2023 10:34, par Christian

          En attendant que le Père Noël passe avec les composants :
          https://wokwi.com/projects/38435116...
          Joyeux Noël.

          Répondre

          • Chenillard de DEL 17 décembre 2023 14:47, par jean noel

            Bonjour Christian,
            Ca c’est du VIP service ! Merci pour votre attention ! Je vois que votre code est plus concis et mieux structuré que l’exemple initial ! Incidemment, j’ai deux questions. Sachant que mon projet utilise 13 LED et que vous écrivez iStop=random(7,14), dois-je en déduire que la fonction a=random(x,y) donne x>a>y ? Pour ma 13e LED, je suppose que je peux la connecter sur la pin Tx→1, n’est-ce pas ?
            Cordialement.
            JN

            Répondre

            • Chenillard de DEL 17 décembre 2023 16:10, par Christian

              Le code initial était surtout écrit pour être compris de ceux qui débutent. Cet article est le 1er du site, donc il fallait qu’on soit clair et qu’on ne dise pas tout en même temps.
              Si vous regardez la doc Arduino, la fonction random(min,max) génère un nombre compris entre min inclus et max exclus : il faut donc mettre 14 si on veut que 13 soit généré. Vous voulez 13 LED, mais il n’est pas conseillé d’utiliser les sorties 0 et 1 (pour que les composants qui seraient reliés ne perturbent pas la transmission notamment lors de la programmation). Si vous commencez avec la broche 2, vous pouvez mettre 12 LED (de 2 à 13).
              Vous en voulez 13 ? Pas de problème, car vous pouvez utiliser les broches A0 à A5 comme des sorties numériques.
              J’ai modifié le montage sur Wokwi pour mettre le maximum de LED possible (18) sans utiliser D0 et D1.
              Si vous voulez encore plus de LED, alors le mieux serait de passer à une carte Mega : 70 sorties possibles moins les deux qu’on évite d’utiliser si possible.

              Répondre

  • Chenillard de DEL 17 décembre 2023 17:26, par jean noel

    Bonsoir Christian,

    Je n’avais pas pensé aux A0-A5 ! ;0)
    Merci encore pour vos disponibilité, amabilité conseils.
    JN

    Répondre

  • Chenillard de DEL 24 mai 10:08, par photo94

    bonjour, j’ai fait un chenillard de 8 leds et lors du téléversement seule la led num 9 s’allume, j’ai cherché et ne trouve pas d’explication, si quelqu’un en a une je suis preneur, merci d’avance

    Répondre

    • Chenillard de DEL 24 mai 10:13, par Christian

      Pour l’assistance technique, il faut ouvrir un fil sur le forum rubrique Aide. Un article explique comment obtenir de l’aide : à lire avant toute chose.
      De plus, il faudra donner d’autres détails, notamment le programme car il y a sans doute une erreur à ce niveau là.
      Cdlt.

      Répondre

Réagissez à « Chenillard de DEL »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Les derniers articles

Les articles les plus lus