LCD amb Arduino – connexió i programació

LCD = Liquid Crystal Display (pantalla de cristall líquid).
La trobem en quantitat de dispositius, ens interessa utilitzar-la en els nostres projectes per visualitzar informació. Cliqueu per saber com són i com funcionen les LCD >>
N’hi ha de diferents mides, la nostra és de 16×2 (2 files de 16 caràcters cadascuna).

Funció i connexió dels 16 pins de la LCD

Per entendre la funció de cadascun dels pins i la seva connexió a Arduino he consultat el tutorial LiquidCrystalDisplay i he seguit el procés explicat a El Cajón de Ardu, que reprodueixo aquí a la meva manera:

Alimentació de la LCD
Es realitza a través dels pins VSS (-) i VDD (+)
LCD 1 (VSS) → Arduino GND
LCD 2 (VDD) → Arduino +5V

LED d’il·luminació de la pantalla
Els terminals d’aquest LED són els pins A (+) i K (-) de la LCD
LCD 15 (A) → Arduino + 5V a través d’una resistència de 220 Ω
LCD 16 (K) → Arduino GND

Si les connexions són correctes, en alimentar la placa Arduino, la LCD s’il·luminarà:

Regulació del contrast
L’alimentació del pin VO a través del terminal intermedi d’un potenciòmetre (connectat a +5V i GND) permet regular el contrast de la pantalla.
LCD 3 (VO) → potenciòmetre (el meu és de 10 kΩ)

Ara veurem caràcters en forma de quadrat a la fila de dalt de la LCD.
Girant el potenciòmetre modificarem el contrast:

Pins de control
LCD 4 (RS: selector de registre)
Per aquest pin el microcontrolador comunica a la LCD el tipus d’instrucció que s’envia (mostrar caràcters o comandament de control com canviar la posició del cursor). Es connecta a un pin digital d’Arduino (jo l’he connectat al pin 7).
LCD 5 (R/W: lectura/escriptura)
Estableix la direcció de la transmissió de dades: la connexió a GND (0) ens permet escriure dades en la pantalla, i la connexió a 5V (1) ens permet llegir dades de la pantalla. Com que nosaltres volem escriure dades en la LCD, connectem aquest pin a GND.
LCD 6 (E: enable)
Aquest pin habilita la pantalla per rebre informació. Es connecta a un pin digital d’Arduino (jo l’he connectat al pin 8).

Bus de dades
La transmissió de dades pot utilitzar els 8 bits del Bus (pins 7 (DB0) a 14 (DB7) de la LCD), tot i que per a nosaltres n’hi ha prou amb només els 4 bits més significatius, utilitzant els pins 11 (DB4) a 14 (DB7).
Aquests pins es connecten a pins digitals d’Arduino. En el meu cas:
LCD 11 (DB4) → Arduino 9
LCD 12 (DB5) → Arduino 10
LCD 13 (DB6) → Arduino 11
LCD 14 (DB7) → Arduino 12


Primer programa: Hola món des de Bellvitge

He utilitzat com a base el programa d’exemple LiquidCrystal/HelloWorld de l’IDE Arduino per mostrar un text estàtic utilitzant les 2 files de la pantalla i posicionant el cursor allà on m’interessa per què el text quedi centrat:

#include <LiquidCrystal.h> // inserció de la llibreria per treballar amb LCD

// definició de la interfície: nom (lcd) i pins digitals utilitzats:
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
// LCD RS connectat al pin digital 7
// LCD E connectat al pin digital 8
// LCD D4 connectat al pin digital 9
// LCD D5 connectat al pin digital 10
// LCD D6 connectat al pin digital 11
// LCD D7 connectat al pin digital 12

void setup()
{
..lcd.begin(16, 2); // configuració: núm de columnes, núm de files de la LCD
..lcd.setCursor (3,0); // posicionament del cursor (columna 4, fila superior)
..lcd.print(“HOLA MON”); // missatge a visualitzar en la fila de dalt
..lcd.setCursor (0,1); // posicionament del cursor (1a columna (0), fila inferior)
..lcd.print(“des de BELLVITGE”); // missatge a visualitzar en la fila de baix
}

void loop()
{
..// com que el missatge és estàtic, aquí no cal res
}

Monitorització de dades

De la mateixa manera que utilitzem el monitor sèrie de l’IDE, podem utilitzar la LDR per visualitzar lectures de sensors o el valor de qualsevol variable.
Per a aquesta prova he afegit al circuit un sensor de llum amb LDR connectada al pin A0 d’Arduino. Es mostra un text estàtic a la fila de dalt, i abaix el valor enviat pel sensor, que s’actualitza cada 100 ms:

Monitorització de dades

#include <LiquidCrystal.h>
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
int const PinSensor = A0; // pin de connexió de la LDR
int ValorSensor; // variable per desar la lectura del sensor

void setup()
{
..lcd.begin(16, 2); // configuració: núm de columnes, núm de files de la LCD
}

void loop()
{
..ValorSensor = analogWrite (PinSensor); // fixació del valor de la variable
..lcd.print(“lectura llum:”); // text estàtic a visualitzar (posició cursor per defecte: 0,0)
..lcd.setCursor (0,1); // posicionament del cursor a la fila de baix
..lcd.print(ValorSensor); // visualització del valor de la variable
..delay (100); // temps de visualització: 100 ms
..lcd.clear(); // neteja la pantalla abans d’actualitzar les dades i tornar-les a mostrar
}


Opcions de visualització

La llibreria LiquidCrystal té un munt d’instruccions que permeten visualitzar dades en LCD amb diferents efectes. La relació i explicació d’aquestes instruccions la podeu trobar en la pàgina de referència del web d’Arduino.
Les meves proves de “programació LCD avançada” amb efectes visuals les ficaré en una altra entrada per no saturar aquesta. Us deixo però el resultat en aquest vídeo: