Il Display LCD è un interessante strumento, utile per interfacciare il mondo digitale con quello umano. Con questo strumento, sarà possibile leggere unità fisiche, come l’attuale temperatura in casa, l’ora, lo stato di accensione di un LED, oppure potremo comporre testo, scritte scorrevole e tanto altro ancora.
Partiamo dalla scelta dell’LCD. Indipendentemente dal numero di caratteri e linee quello che più è importante è il tipo di processore e driver che il costruttore del tuo LCD ha utilizzato, quello in figura è un display LCD 2×16 con driver Hitachi HD44780.
Di seguito alcuni display da poter acquistare su Amazon.
Prima di collegarlo ad Arduino è necessario distinguere i display di questo tipo in due categorie quelli a 14 contatti e quelli a 16 contatti, la differenza è che questi ultimi sono retroilluminati e la luminosità viene regolata agendo sul pin 15 e 16.
Descrizione pinout LCD
Pin Display LCD | Descrizione |
1 Vss | GND – Massa |
2 Vcc | + 5V |
3 Vee | Contrasto |
4 RS | segnale di selezione registro, pin 12 di Arduino |
5 R/W | segnale Read/Write. 0 scrivi 1 leggi |
6 Enable (E) | per abilitare la scrittura nei registri, pin 11 di Arduino |
7 DB0 | linea dati 0, non usato |
8 DB1 | linea dati 1, non usato |
9 DB2 | linea dati 2, non usato |
10 DB3 | linea dati 3, non usato |
11 DB4 | linea dati 4 collegato al pin 5 di Arduino |
12 DB5 | linea dati 5 collegato al pin 4 di Arduino |
13 DB6 | linea dati 6 collegato al pin 3 di Arduino |
14 DB7 | linea dati 7 collegato al pin 2 di Arduino |
15 Led+ | terminale positivo per la retroilluminazione |
16 Led- | terminale negativo per la retroilluminazione |
Schema di collegamento
Avrai notato che i pin 7, 8, 9 e 10 sono indicati come non collegati, i display di questo tipo possono essere pilotati con 4 o 8 bit, solitamente essi sono pilotati con 4 bit risparmiando pin di Arduino da destinare ad altri scopi, la differenza tra una modalità e l’altra è la velocità di trasferimento dell’informazione al display, non trovandoti in ambienti critici la modalità a 4 bit è sufficiente ed ha il vantaggio appena descritto. Il potenziometro collegato al pin 3 del LCD è di 10 kOhm e ti permette di regolare il contrasto del display, mentre quello collegato al pin 15 serve per la regolazione della luminosità dei display a 16 pin retroilluminati.
Sketch 1
/* Questo programma mostra come usare il Display LCD per mostrare la parola "Hello World" e tempo da cui è stato accesso Il Circuito: LCD RS pin to digital pin 12 LCD Enable pin to digital pin 11 LCD D4 pin to digital pin 5 LCD D5 pin to digital pin 4 LCD D6 pin to digital pin 3 LCD D7 pin to digital pin 2 LCD R/W pin to ground 10K resistor: ends to +5V and ground wiper to LCD VO pin (pin 3) Questo esempio è tratto dal sito di Arduino http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> // Viene inzializzata la libreria del Display con i relativi PIN a cui è connesso il Display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Stampa a video la parola "hello, world!" lcd.print("hello, world!"); } void loop() { // Imposta il cursore alla colonna 0, riga 1 // (nota: line 1 è la seconda riga, dal momento che il conteggio inizia dallo 0): lcd.setCursor(0, 1); // Stampa a video i secondi passati dal momento del reset lcd.print(millis() / 1000); }
Sketch 2
#include <LiquidCrystal.h> // initialize the library with // the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); } void loop() { // Print a message to the LCD. lcd.setCursor(0, 0); // set the cursor to column 0, line 0 lcd.print("Ciao Ragazzi :)"); lcd.setCursor(0, 1); // set the cursor to column 0, line 1 lcd.print("CGElettronica"); }
Sketch 3 (Scritta scorrevole)
// include the library code: #include <LiquidCrystal.h> // Viene inizializzata la libreria del Display con i relativi PIN a cui è connesso il Display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.print("Ciao a tutti da"); //Stampa a video "Ciao a tutti da" lcd.setCursor(0, 1); lcd.print("GCElettronica.blogspot.it"); //Stampa a video "GCElettronica.blogspot.it" } void loop() { for (int positionCounter = 0; positionCounter < 13; positionCounter++) { lcd.scrollDisplayLeft(); delay(400); } }
Se siete arrivati fin qui, vi ringrazio e vi svelo un trucco per poter risparmiare i PIN digitali di Arduino e rendere i collegamenti tra display e Arduino molto più semplici, il trucco viene svelato su questo articolo. 😀