Muestra la temperatura y humedad relativa de la habitación en pantalla OLED usando el sensor DHT22. Un proyecto fácil, corto y de pocos componentes.

Materiales necesarios

  • 1 Arduino Nano
  • 1 Sensor de temperatura DHT22 (también puedes usar DHT11).
  • 1 pantalla OLED 0.96″ (dos colores) 128×64 SSD1603
  • 1 Convertidor Voltaje DC-DC Step-Down (opcional).
  • 1 Conector CC para entrada de corriente de trasformador.

Sensor de temperatura y humedad DHT22

El DHT22 o también conocido como AM2302 es un sensor digital de temperatura y humedad relativa de buen rendimiento y bajo costo. Integra un sensor capacitivo de humedad y un termistor para medir el aire circundante, y muestra los datos mediante una señal digital en el pin de datos (no posee salida analógica).

En cuanto al hardware, solo es necesario conectar el pin VCC de alimentación a 3-5.5V, el pin GND a Tierra (0V) y el pin de datos a un pin digital (D2) en nuestro Arduino. El fabricante recomienda conectar una resistencia de 1k-10k en pull-up como se muestra en la imagen.

El pin número 3 no ha de utilizarse y en el datasheet consta como GND.

Quizá la única desventaja del sensor es que sólo se puede obtener nuevos datos cada 2 segundos, 0.5Hz. Cada sensor es calibrado en fabrica para obtener unos coeficientes de calibración grabados en su memoria OTP, asegurando alta estabilidad y fiabilidad a lo largo del tiempo. El protocolo de comunicación entre el sensor y el microcontrolador emplea un único hilo o cable que conectaremos al pin D2 del Arduino.

El DHT22 presenta mejores prestaciones respecto al sensor DHT11, como mejor resolución, en nuestro caso de 0.1 grados Celsius, mayor precisión y un empaque más robusto.

Pantalla OLED

Un OLED (Organic light-emitting diode) es un tipo de LED en el que la capa emisiva está formada por un compuesto orgánico que emite luz en respuesta a la electricidad.

Se comercializan unas pequeñas pantallas OLED de 0.96” listas para conectar a Arduino. Estas pantallas incorporan el controlador SDD1306 y tienen un tamaño muy reducido de 25mm x 14mm. Tienen una resolución de 128×64 pixels y son monocromáticas, aunque en nuestro caso usaremos unas que están fabricadas a dos colores (amarillo y azul).

Las pantallas OLED tienen la ventaja de tener un consumo muy bajo, en torno a 20mA, dado que solo se enciende el pixel necesario y no requieren de backlight. Esto es especialmente interesante en aplicaciones que funcionan con baterías.

La comunicación puede realizarse, según modelos, por bus SPI o por bus I2C por lo que es sencillo obtener los datos medidos.

En nuestro proyecto usaremos una pantalla I2C usando los pines SCL (A5) y SDA (A4) conectada a una alimentación directa de 5V aun que podría operar a 3.3V.

En la siguiente imagen vemos cómo se mostrará en pantalla los datos, siendo la barra amarilla superior la representación de la humedad en % y los números azules la temperatura ambiental expresada con un solo decimal.

Además, cuando se alcance una máxima o una mínima, se mostrará de forma destacable invirtiendo los colores de la pantalla.

Pantalla real.

Para la programación usaremos la librería de control de la pantalla SSD1306 en su versión I2C que precisa de la dirección del módulo que suele ser 0x3C, aunque puede variar según el modelo (resistencia en su parte posterior).

La pantalla cuenta con unos orificios para su sujeción que no son del todo cómodos, y para nuestro proyectos hemos fabricado una pieza especial que nos facilitará su colocación, como se muestra en la siguiente imagen.

Nótese la pieza que presiona la pantalla OLED.

Como vamos a usar un step-down,  podremos obtener 5Voltios estables desde cualquier entrada no superior de 28Voltios. Así pues, alimentaremos el sistema directo a la fuente, es decir, en este caso no es necesario alimentar arduino por el pin VIN, pues la corriente que obtendrá ya vendrá regulada y estable, y tomará la corriente por el pin 5V, evitaremos así exceso de calor en el interior del sistema que puede perjudicar la toma de muestras del sensor.

Feliz día de Reyes, espero que hayáis sido buenos.