Display lcd HD44780

postato in: Arduino, Articoli | 0

Arduinolcd-HD44780

 

Salve a tutti! In un post precedente, vi avevamo mostrato un componente da utilizzare insieme ad Arduino, ossia il sensore dht11, che è in grado di fornirci la temperatura dell'ambiente e l'umidità.
Come sensore può rivelarsi utile e potente, ma Arduino ha un piccolo difetto.
Come avrete potuto notare, in quel post, i dati sono stati inviati al computer tramite porta seriale RS232, e quindi erano visualizzabili solamente sul nostro computer. Questa è una cosa scomoda se vogliamo crearci un dispositivo che legga e ci mostri la temperatura e l'umidità. Per fortuna il mondo dell'elettronica è molto vasto, e in questo caso, ci viene in contro il display lcd HD44780.
Quindi in questo post vedremo come utilizzare questo display con Arduino, e faremo un piccolo progettino per utilizzarlo con il sensore dht11.

DISPLAY LCD HD44780
Ma vediamo più in dettaglio questo display.
Per la precisione, la sigla “HD44780” si riferisce al controllore e non al display stesso. Cosa vuol dire? Beh, per usare il display lcd, ossia per mostrare ad esempio una lettera in una posizione del display, non possiamo farlo direttamente, ma dobbiamo usare il controllore, ossia un dispositivo hardware che fa' da tramite tra il nostro programmino sul microcontrollore, e il display stesso. In sintesi, quando noi andremo a creare il nostro script, esso comunicherà con il controllore, che a sua volta dirà al display in che coordinate piazzare il carattere.
Questo piccolo dispositivo, come abbiamo appena descritto, è in grado di scrivere un carattere su un display lcd.
Esso ha molteplici pin di ingresso, per precisione 16 che sono descritti qui sotto:

 

  • Il primo pin è dedicato alla massa (Vss).
  • Il secondo pin è per l'alimentazione (Vcc), che genericamente viene messo a 5V, ma secondo me anche 3V può andare bene.
  • Il terzo pin è dedicato al contrasto, quindi viene collegato ad un'alimentazione che varia dai 2V ai -3V (Vee).
  • Il quarto pin è utilizzato per l'invio di un comando (R S).
  • Il quinto pin è utilizzato per la scrittura di dati o comandi (R W).
  • Il sesto viene utilizzato per l'inizio del ciclo di scrittura RS e RW.
  • Dal pin sette, fino al pin quattordici, vengono utilizzati come bus di dati.
  • Il quindicesimo pin viene collegato ad un'alimentazione per attivare la retroilluminazione, se presente.
  • Infine il sedicesimo pin lo colleghiamo a massa, per la retroilluminazione, anche qui se presente.

 

 

Ovviamente, se siete interessati, come ogni componente elettronico, anche questo microcontrollore ha un suo datasheet, che volendo potete consultare a questo link.

Qui sotto potete vedere una foto di questo display. I pin sono quelli che partono da sinistra nella parte superiore, quindi il primo pin sarà quello più a sinistra, fino ad arrivare all'ultimo, il sedicesimo.

 

display_lcd

 

Ma ora vediamo come integrare il nostro display lcd, con il sensore, utilizzando Arduino.

PIN UTILIZZATI
Come prima cosa, dobbiamo collegare i pin del display lcd e del sensore ad Arduino. Ma quali usare? E come collegarli?

Collegare pin del sensore
Iniziamo dalle cose semplici, ossia il sensore dht11. Per esso, oltre alla solita alimentazione, e alla solita massa, collegheremo il suo pin dei dati al pin 7 di arduino, (diversamente dal post precedente, che era stato utilizzato il pin 3).

Collegare pin del display
Per il display la cosa è più “complicata”, ma solamente perché esso ha più pin!
Non utilizzeremo tutti i pin del display, in particolare i pin 7, 8, 9 e 10 li lasceremo scollegati.

Per il resto andiamo in ordine:

  • Il primo pin del display, lo colleghiamo al GND di Arduino.
  • Il secondo pin del display, lo colleghiamo al 3.3V di Arduino.
  • Il terzo pin lo collegheremo in serie ad una resistenza da 100 OHM, e andrà collegato al GND di Arduino.
  • Il quarto pin del display, rispettivamente al dodicesimo di Arduino.
  • Il quinto pin del display, rispettivamente all'undicesimo.
  • Il sesto pin del display, rispettivamente al decimo.
  • L'undicesimo del display, andrà collegato al quinto.
  • Il dodicesimo del display, al quarto.
  • Il tredicesimo del display, al terzo.
  • Il quattordicesimo del display, al secondo.
  • Il quindicesimo pin, andrà in serie ad una resistenza da 100 OHM, e collegato al pin tredici.
  • Infine il sedicesimo pin del display, lo collegheremo al GND.

 

Ecco qui sotto lo schema elettrico di quanto appena detto:

 

schema_elettrico

Perfetto, ora che i collegamenti sono stati effettuati, possiamo passare allo script.

SORGENTE DA CARICARE SU ARDUINO

 

1 #include <dht11.h>
2 #include <LiquidCrystal.h>
3
4 LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
5 int pin_sensore = 7;
6 dht11 DHT;
7
8 int backLight = 13;
9
10 void setup()
11 {
12  pinMode(backLight, OUTPUT);
13  digitalWrite(backLight, HIGH);
14  lcd.begin(16,4);
15 }
16
17 void loop()
18 {
19  lcd.clear();
20  int ris = DHT.read(pin_sensore);
21  switch(ris){
22   case DHTLIB_OK:
23    stampaDati();
24    break;
25   case DHTLIB_ERROR_CHECKSUM:
26    lcd.setCursor(0,0);
27    lcd.print("Checksum error");
28    break;
29   case DHTLIB_ERROR_TIMEOUT:
30    lcd.setCursor(0,0);
31    lcd.print("Time out error");
32    break;
33   default:
34    lcd.setCursor(0,0);
35    lcd.print("Errore sconosciuto");
36  }
37  delay(10000);
38 }
39
40 void stampaDati(){
41  lcd.setCursor(0,0);
42  lcd.print("Umidita`: ");
43  lcd.print(DHT.humidity,1);
44  lcd.setCursor(0,1);
45  lcd.print("Temperatura: ");
46  lcd.print(DHT.temperature,1);
47  lcd.print(" C");
48 }

 

Ora commentiamo un po´ questo codice.
Come prima cosa includiamo le librerie che ci servono, ossia quelle per il display e per il sensore. Alla riga 4, utilizziamo la funzione LiquidCrystal definita in questo modo: LiquidCrystal(rs, rw, enable, d4, d5, d6, d7). Quindi, nel nostro script, rs corrisponde al pin 12 di Arduino, che ovviamente è collegato al pin del display lcd per l'invio del comando. Stesso identico discorso per il pin 11 dedicato alla funzione rw, il pin 10 per abilitare la comunicazione con il display e i pin 5, 4, 3 e 2 per l'invio dei dati.

Alla riga 5 salviamo all'interno della variabile “pin_sensore” il numero del pin di Arduino assegnato per i dati del sensore, e alla riga 6 dichiariamo una variabile di tipo “dht11” per avere i dati del sensore.

Alla riga 8, nella variabile “backLight” inseriamo il numero del pin di Arduino che è collegato al display per la retroilluminazione, ossia il pin 13.

Nella funzione “setup()”, inizializziamo il pin della retroilluminazione come pin di “OUTPUT” e lo impostiamo con una tensione alta grazie alla costante “HIGH”, e infine indichiamo le dimensioni del display, che nel nostro caso è un 16 colonne e 4 righe.

Il codice principale dello script sta nella funzione loop.
Come prima cosa, alla riga 19, diciamo di cancellare il display, attraverso la funzione “clear()”. Ora che è stato pulito, dobbiamo stamparci qualcosa, ossia i dati che ci fornisce il sensore, e li otteniamo alla riga 20 salvandoli nella variabile “ris”.

Nello “switch” verifichiamo il contenuto della variabile “ris”, esattamente come nel post sul sensore dht11, mentre, questa volta, al posto di inviare i dati al computer con la porta seriale, li invieremo al display.

Per fare questo, dobbiamo prima impostare la posizione del cursore, ossia dove vogliamo iniziare a scrivere, e dopo scrivere i dati. Il tutto viene effettuato tramite la funzione “setCursor(x, y)”, e la funzione “print("dati da scrivere")”.

Una volta usciti dallo “switch”, impostiamo un ritardo di 10 secondi tramite la funzione “delay(10000)”.

Ecco il risultato ottenuto:

 

prog_fine


CONCLUSIONI
Ora sappiamo come utilizzare sia il sensore di temperatura e umidità, e anche il display lcd, quindi ora potete mettere in pratica tutti i vostri progettini che avete in mente, utilizzando anche questi due fantastici componenti!
Vi ricordo, che se volete leggere altri post su Arduino, di andare a questo link.

 

FONTI:
- Immagini Joel Garia;
- Libreria sensore dht11;
- Display lcd HD44780;

Dottore in Informatica. Da sempre appassionato di Linux, reti informatiche, sicurezza e, in modo amatoriale, all'elettronica. Il mio intento è quello di trasmettere le mie conoscenze ad altri appassionati.

Lascia un commento