Breakout compacto DHT de temperatura y humedad para Raspberry Pi – ATtiny85 y DHT22/DHT11
Componentes de hardware: Atmel ATTiny85 × 1, Sensor de temperatura DHT22 × 1, Sensor de temperatura y humedad DHT11 × 1, Programador Tiny AVR de SparkFun × 1, Resistencia Adafruit 4.7K Ω × 3, Resistencia Adafruit 10K Ω × 1, Resistencia Adafruit 100 Ω × 1, LED azul difuso 3mm Adafruit × 1, Interruptor táctil Adafruit × 1, Header macho break-away 0.1″ 36-pin 1 pieza @ longitud 6, 1 pieza @ longitud 2 (total 8 pines) × 1, Jumper genérico (0.1″) × 1, Arduino UNO & Genuino UNO Opcional – usado para depuración y pruebas. × 1
Aplicaciones de software y servicios en línea: Microsoft Visual Studio 2015, Microsoft Windows 10 IoT Core, Arduino IDE
HISTORIA
Introducción
Los sensores DHT11 y DHT22 son populares para temperatura y humedad debido a su precisión a muy bajo coste. Un problema con ellos es que funcionan sobre un protocolo one-wire propietario que requiere temporización precisa. Estos sensores han demostrado ser difíciles de leer en placas con sistemas operativos no en tiempo real.
Hace tiempo, publiqué un artículo titulado “DHT11 /DHT22 Temperature Sensor” demostrando cómo usar el código de ejemplo C++ de Microsoft desde C# para leer estos sensores. La librería conseguía una lectura pero tuve que añadir lógica de reintento para hacerlo más fiable. Esto funcionó para la mayoría pero algunas personas tuvieron problemas para que funcionara consistentemente.
Dado el nivel de interés en usar estos sensores en Raspberry Pi ejecutando Windows 10 IoT Core, decidí crear una segunda opción que proporcione un método muy fiable de leer estos sensores manteniendo un bajo coste.
Visión general
El enfoque presentado aquí es conectar el sensor DHT a un ATtiny85 económico y configurarlo como dispositivo esclavo I2C. Esto se logra usando la librería TinyWireS y creando un conjunto de registros que pueden leerse y escribirse para interactuar con el dispositivo.
El dispositivo soporta las siguientes funciones:
- Intervalo de lectura configurable para especificar cada cuánto leer el sensor DHT. Por defecto, cada 2 segundos.
- Modo manual que desactiva el intervalo y toma una lectura a demanda.
- Umbrales superior e inferior de temperatura configurables que activan el pin de interrupción cuando la lectura actual está por encima o por debajo del umbral.
- Modo de guardado de configuración que permite restaurar ajustes configurados al encender o tras un reinicio.
- Reinicio de configuración que permite restablecer la configuración guardada a valores por defecto.
- Control de alimentación del sensor que permite habilitar/deshabilitar la alimentación al sensor para ahorrar energía.
- Dirección I2C programable. La dirección por defecto es 0x26, pero puede cambiarse via comando. El dispositivo recordará la dirección. Si se reinicia, la dirección vuelve a 0x26. La librería C# también incluye código para buscar el dispositivo en el bus I2C, así que no necesita saber la dirección para conectar.
- Selección de modelo DHT programable. El firmware por defecto usa DHT22, pero puede cambiarse enviando un comando al dispositivo para usar otro modelo. El modelo se guarda para que tras cada reinicio o ciclo de alimentación conserve el tipo de modelo a usar.
El código fuente
Hay tres conjuntos de código en este proyecto. El firmware principal para la placa, un sketch maestro de Arduino usado para probar y demostrar la placa conectada a un Arduino Uno, y la aplicación Windows 10 IoT que demuestra cómo usar el dispositivo desde la Raspberry Pi. Todo el código está disponible en el repositorio GitHub enlazado.
El dispositivo/circuito
El circuito es pequeño y usa solo unos pocos componentes económicos. El ATtiny85 puede comprarse en varios vendedores. Recomiendo conseguir unos cuantos ya que tienen muchos propósitos útiles.
El circuito tiene un header de seis pines que permite conectarlo a otro circuito o directamente a la Raspberry Pi. Los pines se definen como sigue:
- GND → Conecte esto a tierra en su circuito o al pin de tierra en su Raspberry Pi.
- RST → Este pin se usa para reiniciar o rebootear el dispositivo. Debe conectarse a 5V en operación normal. Para reiniciar, genere un pulso LOW momentáneo en este pin.
- INT → Este pin tiene dos propósitos. Cuando los umbrales están habilitados, este pin será HIGH cuando se supere un umbral y LOW en caso contrario. En modo ahorro de energía, este pin se usa para despertar el dispositivo generando un pulso HIGH momentáneo.
- SDA → Línea I2C SDA.
- SCL → Línea I2C SCL.
- 5V → Fuente de alimentación 5V.
También hay un header de dos pines donde se puede añadir un jumper para habilitar, o quitar para deshabilitar el LED a bordo.
Al utilizar esto en un proyecto mayor, el circuito del DHT Tiny puede fusionarse o embeberse en el circuito existente del proyecto. En ese caso, los pines del header y el LED son opcionales.
El circuito también puede construirse en una placa separada y conectarse a su Raspberry Pi con unos pocos cables o un cable de conexión.
Programar el ATtiny85
Cargue el sketch llamado DHT_Tiny_Breakout.ino en el ATtiny85 usando su programador AVR. Si no tiene programador, puede usar un Arduino Uno (o placa similar). Consulte uno o más de los artículos listados a continuación para ayuda.
- Programming ATtiny85 with Arduino Uno en Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
Uso el programador SparkFun Tiny AVR para cargar mi ATtiny85.
Ejecuto mi chip a 16 MHz. Vea mi artículo titulado “ATtiny @ 16MHz” para instrucciones sobre cómo hacerlo.
Al usar el ATtiny85, el sketch esclavo requiere la librería TinyWireS instalada en su carpeta de librerías. Esta librería puede descargarse desde https://github.com/rambo/TinyWire.
Montar el circuito en breadboard
El primer paso es poner el DHT Tiny en marcha en un breadboard. Usando un breadboard de medio tamaño, construya el circuito siguiendo el esquema y diagramas de breadboard incluidos en el proyecto.
Aquí hay un par de consejos para facilitarlo:
- Construya el DHT Tiny en su propio breadboard y luego use otro breadboard para la conexión entre el DHT Tiny y el Uno o Raspberry Pi.
- Se recomienda usar pines header porque facilita conectar y desconectar el DHT Tiny como una sola unidad.
- Si planea usar headers macho break-away estándar en el breadboard, necesitará ajustar el borde de plástico negro al centro de los pines para que quepa en el breadboard (ver imágenes). Use alicetes de punta fina para ajustar.
- Si tiene headers break-away 0.1″ extra-largos, úselos en su breadboard. Quédese con headers de tamaño normal si planea soldar componentes en PCB. Los extra-largos no se recomiendan para PCBs.
- Necesitará cables jumper hembra-hembra si usa pines header en el breadboard. Si no los tiene, omita los pines header y use cables jumper macho-macho entre las dos placas.
- Mantenga los cables alejados del chip tanto como sea posible para que sea más fácil meter los dedos y sacar el chip para programar.
A continuación se muestran algunas imágenes de la versión breadboard de mi DHT Tiny.
Conectar el Arduino Uno
Si está interesado en una prueba rápida, una demostración, o tiene problemas para que funcione con su Raspberry Pi, puede conectar el DHT Tiny a un Arduino Uno (o dispositivo similar).
- Conecte el pin GND a GND en el Uno.
- Conecte el pin 5V a 5V en el Uno.
- Conecte el pin RST a D4 en el Uno.
- Conecte el pin SDA a A4 en el Uno.
- Conecte el pin SCL a A5 en el Uno.
- Conecte el pin INT a D3 en el Uno y habilite el LED vía jumper.
Cargue y ejecute el sketch llamado DHT_Tiny_Master.ino. Este sketch mostrará salida en el Monitor Serie.
Al conectar I2C entre las dos placas es importante tener resistencias pull-up en las líneas SDA y SCL. En este circuito, hay dos resistencias de 4.7K Ω conectadas entre los pines y 5V.
A continuación se muestran algunas imágenes del DHT Tiny en breadboard conectado al Arduino Uno.
Conectar a la Raspberry Pi
Si está interesado en una prueba rápida, una demostración, o tiene problemas para que funcione con su Raspberry Pi, puede conectar el DHT Tiny a un Arduino Uno (o dispositivo similar).
- Conecte el pin GND a GND (pin 9) en la Raspberry Pi 2/3.
- Conecte el pin 5V a 5V (pin 2) en la Raspberry Pi 2/3.
- Conecte el pin RST a GPIO4 (pin 7) en la Raspberry Pi 2/3.
- Conecte el pin SDA a SDA (pin 3) en la Raspberry Pi 2/3.
- Conecte el pin SCL a SCL (pin 5) en la Raspberry Pi 2/3.
- Conecte el pin INT a GPIO17 (pin 11) y habilite el LED.
Al conectar I2C entre las dos placas es importante tener resistencias pull-up en las líneas SDA y SCL. En este circuito, hay dos resistencias de 4.7K Ω conectadas entre los pines y 3V3.
¡MUY IMPORTANTE! La placa DHT Tiny será alimentada por el pin 5V de la Raspberry Pi, pero las resistencias pull-up deben conectarse al pin 3V3 de la Raspberry Pi (3V3 está en pines 1 y 17).
A continuación se muestran algunas imágenes del DHT Tiny en breadboard conectado a la Raspberry Pi 3.
Ejecutar la aplicación Windows 10
Obtenga el código del repositorio GitHub enlazado al final del proyecto y descomprímalo en su ordenador. Abra el código fuente de la Aplicación Universal en Visual Studio 2015 y despliéguelo en la Raspberry Pi y láncelo desde la consola de administración o ejecútelo en modo depuración desde Visual Studio.
Si es la primera vez que ejecuta código desde Visual Studio para una aplicación Windows 10 IoT Core, eche un vistazo a estos artículos de Microsoft:
- Deploying an App with Visual Studio
- Windows Device Portal
Eche un vistazo a la demostración en vídeo a continuación para ver la aplicación corriendo en una Raspberry Pi 3 conectada al DHT Tiny.
Destacados de la aplicación
La aplicación UWP de Windows 10 es una aplicación de demostración que muestra todas las características del DHT Tiny. El código muestra la temperatura actual, humedad y otros valores de registros del dispositivo. La UI también proporciona una forma de cambiar la configuración del dispositivo incluyendo la dirección del dispositivo.
Librería DHT Tiny
El código de ejemplo usa una librería escrita para interactuar con el DHT Tiny. Esta librería está lista para usar y puede incluirse directamente en todas sus aplicaciones.
Obtener la librería desde NuGet
Si no quiere incluir el proyecto directamente en su aplicación, simplemente descargue la librería DHT Tiny desde NuGet usando el comando que se muestra a continuación. Abra la Consola del Administrador de Paquetes en Visual Studio y escriba el comando.
PM> Install-Package IoT.DhtTiny
Escanear el bus I2C en busca del dispositivo
La librería DHT Tiny incluye un método que buscará en el bus I2C cualquier dispositivo DHT Tiny y devolverá una lista de direcciones. Esta lista puede usarse para inicializar uno o más de los dispositivos encontrados. Esto es especialmente útil si cambió la dirección del dispositivo pero no recuerda a qué la configuró. Nota: el método callback es opcional.
// ***
// *** Enumerar dispositivos DHT Tiny en el bus i2c.
// ***
IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback);
// ***
// *** Método callback
// ***
private void FindAllDhtTinyCallback(I2cScanEventArgs e) {
int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d);
this.Status = string.Format("Locating devices [0x{0:X2}] [{1}%] [Found = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
Esquemáticos del DHT Tiny Breakout para Raspberry Pi
Demostración de software
Este vídeo demuestra tanto la Aplicación Universal corriendo en una Raspberry Pi 3 conectada al DHT Tiny en un breadboard.
[VÍDEO PRÓXIMAMENTE]
Crear el dispositivo final
La forma más fácil y rentable de crear la placa es usar una placa de prototipo PCB como la Perma-Proto Quarter-sized Breadboard PCB de Adafruit. La imagen de abajo muestra el breakout usando esta placa de prototipo. Nota: usé una Dremel para quitar las secciones de rail de alimentación de la placa.
Ver más: DHT Tiny Breakout para Raspberry Pi
Proceso de manufactura
- Monitorización profesional de temperatura con Raspberry Pi y DS18B20
- Construcción de una estación meteorológica exterior con Raspberry Pi 2 y ADS‑WS1
- Mida Sensores Analógicos en Raspberry Pi sin ADC Nativo
- Conectar sensor ultrasónico HC-SR04 a Raspberry Pi: guía práctica
- Los mejores accesorios para aprovechar al máximo tu Raspberry Pi
- Usar ADC MCP3008 para leer sensores analógicos con Raspberry Pi
- SIGHT: Gafas Inteligentes para Capacitar a Personas Ciegas
- SparkFun Qwiic HAT para Raspberry Pi – Guía Completa de Conexión
- Instalación de Windows 10 IoT Core en Raspberry Pi 3 Model B+: Guía Paso a Paso
- Construya su propio robot Raspberry Pi con el kit MonkMakes RRB2 – Guía detallada
- PiCy: Construya su propio mini robot alimentado por Raspberry Pi