Tutoriel LiquidCrystal Arduino
Tutoriel PDF LiquidCrystal Arduino
...
Mise en œuvre d'un affichage à cristaux liquide (LCD)
Ce document utilise largement les données du site officiel arduino, nous l'avons adapté et traduit.
1°) L'écran LCD utilisé
Il existe de nombreuses variétés de LCD, celui utilisé comporte seize colonnes et deux lignes et est compatible avec Hitachi HD44780. Pour d'autres LCD, il faut vérifier la compatibilité avec les bibliothèques présentes dans l'IDE) et éventuellement ajouter une nouvelle bibliothèque.
2°) But de ce tutoriel :
Nous allons reprendre le schéma de la partie 3, mesure d'une tension, et en plus de l'affichage de cette tension sur le moniteur série, nous l'afficherons sur l'écran
LCD.
Le schéma utilisé dans la partie 3.
3°) Matériel nécessaire :
– un arduino UNO.
– un écran LCD 2 lignes de 16 caractères.
– 2 potentiomètres de 10k (le potentiomètre utilisé pour la mesure de tension peut être de 5k, 10k en tout cas pas en dessous de 5k), l'autre de 10k servira pour le contraste de l'écran.
– 1 résistance de 220 ohms pour le rétro-éclairage.
– breadboard, jumpers
– l'écran LCD est vendu sans connecteur, il faut souder des pins pour la connexion au breadboard.
4°) Le Circuit
Le câblage de l'écran LCD
LCD 1 (VSS) 2 (VDD) 3 (VD) 4 (RS) 5 (R/W) 6 (E) 11 (DB4)
Arduino GND 5V potentio
mètre D12 GND D11 D5
LCD 12 (DB5) 13
(DB6) 14 (DB5) 15 (LED+) 16 (LED-)
Arduino D4 D3 D2 5V GND
Remarques :
? La broche 15 du LCD est reliée au +5V par l’intermédiaire de la résistance de 220 ohms.
? Observez comment est branché le potentiomètre servant à régler le contraste, ses extrémités au +5V et à la masse, le point milieu à la broche 3 de l'écran
LCD (VD).
? Seules les broches 2; 3; 4 et 5 de l'arduino sont utilisées pour transmettre les données, d'autres configurations sont possibles.
Voici un exemple de ce que l'on peut obtenir :
La plupart des images vues jusqu'ici sont dessinées avec FRITZING, un logiciel open source ( issu des logiciels libres) et gratuit. On peut le télécharger sur leur site. Il contient de nombreux exemples de montages.
5°) Le Code
Rappel :
En bleu, on trouve les commentaires qui aident à la compréhension.
/* Cet exemple de code est dans le domaine public, inspiré par :
*/
int val ; /* val est une variable qui contiendra le résultat de la conversion analogique digitale de la tension lue sur le port A0 (compris entre 0 et 1023).*/
float tension; /*tension est une variable de type float (nombre décimal, la virgule sera remplacée par un point). Elle contiendra la tension lue sur le point milieu du potentiomètre. */
#include // On inclus la librairie « LiquidCrystal ».
// On initialise la librairie en lui indiquant les pins utilisés sur l'arduino. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // On spécifie que l'écran LCD possède 16 colonnes ; 2 lignes.
lcd.print("Bonjour !"); /*On écrit sur l'écran LCD le mot Bonjour qui apparaîtra sans les guillements. */
} void loop() {
val = analogRead(0); /* L'arduino lit sur le port analogique 0 la tension présente sur le point milieu du potentiomètre. Transforme cette tension en un nombre entier compris entre 0 et 1023 dans le contrôleur analogique digital (ADC). La variable val contient ce nombre entier. */
tension = (val * 4.9) / 1000; /* On calcule la tension en volts (4,9 est en millivolts, il faut diviser par 1000 pour avoir la tension en volts). */
// Maintenant on écrit les résultats de la mesure sur l'écran LCD.
lcd.setCursor(0, 2); // On déplace le curseur du LCD colonnes 0 ; ligne 2.
lcd.print("Tension = "); // On écrit Tension= sur l'écran.
// On place le curseur sur la 9ème colonne, 1ère ligne pour écrire la suite. lcd.setCursor(9, 2);
lcd.print(tension) ; lcd.setCursor(13, 2); // On place le curseur sur la colonne 13 ligne 2.
lcd.print( " V") ; /* On écrit ce qui est entre guillemets (qui apparaîtra sans guillemets). */ delay(1000);
}
Remarques :
? Si le montage ne fonctionne pas, une des cause peut être tout simplement due au manque de contraste de l'écran LCD ? Penser à le régler !
? Si on écrit : lcd.print (" tension "), le mot « tension » apparaîtra sur l 'écran.
? Si on écrit : lcd.print (tension), sans les guillemets, c'est la valeur de la variable tension qui sera écrite !
?
… … …
Normalement, pour pouvoir afficher des caractères sur l'écran il nous faudrait activer individuellement chaque pixel de l'écran. Un caractère est représenté par un bloc de 7*5 pixels. Ce qui fait qu'un écran de 16 colonnes et 2 lignes représente un total de 16*2*7*5 = 1120 pixels ! Heureusement pour nous, des ingénieurs sont passés par la et nous ont simplifié la tâche.
Le décodeur de caractères
Tout comme il existe un driver vidéo pour votre carte graphique d'ordinateur, il existe un driver "LCD" pour votre afficheur. Rassurez-vous, aucun composant ne s'ajoute à votre liste d'achat puisqu'il est intégré dans votre écran. Ce composant va servir à décoder un ensemble "simple" de bits pour afficher un caractère à une position précise ou exécuter des commandes comme déplacer le curseur par exemple. Ce composant est fabriqué principalement par Hitachi et se nomme le HC44780. Ilsert de décodeur de caractères.Ainsi, plutôt que de devoir multiplier les signauxpour commander les pixels un à un, il nous suffira d'envoyer des octets de commandes pour lui dire "écris moi 'zéros' à partir de la colonne 3 sur la ligne 1".
Par la suite, les broches utiles qu'il faudra relier à l'Arduino sont les broches 4, 5 (facultatives), 6 et les données (7 à 14 pouvant être réduite à 8 à 14) en oubliant pas l'alimentation et la broche de réglage du contraste. Ce composant possède tout le système de traitement pour afficher les caractères. Il contient dans sa mémoire le schéma d'allumage des pixels pour afficher chacun d'entre eux. Voici la table des caractères affichables :
…
Texte ou Graphique ?
Dans la grande famille afficheur LCD, on distingue plusieurs catégories :
Les afficheurs alphanumériques
Les afficheurs graphiques monochromes
Les afficheurs graphiques couleur
Les premiers sont les plus courants. Ils permettent d'afficher des lettres, des chiffres et quelques caractères spéciaux. Les caractères sont prédéfinis (voir table juste au-dessus) et on a donc aucunement besoin de gérer chaque pixel de l'écran. Les seconds sont déjà plus avancés. On a accès à chacun des pixels et on peut donc produire des dessins beaucoup plus évolués. Ils sont cependant légèrement plus onéreuxque les premiers. Les derniers sont l'évolution des précédents, la couleur en plus (soit 3 fois plus de pixels à gérer : un sous-pixel pour le rouge, un autre pour le bleu et un dernier pour le vert, le tout forme la couleur d'un seul pixel). Pour le TP on se servira d'afficheur de la première catégorie car ils suffisent à faire de nombreuxmontages et restent accessibles pour des zéros.