Il display Nokia 5110 è uno schermo LCD grafico 48×84 pixel, inizialmente progettato per essere utilizzato come schermo sui vecchi telefoni cellulare. In questo caso è montato su un PCB facile da saldare.
Vediamo come utilizzare il display Nokia 5110 per creare un termometro, visualizzando i dati di temperatura rilevati da un sensore DS18B20
Il display utilizza il controller PCD8544, lo stesso utilizzato nel Nokia 3310 LCD. Si tratta di un controller / driver CMOS LCD a bassa potenza, progettato per pilotare un display grafico di 48 righe e 84 colonne.
Tutte le funzioni necessarie per il display sono fornite in un singolo chip, inclusa la generazione on-chip dell’alimentazione LCD e delle tensioni di polarizzazione, con conseguente minimo numero di componenti esterni e basso consumo energetico.
Il PCD8544 si interfaccia ai microcontrollori attraverso un’interfaccia bus seriale.
Caratteristiche:
Risoluzione: 48×84 pixel
Dimensioni PCB: 45 x 45mm
Indice
Tensioni di alimentazione
Esistono due diverse tensioni di alimentazione sul display LCD. La tensione di alimentazione più importante – VCC – fornisce i circuiti logici all’interno del display LCD. Il datasheet indica che dovrebbe essere compreso tra 2,7 e 3,3 V. In uno stato normale, il display LCD consumerà circa 6 o 7 mA.
La seconda alimentazione di tensione è necessaria per le retroilluminazione a LED sulla scheda. si tratta di retroilluminazione nella loro forma più semplice: quattro LED bianchi distanziati attorno ai bordi della scheda. Occorre inserire una resistenza di limitazione della corrente in serie con il pin “LED” o limitare l’alimentazione a 3,3 V max
L’interfaccia di controllo
Come abbiamo visto, in questo LCD è integrato un controller per display Philips PCD8544, che converte la massiccia interfaccia parallela dell’LCD grezzo in una seriale più facile da gestire.
Il PCD8544 è controllato tramite un’interfaccia seriale sincrona simile a SPI.
Ci sono linee di ingresso clock (SCLK) e dati (DN) e anche un input di selezione chip attivo (SCE) basso.
Oltre a queste tre linee seriali, c’è un altro input – D / C – che indica al display se i dati che sta ricevendo sono un comando o dati visualizzabili.
Il Pinout del modulo
Per interfacciarsi e alimentare il display LCD grafico, ci sono due connettori paralleli a 8 pin sopra e sotto di esso. Nella parte inferiore sono riportate le etichette per ciascuno dei pin.
Num. Pin | Nome pin | Funzione | Note |
---|---|---|---|
1 | VCC | Positivo alimentazione | L'intervallo di alimentazione è compreso tra 2,7 V e 3,3 V. |
2 | GND | Massa | |
3 | SCE | Chip select | Active low |
4 | RST | Reset | Active low |
5 | D/C | Mode select | Selezionare tra la modalità di comando (LOW) e la modalità dati (HIGH). |
6 | DN (MOSI) | Serial data in | |
7 | SCLK | Serial clock | |
8 | LED | Alim. LED retroill, | La tensione di alimentazione massima è 3,3 V. |
Collegamento del display
Vediamo ora Il display LCD, questo ha una tensione di ingresso massima di 3,6 V, quindi non possiamo collegare direttamente un Arduino standard da 5 V. Dobbiamo traslare i livelli utilizzando dei convertitori di livello per passare da 5 V a 3,3 V.
Sfortunatamente, il display LCD ha cinque ingressi di segnale da 3,3 V e gli shifter di livello hanno di solito al massimo quattro canali.
In questo caso si è inserito una resistenza limitatrice ad 10 kΩ sulla linea SCLK.
Per la linea di alimentazione dei led di retroilluminazione si utilizzerà la tensione di 5V con l’inserimento di una resistenza da 220 Ω .
Librerie di gestione
Per semplificare la gestione del display come sempre ci vengono in aiuto delle librerie.
Quelle da utilizzate sono due realizzare dalla Adafruit e per caricarle si utilizzerà la funzione fornita dall’IDE, vedere a tale proposito l’articolo Arduino – Tutorial, come installare una libreria
La prima è specifica per display, nel campo ricerca si inserirà “nokia 5110”
Oltre alla libreria relativa all’LCD, se non la si è già installata, si dovrà installare il core grafico Adafruit GFX che permette di tracciare cerchi, testo, rettangoli, ecc.
Nel campo ricerca inserire in questo caso “Adafruit GFX” in Arduino Library Manager oppure accedendo a questo link
Insieme a questa libreria, se non utilizzata, dovrete caricare la libreria denominata “Adafruit BusIO”
Primo test
Eseguiamo un primo test, colleghiamo il display come in figura, utilizzeremo i seguenti componenti:
SCHEMA DI COLLEGAMENTO
Sketch di test
Carichiamo ora lo sketch di test, se tutto andrà a buon fine, verrà mostrato un messaggio sul display.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 4 - LCD chip select (CS) // pin 3 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); void setup() { Serial.begin(9600); display.begin(); // esegue inizializzazione display.setContrast(50); //Regolazione contrasto display.clearDisplay(); // clears the screen and buffer // text display tests display.setTextSize(1); display.setTextColor(WHITE, BLACK); // Inverte il test display.setCursor(20, 0); display.print("ADRIROBOT"); display.setTextColor(BLACK); display.setCursor(10, 10); display.print("TEST DISPLAY"); display.setCursor(15, 20); display.print("NOKIA 5110"); display.display(); } void loop() { } |
Realizziamo un termometro
Proviamo ora a realizzare un termometro con il display Nokia 5110 che misuri la temperatura ambientale. Per il sensore utilizzeremo un sensore, si tratta di un modulo KY-001 su cui è presente il sensore DS18B20 , vedere per esempio un suo utilizzo nell’articolo KY-001 DS18B20 – Wemos D1 mini multi test shield
Il modulo fa parte della serie “37 In 1 Sensor Module Board Set Kit For Arduino” e consente di misurare la temperatura ambiente utilizzando il bus seriale digitale.
Poiché il sensore 18B20 utilizza il protocollo onewire, occorrerà caricare nell’IDE le relative librerie, una denominata onewire accoppiata con la libreria Dallas Temperature.
Nello schema sottostate è riportato lo schema dei collegamenti.
Per gestire il tutto abbiamo utilizzato un Nano (vedere articolo Scheda Nano V4 di Elegoo – Caratteristiche) montato su uno shield apposito denomimanto Funduino Nano (vedere articolo)
Sotto l’elenco completo dei componenti utilizzati
Alcune foto della realizzazione
Sketch temometro con display
Carichiamo ora lo sketch, e se tutto andrà a buon fine, verrà mostrato sul display, dopo un primo messaggio di presentazione il valore della temperatira misurata dal senore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> #include <OneWire.h> #include <DallasTemperature.h> // Data wire is plugged into pin 2 on the Arduino #define ONE_WIRE_BUS 2 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 4 - LCD chip select (CS) // pin 3 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); void setup() { Serial.begin(9600); display.begin(); // esegue inizializzazione display.setContrast(50); //Regolazione contrasto display.clearDisplay(); // clears the screen and buffer sensors.begin(); // IC Default 9 bit. // text display tests display.setTextSize(1); display.setTextColor(WHITE, BLACK); // Inverte il test display.setCursor(20, 0); display.print("ADRIROBOT"); display.setTextColor(BLACK); display.setCursor(0, 10); display.print("Termometro con"); display.setCursor(15, 20); display.print("NOKIA 5110"); display.display(); delay (3000); } void loop() { display.clearDisplay(); // clears the screen and buffer display.setTextSize(2); display.setCursor(0, 0); sensors.requestTemperatures(); // Invia il comando per leggere la temperatura display.print(sensors.getTempCByIndex(0)); display.print(" C"); display.display(); } |