Introduzione
Nella realizzazione dei nostri progetti per Arduino, abbiamo spesso bisogno di poter leggere i dati in uscita direttamente da un display LCD. In questo articolo vedremo come poter montare un display LCD sul nostro Arduino sfruttando la comunicazione I2C. Infine vedremo come programmarlo con un semplice esempio che mostri come visualizzare un testo sul display.
Il dislay a cristalli liquidi – LCD1602
L’integrazione di un display LCD favorisce notevolmente l’interattività del nostro progetto, permettendo all’utilizzatore di poter leggere direttamente dei parametri in uscita. Questi valori possono essere un semplice testo come dei valori numerici letti da sensori, come la temperatura o la pressione, o persino il numero di cicli che il nostro Arduino sta eseguendo.
Comunque questi display hanno un piccolo problema. Quando vengono connessi ad un microcontrollore (come Arduino per esempio), questi display richiedono praticamente moltissimi PIN di connessione occupando praticamente quasi tutti gli IO disponibili e lasciando al multiprocessore poche uscite per eventuali altri dispositivi e sensori. Questo problema è stato ovviato grazie alla comunicazione su bus I2C.
Il display LCD1602 ha infatti un microchip integrato che gestisce questa tipologia di comunicazione e quindi tutti le informazioni di entrata e di uscita si limitano a solo due PIN (esclusa l’alimentazione). I2C è un tipo di serial bus realizzato dalla Philips, che utilizza due linee bidirezionali chiamate SDA (Serial Data Line) e SCL (Serial Clock Line), entrambe devono essere collegate tramite resistenze pulled-up. I voltaggi di utilizzo sono quelli standard come 5V e 3.3V.
Il modulo LCD1602 è composto di due parti. Un classico Display a cristalli liquidi dello standard HD44780 16×2 (16 caratteri su 2 righe). La retroilluminazione può essere verde o blu.
E una scheda, la LCM1602 che si monta nel lato inferiore e gestisce la comunicazione I2, portando tutte le uscite a SDA e SCL, GND e VCC
La LCM1602 si può trovare sia singolarmente in commercio, che venduta insieme al Display LCD come modulo LCD1602 (vedi qui ) che costa intorno ai 10 euro. Mentre il display LCD da solo viene intorno ai 2-3 euro (vedi qui ).
Costruiamo il circuito
Per realizzare il circuito dobbiamo effettuare le seguenti connessioni
Arduino UNO/ZERO | LCD1602 |
GND | GND |
5V | VCC |
A4 | SDA |
A5 | SCL |
Dallo sketch di Fritzing puoi ossservare le connessioni da fare in modo più semplice:
Scriviamo il codice
Per utilizzare il protocollo I2C con un display LCD e Arduino, esiste una libreria apposita da scaricare ed importare nel codice. Il nome di questa libreria è Liquid Crystal I2C. Scaricate la libreria, un file zip (potete scaricarla da qui) ed estraete il contenuto nella cartella libraries di Arduino IDE. Puoi farlo direttamente e facilmente da Arduino IDE, selezionando la voce del menu Sketch > #Include libreria > Aggiungi libreria da file ZIP.
Per prima cosa sviluppiamo un semplice programma Hello World. Questo semplice sketch effettuerà una connessione I2C tra Arduino e il Display LCD e poi visualizzerà del testo sulle due righe. Sulla prima riga “I’m Arduino” e sulla seconda “Hello world!”
Ecco lo sketch:
#include <Wire.h> #include <LiquidCrystal_I2C.h> char row1[]="I'm Arduino"; char row2[]="Hello world!"; int t = 500; // Library initialization with 16x2 size settings LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 void setup(){ lcd.init(); lcd.backlight(); } void loop() { lcd.clear(); lcd.setCursor(15,0); for (int positionCounter1 = 0; positionCounter1 < 26; positionCounter1++){ lcd.scrollDisplayLeft(); lcd.print(row1[positionCounter1]); delay(t); } lcd.setCursor(15,1); // set the cursor to column 15, line 1 for (int positionCounter = 0; positionCounter < 26; positionCounter++){ lcd.scrollDisplayLeft(); lcd.print(row2[positionCounter]); delay(t); } }