Termometro con display Nokia 5110 – 48 x 84 pixel

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

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
FunzioneNote
1VCCPositivo alimentazioneL'intervallo di alimentazione
è compreso tra 2,7 V e 3,3 V.
2GNDMassa
3SCEChip selectActive low
4RSTResetActive low
5D/CMode selectSelezionare tra la modalità di comando (LOW) e la modalità dati (HIGH).
6DN
(MOSI)
Serial data in
7SCLKSerial clock
8LEDAlim. 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.

Download Sketch

#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
  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.

Termometro display Nokia 5110

Termometro display Nokia 5110

Nello schema sottostate è riportato lo schema dei collegamenti.

Termometro display Nokia 5110

Termometro display Nokia 5110

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

Termometro display Nokia 5110

Download Sketch

#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 colore del testo
  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();
}