Vai al contenuto

Utente:ThaNigro/Arduino/Senosore Temperatura e Umidità

Da Wikiversità, l'apprendimento libero.

Rilevamento di temperatura e umidità

[modifica]

Il rilevatore di temperatura e luminosità utilizza Arduino Uno per rilevare la temperatura e il livello di umidità di un ambiente, il sensore DHT11.

Tramite un display LCD, verrà visualizzato un menù indipendente per ogni grandezza fisica, agendo su un pulsante che mostrerà un interfaccia differente ogni volta che viene premuto.

Descrizione del progetto

[modifica]
Display 16 linee x 2 righe
Sensore di umidità e temperatura DHT-11

Per la realizzazione di questo progetto occorrono:

  • un display LCD 16x2, con integrato I2C;
  • due pulsanti, per scegliere quale
  • grandezza fisica si vuole visualizzare;
  • il sensore di temperatura DHT-11;
  • un pulsante (con relativa resistenza di pull-down)

Schema elettrico

[modifica]

Schema di montaggio

[modifica]

Codice

[modifica]

il codice per il corretto funzionamento del progetto è quello descritto nel box sottostante:

Qui includo le librerie [SPIEGARE] e definisco le costanti e variabili.

#include <LiquidCrystal.h>                                   //libreria per il funzionamento del display LCD 16x2
                                                             //Library for the LCD display 16X2

#include <dht.h>                                             //libreria per il funzionamento del sensore DHT11
                                                             //Library for the DHT11 temperature and Humidity sensor
                                     
#define DHT11_PIN 7                                          //Numero del pin a cui è collegato il sensore DHT11
                                                             //defining the pin where the DHT11 is connected
dht DHT;
          
unsigned int menu = 0,menuMax = 1, menuButtonPin = 6;        //definizione di variabili per il funzionamento del processo di selezione del menu da visualizzare sul display LCD
                                                             //defining variables for the function that selects wich menu to display

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;  //definizione dei collegamenti del display LCD 16x2
                                                             //defining the pins for the connection of the LCD display

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Qui c'è l'inizializzazione del codice

void setup() {                                             
  Serial.begin(9600);                                        //Inizializzazione del monitor seriale || initializing serial monitor
  pinMode(menuButtonPin, INPUT);                             //definizione del pin a cui è collegato il pulsante come ingresso || defining the pin for connecting the pushbutton
  lcd.begin(16, 2);
}

void loop() {
  Serial.print(menuButtonPin);                               //stampa il valore di ingresso del punsante || displaying the value of the volue recieved from the pushbutton
  menuSelection();                                           //esecuzione della funzione di selezione del menu da visualizzare || executing the function for the menu selection
  switch(menu){                                              //analisi della variabile "menu" || analysing the "menu" variable
    case 0:                                                  //se "menu" è uguale a 0, viene visualizzato il menu della temperatura || if the value of the "menu" variable eqals to 0, the temperature menu is displayed
     lcd.setCursor(0,1);
     lcd.print("Menu 1:");
     lcd.setCursor(0,2);
     lcd.print("Temperatura: ");
     lcd.print(DHT.temperature);
    break;

    case 1:                                                  //se "menu" è uguale a 1, viene visualizzato il menu dell'umidità || if the value of the "menu" variable equals to 1 , the Humidity menu is displayed
     lcd.setCursor(0,1);
     lcd.print("Menu");
     lcd.setCursor(0,2);
     lcd.print("Umidità: ");
     lcd.print(DHT.humidity);
    break;

  }
}

void menuSelection(){                                        //definizione della funzione di selezione del menu || defining the menu selection function
  digitalRead(menuButtonPin);                                //lettura del valore di ingresso del pulsante || reading the incoming value from the pushbutton
  if(menuButtonPin == HIGH){                                 //se rilevato un valore di ingresso, aumenta di un unita la variabile "menu" || if recieved a signal, augmets the value of the "menu" variable of 1
    menu++;
  }
  else if(menu > menuMax){                                   //se il valore della variabile "menu" è maggiore della variabile "menuMax", reimposta il valore di "menu" a 0 || if the value of "menu" is higher than the value of "menuMax" reset the value of the "menu" variable to 0
    menu = 0;
  }
}

Conclusioni

[modifica]

Ricapitolando, questo progetto, tramite l'azione su un pulsante, visualizza su un dispay LCD 16x2, menu differenti per misurare relativamente temperatura e umidità.