Bandeaux lumineux pour décors de train - 1

Pour animer vos décors de modélisme ferroviaires ou non, les bandeaux à leds sont un excellent moyen d'y parvenir à condition d'ajouter quelques ingrédients et de laisser s'exprimer votre créativité.
Nous vous proposons de partager les étapes de la réalisation d'une animation lumineuse appliquée à une grande roue au 1/87 ème avec des bandeaux à leds pilotés par Arduino.

Où trouver l'inspiration ?

Les grandes roues sont un bel exemple car elles sont imposantes de par leur taille et leur éclairage est soigné et animé le soir. Elles sont présentes un peu partout, principalement pour des périodes saisonnières.

Vue générale de la grande roue de ronce les bains (Charente-Maritime 17390)

L'éclairage est une composante qui est prise très au sérieux. Dans notre exemple c'est même la société Philips qui a développé le système d'éclairage pour la grande roue!

Vue des caractéristiques de la grande roue

Passage à l'échelle réduite

Nous avons eu la chance de trouver une grande roue Faller en occasion lors d'une bourse d'échanges de modélisme. Ce modèle est à l'échelle 1/87 ème HO et nécessite une restauration. Ce modèle est assez ancien mais la motorisation est simple et robuste. Le moteur est un modèle qui fonctionne en alternatif. L'éclairage des nacelles serait possible à condition de le prévoir dés le montage de celles-ci. Les fils d'alimentation passent par l’intérieur des piliers. Dans notre cas, hélas, il ne serait trop risqué de tout décoller pour placer des leds. Nous allons donc trouver une autre façon simple de réaliser l'éclairage de la roue, comme utiliser les piliers et le centre de la roue par exemple.

Vue générale de la grande roue avant  restauration

Le démontage de la roue et du support avec les piliers et de la motorisation est nécessaire pour repérer toutes les faiblesses d'assemblage et aussi pour faire un bon nettoyage.

Vues de la roue et du support

Sur la photo de gauche on peut voir le moteur démonté avec son galet qui sert à entrainer la roue. Le moteur est caché dans le petit abris marron, voir photo de droite, avec le toit arrondi, entre les deux piliers dans le prolongement de l'accueil et la caisse en jaune sur la photo.

Vue de la roue partiellement remontée

Après avoir peint en blanc la roue ainsi que les piliers, il reste à peindre les nacelles. Ceci est long mais le rendu final est bon. Quelques petites touches de vernis à paillettes complètent bien l'ensemble. Au remontage des nacelles, il faut bien vérifier que celles-ci sont bien centrées à l'aide de petits écrous pour ne pas frotter en bas près du galet du moteur.

Vue de la roue avec une petite alimentation de test

Enfin, un petit test est fait en reliant les deux fils du moteur à une alimentation délivrant du 12V alternatif pour vérifier que la roue tourne avec régularité et sans blocage des nacelles. Pour provoquer une inversion de sens il suffit d'éteindre et de rallumer rapidement l'alimentation. Cette astuce fonctionne plutôt bien.
Si vous ne disposez pas d'alimentation en alternatif vous pouvez utiliser la sortie accessoires/aiguilles d'un transformateur de commande des trains.

Nous allons maintenant passer à la partie éclairage de la grande roue.

Essais des bandeaux lumineux

Avant de monter les bandeaux d'éclairage, nous allons d'abord nous familiariser avec ceux-ci. Nous avons pu trouver sur un site marchand bien connu la référence suivante: WS2812B 5050 LED Flexible Strip 1M 30/60/144 LED Individual Addressable YT. Le bandeau fait donc 130 cm de long avec 144 LED que l'on peut commander individuellement! Le bandeau contient 3 fils: 5V, la masse, le signal.
Nous allons faire un petit montage test avec 10 LEDs du bandeau - que l'on peut découper -, un ARDUINO MEGA, une petite batterie. Cela ne nécessite pas d'alimentation extérieure car la consommation de 10 LEDs est faible.

Vue d'une partie du bandeau, avec 10 LEDs, relié au module ARDUINO

Le programme est assez simple et s'appuie sur la librairie FastLED.h. Le nombre de nuances est important et cela en comprend 150 qui sont décrites dans le tableau ci-dessous. Pour l'animation, nous démarrons par un éclairage de toutes les LEDs pendant une seconde. Puis, l'animation continue avec un éclairage d'une LED à la fois qui se déplace - chenillard -.

Le programme est le suivant:

// Programme d’animation d'un bandeau lumineux
// F. LORRAIN, A. ZANDER, E. ZANDER
// Décembre 2018
// Bibliothéque pour piloter les leds
#include <FastLED.h>

// Nombre de led piliers
#define NUM_LEDS 10
// Nombre de fois pour le chenillard
#define NUM_CHENILLE 12
// Signaux de commande
// Bandeau 1
#define DATA_PIN_P1 3
// Nombre de couleurs
#define NB_COLOR (sizeof(led_colors)/4)

// Couleur courante
uint8_t current_color;

// definition des tableaux des leds
CRGB leds_P1[NUM_LEDS];

// table des couleurs
CRGB::HTMLColorCode led_colors[]= {
        CRGB::AliceBlue,
        CRGB::Amethyst,
        CRGB::AntiqueWhite,
        CRGB::Aqua,
        CRGB::Aquamarine,
        CRGB::Azure,
        CRGB::Beige,
        CRGB::Bisque,
        CRGB::Black,
        CRGB::BlanchedAlmond,
        CRGB::Blue,
        CRGB::BlueViolet,
        CRGB::Brown,
        CRGB::BurlyWood,
        CRGB::CadetBlue,
        CRGB::Chartreuse,
        CRGB::Chocolate,
        CRGB::Coral,
        CRGB::CornflowerBlue,
        CRGB::Cornsilk,
        CRGB::Crimson,
        CRGB::Cyan,
        CRGB::DarkBlue,
        CRGB::DarkCyan,
        CRGB::DarkGoldenrod,
        CRGB::DarkGray,
        CRGB::DarkGrey,
        CRGB::DarkGreen,
        CRGB::DarkKhaki,
        CRGB::DarkMagenta,
        CRGB::DarkOliveGreen,
        CRGB::DarkOrange,
        CRGB::DarkOrchid,
        CRGB::DarkRed,
        CRGB::DarkSalmon,
        CRGB::DarkSeaGreen,
        CRGB::DarkSlateBlue,
        CRGB::DarkSlateGray,
        CRGB::DarkSlateGrey,
        CRGB::DarkTurquoise,
        CRGB::DarkViolet,
        CRGB::DeepPink,
        CRGB::DeepSkyBlue,
        CRGB::DimGray,
        CRGB::DimGrey,
        CRGB::DodgerBlue,
        CRGB::FireBrick,
        CRGB::FloralWhite,
        CRGB::ForestGreen,
        CRGB::Fuchsia,
        CRGB::Gainsboro,
        CRGB::GhostWhite,
        CRGB::Gold,
        CRGB::Goldenrod,
        CRGB::Gray,
        CRGB::Grey,
        CRGB::Green,
        CRGB::GreenYellow,
        CRGB::Honeydew,
        CRGB::HotPink,
        CRGB::IndianRed,
        CRGB::Indigo,
        CRGB::Ivory,
        CRGB::Khaki,
        CRGB::Lavender,
        CRGB::LavenderBlush,
        CRGB::LawnGreen,
        CRGB::LemonChiffon,
        CRGB::LightBlue,
        CRGB::LightCoral,
        CRGB::LightCyan,
        CRGB::LightGoldenrodYellow,
        CRGB::LightGreen,
        CRGB::LightGrey,
        CRGB::LightPink,
        CRGB::LightSalmon,
        CRGB::LightSeaGreen,
        CRGB::LightSkyBlue,
        CRGB::LightSlateGray,
        CRGB::LightSlateGrey,
        CRGB::LightSteelBlue,
        CRGB::LightYellow,
        CRGB::Lime,
        CRGB::LimeGreen,
        CRGB::Linen,
        CRGB::Magenta,
        CRGB::Maroon,
        CRGB::MediumAquamarine,
        CRGB::MediumBlue,
        CRGB::MediumOrchid,
        CRGB::MediumPurple,
        CRGB::MediumSeaGreen,
        CRGB::MediumSlateBlue,
        CRGB::MediumSpringGreen,
        CRGB::MediumTurquoise,
        CRGB::MediumVioletRed,
        CRGB::MidnightBlue,
        CRGB::MintCream,
        CRGB::MistyRose,
        CRGB::Moccasin,
        CRGB::NavajoWhite,
        CRGB::Navy,
        CRGB::OldLace,
        CRGB::Olive,
        CRGB::OliveDrab,
        CRGB::Orange,
        CRGB::OrangeRed,
        CRGB::Orchid,
        CRGB::PaleGoldenrod,
        CRGB::PaleGreen,
        CRGB::PaleTurquoise,
        CRGB::PaleVioletRed,
        CRGB::PapayaWhip,
        CRGB::PeachPuff,
        CRGB::Peru,
        CRGB::Pink,
        CRGB::Plaid,
        CRGB::Plum,
        CRGB::PowderBlue,
        CRGB::Purple,
        CRGB::Red,
        CRGB::RosyBrown,
        CRGB::RoyalBlue,
        CRGB::SaddleBrown,
        CRGB::Salmon,
        CRGB::SandyBrown,
        CRGB::SeaGreen,
        CRGB::Seashell,
        CRGB::Sienna,
        CRGB::Silver,
        CRGB::SkyBlue,
        CRGB::SlateBlue,
        CRGB::SlateGray,
        CRGB::SlateGrey,
        CRGB::Snow,
        CRGB::SpringGreen,
        CRGB::SteelBlue,
        CRGB::Tan,
        CRGB::Teal,
        CRGB::Thistle,
        CRGB::Tomato,
        CRGB::Turquoise,
        CRGB::Violet,
        CRGB::Wheat,
        CRGB::White,
        CRGB::WhiteSmoke,
        CRGB::Yellow,
        CRGB::YellowGreen,
        // Les couleur RGB des LED sont approximatives
        // La couleur suivante est un blanc chaud
        CRGB::FairyLight,
        // Si pas de correction de couleur alors utiliser ceci
        CRGB::FairyLightNCC
};


// Initialisation
void setup() {
      // Ports de commande des leds
      FastLED.addLeds<WS2812B, DATA_PIN_P1, RGB>(leds_P1, NUM_LEDS);

      // Etient toutes les leds
      for( uint16_t i=0; i<NUM_LEDS; i++) {
        leds_P1[i] = CRGB::Black;
        FastLED.show();
      }
     current_color = 0;
     //Contraste
     FastLED.setBrightness(0x05);
}

// Animation
void loop() {
    uint16_t i = 0;
    uint32_t j = 0;
    uint32_t contraste = 0x05;
    uint32_t nb_chenillard = 0;
    uint32_t nb_boucle_couleur = 0;

    //Eclaire en Blanc
    for (i=0; i<NUM_LEDS; i++) {
        leds_P1[i] = CRGB::FairyLightNCC;
        FastLED.setBrightness(contraste+i);
        FastLED.show();
    }
    delay(1000);

    // Eteindre leds
    for(i=0; i<NUM_LEDS; i++) {
       leds_P1[i] = CRGB::Black;
    }
    FastLED.show();
    delay(1000);

   // Chenillard
   for (nb_chenillard=0; nb_chenillard<NUM_CHENILLE; nb_chenillard++) {
     // Contrate Faible
     FastLED.setBrightness(0x05);
     for (i=0; i<NUM_LEDS; i++) {
        leds_P1[i] = led_colors[i];
        if (i>0){ 
          leds_P1[i-1] = CRGB::Black;
          FastLED.show();
          delay(50);
        }
        // Contrate Faible
        FastLED.setBrightness(0x05);
     }
     for (i=NUM_LEDS; i>0; i--) {
        leds_P1[i] = led_colors[i];
        if (i>0) leds_P1[i-1] = CRGB::Black;
          FastLED.show();
          delay(50);
     }
   }
   delay(1000);
    
   // Eteindre leds
   for( i=0; i<NUM_LEDS; i++) {
        leds_P1[i] = CRGB::Black;
   }
   FastLED.show();
   delay(1000);
}


Voici une petite vidéo pour illustrer le test du bandeau:


Un autre test consiste à alimenter 2 bandeaux et des anneaux avec une alimentation extérieure de plus de 5A. Cela est indispensable car un module ARDUINO ne peut fournir autant de courant sur le 5V pour des centaines de LED...

Vue des bandeaux et des anneaux avec l'alimentation 5V

Dans le prochain volet, nous détaillerons le programme de l'animation de la grande roue.
A bientôt pour la suite de cette animation!










Aucun commentaire: