Termometru cu DHT22 si afisaj ST7735

In acest articol vom folosi un senzor DHT22 pentru a masura temperatura si umiditatea din mediul inconjurator. Acest senzor mai poate fi gasit si sub denumirea de AM2302. De asemenea putem folosi si o versiune mai putin performanta a acestui senzor marcata ca si DHT11.

Senzorul DHT22 (AM2302) are o precizie de + 0,5 grade Celsius pe scala -40...+80 grade Celsius si + 2% RH umiditate relativa pe scala 0...100%.

Senzorul DHT11 are in schimb o precizie mai mica, mai exact + 2 grade Celsius pe scala 0...50 grade Celsius si + 5% RH umiditate relativa pe scala 20...90%.

Eu am folosit un modul cu AM2302 (acest modul are inclus rezistorul de 10KiloOhm intre +5V si pinul de date. pinul de date l-am conectat la pinul D2 al Arduino iar display-ul LCD a fost conectat exact ca in acest articol. Dar se poate folosi si un DHT22/11 simplu, impreuna cu rezistorul aferent pomenit mai devreme, si va functiona fara probleme.

Poza cu modulul mai jos:

Pentru a putea folosi acest senzor va trebui sa folosim si libraria DHT-sensor-library, librarie scrisa de cei de la Adafruit si care se poate descarca de aici

Sketch-ul pentru a folosi doar senzorul (cu afisare pe terminalul serial a datelor citite) este urmatorul:

 

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float hum;
float temp; 

void setup() {
  dht.begin();
  Serial.begin(9600);
  Serial.println("Citire temperatura si umiditate cu senzorul DHT22");
  Serial.println("Temperatura:                 Umiditatea:");
  delay(1000);
}

void loop() {
  hum = dht.readHumidity();
  temp= dht.readTemperature();
  Serial.print(temp);
  Serial.print(" grade Celsius               ");
  Serial.print(hum);
  Serial.println(" % umiditate");
  delay(1000);
}

O poza cu terminalul serial este mai jos:

 

Un sketch in care afisarea se face pe display-ul LCD ST7735 este mai jos:

#include <TFT_ST7735.h>
#include <SPI.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float hum;
float temp; 

TFT_ST7735 tft = TFT_ST7735();
#define TFT_GREY 0x5AEB


void setup() {
  dht.begin();
  tft.init();
  tft.setRotation(2);
  tft.fillScreen(TFT_GREY);
  tft.setTextSize(1);
  
  tft.fillRect(2, 2, 122, 20, TFT_CYAN);
  tft.setCursor(4, 4, 2);
  tft.setTextColor(TFT_RED);  
  tft.println("Termometru ");
  
  tft.fillRect(2, 25, 122,20, TFT_CYAN);
  tft.setCursor(4, 27, 2);
  tft.setTextColor(TFT_RED);
  tft.print("cu DHT22");
  delay(2000); 
}

void loop() {
  hum = dht.readHumidity();
  temp= dht.readTemperature();
  
  tft.fillScreen(TFT_GREY);
  tft.setTextSize(1);
  
  tft.fillRect(2, 2, 122, 20, TFT_WHITE);
  tft.setCursor(4, 4, 2);
  tft.setTextColor(TFT_BLUE);  
  tft.println("Temperatura: ");
  
  tft.fillRect(2, 25, 122,20, TFT_WHITE);
  tft.setCursor(4, 27, 2);
  tft.setTextColor(TFT_BLUE);
  tft.print(temp);
  tft.print(" ");
  tft.drawCircle(43, 30, 2, TFT_BLUE);
  tft.print(" Celsius");
  
  tft.fillRect(2, 48, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(4, 52, 2);
  tft.print("Umiditate: ");  

  tft.fillRect(2, 75, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(4, 77, 2);
  tft.print(hum);
  tft.print(" %"); 

  tft.fillRect(2, 100, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(4, 102, 2);
  tft.print("electronicstore.ro"); 

  delay(2000);
}

Un video de prezentare oate fi vizualizat mai jos:

Autentificare