C’était promis en Page 8 de ce didacticiel, on va dans cette étude envisager la version n°4  » du pauvre » et continuer à nous balader dans le domaine de la présentation numériques des valeurs qui cette fois seront sur un afficheur riche de deux lignes de texte pouvant chacune présenter seize caractères alphanumériques majuscules et minuscules ce qui offre une infinité de présentations possibles pour indiquer simultanément les trois paramètres température, Hygrométrie et taux de CO2. Très populaires on les trouve pour des sommes
inférieures à six euros dans le commerce en ligne. Il suffit de proposer « arduino afficheur LCD » à un quelconque moteur de recherche et de nombreuses références vont se présenter.
ATTENTION, il en existe pouvant afficher quatre lignes de texte, donc bien lire les spécifications. Certains comme sur la Fig.66 sont rétro-éclairés en vert et les textes sont en noir. D’autres sont lumineux en blanc comme sur la Fig.67 et rétro-éclairés en bleu. Peu importe, ils sont tous pilotés par un contrôleur « standard » et compatibles avec la bibliothèque dédiée LiquidCrystal.h qui présente l’avantage magistral de pouvoir choisir les broches de contrôle. On peut ainsi utiliser des sorties binaires de D3 à D9 qui se suivent par exemple, tout en « ménageant un trou » en D5 pour la gestion du DHT11.

L’afficheur LCD TC1602 peut être piloté sur quatre ou sur huit broches. On remarque sur la Fig.68 que pour économiser des E/S sur le microcontrôleur l’afficheur est utilisé ici de façon classique avec le minimum de liaisons d’interface. Il est figé en mode écriture sur sa broche 5, les commandes sont transmises sur les entrées DB4 à DB7 en pilotage séquentiel sur quatre bits. Les entrées DB0 à DB3 sont inutilisées. Le rétro-éclairage peut être piloté si on le désire par un transistor T qui par son courant I base est saturé. La LED- est alors au potentiel de GND. La résistance de limitation du courant de base de 4,7KΩ laisse passer environ 3 mA largement suffisant pour saturer n’importe quel transistor NPN pour petits signaux tel que le 2N2222 ou le 2N1711 par exemple. Quand la sortie 14 (Soit A0.) est à l’état « 1 » son +Vcc ne peut pas « remonter » à travers la diode D et T est saturé. Si la sortie 14 du microcontrôleur passe à l’état « 0« , l’état proche de GND est « tiré » par la diode D et se retrouve sur la base du transistor. Ce dernier passe alors à l’état bloqué et la LED- est isolée électriquement. Le rétro-éclairage est alors coupé. Il faut impérativement utiliser une diode au germanium dont le seuil de conduction est faible, de l’ordre de 0,3Vcc ou T ne sera pas totalement bloqué. Noter que l’on peut aussi ajouter une LED, ici en rouge, pour montrer l’état de sortie de A0. Toutefois, elle fonctionne alors en logique inversée. (Éteinte si le rétro-éclairage est activé.)
Observons au passage sur la Fig.68 la présence d’une résistance potentiométrique ajustable RA de 10kΩ. Tous les afficheurs LCD vont exiger un tel composant. En effet, c’est par une tension variable sur la broche VO que se peaufine leur contraste. (Composants à cristaux liquides, car ce type de produit peut utiliser de ‘électroluminescence qui dans ce cas se passe d’un tel ajustement.)

Faisons connaissance avec la bibliothèque LiquidCrystal.h.
Passer en revue toutes les possibilités de cette merveille de programmation n’est pas du tout le but de ce chapitre. (Pas la peine de la chercher dans le dossier <Bibliothèques> car elle est proposée par défaut avec celles du compilateur.) Pour vous rendre compte de sa richesse et de sa souplesse d’utilisation, deux fiches Recto/Verso nommée Méthodes de la bibliothèque LiquidCrystal.h. (1 à 4) sont à votre disposition dans le fichier FICHES A5.pdf et sont à imprimer et à plastifier. On va juste charger un démonstrateur minimal nommé P12_Test_affichage_LCD.ino qui affiche un simple compteur horaire « journalier ». L’examen du listage montre que pour afficher il suffit de positionner le pointeur d’écriture et effectuer des classiques print.
Narf, narf, narf ... mais contrairement à la Fig.66 le texte « Comptage » est passé en minuscules et dans ce dernier le p est « dégonflé » et le g dépasse !
Nom d’un pétard mouillé, c’est pas beau du tout.
C’est ici que nous allons faire l’inverse de ce qui était réalisé avec l’afficheur matriciel du projet Version n°2. On utilisait du graphique pour visualiser du texte. Et bien nous allons dans le démonstrateur P13_Bon_caractere.ino voir comment créer des caractères graphiques, alors que fondamentalement le LCD TC1602 se gère avec du texte et des chaînes de caractères. Dans ce deuxième démonstrateur sur l’usage des afficheurs à cristaux liquides on va construire deux caractères spécieux, et au lieu d’utiliser le print banal, on se sert de write qui concerne alors non plus des nombres entiers ou réels, mais des mosaïques personnelles de 5 x 8 petits carrés. On peut dans ce matriçage tracer toutes les combinaisons possibles entre un et 40 PIXELs et dessiner n’importe quoi limité toutefois à cette définition. (Dans ces conditions la Joconde ne sera pas aussi belle que celle du musée !) Maintenant les deux caractères incriminés ne dépassent plus vers le haut et occupent un PIXEL de plus vers le bas, « sous » la ligne d’écriture. Wouaououou, c’est wouachement mieux !
Recherche de la précision « absolue ».
Supposons que P12_Test_affichage_LCD.ino ne soit pas un démonstrateur, mais qu’il soit complété d’une mise à l’heure possible et que l’on désire en faire non pas un compteur horaire, mais une horloge numérique. Dans ce cas, l’utilisateur désirerait que la boucle de base qui en incrémente la durée affichée fasse exactement une seconde avec la plus grande précision possible. Cette précision ne dépend que de quatre facteurs :
(1) La durée de la séquence de void loop().
(2) La variation du nombre de cycles dans void loop() qui résulte du nombre d’instructions déroulées dans les subroutines.
(3) La précision de la fréquence de taillage du quartz qui cadence l’horloge de l’ATmega328.
(4) La dérive de de l’oscillateur d’Arduino due aux variations de température.
Pour s’affranchir de (2)‚ il faudrait faire appel à millis au lieu de delay(1000). Toutefois on va voir ici comment s’en sortir avec cette instruction et sa complice delayMicroseconds(nnn).
Pour (3) il suffit de mesurer avec précision sa fréquence, et de compenser dans les valeurs programmées des délais. (Ce qui suppose que nous disposions d’un appareil de mesure très précis.)
![]()
Pour réduire les effets de „ il faut attendre la stabilisation thermique de l’électronique dans son boitier, et faire la calibration dans un air ambiant « ordinaire », c’est à dire ni trop chaud, ni trop froid. Cette calibration n’est pas possible sans posséder un fréquencemètre tel que celui de la Fig.70 que j’ai réalisé il y a environ 50 ans, ce qui explique les tubes NIXIEs d’un autre temps !

Surtout ne pas se méprendre, la précision de la mesure effectuée est de sept chiffres significatifs, seul le digit en 3 fluctue entre 0 et 6 du au ±1 des systèmes numériques et au facteur (2). En 2 l’entrée va sur la broche A0 de pilotage du rétro-éclairage. C’est en 4 que le mode Périodemètre est sélectionné. Pour des mesures « ordinaires » je me contente de l’oscillateur à quartz interne qui cadence à 1MHz et qui est déjà compensé en température. Si je désire une précision garantie cent fois meilleure, comme c’est le cas en 1 sur la photographie, le cadencement arrive d’un étalon externe. C’est un oscillateur compensé en température, rangé dans une enceinte thermostatée. Dans cette dernière se trouve l’alimentation régulée de l’oscillateur. Enfin, une alimentation externe de premier niveau alimente le régulateur interne ainsi que le chauffage. Enfin, sachez que l’oscillateur étalon une fois sa température stabilisée à été ajusté avec une précision de 1/10 de Hz par battement sur une station radio ondes-courtes qui fonctionne sur 10MHz. C’est, tout au moins à cette époque, un étalon de fréquence qui était calé sur une horloge atomique … on peut lui faire confiance.
Calibration de la boucle de base.
Techniquement c’est enfantin quand on dispose d’un périodemètre précis. On mesure la durée de void loop(). Les mesures des impulsions tant « positives » que « négatives » donnaient une valeur de 1.007.779µS assez stable. On peut donc affirmer qu’avec delay(1000) la boucle de base est trop lente de 7.779µS et doit être diminuée de cette durée. On commence par la réduire de 8mS l’instruction devient delay(9992). La période va alors devenir 0.999779µS et il manque 221µS. On les rajoute avec l’instruction delayMicroseconds(221). Comme le confirme la photographie, cette compensation est d’une grande précision. Avec 5 unités de fluctuation soit 5µS par seconde, la dérive journalière serait de 0,000005 x 86400 = 0,432S par jour soit moins de 3 minutes par an ce qui n’a rien de ridicule.

Utiliser un afficheur LCD en ruban linéaire graphique.
Avant de définir le comportement de la Version « du pauvre » n°4 nous allons consolider notre savoir faire dans le domaine des caractères personnalisés dans un démonstrateur nommé P14_V_metre_Analogique_sur_LCD.ino pour lequel on ne change strictement rien dans le câblage. L’idée consiste à simuler le galvanomètre à cadre mobile de gauche sur la Fig.71 par utilisation d’un afficheur LCD beaucoup moins onéreux et qui facilite une grande impédance sur l’entrée supposée d’un voltmètre analogique. On observe immédiatement que chaque segment de
1V est divisé en quatre par les graduations. Donc chacune représente 0,25V ce qui reste assez simple à interpréter. Il aurait été plus convivial de disposer de cinq intervalles qui auraient conduit à la valeur de 0,2V par graduation. Ce cas a été testé, mais les zones d’un PIXEL entre deux matrices de caractères ne sont pas
pourvues de cristaux mosaïques. Il est donc impossible d’y changer la clarté. Du coup, une tentative de programmation comme celle présentée en Fig.72 conduit à des graduations d’espacements différents très peu esthétiques. En désespoir de cause la division par quatre a été conservée pour donner à l’affichage une belle apparence. Les zones non actives situées entre les caractères et coloriées en jaune sur la Fig.72 provoquent des interruptions tout le long du ruban de mesure. Ce n’est pas pénalisant du tout. Bien au contraire, ces divisions par 0,25V facilitent la lecture. (Voir la Fig.74) Comme un intervalle de 1V est divisé en environ 20 barres verticales élémentaires, comme montré sur la Fig.73 la variation d’une colonne
simple représente un vingtième soit environ 0,05V. (50mV) Bien que réalisé avec un système d’affichage relativement rudimentaire, ce voltmètre reste tous comptes faits largement assez sensible pour des travaux courants et pourrait donner lieu à un petit projet indépendant avec des calibres tels que 10V, 100v, 500V et 1000V par exemple en munissant l’entrée de ponts diviseurs et de plusieurs entrées ou d’un commutateur pour le calibre utilisé. Maintenant que nous sommes capables de programmer les multiples facettes de mise en Å“uvre d’un afficheur LCD, on peut envisager le « cahier des charges » de la version n°4 en exploitant aussi bien du texte que des caractères spéciaux qui peuvent à convenance représenter de petits idéogrammes.
Étude préliminaire du détecteur de CO2 version n°4.
Compte tenu de la quantité d’information que l’on peut présenter sur l’écran LCD utilisé, il semble naturel d’afficher simultanément les trois paramètres, l’allure de l’appareil pouvant ressembler à ce que présente la Fig.75 sur laquelle la façade très dépouillée n’est occupée que par trois composants. J’avoue que si je n’avais pas « investi » pour la version n°5, c’est celle avec l’afficheur LCD qui remporterait mon suffrage. C’est d’autant plus vrai que le cadre métallique qui englobe le LCD TC1602 permet d’agencer de belles façades. La LED Rouge de 5mm de diamètre ne s’illuminera que sous deux conditions. Soit le Mode Test est actif, soit l’on a dépassé le taux de CO2 de 599. À
la mise sous tension ou lors d’un RESET, nous savons qu’il faut soixante mesures du CO2 pour pouvoir afficher leur moyenne ce qui impose un peu plus d’une minute. Durant cette période l’écran sera celui de la Fig.76 sur
lequel on en profite pour afficher la référence temporelle de validation du logiciel. Puis, ce laps de temps étant écoulé, l’affichage devient celui de la Fig.77 sur laquelle en bas à droite dans le médaillon jaune on peut remarquer la présence d’un émoticône rudimentaire. Ce dernier battra la seconde pour témoigner du bon déroulement de la boucle de base. Avant que la température de chauffage du capteur de GAZ ne soit stabilisée, il faut environ quatre heures pour que les valeurs deviennent fiables. Aussi, pour prévenir l’opérateur plusieurs dessins montrés sur la Fig.78 ont été envisagés. C’est celui en F qui emporte ma préférence et qui sera affiché en bas et à droite de l’écran pendant 4H suite à un RESET. Ensuite le système prendra le rythme de croisière et affichera l’un des trois émoticônes de la Fig.79 pour symboliser grossièrement la qualité globale de l’air. Tant que le taux de
CO2 restera inférieur à 301ppm c’est celui en A qui cadencera la seconde. Puis, entre ce seuil et 600ppm B nous préviendra que l’atmosphère se détériore. Enfin, à partir de 600ppm le damier du dessin C va occuper la place pour nous avertir que le seuil critique est dépassé. Comme pour les versions précédentes le bruiteur va faire des BIPs insistants jusqu’à 1000ppm et des sons désagréables au delà . Ces deux seuils dépassés engendrent l’illumination permanente de la LED rouge et l’affichage des textes de la Fig.80 pour expliciter clairement l’origine de ce barouf.
Naturellement, le programme se chargera comme pour les autres version d’effectuer l’auto-vérification des deux capteurs et l’on retrouvera les quatre problèmes potentiels déjà mentionnés. Dans ce cas, la Fig.81 présente les pages écran dédiées. On se doute que l’opérateur aura la possibilité d’effectuer la vérification de l’appareil, raison pour laquelle si sur RESET il maintien de B.P. appuyé le programme passera en Mode Test ce qui aura pour effet d’afficher la page écran de la Fig.82 et d’engendrer le clignotement rapide de la LED rouge. Cet écran sera affiché pendant trois secondes, puis il y aura
présentation des trois valeurs comme sur la Fig.77 sauf que l’émoticône sera sur la Fig.79 celui en C. Les trois valeurs étant simultanément visualisées, leur rafraichissement sur la ligne série du Moniteur de l’IDE n’est plus vraiment indispensable. (À voir durant le développement s’il est maintenu ou si il n’est plus programmé …) C’est le potentiomètre branché sur A7 qui simulera les mesures comme c’était le cas sur les versions précédentes.
Derniers petits détails : L’usage du B.P. en régime de croisière. Un clic court aura pour effet de valider ou de suspendre le TIC/TAC de la boucle de base qui cadence les secondes. Un clic long quand à lui servira a valider ou suspendre le rétro-éclairage, avec pour pénalité d’avoir à implanter le transistor de commutation sur le circuit imprimé. Comme déjà abordé dans les chapitres précédents, le bouton du potentiomètre ne sera pas en façade, mais sur l’une des faces latérales du boitier. Il reste maintenant à concrétiser ce « cahier des charges » dans un programme d’exploitation. Remarquez que dans certains des dessins, des caractères sont en rouge. Ce sont les huit caractères spéciaux que l’on doit définir par logiciel. la suite est ici.