Crea sito

Sensore di temperatura e umidità DHT22 + Arduino + Display LCD

In questo precendente articolo abbiamo visto come utilizzare il sensore DHT22 con Arduino e mandare i valori di umidità e temperatura sul Serial monitor. Ora vedremo invece come crivere i dati ricevuti dal sensore su un display LCD. INGREDIENTI: – 1x Arduino UNO – 1x Sensore DHT22

-1x Resistenza da 10 kΩ

-1x Bredboard

-1x Display LCD

-1x Potenziometro da 10 kΩ

-Cavetti vari

Il circuito da realizzare è il seguente:

DHT22 + Arduino + Display LCD frizting

La parte che riguarda solo il display LCD:

schema-LCD

Il potenziometro R5 collegato al pin V0 serve a regolare il contrasto del display, quindi possiamo impostarlo come vogliamo. Se colleghiamo il pin V0 direttamente a massa, avremo il contrasto massimo. Il pin LED+ invece, serve a regolare la luminosità, quindi si può mettere anche li un potenziometro oppure collegarlo direttamente a 5v per avere la luminosità massima. Nel nostro caso invece useremo un segnalo PWM mandato da Arduino per gestire la luminosità.

Lo sketch da caricare su Arduino:

//Creato da Mohamed Fadiga momodesine@hotmail.it

#include "LiquidCrystal.h" 
#include "DHT.h"
 
DHT dht(2, DHT22); //Imposta il modello di sensore e il pin di Arduino a cui è collegato
LiquidCrystal lcd(3,4, 5,6,7,8); //Imposta i pin di Arduino a quali sono collegati in pin del display (Rs,E,DB4,DB5,DB6,DB7)

int lum_pin=9; //il pin al quale è collegato LED+
byte lum_val=127; // il valore della luminosità. Può essere impostato da 0 (retroilluminazione spenata) a 255 (retroilluminazione massima)

void setup()
{
  pinMode(lum_pin,OUTPUT);
  analogWrite(lum_pin,lum_val);
  dht.begin();
  lcd.begin(16, 2);// imposto il numer di righe e colonne del display
  //creo il carattere ‘°’ per poter scrivere °C dopo il valore della temperatura
  byte deg[8] =
  {
    0b00011,
    0b00011,
    0b00000,
    0b00000,
    0b00000,
    0b00000,
    0b00000,
    0b00000
  };
  lcd.createChar(4,deg);
}

void loop()
{
  float h = dht.readHumidity(); //leggi il valore di temperatura
  float t = dht.readTemperature(); //leggi il valore di umidità
  lcd.setCursor(0,0);//metti il cursore sulla prima riga
  lcd.print("Temp:  ");
  if(isnan(t))lcd.print("Errore!");//se il valore di temperatura è NaN (Not a Number)
  else //altrimenti
  {
    lcd.print(t);
    lcd.write(4); //scrivi il carattere ‘°’
    lcd.print("C");
  }
  lcd.setCursor(0,1);//metti il cursore sulla seconda riga
  lcd.print("Umid:  ");
  if(isnan(h))lcd.print("Errore!");//se il valore di umidità è NaN (Not a Number)
  else
  {
    lcd.print(h);
    lcd.print(" %");
  }
}

28 thoughts on “Sensore di temperatura e umidità DHT22 + Arduino + Display LCD

    niklas
    on said:

    non ho capito da dove prendere il file DHT.h
    me lo potete dire?

    Gaetano Persico
    on said:

    Ho copiato e incollato tutto il file di questa pagina; credo che sia inclusa la scrittura di riferimento per la directory (spero di non sbagliare con i termini!) riferita al sensore, come il progetto precedente. Lo sketch nuovo mi dà queste scritture: ‘DHT’ does not name a type. Poi, la stringa: DHT dht(2, DHT22); //Imposta il modello … è evidenziata colorata gialla, e sotto la striscia nera dello sketch ci sono le seguenti frasi:
    sensoreTemperLCD.ino:2:17: error: DHT.h: No such file or directory
    sensoreTemperLCD:4: error: ‘DHT’ does not name a type
    sensoreTemperLCD.ino: In function ‘void setup()’:
    sensoreTemperLCD:10: error: ‘dht’ was not declared in this scope
    sensoreTemperLCD.ino: In function ‘void loop()’:
    sensoreTemperLCD:15: error: ‘dht’ was not declared in this scope.
    Dove ho sbagliato???

    Gaetano Persico
    on said:

    Ho dimenticato di dire che il circuito del sensore l’ho lasciato come era, non ho spostato nè tolto i fili. Ho solo aggiunto il potenziometro ed il display; quest’ultimo, ruotando il potenziometro cambia il contrasto, ma non si vede niente.

      Noobs
      on said:

      Ciao,
      è lo stesso problema che avevi con lo sketch che usa solo il sensore, cioè che non trova la libreria.
      lo sketch precedente funziona ancora?

        Gaetano Persico
        on said:

        Grazie per la risposta. Lo sketch precedente funziona benissimo. Non ho ancora capito come si inserisce la stringa di trasformazione da Farenight a Celsius, così come mi hai suggerito. Avevo rimandato il problema per dopo. Poi il fascino dell’impresa di vedere illuminarsi il display, mi sono lasciato andare al secondo progetto, Ma anche in quest’altro progetto, ho inserito la stringa #include “DHT.h” come seconda alla tua stringa iniziale di questa pagina e non funziona. Ma non è la stessa stringa già esistente? altrimenti dove la devo inserire? oppure mi sbaglio sul file da inserire? Ti ringrazio della pazienza. Ho pensato che se potessi allegare le immagini sarebbe più facile esporre gli errori. C’è questa possibilità comunicativa?

    Gaetano Persico
    on said:

    Questa volta ho copiato tutti dati in questa pagina, ho incollato il file di libreria #include così come vedi di seguito: //Creato da Mohamed Fadiga momodesine@hotmail.it
    #include “DHT.h”
    #include
    #include
    Mi dice “Caricamento Terminato”
    e sotto, nello spazio nero segue: Dimensione del file binario dello sketch: 5.992 bytes (su un massimo di 32.256 bytes)
    avrdude: stk500_getsync(): not in sync: resp=0x30
    Questa ultima scritta non appare se cambio la porta, ma il mio dispay non si illumina e non mi fa vedere nessun numero, tranne che, girando il potenziometro, emergono le due file di quadratini neri. Ho controllato più volta i collegamenti tra il display e arduino e stanno bene al loro posto; ho anche invertito i fili laterali del potenziometro. il contatto centrale del potenziometro l’ho messo al Vo del display (sarebbe il terzo, contanto da sinistra). Ricordo che in alcuni circuiti iniziali, con altri sensori, il display si illuminava tra il verde ed il giallo luminoso. Ora è scuro con rilievi di quadratini in nero se ruoto il potenziometro.

      Gaetano Persico
      on said:

      SCUSA! è FATTA! Ho ho chiuso tutto lo sketch, ho riaperto ed è comparsa la PORTA COM4, quella che utilizzavo anche con il solo sensore… e finalmente si è illuminato il dispay e segna la temp: 21.60 *C e Umid: 45.70 % MERAVIGLIOSO! Grazie della pazienza.

    Gaetano Persico
    on said:

    Ciao Noobs, è possibile fare apparire sul display la data e l’ora, oppure appartiene ad un altro progetto?

    Gaetano Persico
    on said:

    Grazie, a presto ti farò sapere.

      Gaetano Persico
      on said:

      Ciao Noobs, mi è arrivato il real time clock; ha 5 perni con le seguenti indicazioni: 1) VCC, 2) GND, 3) CLK, 4) DAT, 5) RST. Vorrei prendere l’iniziativa, ma riconosco solo le prime due sigle, il VCC dal display, che nel progetto del rilevatore temperatura, è collegato a +5v di arduino, ma sulla breadboard; e così il GND collegato da arduino alla breadboard. Gli altri tre perni si riferiscono all’orologio, ai dati ed al restart? dove li collego?

    pisolosempre
    on said:

    Ciao,
    ho scaricato, compilato, caricato e costruito il tutto. Il display si accende ma mi dice Temperatura 0°C e Umidità 0% !
    cosa significa? dove sto sbagliando??
    grazie per la risposta

    Hello I’m trying to build this project but the code that’s here will not run. could you e-mail me a code that will work? Thanks in advance Johnny.

    raspaol
    on said:

    mi da questo errore durante la verifica

    Arduino:1.6.5 (Windows 7), Scheda:”Arduino Uno”

    Opzioni di compilazione cambiate, ricompilo tutto

    Uso la libreria DHT nella cartella: C:\Program Files (x86)\Arduino\libraries\DHT (legacy)

    C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\DHT C:\Users\Portat\AppData\Local\Temp\build2356700916758134134.tmp\sketch_aug23d.cpp -o C:\Users\Portat\AppData\Local\Temp\build2356700916758134134.tmp\sketch_aug23d.cpp.o

    sketch_aug23d.ino:3:10: error: #include expects “FILENAME” or
    sketch_aug23d.ino:6:1: error: ‘LiquidCrystal’ does not name a type
    sketch_aug23d.ino: In function ‘void setup()’:
    sketch_aug23d.ino:16:3: error: ‘lcd’ was not declared in this scope
    sketch_aug23d.ino: In function ‘void loop()’:
    sketch_aug23d.ino:36:3: error: ‘lcd’ was not declared in this scope
    #include expects “FILENAME” or

    Gabriele
    on said:

    Ciao!
    complimenti per i tutorial, chiaro e conciso! sono riuscito a fare quello con il sensore alla prima e senza problemi.
    Ora volevo aggiungere il display..potresti gentilmente linkarmi dove poter comprare il display e il potenziometro? magari su amazon, ebay o qualsiasi altro sito dove non costi troppo 🙂
    Grazie in anticipo!

      Ciao,
      per il display ti consiglierei di prenderne uno seriale oppure I2C, che usano solo 2/3 fili.
      Però se vuoi usare quello che ho usato io, perchè vuoi seguire questo tutorial, allora basta che scrivi su ebay “arduino lcd HD44780”.
      Per quanto riguarda il potenziometro, anche quello basta che lo scrivi su ebay, però in quel caso mi sa che costa talmente poco che la spedizione costerà più del potenziometro stesso 😀

    pierluigi
    on said:

    Ciao complimenti per il progetto. Ho messo nella cartella di Arduino la libreria per il sensore DHT. Poi copio e incollo lo sketch nella ide di arduino ma quando vado a fare la verifica mi viene fuori questo errore:
    Property line ” in file C:\Program Files (x86)\Arduino\libraries\DHT\library.properties is invalid

    Errore durante la compilazione

    Cosa c’è che non va? Ho provato anche a togliere il file library.property ma mi vengono fuori moltissimi errori.
    Mi potresti aiutare per favore?
    Grazie ancora per la tua pazienza.
    Ciao
    Pierluigi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*