Estas notas presentan la implementación de un sensor de temperatura y humedad usando el DHT22, un display LCD de 16 caracteres y 2 líneas, y uno de los populares clones low-cost del Arduino Nano.  Arduino facilita las cosas en cuanto a sensores típicos se refiere. El IDE de Arduino ya contiene varios scripts con ejemplos básicos para distintos sensores; por otra parte, la comunidad de Arduino es muy activa y es fácil de encontrar ejemplos de los sensores.

Preliminares

En esta implementación, utiliza el ejemplo básico de HelloWorld de la librería ‘LiquidCristal’ que forma aparte de los ejemplos en el IDE (para más detalle, este es el link de Arduino – HelloWorld), y el ejemplo de uso de la librería dht; ésta tiene que ser instalada para usar los sensores DHTxx (se puede descargar desde el Arduino Playground para el DHT o en la sección de DHT en adafruit).

Se utiliza un clon low-cost del Arduino Nano que usa el chip CH340G  para la interfaz USB. El único paso extra es instalar su driver. Para el caso de Windows es muy sencillo y existen varios tutoriales que muestran cómo hacerlo, por ejemplo en el post de Jesus Ruben en Geek Factory, o el post de  samuel123abc en instructables. En mi caso, solo bajé el zip del driver (del este sitio de dinastiatecnologica ) y lo instalé desde el administrador de dispositivos para evitar abrir el ejecutable.

Conexiones

Las conexiones de los sensores se hicieron siguiendo los tutoriales de  Arduino – HelloWorld para el display, y el de Adafruit para usar el DHT. Todo se puede montar en una protoboard clásica sin problemas como se ve en la Figura 1. No hay mucho qué decir al respecto, solo que hay que poner atención con el display porque son varias conexiones. Los detalles de las conexiones precisas de los pins están escritas en el código.

tempsensornano_bb
Figura 1. Conexiones del display y sensor DHT22 al Arduino nano

Un par de detalles de la conexión del display:

  • Se utiliza un potenciometro de 10k pare regular el contraste. La terminales van a VCC y GND, y la terminal variable al pin 3 del display.
  • La resistencia entre VCC y el pin 15 del display sirve para encender el led de luz de fondo del display. Así que valores entre 220 ohms a 1k ohms pueden ser usados.

Un detalle de la conexión del sensor DHTxx:

  • El resistor utilizado entre VCC y el pin de datos es de 10k ohms, y funciona como un pull-up en la línea de datos. Si no se colocan, los datos no se leen correctamente.

Código

El código es muy corto y solo hay que verificar que todo este bien conectado.

/*
Electrocooking nov 2016 - Luchyam

Sensor de temperatura y humedad con display LCD 16 x 2 - v1.0

Se utiliza el sensor de temp y humedad en conjunto con el
- LCD Display - Hello World (modificado)

-- DISPLAY 16x2 ---
Conexiones :
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

Basado en:
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

Para más detalles de la librería del display y de su uso:

http://www.arduino.cc/en/Tutorial/LiquidCrystal

-- DHT22 ---
Conexiones :
* DHT22 data pin to digital pin 7

*/

#include <dht.h>
#include <LiquidCrystal.h>

dht DHT;

#define DHT_PIN 7 

// inicializa la libreria con el numero de los pins de la interface
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
//Para el display:
// set up del LCD y se especifican las dimensiones de la LCD
lcd.begin(16, 2);
}

void loop()
{
//Para el sensor de temp y humedad
int chk = DHT.read22(DHT_PIN); // usar DHT.read11(DHT_PIN) si se usa el dht11
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(DHT.temperature);
lcd.setCursor(12, 0);
lcd.print("C");

lcd.setCursor(0, 1);
lcd.print("Humd:");
lcd.setCursor(6, 1);
lcd.print(DHT.humidity);
lcd.setCursor(12, 1);
lcd.print("%");

delay(5000);
}

En funcionamiento

Una vez conectado a la alimentación, sólo es necesario ajustar el potenciometro de contraste pare visualizar bien los datos en el display. Se puede utilizar un cargador USB o una batería externa para ponerlo donde se quiera.

20161122_115913
Figura 2. Sensor de temperatura y humedad con display LCD 16×2
20161122_120051
Figura 3. Usando batería externa para alimentar el prototipo

Notas finales

El prototipo funciona, sin embargo, sería bueno reacomodar los pines del display y del DHT22 en el código para hacer más eficiente la distribución de las conexiones.