Termómetro

El sensor de temperatura y humedad DHT11 mide la temperatura entre 0 y 50 grados centígrados y con una precisión de 2ºC, así como la humedad relativa puede medirla entre los rangos del 20% al 80% con una precisión del 5%.

El DHT11 es un sensor muy limitado que podemos usar con fines de formación, pruebas, o en proyectos que realmente no requieran una medición precisa.

Por el contrario, el modelo DHT22 tiene unas características mucho más aceptables.

Medición de temperatura entre -40 a 125, con una precisión de 0.5ºC.
Medición de humedad entre 0 a 100%, con precisión del 2-5%.
Frecuencia de muestreo de 2 muestras por segundo (2 Hz).

Materiales:

Protoboard

Y unos cuantos cables.

Arduino Nano Atmega328P
DHT11
Pantalla OLED 0,96″ I2C 128×64

Esquema de conexión:

Código fuente:

// Incluimos librería Versió 1.2.3
#include "DHT.h"               //Libreri del sensor DHT11
#include <Wire.h>
#include <Adafruit_GFX.h>      //Nucleo de la librería gráfica.
#include <Adafruit_SSD1306.h>  //Librería para pantallas OLED monocromas de 128x64 y 128x32
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
 
#define OLED_RESET 0 
Adafruit_SSD1306 display(OLED_RESET);
  
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
 
#define DHTPIN A3         // Definimos el pin digital donde se conecta el sensor
#define DHTTYPE DHT11     // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE); // Inicializamos el sensor DHT11
 
void setup() {
  // Inicializamos comunicación serie
  Serial.begin(9600);
  
  // Comenzamos el sensor DHT
  dht.begin();
   
  //Inicializa pantalla con en la dirección 0x3C para la conexión I2C.
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);                                          
 
}
  
void loop() {
    // Esperamos 5 segundos entre medidas
  delay(5000);
  
  // Leemos la humedad relativa
  float h = dht.readHumidity();
  // Leemos la temperatura en grados centígrados (por defecto)
  float t = dht.readTemperature();
  t = t + 2;       // Le sumo 2 grados a la temperatura ya que hay una variación de +-2º
  // Leemos la temperatura en grados Fahreheit
  float f = dht.readTemperature(true);
  
  // Comprobamos si ha habido algún error en la lectura
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Error obteniendo los datos del sensor DHT11");
    return;
  }
  
  // Calcular el índice de calor en Fahreheit
  float hif = dht.computeHeatIndex(f, h);
  // Calcular el índice de calor en grados centígrados
  float hic = dht.computeHeatIndex(t, h, false);
 
  //TEXTO CON FUENTE PREDETERMINADA
  
  display.fillScreen(0);  //Limpiamos la pantalla
  
  display.setFont();     //Fuente por defecto -si no la hemos cambiado no es necesario seleccionarla
  
  display.setTextSize(1);        
  display.setTextColor(1,0);
  display.setCursor(0,0);
  display.println("Temperatura Grado C");
  display.setTextSize(2);
  display.setCursor(35,15);
  display.println(t);    // display.println(t,DEC);
  //display.print(" C");
  display.setCursor(0,25);
  display.setTextSize(1);
  //display.print("Grado C");
   
  display.display();             //Refrescamos la pantalla para visualizarlo
  delay(4000);
 
  display.fillScreen(0);         //Limpiamos la pantalla
  
  display.setFont();             //Fuente por defecto -si no la hemos cambiado no es necesario seleccionarla
  
  display.setTextSize(1);        
  display.setTextColor(1,0);
  display.setCursor(0,0);
  display.println("Humedad actual %");
  display.setTextSize(2);
  display.setCursor(35,15);
  display.println(h);       
  display.setCursor(0,25);
  display.setTextSize(1);
  //display.print("%");
   
  display.setTextSize(3);
  display.setTextColor(0,1);     //Color invertido
  display.setCursor(0,32);
  display.print("AaBbCcD");
  display.display();             //Refrescamos la pantalla para visualizarlo
  delay(4000);
   
 
  // Monitor serial
  
  Serial.print("Humedad: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Índice de calor: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
  
}

Librerias: