Plaque tournante maison échelle N

1 - Objectifs

Ce projet consiste à fabriquer intégralement un système de plaque tournante pour un réseau ferroviaire en N.
Les pièces sont réalisées en bois découpé au laser, en contre plaque de bouleau de 3 mm ou en MDF de 3 mm.
Quelques réalisations en impression 3D (support moteur et support de la butée).
Les composants électroniques ont

  • Arduino nano
  • L298N pour gérer le moteur
  • Un moteur NEMA 17
  • Un servo moteur SG90
  • Une plaque de distribution (Viessman 6049) pour la répartition des GND et des 5V sur les divers composants
  • Un récepteur IR VS1838B
  • Une alimentation 9V ou une pile 9V pour les tests

Certaines de ces pièces sont issues de la récupération sur d'anciennes imprimantes.

2 - Pièces utilisées

a - Butée de positionnement


Cette pièce servira à bloquer le plateau tournant en face des voies extérieures. Un bras horizontal, fixé au plateau supérieur du boitier, se finissant en forme de V viendra d'encastrer en une butée fixée sous le plateau tournant en autant de positions qu'il y aura de positions de rotation possibles. Le mécanisme est entrainé par un servomoteur SG90 et un petit montage d'engrenage horizontal en impression 3D et en bois découpé au laser.

b - boitier d'accueil

Ce boitier supporte l'ensemble du projet en étant totalement autonome. Le moment venu, il sera intégré dans le réseau intégralement. Il est fabriqué en planchettes de bois de bouleau ou de MDF découpées au laser.

Il est composé de 4 côtés, d'un plateau supérieur découpé par un cercle, d'un plateau intermédiaire qui supportera les mécanismes, et de barres de renfort en dessous de ce dernier.



c - Roulement à billes plateau tournant

La rotation et sa stabilité sont assurées par un système de roulement à billes plat (plateau tournant) fixé sur le plateau intermédiaire et sur la roue d'entrainement.

d - Entrainement

L'entrainement est assuré par un moteur NEMA 17, une courroie, une roue crantée. Un interrupteur fin de course permet d'initialiser la position de départ du plateau en position 1.

La roue est constituée de 2 cercles (en bois) fixés entre eux. La roue inférieure, la plus grande, est aux dimensions du roulement à billes pour la fixer dessus. La roue supérieure (la plus petite) est crantée et sera entrainée par la courroie. Merci à jpbbricole pour l'idée de retourner une courroie et de la coller sur la roue pour une parfaite adaptation de la courroie et de cette roue.

e - Partie électronique

La partie électrique et électronique repose sur un Arduino Nano. L'alimentation extérieure, nécessaire pour le moteur NEMA17, est assurée par un chargeur 9V du marché. Un montage adapte la prise de ce chargeur aux branchements sur la carte L298N. Une carte L298N pour piloter le moteur pas à pas. Une plaque de distribution nécessaire aux raccordements 5V et GND des composants concernés. Un récepteur IR pour la télécommande complète cette liste. Enfin une télécommande standard (de la récupération là encore) permet de piloter les demandes de rotation


f - Schéma du montage Arduino

Le schéma des branchements du projet est le suivant :


3 - Montages

a - Butée de blocage

Voici ce que donne le système de butée vue du dessous.


b - Entrainement

Voici ce que donne le système d'entrainement


Ici, 4 demandes de rotation sont possibles. A chaque fois, la butée se retire, le plateau tourne, la butée se repositionne. On voit des fils (rouge et noir) sortirent du centre de la roue. Ces fils serviront à alimenter la voie placée sur le plateau et ne subiront pas de torsion liée à la rotation.

4 - Tests et résultats

Le résultat donne ceci. Je signale sur les voies de sorties ne sont pas posées définitivement, celles-ci viendront une fois le module positionné à son emplacement définitif. On voit par exemple que la voie du haut (position 4) n'est pas tout à fait en face de la voie pivotante. Rien de grave. Les réglages sont ce qui m'a pris le plus de temps et devront être précis au moment de la mise en place quant au positionnement définitif des voies.



Programme Arduino associé. Je ne suis pas un expert dans la programmation pour être d'une efficacité réelle dans la formulation de syntaxes plus "informaticiennes" ou "mathématiques" que celles que j'ai utilisées. De nombreuses améliorations doivent pouvoir être trouvées, mais mon objectif premier et que ça marche comme je le souhaite.

/*
  Utilisation moteur pas a pas nema 17
  piloté par telecommande
  conservation de la position du moteur en EPROM
  4 positions
   1 2 3 et 4 voies de sortie pour 1 entree
  pos_demand = pos_prec retenue pour la position demandée et celle précédente
  la pos_demand = 1 correspond à la position initiale
  la voie tournante est placée face à la voie d'arrivée des trains
*/

#include <EEPROM.h>
#include <Stepper.h>
#include <IRremote.h>
#define RECV_PIN 7
#include <Servo.h>
Servo myservo;
// pour recevoir sur l'ir PIN 7
IRrecv irrecv(RECV_PIN);
decode_results results;

#define boutinit 4              // Interrupteur fin de course
int val1 = 10;                  // Lecture de la position de l'interrupteur
const int NbPasParTour = 200;   // Nombre de pas pour 360 degres
int val = 20;                   //  conserve la pos_prec du bouton saisie pour les traitements
int valx = 0;                   //  conserve la pos_prec du bouton saisie pour les traitements
int vitesse = 10;               //  vitesse d'incremantation de la rotation du pont
int etat = 0;                   //  variable pour les boucles de rotation
int pos_prec;                   //  derniere position connue
int pos_demand;                 //  niveau de rotation demandé par la telecommande
int pos_recue;                  //  valeur renvoyee par la telecommande
const int adresse = 14;         //  adresse de stockage dans EEPROM
Stepper Moteur1(NbPasParTour, 8, 9, 10, 11);   // Initialise le moteur sur les broches 8 à 11

void setup() {
  pinMode(boutinit, INPUT_PULLUP);    // Fin de course
  myservo.attach(12);                 // attache le bouton à la pin 12
  Serial.begin(9600);
  irrecv.enableIRIn();                // Lance la reception telecommande
  pos_prec = EEPROM.read(adresse);    // pos_prec contenue dans l'eeprom
  Moteur1.setSpeed(30);               //Vitesse de rotation du moteur
}

void loop() {
  pos_demand = 0;               //   mise à zero à chaque itération de la position demandee
  receiveCode();                // appel fonction pour connaitre l'action de la telecommande
  /* prévu pour debugage
    if (pos_demand != 0) {
      Serial.print("pos_demand ");
      Serial.print(pos_demand);
      Serial.print("    ValueDec ");
      Serial.println(results.value);
  */
  /*********************************************/

  if (pos_demand > 0 && pos_demand < 5)     // si une action valide de la telecommande est retournée
  {
    pos_prec = EEPROM.read(adresse);        //  lecture derniere position connue
    //********************************************************************************
    //***** test de la demande et mise à jour des variables utilisées pour la rotation
    //  Les variables mises à jour sont :
    //    val :   sens et unité de rotation
    //    valx :  durée de la rotation pour le mouvement spécifique
    //********************************************************************************

    switch (pos_demand) {
      case 0 :            //  si la demande = 0 on ne fait rien
        val = 0;
        break;
      case 1 :
        switch (pos_prec) {
          case 1:            //  si la demande = 1 on test la position précédente
            valx = 0;        //  si pos_prec = pos_demand on ne fait rien
            val = 0;
            break;
          default:
            valx = 100;       // si demande = 1 on donne une duree de retour importante
            val = 20;         // on donne un sens de rotation retour
            pos_demand = 1;   // on indique que la demande = 1
            break;
        }
        break;
      case 2 :            //  si la demande = 1 on test la position précédente
        switch (pos_prec) {
          case 1 :
            valx = 15;
            val = -20;
            break;
          case 2 :        //  si pos_prec = pos_demand on ne fait rien
            valx = 0;
            val = 0;
            break;
          case 3 :
            valx = 15;
            val = 20;
            break;
          case 4 :
            valx = 30;
            val = 20;
            break;
          case 5:
            valx = 0;
            val = 0;
            break;
        }
        break;
      case 3 :
        switch (pos_prec) {
          case 1 :
            valx = 30;
            val = -20;
            break;
          case 2 :
            valx = 15;
            val = -20;
            break;
          case 3 :        //  si pos_prec = pos_demand on ne fait rien
            valx = 0;
            val = 0;
            break;
          case 4 :
            valx = 15;
            val = 20;
            break;
        }
        break;
      case 4 :
        switch (pos_prec) {
          case 1 :
            valx = 40;
            val = -20;
            break;
          case 2 :
            valx = 30;
            val = -20;
            break;
          case 3 :
            valx = 15;
            val = -20;
            break;
          case 4 :
            valx = 0;        //  si pos_prec = pos_demand on ne fait rien
            val = -20;
            break;
        }
        break;
    }
    //********************************************************************************
    //***** fin du test de la demande et mise à jour des variables utilisées pour la rotation
    //********************************************************************************

    //  retrait de la butée de positionnement
    myservo.write(0);
    delay(100);

    //   boucle de rotation
    for (etat = 0; etat <= valx; etat += vitesse)
    {
      val1 = digitalRead(boutinit); // lecture etat interrupteur
      /*      prévu pour debugage
              Serial.print(" etat = ");
              Serial.print(etat);
              Serial.print(" boutinit = ");
              Serial.print(val1);
              Serial.print(" vitesse = ");
              Serial.print(vitesse);
              Serial.print("  pos_prec = ");
              Serial.print(pos_prec);
              Serial.print("  valx = ");
              Serial.print(valx);
              Serial.print("  val = ");
              Serial.println(val);
      */
      //    si l'interrupteur est actionné on confirme la demande de position à 1
      //    et on effectue un petit mouvement arriere pour liberer l'interrupteur
      //    sinon celui-ci resterait en position de blocage
      if (val1 == LOW) {
        pos_demand = 1;
        Moteur1.step(-20);
        break;
      }
      //  sinon on effectue le mouvement de rotation demandé
      else {
        Moteur1.step(val);
      }
    }
    //  sortie de la butée de positionnement pour blocage
    myservo.write(180);
    delay(100);
    /* prévu pour debugage
          Serial.print(" pos_demand = ");
          Serial.println(pos_demand);
    */
    //  ecriture de la derbnière position demandé dans EEPROM
    EEPROM.write(adresse, pos_demand);              //  lecture derniere position connu
  }
}

/**************************************************************
   boucle de lecture de la telecommande et affection des variables
   selon le retour spécifié
   variables mises à jour
   pos_recue  valeur DEC recue de la telecommande
   pos_demand valeur convertie en une position
*/
void receiveCode() {
  if (irrecv.decode(&results))
  {
    pos_recue = results.value;
    switch (pos_recue) {
      case 8925 :
        pos_demand = 1;
        break;
      case -15811 :
        pos_demand = 2;
        break;
      case -8161 :
        pos_demand = 3;
        break;
      case -28561 :
        pos_demand = 4;
        break;
    }
    irrecv.resume(); // Receive the next value
  }

}

Je n'ai pas la prétention de révolutionner le principe, mais je pensais que partager ce projet m'obligerait à travailler plus proprement que ce que j'aurais fait pour moi seul. Ce pont tournant a été réalisé sur la demande d'un "confrère" à qui je remettrai l'ensemble.
Je reste à l'écoute des commentaires constructifs et vous remercie pour votre indulgence

Bonjour jcg95

Magnifique :clap:

J'ai vu que tu as corrigé le système de verrouillage, il devient plus "souple".
D'avoir une LASER + une imprimante 3D ouvre beaucoup de possibilités.

Cordialement
jpbbricole

Sujet déplacé dans "Réalisations et Projets Finis.

Bonjour,
J’ai une question. Quand j’alimente le module L298N en 9 ou 12 V, nécessaire pour le bon fonctionnement du moteur Nema , la carte et son radiateur chauffent énormément. Impossible de le toucher.
Ma 1ere question : est-ce normal (je ne crois pas)?
2eme question. Puis-je alimenter en 9 ou 12 V la carte Nano puis passer par le WIN pour alimenter la carte L298N ?
Les branchements et câblages correspondent au schéma proposé ci-dessus.
Merci
Cordialement
jcg95

Bonjour jcg95

C'est normal, si tu élaisses le moteur sous tension.
Je n'ai pas encore regardé ton programme, mais, quand le moteur a terminé son job, il faut couper tout les signaux de commandes de telle façon que ton moteur ne soit plus alimenté.

En fait, si le fil d'alimentation passe par le Vin pour aller vers le L298, il ne "passe" pas par le Vin, le 2 choses sont alimentées en parallèle.
Cordialement
jpbbricole

Rebonjour jcg95

Pour commander ton moteur, tu utilises Stepper.h, malheureusement cette bibliothèque n'a pas de fonction pour mettre le moteur off. Il y a StepperDriver qui a cette fonction.
Si tu veux garder Stepper.h tu peux désactiver les sorties ainsi:
Tu crées une fonction:

void moteurOff()
{
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  digitalWrite(10,LOW);
  digitalWrite(11,LOW);	
}

que tu appelles dès que le moteur a terminé son job par un moteurOff()

Cordialement
jpbbricole

Superbe réalisation.
Suggestion pour éliminer les frottements et faciliter l'alignement


Les arrondis sur la pièce en V diminuent la surface de frottement

Conseils :
À partir du moment où le sujet est dans Réalisation finie, il serait bon de ne pas parler de moteur Nema 17, mais de donner la vraie référence du moteur.

Nema est juste une norme de dimension mécanique.
Nema n'est pas une norme spécifique aux moteurs pas à pas
Nema couvre une gamme très étendue de produits allant des prises murales aux moteurs à courant continu => rien de spécifique aux moteurs pas à pas.

Vas sur le site stepperonline

Dans la gamme dimensionnelle Nema 17 tu y trouveras des moteurs pas à pas dont

  • le couple est compris entre 10 Ncm et 65 Ncm.
  • Exemples de consommation soit 2 A 2,8 V, soit 1A 5,4 V, soit 0,3 A 12 V, soit .....

Il faut que tu donnes la référence exacte du moteur que tu utilises afin que les lecteurs intéressés puissent connaître le couple de ton moteur et sa tension d'alimention nominale.

D'autant que ton choix s'est porté sur un L298N mais qu'il existe des produits bien plus modernes qui permettent de faire des micro pas et qui sont plus simples à gérer comme le A4988 ou le DRV8825 et qui ne coutent pas plus cher qu'un L298.

C'est beau, superbe.

Bon travail.
Je vois sur votre schéma électrique qu'il manque la ligne électrique du nano lorsqu'il n'est pas connecté au PC. Était-ce un oubli ou ne l'avez-vous pas mis comme il semble être à cause de votre post #4 ?.
Et en agrandissant la photo du câblage il semble qu'il n'y ait rien de relié au Vin du nano.
Quelle que soit la réponse, il manque à ce schéma l'alimentation du nano pour que le système fonctionne de manière autonome :
Trenes

Salutations.

Bonjour gonpezzi,
En effet le système n’est pas autonome pour 2 raisons :

  • La première, comme tu l’as pressenti, est liée à la surchauffe.
  • La deuxième est liée au fait que l’ensemble sera fixé à un endroit où il sera difficile de venir brancher un câble USB pour d’éventuelles modification. Ce câble sera donc présent et donc pourquoi ne pas l’utiliser.
    Toute fois la première est la principale et donc si j’arrive à régler le problème je pourrai rendre le projet autonome même si je laisse le câble usb branché.

68tjs,
je vais essayer le A4988 d’autant que ça ne remet pas en cause l’ensemble, ce n’est qu’une pièce et des câbles. Voire si le programme doit subir des modifications importantes. Mais le jeu en vaut sûrement la chandelle.
Je vais également modifier la forme de ma « fourche » pour voir.

JPbbricole
je vais aussi tester la solution de libérer le moteur sachant que le plateau sera bloqué par le système de butée.

Pour les références du moteur je ne les ai pas n’étant pas sur place actuellement mais dès que je les récupère je les communique.
Merci à tous et je vous tiens au courant même si le classement actuel en projet fini passe en projet en cours d’amélioration.
Cordialement
Jcg95

Bonsoir à tous,
Tout d'abord voici les références de mon moteur NEMA17 (de récupération) :

  • 42HB34F08AB-06

    • Shaft diameter 5mm
    • Shaft length 21 mm
    • 4 wires / 2 Phase
    • Voltage: 12 V
    • Current: 1.33 A / Phase
    • Resistance: 2.2 ± 10% Ω / Phase
    • Inductance: 2.5 ± 20% mH / Phase
    • Holding Torque: 22 N. cm
    • Insulation Class: B
    • Step Angle: 1.8 ± 5% / Step
    • Item Size: 42 * 42 * 34 mm
      Ensuite, j'ai ajouté les lignes de fermeture du moteur comme le proposait jpbbricole après chaque fin de rotation et plus rien ne surchauffe (enfin pour l'instant).
      J'ai donc ajouté un lien entre la sortie 5v de la L298N et l'Arduino, l'ensemble est maintenant autonome.

Je suis en train de refaire une "fourche" sur les indications de 68tjs, je vous donnerai des nouvelles quand elle sera mise en place.
Pour le reste, l'A4988 par exemple, je ferai des tests séparés (pour maitriser les réglages) et je verrai si je la mets en place dans ce projet.
Merci à tous.

Bonjour,
Voici le système de butée modifié selon la proposition de 68tjs. Après mise en place, le blocage se fait parfaitement et il est très stable, bien fixe et rigide. Merci.

Cordialement
jcg95

De rien, pour une fois que j'ai une idée en mécanique :grinning:

Bonjour à tous,

Ceci devrait être mon premier post sur ce forum.
J’ai attentivement lu cet article car je suis moi-même concerné par un projet similaire à l’échelé HO.
En fait je me suis inspiré des travaux du Seine Modèle Club Ferroviaire - SMCF (https://www.modelisme-ferroviaire-rouen.fr) que j’ai adapté à ma sauce et cela fonctionne plutôt bien. Je peux poster le code ainsi que qqs photos sur demande.

Dans le projet de jcg95, qui a le mérite non seulement d’exister mais qui surtout est simple à mettre en place, je détecte quelques points faibles (majoritairement mécanique).

En premier point j’ai de sérieux doutes sur la fiabilité du plateau à billes. A la longue, le jeu entre les 2 plaques va augmenter et cela entrainera une une diminution de la fiabilité des positionnements du système.

Ensuite je ne comprends pas la raison de l’utilisation de l’entrainement par courroie. Un entrainement direct du pont tournant par le Nema17 est plus fiable. Si besoin est de ralentir, et donc d’adoucir, le mouvement, cela peut ce régler par des micro pas et l’utilisation d’une bibliothèque comme par exemple AccelStepper.h.

Enfin il y a l’utilisation de la butée. Comme je peux voire sur les photos elle est assez … encombrante. Est-elle utilisée pour la mise à zéro du projet ou est-elle prévue au même nombre que les sortie/entrées ?

Dans le premier cas il serait, il me semble plus facile et plus précis d’utiliser un détecteur Hall et un aimant. Dans l’autre cas ce pose le problème de multiples sorties côte-à-côte (style rotonde).

Bonjour phantomrc,
Quelques réponses, qui ne sont que mes propres raisons et qui ne servent qu'à expliquer mes choix, car je note et j'apprécie les remarques qui ont été faites.
Pour la fiabilité des plateaux à billes, j'en utilise sur un autre projet depuis près de 4 ans et je n'ai détecté aucun jeu désagréable. Toute fois, les butées sont là justement pour régler les problèmes de précisions dans les positionnements dus à d'éventuels déréglages ou à autre chose.

L'utilisation de la courroie est liée aux nombreux essais que j'ai pu réaliser, dont l'entrainement direct par le moteur. Cette option présentait 2 inconvénients à mes yeux :

  • Je n'ai jamais pu régler la vitesse de rotation à la lenteur que je souhaitais. Peut-être un manque de connaissances.
  • La stabilité du plateau s'en trouvait impactée, même avec des supports sur les bords du plateau.

En effet, la butée telle que je la présente est assez volumineuse. Dans l'objectif du nombre de voies de sortie limité dans ce projet, cette taille ne me dérangeait pas. Bien sûr, pour un nombre de voies plus important, une réduction de ces composants serait indispensable, ce qui reste assez facile à réaliser. J'ai essayé plusieurs types de détecteurs pour remplacer cette butée, mais là encore rien ne m'a satisfait vraiment.
Je ne vois pas très bien ton système de détecteur "Hall" et un aimant. Peux-tu me donner des précisions si tu en as ?
Maintenant, j'attends de voir la mise en place définitive sur le réseau final pour apporter certaines adaptations nécessaires et possibles. Comme ceci va prendre pas mal de temps (mon collègue est en plein déménagement et son réseau va devoir attendre). J'ai donc encore du temps pour améliorer le système.
Cordialement.
jcg95

Dans ma précédente réponse j’ai mentionné la bibliothèque AccelStepper.h (GitHub - waspinator/AccelStepper: Fork of AccelStepper).
Celle-ci permets de graduellement ralentir ou accélérer un moteur par étape. Cela ne se ressentiras pas vraiment si tu utilise les 200 étapes par révolution ; le mieux est alors d’utiliser les microsteps. Avec un Nema17 je ne perçois aucune perte de torque avec de lourdes machines à vapeur de Trix ou de REE à l’échelle HO.

Pour la stabilité du plateau j’avoue ne pas trop comprendre car c’est à l’échelle N et les rails plus les machines ne pèsent pas des tonnes. Un bon support en 3D (éventuellement modulaire) bien fixé en dessous de la cuvette du pont tournant est plus que stable … à mon avis.

Pour le détecteur « Hall » je te propose l’explication (en anglais) suivante : Hall effect sensor - Wikipedia .

En résumé … le détecteur est installé à l’extérieur de la cuvette du pont tournant et l’aimant est collé sous la partie rotative entre les deux rails. La sonde agit de manière active en détectant la présence du champ magnétique à chacun de ses passages mais … dans le codage on s’arrange pour que cela ne soit retenu qu’une seul fois, cad au (re)démarrage de l’ensemble arduino, moteur et driver. On obtient ainsi un point zéro pour le moteur à étapes.
Et ce à partir de ce point zéro que, dans mon cas et via l’utilisation d’une array, je peux très exactement tourner le pont avec un certain nombre d’étapes en CW et en CCW.
Attention ; la mise à zéro doit toujours se faire dans le même sens car un champ magnétique c’est assez large et donc on ne peut obtenir le même point zéro en CW qu’en CCW.

Voici un exemple d’une mise à zéro via une sonde Hall :

//*************************************** VARIABLES & SETTINGS *****************************************
//*************************************** VARIABLES & SETTINGS *****************************************
#include <rotary.h>
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
#include <MultiStepper.h>
#include <Wire.h>

//Define the LCD screen & the Nema17 motor on TB6600
LiquidCrystal_I2C lcd(0x27,20,4);                   // LCD ADDRESS TO 0x27 FOR A 20 CHARS. & 4 LINE DISPLAY
AccelStepper stepper(AccelStepper::DRIVER, 9, 8);

//Define the pins & steps for the TB6600, Hall switch & toggle switches

#define  dirPin 8                                   // TB6600 DRIVER
#define  stepPin 9                                  // TB6600 DRIVER
#define  enaPin 10                                  // TB6600 DRIVER
#define  LED 13                                     // INTEGRATED ARDUINO LED
#define  pinPushCW 14                               // PUSH SWITCH POSITION CW
#define  pinPushCCW 15                              // PUSH SWITCH POSITION CCW 
#define  switchResetZero  16                         // MANUALY RESET TO ZERO SWITCH
#define  home_switch  12                            // Pin 15 CONNECTED TO THE "HOME" SWITCH (Hall Switch)
#define  stepsPerRevolution 3200                    // NUMBER OF STEPS FOR 1 REVOLUTION -> TB6600 = OFF-OFF-ON-ON-ON-OFF

// All code in between has been removed for better reading ...

void homeFunction() {                               //ONLY AT (RE)STARTUP OF ARDUINO
  printGoingToHome ();
  while (digitalRead(home_switch) == 1) {           // ROTATE CW (== 1) UNTIL HOME POSITION REACHED
    digitalWrite(dirPin, LOW);                      // LOW = CCW & HIGH = CW ROTATION
    digitalWrite(stepPin, HIGH);                    // HIGH = START ROTATION TO ZERO POINT
    delayMicroseconds (pd);
    digitalWrite(stepPin, LOW);                     // LOW = STOP THE ROTATION
  }
  stepper.setCurrentPosition(0);                    // RECORD THIS POSITION AS BEING THE ZERO POINT
  int Position = stepper.currentPosition();         // ASSIGN THE CURRENT (ZERO) POINT TO A VARIABLE "Position" BEFORE PRINTING
  lcd.clear();

Merci phantomrc pour ces explications. Je vais étudier chacune d'entre elles et voir dans quelle mesure je peux les mettre en pratique.
Je ferai cela dans les prochaines semaines, vacances obligent, et je viendrai rendre compte ici.
Cordialement
jcg95

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.