venerdì 13 gennaio 2023

DISPLAY LCD 16X2 E L'IMPORTANZA DEL MODULO I2C

Un display LCD 16x2 funziona utilizzando la tecnologia LCD (Liquid Crystal Display), che utilizza cristalli liquidi per modificare la quantità di luce che passa attraverso una finestra di visualizzazione.

Il display è composto da due parti principali: un pannello LCD e un driver LCD. Il pannello LCD è composto da una serie di cristalli liquidi incapsulati tra due lastre di vetro o plastica, con una serie di polarizzatori e filtri colorati posizionati tra di essi.


Il driver LCD è un circuito elettronico che controlla la polarizzazione dei cristalli liquidi all'interno del pannello LCD. Ciò viene fatto inviando una tensione elettrica attraverso una serie di fili collegati ai cristalli liquidi. Quando una tensione viene inviata attraverso un cristallo liquido, esso si orienta in modo da permettere o bloccate la luce che passa attraverso di esso.

Il display LCD 16x2 è un componente molto utile per la visualizzazione dei dati in molti progetti di Arduino. Esso consente di visualizzare fino a 16 caratteri per riga su una schermata di 2 righe.

Il display LCD utilizza una interfaccia chiamata I2C per comunicare con il microcontrollore di Arduino. 

I2C è un'interfaccia di comunicazione a 2 fili che consente a più dispositivi di comunicare tra loro utilizzando lo stesso bus di dati e di clock. Ciò significa che è possibile collegare fino a 128 dispositivi diversi utilizzando solo 2 pin del microcontrollore.

L'importanza del modulo I2C nei progetti di Arduino è dovuta alla sua semplicità d'uso e alla sua flessibilità. Grazie all'utilizzo dell'I2C, è possibile collegare molti dispositivi diversi al microcontrollore senza dover utilizzare un gran numero di pin. Ciò rende possibile creare progetti più complessi con meno componenti, risparmiando spazio sulla scheda di sviluppo e rendendo più facile il cablaggio.

Inoltre, poiché molti dispositivi utilizzano l'interfaccia I2C, è facile trovare librerie per Arduino che gestiscano la comunicazione con questi dispositivi, il che rende ancora più semplice l'utilizzo dei componenti nei progetti.

Esso è un componente molto versatile e può essere utilizzato in molti progetti diversi, come la creazione di un contatore, un cronometro, una visualizzazione della temperatura e dell'umidità, un indicatore di stato per un sistema di automazione domestica e molto altro ancora.

Il display può essere alimentato a 5V o 3.3V a seconda del modello scelto e può essere controllato utilizzando solo 2 pin del microcontrollore, uno per il bus di dati (SDA) e uno per il bus di clock (SCL). 
Ciò significa che è possibile utilizzare il display LCD 16x2 con una vasta gamma di microcontrollori, tra cui Arduino, Raspberry Pi, PIC, AVR e molti altri ancora.

Per utilizzare il display LCD 16x2 con Arduino, è necessario utilizzare una libreria specifica per gestire la comunicazione I2C tra il display e il microcontrollore. 
Ci sono molte librerie disponibili online, tra cui la libreria LiquidCrystal_I2C, che è molto facile da utilizzare e include molte funzioni per gestire il display.

Notiamo nelle immagini qui sotto, la quantità di pin utilizzati senza usare il modulo I2C:

Ora osserviamo quest'altra immagine con il modulo I2C collegato:



Possiamo notare la quantità di pin risparmiati.


Si può dire che il display LCD 16x2 con interfaccia I2C è un componente molto utile e versatile per la visualizzazione dei dati in molti progetti di Arduino. Grazie alla sua semplicità d'uso e alla sua flessibilità, è possibile creare progetti più complessi con meno componenti, rendendo più facile il cablaggio e il funzionamento. 
Inoltre, l'utilizzo di librerie specifiche per gestire la comunicazione I2C rende ancora più semplice l'utilizzo del display LCD 16x2 con Arduino.

Ecco un esempio di codice per Arduino che utilizza la libreria LiquidCrystal_I2C per visualizzare caratteri casuali sul display LCD 16x2:


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // Crea un'istanza del display LCD con indirizzo I2C 0x27, 16 colonne e 2 righe

void setup() {
  lcd.init(); // Inizializza il display
  lcd.backlight(); // Accende la retroilluminazione
  randomSeed(analogRead(A0)); // Inizializzazione del generatore di numeri casuali
}

void loop() {
  lcd.clear(); // Pulisce il display
  for (int i = 0; i < 16; i++) { // ciclo per stampare 16 caratteri casuali
    char randomChar = random(33, 127); // genera un carattere casuale tra 33 e 126
    lcd.print(randomChar); // stampare il carattere casuale
  }
  delay(1000); // aspetta 1 secondo
}

In questo esempio, la prima riga include la libreria Wire.h, che è necessaria per l'utilizzo dell'interfaccia I2C, e la libreria LiquidCrystal_I2C.h per gestire la comunicazione con il display.

Nella seconda riga, creiamo un'istanza del display LCD con l'indirizzo I2C 0x27, 16 colonne e 2 righe.

Nella funzione setup(), utilizziamo la funzione 'lcd.init()' per inizializzare il display e la funzione 'lcd.backlight()' per accendere la retroilluminazione. Inoltre, la funzione 'randomSeed(analogRead(A0))' serve per inizializzare il generatore di numeri casuali utilizzando un valore letto dall'ingresso analogico A0.

Nella funzione loop() utilizziamo la funzione 'lcd.clear()' per pulire il display e un ciclo for per stampare 16 caratteri casuali generati dalla funzione 'random(33, 127)' che genera un numero intero casuale tra 33 e 126, rappresentante i codici ASCII stampabili. Ogni carattere generato viene stampato con la funzione 'lcd.print()'.

Dopo la stampa, un ritardo di 1 secondo è utilizzato per lasciare il tempo di visualizzare i caratteri generati.

1 commento: