Pour commencer ce nouveau chapitre, on va se contenter d’un module montré sur la Fig.89 très courant que l’on peut facilement trouver dans le commerce en ligne. Par exemple on le trouve sur : https://www.az-delivery.de/fr/products/azdelivery-hd44780-1602-lcd-module-display-2×16-zeichen-fur-arduino-lcd1602-keypad Si vous optez pour cette solution « clef en main », comme il s’agit d’un « SHIELD » qui se branche directement sur une carte UNO, l’utilisation d’une NANO est exclue, cette limitation sera comblée dans les expériences qui suivent.
Expérience 041 : Compteur horaire sur « SHIELD » LCD.
L’architecture du module LCD qui se branche directement sur les connecteurs d’Arduino est donnée sur la Fig.90 qui en précise les divers branchements. La bibliothèque LiquidCrystal, native dans l’IDE permet de définir les E/S utilisées par l’interface qui relie le module LCD du projet à la carte Arduino. Le bouton RST du SHIELD est en parallèle avec la broche RESET du microcontrôleur. On peut noter sur la Fig.89 que certaines broches des connecteurs d’Arduino peuvent être reprises moyennant de souder des lignes de picots idoines aux emplacements prévus à cet effet. Une petite LED rouge confirme la présence du +5Vcc sur la carte de l’afficheur LCD. On remarque sur la Fig.90 que pour économiser des E/S sur le microcontrôleur l’afficheur est utilisé 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é par le transistor T qui sans utilisation de la sortie D10 est saturé par la résistance R de 4,7KΩ. Mais le module commercialisé présente un danger incontestable autant pour le transistor T que pour la sortie d’Arduino. (C’était tout au moins le cas à l’époque où j’ai approvisionné ce module.) En effet, il n’y a pas de résistance de limitation du courant de base si D10 est à l’état « 1« . Si la sortie D10 du microcontrôleur passe à l’état « 1« , le courant I base passe à environ 85 mA qui correspondent à celui d’un court-circuit sur la broche de l’ATmega328. Il faut impérativement parer ce danger matériel. Deux solutions sont envisageables :
Soit on n’utilise pas la possibilité de piloter le rétro éclairage, soit pour l’éteindre on force la broche D10 en sortie et immédiatement on y impose un état « 0« , ou pour l’allumer on la configure en entrée. Soit on modifie le module électronique. Pour ma part, comme montré sur la Fig.91, la broche qui va en D10 est coupée au ras du connecteur pour l’isoler. Piloter le rétro éclairage se fait par une diode D soudée sur le dessus du circuit imprimé entre l’ancienne broche D10 et l’E/S D13 la plus proche sur le coté gauche du connecteur. 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 bloqué. Quand la sortie D13 passe à l’état « 1 » la diode est bloquée et si D13 passe à l’état « 0 » elle draine les 3 mA qui traversent R.
Représenté sur la Fig.92, on trouve le schéma électrique adopté pour prendre en compte les cinq boutons poussoir disponibles sur le module électronique, qui reprend l’idée d’un diviseur de tension. Comme déjà adopté pour le mini-clavier de P031, l’idée consiste à n’utiliser qu’une seule entrée analogique et à différencier les B.P. appuyés par une tension propre définie par une chaine de résistances. Sur la Fig.92 sont précisées en violet les tensions mesurées sur la broche A0 en fonction de l’état d’activation des divers boutons. En bleu clair figurent les conversions analogiques / numériques qui en résultent, celle à prendre en compte pour déterminer les plages de valeurs de détermination. Le petit programme Experience_041.ino est un automatisme aveugle qui se contente d’incrémenter une fois par seconde un compteur horaire affiché sur l’écran LCD du module électronique. Pour tester la modification donnée en Fig.91 et apportée au module le rétro éclairage est inversé à chaque seconde.

Expérience 042 : Exploitation des B.P. du « SHIELD » LCD.
Frustrant cet affichage qui la moitié du temps devient illisible ! Avec Experience_042.ino nous allons y remédier. Ce démonstrateur procède par un affichage permanent et exploite le clavier à cinq touches du module. L’anti-rebonds est effectué de façon bien simplifiée par rapport aux expériences précédentes. Dans une application chaque touche aurait sur le projet une action spécifique. Avec P042 on se contente (Comme montré sur les deux exemples de la Fig.93) de préciser sur la ligne du bas de l’écran quel est le B.P. qui a été cliqué. Pour que vous puissiez facilement obtenir les valeurs numérisées et ainsi revoir éventuellement les limites de décision pour les comparaisons, sur la ligne du haut est indiquée la valeur issue du CAN. Il est fort probable que vous aurez des valeurs différentes et pour la bonne exploitation du clavier il faudra modifier les valeurs dans les cinq comparaisons du genre :
if ((Tension_sur_A0 < 180) && (Tension_sur_A0 > 80)) …
Expérience 043 : Petit bruiteur passif.
Lors sujet vont penser les lectrices et les lecteurs, car un périphérique de type BUZZER n’a rien à faire dans un chapitre sur les dispositifs d’affichage LCD. Et vous avez raison. Mais je plaide non coupable, car la prochaine expérience fait usage de ce type de dispositif. Aussi, pour ne pas en alourdir la description, nous allons avec Experience_043.ino ouvrir une parenthèse dans ce chapitre. Les petits modules du commerce comme celui de la Fig.94 sont très populaires, mais il faut faire attention lors de leur mise en œuvre. En effet, le module est soudé sur le petit circuit imprimé dans l’autre sens. Du coup, la broche notée – sur la sérigraphie doit aller au +5Vcc. Par ailleurs, la broche notée S ne correspond pas à une sortie, mais au pilotage, donc une entrée. Si on opte pour le schéma de la Fig.95 on devra la gérer en logique négative. Si vous préférez travailler en logique positive il suffit de brancher S sur GND et de piloter sur la broche notée –. La consommation en courant est fonction des conditions d’utilisation. (Voir tableau) Avec une tension de 5Vcc la résistance de 100Ω permet de diminuer le courant de pratiquement moitié, et avec lui le bruit fait par le BUZZER. Après avoir testé ce petit bruiteur on peut maintenant revenir au SHIELD LCD.
Expérience 044 : Mesure de la capacité d’un petit accumulateur de type RC22.
Nous avons tous pour nos divers appareils électronique une flopée d’accumulateurs comme celui de la Fig.96 qui ont un nombre de cycle limité et qui s’usent même si on ne s’en sert pas et qui restent oubliés dans un tiroir pendant des mois voir des années. Lorsque l’on désire les remettre en service, il peut être tentant d’en vérifier la capacité qu’il leur reste. Pour ce faire, il suffit de les recharger entièrement, et de les soumettre au test effectué avec Experience_043.ino qui utilise une troisième fois le SHIELD LCD et son petit clavier. C’est une application purement « utilitaire » qui, outre le module d’affichage, n’utilise que quelques composants externes pour être opérationnelle. Elle consiste à mesurer par décharge « complète » la capacité d’une pile rechargeable de type RC22 de tension nominale 8,4v. Comme précisé ci-avant, l’échantillon en test doit avoir été totalement
rechargé. La mesure s’achève quand la tension aux bornes passe en dessous d’une valeur prédéterminée de 6,9v. L’accumulateur reste en décharge, mais un bruiteur prévient qu’il faut venir le débrancher. La décharge se fait sous un courant moyen de 50mA. L’accumulateur peut être au Ni-Cd ou de technologie MH. Tout composant dont la tension aux bornes ne dépassera pas 10v peut être testé quelle que soit sa capacité, mais si le test dépasse les neuf heures, l’affichage sera perturbé sur le LCD. Il est conseillé d’alimenter la carte Arduino en autonome, pour ne pas perdre le résultat des mesures quand la tension sur l’échantillon s’effondre en fin de décharge.
Méthode retenue : La Fig.97 présente le schéma électrique retenu pour mettre en œuvre cette petite application. Noter que le bruiteur BUZ est de type actif, un signal logique d’état « 0 » le fait fonctionner et il produit une tonalité assez pénible. Utilisé directement sur D2 il consomme 20 mA. Pour en atténuer la puissance une LED verte est placée en série. C’est la résistance R de sollicitation qui dose le courant I de décharge. Elle est choisie à 165Ω pour engendrer un courant moyen d’environ 50mA. Ce courant est fonction de la tension que présente l’accumulateur au cours du processus. En début d’expérience la tension avoisine 9,2v. Le courant qui en résulte fait 56mA. Mais en fin de décharge elle tombe à 7v pour un courant de 42 mA. La mesure s’achève quand la tension passe en dessous du seuil choisi à 6,9v. Pour que la tension aux bornes de la batterie soit compatible avec les limites imposées par l’entrée analogique A1, on divise par deux la tension avec les résistances R1 et R2. Pour afficher la valeur réelle sur le LCD il suffit par calcul de multiplier la valeur déduite de la mesure par deux. Par définition la capacité d’une pile rechargeable ou d’un accumulateur est :
Mais la capacité totale résulte d’un calcul intégral durant toute la décharge, car l’intensité n’est pas constante au cours du temps. La méthode consiste à calculer Intensité x Temps à chaque seconde écoulée et à le cumuler dans Capacité. Pour une seconde de temps écoulé, la capacité devient :
Le résultat ne sera fiable que si la période T entre deux cumuls soit exactement d’une seconde. Le logiciel Experience_043.ino utilise deux constantes paramétrables pour ajuster le plus précisément possible la valeur de T. Avec les valeurs utilisées dans le programme la période T varie entre 1,000036S et 0,999983S. (Soit entre +36µS et -17µS) Comme c’est la valeur la plus grande qui s’impose en grande proportion, la valeur affichée pour le résultat sera au moins égale à celle de la réalité. (Avec une erreur de 0,00001 sur le temps !) La résistance de décharge R doit dissiper sous forme de chaleur une puissance moyenne de 8,2V x 0,05A soit environ 0,5W. Choisir des modèles en conséquence. Pour répartir la chaleur deux résistances de 330Ω sont placées en parallèle. Inutile de mesurer la valeur de l’intensité débitée par l’accumulateur. Elle se calcule facilement avec I = E / R sachant que E = U / 2. On en déduit l’instruction qui va calculer l’intensité :
Dans le programme, Resistance_Accu_MH est défini comme constante et vaut 165. (Valeur de R) Le facteur de multiplication 1000 permet d’exprimer la faible capacité de ces piles rechargeables en mAh et non en Ah. DDP pour Différence De Potentiel représente la tension aux bornes de l’accumulateur notée conventionnellement U dans les formules. Le programme est résumé par l’organigramme de la Fig.98 avec pour particularité de se terminer dans la procédure void Proceder_aux_mesures() par une boucle INFINIE.
Pour se servir de ce démonstrateur il suffit de le téléverser. Le logiciel commence par afficher les directives pour guider l’opérateur. Particularité de P044 : La boucle de base permanente n’est pas void Loop() en standard, mais dans la routine principale void Proceder_aux_mesures() dont le microcontrôleur ne sortira jamais … sauf sur un RESET. Si durant cette phase qui affiche en permanence à l’écran l’évolution du processus l’opérateur clique sur le bouton UP on inverse l’état du rétroéclairage. On peut ainsi à tout moment éteindre l’afficheur pour minimiser la consommation ou le réactiver pour voir l’état actuel des résultats. On peut remarquer en (1) que le mot rapidement a été tronqué. C’est pour pouvoir loger intégralement la phrase sur la ligne du bas qui ne comporte que 16 caractères. Avec cette petite application qui peut parfaitement donner lieu à la réalisation d’un petit module électronique utilisant une carte NANO pour le miniaturiser, on termine la série des expériences utilisant le SHEILD LCD et l’on va émigrer vers des modules d’affichage indépendants.
Expérience 045 : Module LCD 1602A séparé.
L’avantage d’un module du commerce comme celui de la Fig.89 est la facilité de mise en œuvre, pas besoin de créer un circuit imprimé. Avec cinq boutons disponibles, si l’on utilise la notion de clic court et de clic long on peut déjà traiter des applications « sérieuses ». Les inconvénients en contre partie sont les suivants : Un coût du projet un peu plus élevé que si l’on utilise un afficheur approvisionné en un seul exemplaire. Avec un module séparé, on reste totalement maître du nombre de touches qui équiperont l’appareil envisagé. Et surtout on peut utiliser toutes les broches d’interfaçage d’Arduino. Nous allons tester la mise en service d’un module élémentaire que l’on trouve à profusion sur la toile en proposant à un quelconque moteur de recherche les deux mots clef LCD 1602A. Les branchements effectués entre l’afficheur et Arduino sont identiques à ceux de P042 sauf que l’on doit ajouter un petit potentiomètre de 10kΩ pour fournir VO sur la broche 3 de l’afficheur. Les deux broches du rétroéclairage sont directement réunies au +5Vcc et à GND. La photographie d’Image 012.JPG montre le petit montage expérimental, alors qu’Image 013.JPG présente le circuit en mode analyse avant synchronisation. Ce programme est simple car il n’y a pas à gérer un quelconque clavier, l’asservissement étant effectué par le petit module électronique de réception des signaux horaires. Ce petit module est décrit de la Fiche n°27 à la Fiche n°31, la structure des données et leur décodage y étant explicité en détails. La bibliothèque Funkuhr.h qui décode le signal horaire est disponible dans le dossier <BIBLIOTHEQUES\Funkuhr>. Elle ne fournit pas une variable indiquant le jour de la semaine, la date est indiquée sans cette information. Le programme Experience_045.ino assure le décodage des signaux de la station radio et indique la date sur la ligne du haut de l’afficheur LCD et l’heure sur la ligne du bas. Si le programme est en mode « analyse » l’affichage est celui de la Fig.99 avec sur la ligne du bas le chronométrage depuis la mise sous tension ou depuis un RESET. Quand les signaux sont correctement reçus, l’affichage prend l’allure montrée sur la Fig.100 avec formatage des données sur deux lignes. Les zéros en tête sont remplacés par des espaces. Si la réception est correcte, la synchronisation prend en général moins de trois minutes. Voir le résultat sur Image 014.JPG.

Expérience 046 : Un voltmètre analogique à RUBAN ou numérique.
Avec seulement une carte Arduino NANO, un afficheur LCD 1602A et un petit potentiomètre réglable de 10kΩ pour ajuster le contraste, on peut réaliser un tout petit voltmètre qui peut rendre de signalés services dans le développement de nos projets. Deux B.P. sont nécessaires pour s’en servir, et dans le cadre de nos expérimentations nous allons réutiliser le petit module de la Fig.65 à deux touches. La valeur mesurée est affichée sur l’écran LCD soit sous forme analogique comme sur la Fig.101 en A soit en numérique comme montré en B. Les branchements sont strictement identiques à ceux de P045 avec le petit potentiomètre ajustable et un diviseur de tension à deux résistances. Image 016.JPG montre la platine d’essais lorsque le +3,3Vcc est branché sur A0.
Ce démonstrateur exigeant trois pages d’explications, les descriptions ont été regroupées dans un document à part nommé Voltmètre analogique LCD.pdf qui est logé dans le sous-dossier nommé <FASCICULES> dédié à ce type de descriptifs spécifiques hors didacticiel.
Expérience 047 : Un oscilloscope avec un afficheur 1602A.
L’idée qui consiste à imaginer qu’avec un afficheur alphanumérique qui ne peut visualiser que des lettres et des chiffres on puisse créer un oscilloscope qui par nature est graphique est pour le moins bien saugrenue et je crois même pouvoir affirmer que c’est la seule proposée sur Internet à ce jour. Et pourtant … à LCD vaillant rien d’impossible !
Non, ce n’est quand même pas un synchroscope présentant une bande passante de 500MHz, tri courbes et post synchronisé par satellite. En réalité il se résume à un enregistreur dont la cadence la plus rapide sera de 5000 échantillons par seconde et la définition de l’écran sera limitée à 16 x 16 « pixels » ce qui peut sembler dérisoire. C’est en dépit de ses faibles performances la cerise sur le gâteau, car il est totalement gratuit et ne vous coutera que 8902 octets dans la mémoire de programme qui ne sera au total exploitée qu’à 27%. Coté matériel il n’y a rien à ajouter par rapport à P046 sauf éventuellement le circuit électrique de la Fig.3 donnée dans le document d’utilisation Notice de l’oscilloscope.pdf préservé dans le sous-dossier <Documents\FASCICULES\OSCILLOSCOPE sur LCD>. Par contre, s’il ne remplacera jamais un vrai oscilloscope, il dispose d’une base de temps ajustable, d’une mémoire d’échantillonnage que l’on peut balayer en différé comme sur un « grand ». Ceux qui parmi vous n’ont jamais possédé d’oscilloscope pourront explorer les fondements de l’usage d’un tel instrument de mesure, observer les limites inhérentes à ce type d’appareil. Bref, tout un champ d’expérimentations totalement gratuit. YOUPpiiiiiii !
Pour montrer ce que l’on peut obtenir avec un appareil aussi rudimentaire, la Fig.102 présente six signaux issus d’un générateur basses fréquences. En A nous avons un signal sinusoïdal. En B l’onde est triangulaire. La différence n’est pas très marquée, mais si l’on accélère la rapidité d’échantillonnage, la précision devient meilleure et la distinction incontestable. En C l’écran LCD visualise le signal carré issu de la PWM fournie sur D11. Les signaux du genre « tout ou rien » issus des sorties binaires d’Arduino sont plutôt bien visualisés. En D est tracée une dent de scie montante. Enfin en E, nous avons la réciproque, soit une dent de scie descendante. Pour tester cette expérience, il suffit de téléverser P047 et de consulter sa notice d’utilisation.
Ce démonstrateur exigeant quatorze pages d’explications, les descriptions et les explications détaillées ont été regroupées comme pour P046 dans un document à part nommé OSCILLOSCOPE sur LCD.pdf qui est logé dans le sous-dossier nommé <FASCICULES> dédié à ce type de descriptifs spécifiques hors didacticiel. Sous des apparences simples, dans la pratique ce démonstrateur qui intègre toutes les fonctions de base d’un appareil numérique, contient plusieurs subroutines relativement complexes, et si vous aimez programmer je ne peux que vous inviter à en consulter le listage. Par ailleurs, les explications relatives aux oscilloscopes en général s’adressent en particulier aux lectrices et lecteurs béotiens dans ce domaine. Alors n’hésitez-pas à aller vous perdre dans ce document très soigné. (Fin de la PUB !)
Expérience 048 : Horloge/Calendrier avec le module DS1302.
Nombreuses sont les applications qui doivent intégrer une Horloge/Calendrier autonome avec sauvegarde permanente du fonctionnement même quand l’alimentation de l’appareil est coupée. Par exemple le petit projet d’éphéméride solaire publié sur https://www.robot-maker.com/ouvrages/helioscope-ephemeride-solaire-arduino/ en est un exemple typique. (PUB !) La demande commerciale pour l’électronique de loisir à poussé les fournisseurs à créer des modules électroniques spécifiques PCF8563 tel que celui de la Fig.103 très populaires dans le monde d’Arduino et facile à se procurer. Ce module intègre une horloge temps réel pilotée par quartz, qui compte les heures, les minutes, les secondes. Le circuit intégré gère les jours, les semaines, la date du mois, et les années. La correction pour les années bissextiles est valable jusqu’en 2099. Une mémoire RAM locale à usage général de 31 octets est disponible pour l’utilisateur. Les échanges de données se font par un bus à trois fils de type SPI. Compatible TTL le circuit DS1302 fonctionne dans une plage d’alimentation comprise entre 2Vcc et 5,5Vcc. Alimenté sous 2Vcc il consomme un courant qui reste très inférieur à 0,3µA. Comme montré sur la Fig.104 le petit module est complété par une LED de témoin d’alimentation +5Vcc. Les Entrées / Sorties sont choisies pour pouvoir éventuellement l’utiliser simultanément avec le SHIELD de l’afficheur LCD.
Concrètement, Experience_048.ino n’utilise aucun afficheur LCD et peut sembler « débarquer » dans ce chapitre. C’est un préambule à P049 pour tester sans avoir rien à brancher autre que le module PCF8563 et manipuler avec le Moniteur de l’IDE la bibliothèque <DS1302.h> fournie dans le dossier dédié qui accompagne ce didacticiel.
Protocoles de dialogue avec le DS1302 :
Contrairement à tous les exemples trouvés sur Internet, se contenter de réunir les trois broches de pilotage aux E/S d’Arduino n’est pas suffisant. Le fonctionnement ne devient correct que si les trois lignes de dialogue de la SPI sont drainées à l’état « 1 » par trois résistances de 10KΩ reliées à la ligne du +5Vcc.
RESET : Cette broche nommée RST agit comme un « chip select ». Pour écrire ou lire dans la « puce » du DS1302 cette ligne doit être maintenue à l’état « 1 » jusqu’à la fin de la lecture / écriture. Lorsque cette ligne est à l’état « 0 » toutes les lectures et écritures sur le DS1302 sont désactivées.
I/O : C’est la ligne de données bidirectionnelle du protocole SPI. Lorsque l’entrée RESET est haute, elle devient active. Les données série sont échangées par mots de 8 bits. Une écriture ou cycle de lecture consiste à envoyer un octet de commande, suivi d’une lecture ou d’écriture d’octets. L’octet de commande indique l’adresse à lire ou à écrire. (Cette ligne est plus souvent nommée SDA.)
SCLK : Il s’agit de l’horloge de synchronisation du système. Les spécifications sur la fiche de données signalent une fréquence d’horloge de valeur maximale de 2 MHz sous une alimentation
de 5Vcc. Mais dans la pratique la fréquence maximale d’échantillonnage semble se situer aux environs de 500 kHz. L’utilisation d’Experience_048.ino est élémentaire. Téléchargée, elle affiche en standard la date et l’heure toutes les secondes à 57600baud sur le Moniteur de l’IDE. C’est le programme « permanent » qui ne doit pas fausser l’heure à chaque RESET. Mais tant que vous n’aurez pas validé une fois la ligne 45 les valeurs affichées seront aberrantes. Il faut au préalable mettre à jour les données temporelles dans le bloc de #define en tête de programme.
Expérience 049 : Horloge/Calendrier sur afficheur LCD.
Avec ce démonstrateur nous allons achever notre visite du pays des afficheurs alphanumériques de type LCD à deux lignes de 16 caractères. Il en existe avec quatre lignes, leur utilisation avec la bibliothèque LiquidCrystal restant strictement analogue puisque l’on doit à chaque affichage préciser la ligne sur laquelle sera positionné le curseur d’écriture. Le démonstrateur Experience_049.ino est très simple à utiliser. Il montre comment présenter la date et l’heure sur un afficheur de type LCD à deux lignes de 16 caractères. Sur RESET il se contente d’afficher en boucle les données une fois par seconde. Il n’est pas prévu d’initialiser le DS1302 pour simplifier, car en principe vous avez testé P048. Si la pile de sauvegarde de 3V est en place, les données ont été préservées et l’horloge a continué de fonctionner normalement.
NOTE : Si le jour et le mois dépasse la valeur 10, avec 16 caractères sur la ligne il n’en reste que 5 pour afficher le jour de la semaine. C’est la raison pour laquelle ce dernier est tronqué pour Mercredi, Vendredi, Samedi et Dimanche.
Ce démonstrateur met bien en évidence les limites de cette technologie. Aussi, dès que l’on désire une belle présentation et des possibilités graphiques, il faut changer de technologie. Il est temps d’emprunter une nouvelle route riche de découvertes.
La suite est ici.