Un affichage type "Galvanomètre à Echelle mobile " avec un afficheur LCD
Pour changer l'aspect de certains de vos montages, voici un affichage original qui nous rapproche de nos vieux galvanomètres à échelle mobile longitudinale . Avec une petite poignée de composants et quelques lignes de code, on pourra afficher une valeur analogique à variation lente, qui défile devant une flèche indicatrice immobile. On choisit les caractères, les unités et les intervalles adaptés à ce que l'on mesure sur l'entrée du circuit, que ce soit une proportion, un pourcentage, une tension, etc ... C'est un type d'affichage que j'avais déjà utilisé dans le thermostat de radiateur d'appoint .
Un bout de schéma :
C'est un ATMega328 qui fait le job; J'évite ainsi tout l'accastillage qui compose une plaque de développement UNO ou le NANO . Comme l'horloge n'a pas besoin de précision stricte, je la déclare en interne pour ne pas faire les frais d'un quartz et du reste. Je pensais prendre un ATTiny85 mais j'aurais dû mettre l'afficheur sur un décodeur I2C en parallèle; donc restons simple sans faire toute une usine à gaz. Un condensateur C2 de 0.1µF stabilise la tension d'alimentation du processeur. L'afficheur reçoit directement les 4 lignes de datas et les deux de fonctions de décodage validation (E) et données/instructions (R/S). J'ai ajouté une commande de rétro éclairage (LIGHT) au cas où une application le justifierait et un réglage fixe de contraste R3-R4, respectivement 10K-1K, pour simplifier le matériel et la sérigraphie du circuit. L'entrée A0 reçoit un signal analogique de 0 à 5 Volts maximum, référencé masse, ou avec un pont diviseur + diode zener, si l'on souhaite monter plus haut dans les valeurs et le logiciel va s'occuper de fixer la variation à pleine échelle ainsi que les unités qui doivent être représentées . Il est évident qu'il reste de la ressource sur le microcontrôleur et que l'on peut s'en servir pour d'autres fonctions à traiter !
La concrétisation matérielle ...
Le circuit imprimé:
C'est un circuit simple face et avec seulement 1 strap. Il est réalisé avec les moyens classiques à la portée de l'amateur et décrit ici. Les dimensions s'accordent volontairement avec celles de l'afficheur, pour qu'il puisse être monté derrière et utiliser les mêmes vis de fixation. Soyons généreux, je vous donne avec l'enjoliveur réalisé à l'imprimante 3D, qui sert de cache misère à coller sur la face de nez qui supporte l'ensemble.
Et quelques lignes de programme, pour faire tourner tout ça...
Le soft est développé avec l'IDE Arduino, tellement facile et intuitif, en sélectionnant dans "Outils" et le gestionnaire de cartes "Arduino UNO ". Le téléversement n'est pas utilisé avec l'ATMega328 car je compile dans "Croquis" et "Exporte les binaires " dans un fichier au format .hex que je vais utiliser avec un programmateur genre Dataman Pro 40 ou tout autre moyen dont chacun a l'habitude, pour buriner le microcontrôleur. Dans le menu du Data I/O, on n'oublie pas de paramétrer l'horloge interne, les différents flags et les 'device opération options', que l'on doit forcer dans le composant.
Quelques originalités: la chaîne de caractères 'String echelle' est de 2048 caractères maximum, mais ici ne doit pas dépasser 1024, car la conversion de la valeur d'entrée se limite à 10 bits, et ne pas oublier les 7 ou 8 espaces du début, en fonction de la place du curseur. La création d'une flèche est élaborée sous 'byte curseur' et nous laisse un peu de liberté sur la forme à lui donner. La 'valeurMapper' et le 'String affichage' mettent en corrélation la chaîne de caractères et la valeur échantillonnée sur l'entrée.
La commande de validation du rétro-éclairage est traitée dans le 'setup'. Toutes autres extinctions temporisées sont laissées libres en fonction de l'utilisation, dans un souci d'économie de batterie ou de pollution lumineuse et doivent être inclues dans le 'loop'.
Pour garantir la fluidité de l'affichage, et ne pas avoir une instabilité du réticule, j'ai ajouté un petit 'delay' de 150 ms à ajuster suivant ce que l'on désire visualiser.
/***********************************************************************************************
*Un affichage original, façon galvanomètre longitudinal, avec un afficheur LCD 2 lignes de 16 *
* caractères. en sovoir plus sur: *
* https://www.amazing-vacuum-tubes.com/pages/et-entre-autre/un-galvanometre-sur-lcd-2x16.html *
***********************************************************************************************/
#include <LiquidCrystal.h> // Bibliothèque de gestion d'écran
// Raccordement de l'écran (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(11, 12, A5, A4, A3, A2);
int backLight = A1 ; // Cmde du retroeclairage
// Echelle graduée avec 8 espaces pour le défilement du début et de la fin
String echelle = " 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% ";
void setup() {
// Initialisation de l'afficheur
lcd.begin(16, 2);
// Allume le rétroéclairage
pinMode (backLight,OUTPUT);
digitalWrite (backLight, HIGH);
// Création du curseur flèche vers le haut
byte curseur[8] = {
B00100,
B01110,
B11111,
B00100,
B00100,
B00100,
B00100,
B00100
};
lcd.createChar(1, curseur);
}
void loop() {
// Lecture d'une valeur analogique sur l'entrée A0 (0 à 100)
int valeur = analogRead(A0);
int valeurMapper = map(valeur, 0, 1023, 0, 50); // Ajuster selon la longueur de la Chaîne de caractères
// On extrait 16 caractères de la chaîne "echelle" selon la valeur
String affichage = echelle.substring(valeurMapper, valeurMapper + 16);
// Ligne 1 : L'échelle qui glisse de gauche à droite et réciproquement
lcd.setCursor(0, 0);
lcd.print(affichage);
// Ligne 2 : Le curseur fixe au centre (caractère 7 ou 8)
lcd.setCursor(7, 1);
lcd.write(byte(1));
Cette présentation d'affichage n'est pas fermée; il y aura probablement une suite avec un minuteur ou quelque chose comme ça ... Et rien n'empêche de faire comme pour le thermostat, également faire défiler la ligne du bas, de part et d'autre du curseur, avec une suite de 4 petits traits verticaux entre des grands traits situés sous les chiffres après avoir supprimé les points de la ligne supérieure.