Tabla de contenido:

Monitor de temperatura y humedad: 6 pasos (con imágenes)
Monitor de temperatura y humedad: 6 pasos (con imágenes)

Video: Monitor de temperatura y humedad: 6 pasos (con imágenes)

Video: Monitor de temperatura y humedad: 6 pasos (con imágenes)
Video: Arduino desde cero en Español - Capítulo 7 - Temperatura y Humedad ambiente con DHT22 o DHT11 🌡️ 2024, Noviembre
Anonim
Monitor de temperatura y humedad
Monitor de temperatura y humedad
Monitor de temperatura y humedad
Monitor de temperatura y humedad

En este instructivo, le mostraré cómo hacer su propio monitor de temperatura y humedad para su sala de estar. El dispositivo también cuenta con capacidades WiFi, con el fin de registrar los datos en un servidor remoto (por ejemplo, una Raspberry Pi) y acceder a ellos más tarde a través de una sencilla interfaz web.

Las partes principales del dispositivo son un microcontrolador ESP8266, un sensor de temperatura y humedad DHT11 y una pantalla LCD de 16x4 caracteres. El proyecto es completamente de código abierto, así que siéntase libre de descargar el esquema, el diseño de la placa y los archivos de diseño para el gabinete y realizar los cambios que desee.

Paso 1: herramientas y piezas

Herramientas y repuestos
Herramientas y repuestos
Herramientas y repuestos
Herramientas y repuestos
Herramientas y repuestos
Herramientas y repuestos
Herramientas y repuestos
Herramientas y repuestos

Para construir el monitor, necesitará las siguientes partes:

1 x ESP-12F [2 €] - Hasta donde yo sé, ESP-12E y ESP-12F son básicamente idénticos, con la diferencia de que ESP-12F tiene una mejor antena.

1 x Sensor de temperatura y humedad DHT11 [0,80 €] - El DHT22 también funcionará, pero será necesario realizar algunos cambios en el modelo 3D de la carcasa, el DHT22 también es un poco más caro.

1 x LCD de 16x4 caracteres 5V [3.30 €] - Sí, necesitará uno de 5V ya que el PCB está diseñado para que el LCD se alimente directamente de 5V en lugar del regulador de voltaje. Esto se hizo para reducir la carga en el regulador de voltaje, pero también porque las pantallas de 5V tienden a ser más baratas. Pero no se preocupe, aunque el ESP8266 funciona a 3,3 V, seguirá funcionando bien.

1 x Regulador de voltaje LD1117V33 SMD, también conocido como LD33 (paquete SOT223) [0,80 €]

Condensador SMD cerámico 1 x 100nF (paquete 0603)

Condensador SMD de tantalio de 1 x 10uF (paquete 3528)

1 resistencia SMD de 10 K (paquete 0805)

1 olla recortadora de 10 K (orificio pasante)

1 resistencia SMD de 47 Ω (paquete 0805): esto es solo para limitar la corriente que va a la luz de fondo de la pantalla LCD. Siéntete libre de experimentar con diferentes valores de resistencia y elige la intensidad que prefieras.

1 x Interruptor momentáneo SMD [0.80 €] - El particular que utilicé es este, pero puedes usar cualquier interruptor momentáneo que desees con la misma huella. También pude encontrar los mismos interruptores en eBay por menos al obtener más de uno.

1 x conector DC de 5,5x2,1 mm (montaje en panel) [0,50 €] - El que utilicé tiene un diámetro de corte de panel de 8 mm y una longitud de 9 mm. Se puede encontrar fácilmente en eBay buscando "Conector de CC de montaje en panel" (consulte la imagen adjunta).

1 x 2,54 mm (100 mil) Encabezado de clavija macho de 40 pines (orificio pasante)

1 x 2,54 mm (100 mil) Cabezal de clavija hembra mecanizado de 40 pines (orificio pasante)

1 puente de 2,54 mm (100 mil): es el mismo que se utiliza en las placas base de las computadoras.

4 pernos M3 de 8 mm

4 insertos roscados M3 de 4x4 mm: se pueden encontrar fácilmente buscando "Insertos de cobre y latón a presión M3" en eBay (ver imagen adjunta).

4 tornillos M2 de 12 mm

4 x tuercas M2

1 x cable USB tipo A a 5,5x2,1 mm DC Plug [1,5 €] - Esto le permitirá alimentar su dispositivo desde un cargador de teléfono estándar o prácticamente cualquier computadora con un puerto USB. El dispositivo solo consume 300 mA en el peor de los casos y 250 mA en promedio, por lo que incluso un puerto USB 2.0 servirá.

1 x PCB: el grosor de la placa no es crítico, así que opte por 1,6 mm, que suele ser la opción más barata con la mayoría de los fabricantes de PCB.

3 x piezas de cable trenzado (aproximadamente 60 mm cada uno)

3 x piezas de tubería termorretráctil (aproximadamente 10 mm cada una)

Y las siguientes herramientas:

Soldador

Convertidor de USB a serie: lo necesitará para programar el ESP8266 en la placa.

Destornillador Phillips y / o llave hexagonal: según el tipo de tornillos que utilice.

Impresora 3D: si no tiene acceso a una impresora 3D, siempre puede usar una caja de proyecto de plástico genérica y hacer los recortes usted mismo con una Dremel. Las dimensiones internas mínimas para dicha caja deberán ser de 24 mm de altura, 94 mm de longitud y 66 mm de ancho. También necesitará utilizar separadores M2 de 8 mm para montar la pantalla LCD.

Dremel: solo es necesario si no opta por la carcasa impresa en 3D.

Paso 2: hacer la PCB

Haciendo el PCB
Haciendo el PCB
Haciendo el PCB
Haciendo el PCB
Haciendo el PCB
Haciendo el PCB

El primer paso es hacer la PCB. Puede hacerlo grabándolo usted mismo o simplemente yendo al sitio web de su fabricante de PCB favorito y haciendo un pedido. Si no planea realizar ningún cambio en el diseño de la placa, simplemente puede tomar el archivo ZIP que contiene los archivos gerber adjuntos en este paso y enviarlo directamente al fabricante. Sin embargo, en caso de que desee realizar cambios, aquí puede encontrar el esquema de KiCAD y los archivos de diseño de la placa.

Después de poner las manos en las placas, es hora de soldar los componentes. Esto debería ser bastante sencillo, pero hay algunas cosas que deben tenerse en cuenta. Primero, no proceda a soldar la PCB en el encabezado de la pantalla LCD todavía, esto deberá hacerse durante el ensamblaje final debido a la forma en que se diseñó el gabinete. Si está haciendo su propio cerramiento, no dude en ignorar ese consejo.

El conector U3 es donde se conectará el sensor DHT11. Idealmente, debería utilizar un cabezal de clavija hembra mecanizado en ángulo de 90 ° para ese propósito. Pero si no eres capaz de encontrar uno, solo consigue uno recto y dóblalo tú mismo. Si lo hace más tarde, los cables del DHT11 también serán un poco cortos, por lo que tendrá que soldar algunas extensiones. La distancia entre el cabezal del pin y el sensor una vez conectado debe ser de aproximadamente 5 mm.

La razón por la que desea utilizar un cabezal de clavija mecanizado es porque los orificios son más pequeños en comparación con los encabezados de clavija hembra normales. Por lo tanto, los cables del sensor pueden asentarse firmemente creando una conexión sólida. Pero también puede intentar soldar el DHT11 en una pieza de cabezal de clavija macho y conectarlo de esa manera a un encabezado de clavija hembra en ángulo regular, que debería funcionar igual de bien.

Paso 3: hacer el recinto

Haciendo el recinto
Haciendo el recinto
Haciendo el recinto
Haciendo el recinto
Haciendo el recinto
Haciendo el recinto
Haciendo el recinto
Haciendo el recinto

Ahora que la PCB está soldada, es hora de hacer la carcasa. Hay dos partes diferentes que deben imprimirse, el cuerpo principal del gabinete y la tapa. La tapa también cuenta con orificios de montaje para colocarla en la pared.

Ambas partes se pueden imprimir con una boquilla estándar de 0,4 mm a una altura de capa de 0,2 mm; en mi caso, el tiempo de impresión fue de aproximadamente 4 horas para ambas partes combinadas. Sin embargo, la tapa no requiere ningún soporte, la parte principal del armario sí, principalmente la parte debajo de los tornillos. Después de imprimir, tenga mucho cuidado al quitar los soportes, logré romper uno de los separadores de la pantalla LCD mientras hacía eso y tuve que volver a pegarlo con superglue.

El gabinete está diseñado en FreeCAD, por lo que si desea realizar algún cambio, debería ser bastante sencillo. Los archivos STL para imprimir el gabinete, así como los archivos de diseño de FreeCAD, se pueden encontrar en Thingiverse.

Paso 4: Montaje del monitor

Con el gabinete impreso, es hora de armar todo. Primero, coloque la pantalla LCD dentro de la carcasa y deslícela hacia la izquierda, de modo que quede un espacio entre ella y el orificio del sensor.

Imagen
Imagen

A continuación, coloque el PCB encima de él, con el sensor ya conectado en el encabezado del pin.

Imagen
Imagen

Después de eso, empuje el sensor en el orificio, deslice la pantalla LCD a su posición e inserte la PCB en el encabezado del pin. Ahora fije la pantalla LCD en su lugar usando tuercas y pernos M2, y suelde la PCB en el cabezal de clavija.

Imagen
Imagen

A continuación, coloque el conector de alimentación en su lugar, conecte algunos cables y suelde sus otros extremos a la PCB. El uso de algunos tubos termorretráctiles aquí también sería una buena idea.

Imagen
Imagen

El último paso es instalar los insertos roscados de metal para que la tapa se pueda atornillar en su lugar con pernos M3. Para ese propósito, necesitará usar su soldador para calentarlos, de modo que puedan introducirse en los orificios. Puede echar un vistazo a este instructivo si necesita más información sobre cómo agregar hilos de metal a sus impresiones 3D.

Imagen
Imagen

Paso 5: Configurar el servidor

Configurar el servidor
Configurar el servidor

Antes de cargar el firmware en el ESP8266, hay una cosa más que debe hacerse, que es configurar un servidor para registrar los datos recibidos por el dispositivo. Para ese propósito, puede usar prácticamente cualquier máquina Linux que desee, desde una Raspberry Pi en su red privada hasta una gota de DigitalOcean. Fui con el último, pero el proceso es prácticamente el mismo sin importar lo que elijas.

Instalación de Apache, MySQL (MariaDB) y PHP

Primero necesitamos configurar LAMP, o en otras palabras, instalar Apache, MySQL (MariaDB) y PHP en el servidor. Para eso, necesitará usar el administrador de paquetes de su distribución, por el bien del ejemplo, usaré apt, que es el administrador de paquetes utilizado por casi cualquier distribución basada en Debian, incluida Raspbian.

actualización de sudo apt

sudo apt instalar apache2 servidor mysql cliente mysql php libapache2-mod-php php-mysql

Una vez hecho esto, si coloca la dirección IP de su servidor en la barra de direcciones de su navegador, debería poder ver la página predeterminada de Apache.

Configurando la base de datos

Ahora necesitamos una base de datos para registrar los datos. Primero, conéctese a MySQL como root ejecutando, sudo mysql

Y cree la base de datos y un usuario con acceso a ella de la siguiente manera, CREAR `sensores` DE BASE DE DATOS

USE `sensores`; CREATE TABLE `temperature` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; CREATE TABLE `humedad` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; CREAR USUARIO '[nombre de usuario]' @ 'localhost' IDENTIFICADO POR '[contraseña]'; OTORGAR TODOS LOS PRIVILEGIOS DE 'sensores'. * A 'sensores' @ 'localhost'; SALIDA

Asegúrese de reemplazar [nombre de usuario] y [contraseña] con el nombre de usuario y la contraseña reales del usuario de MySQL que desee. Además, anótelos porque los necesitará para el siguiente paso.

Configuración de los scripts de la interfaz web y de registro

Cambie al directorio / var / www / html, que es la raíz del documento del host virtual predeterminado de Apache, elimine el archivo HTML que contiene la página web predeterminada y descargue los scripts de registro y de la interfaz web que contiene.

cd / var / www / html

sudo rm index.html sudo wget https://raw.githubusercontent.com/magkopian/esp-arduino-temp-monitor/master/server/log.php sudo wget https://raw.githubusercontent.com/magkopian/esp- arduino-temp-monitor / master / server / index.php

Ahora edite el script de registro usando nano, sudo nano log.php

Deberá reemplazar el [nombre de usuario] y la [contraseña] con el nombre de usuario y la contraseña del usuario de MySQL que creó en el paso anterior. Además, reemplace la [clave del cliente] con una cadena única y tome nota de ella. Esto se utilizará como contraseña para que el monitor pueda autenticarse en el servidor.

Finalmente, edite el index.php con nano, sudo nano index.php

y reemplace el [nombre de usuario] y la [contraseña] con el nombre de usuario y la contraseña del usuario de MySQL como lo hizo con el script de registro.

Configuración de HTTPS (opcional)

Esto puede ser opcional, pero si la conexión entre el ESP8266 y el servidor es a través de Internet, se recomienda encarecidamente utilizar algún cifrado.

Lamentablemente, no puede seguir adelante y usar algo como Let's Encrypt para obtener un certificado. Esto se debe a que, al menos en el momento de la escritura, la biblioteca de cliente HTTP para ESP8266 aún requiere que la huella digital del certificado se proporcione como segundo argumento al llamar a http.begin (). Esto significa que si usa algo como Let's Encrypt, tendrá que actualizar el firmware al chip cada 3 meses para actualizar la huella digital del certificado después de cada renovación.

Una forma de evitarlo sería generar un certificado autofirmado que caduca después de mucho tiempo (por ejemplo, 10 años) y mantener el script de registro en su propio host virtual con su propio subdominio. De esa manera, puede tener la interfaz web para acceder a los datos en un subdominio separado, que utilizará un certificado adecuado de una autoridad confiable. El uso de un certificado autofirmado en este caso no es un problema de seguridad, ya que la huella digital del certificado que lo identifica de forma única estará codificada en el firmware y el certificado solo será utilizado por el ESP8266.

Antes de comenzar, asumiré que ya posee un nombre de dominio y puede crear subdominios en él. Entonces, para generar un certificado que caduque después de 10 años, ejecute el siguiente comando y responda las preguntas.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa: 2048 -keyout /etc/ssl/private/sensors.key -out /etc/ssl/certs/sensors.crt

Como se trata de un certificado autofirmado, lo que responda en la mayoría de las preguntas no importa demasiado, a excepción de la pregunta que solicita el nombre común. Aquí es donde deberá proporcionar el subdominio completo que se utilizará para este host virtual. El subdominio que proporcionará aquí deberá ser el mismo que el nombre del servidor que establecerá más adelante en la configuración de su host virtual.

A continuación, cree una nueva configuración de host virtual, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

con los siguientes contenidos, ServerName [subdominio] DocumentRoot / var / www / sensers SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opciones + FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG-_DIR} error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-access-ssl.log combinado

Nuevamente, asegúrese de reemplazar el [subdominio] con el mismo subdominio que utilizó con el certificado. En este punto, deberá deshabilitar el host virtual predeterminado de Apache, sudo a2dissite 000-predeterminado

cambiar el nombre del directorio raíz del documento, sudo mv / var / www / html / var / www / sensores

y finalmente habilite el nuevo host virtual y reinicie Apache, sudo a2ensite sensores-ssl

sudo systemctl reiniciar apache2

Lo último que debe hacer es obtener la huella digital del certificado, porque deberá usarlo en el código de firmware.

openssl x509 -noout-huella dactilar -sha1 -inform pem -in /etc/ssl/certs/sensors.crt

El http.begin () espera que los delimitadores entre los bytes de la huella digital sean espacios, por lo que deberá reemplazar los dos puntos con espacios antes de usarlo en su código.

Ahora, si no desea utilizar un certificado autofirmado para la interfaz web, configure un nuevo subdominio y cree una nueva configuración de host virtual, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

con los siguientes contenidos, Nombre del servidor [subdominio] DocumentRoot / var / www / sensores #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomain]/privkey.pem #SSLCertificateC=es /letsencrypt/live/[subdomain]/chain.pem Opciones + FollowSymlinks - Índices AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl.log combinado

Asegúrese de reemplazar el [subdominio] con el subdominio que ha configurado para la interfaz web. A continuación, habilite el nuevo host virtual, reinicie Apache, instale certbot y obtenga un certificado para el nuevo subdominio de Let's Encrypt, sudo a2ensite sensores-web-ssl

sudo systemctl reiniciar apache2 sudo apt update sudo apt install certbot sudo certbot certonly --apache -d [subdominio]

Después de obtener el certificado, edite la configuración del host virtual nuevamente para descomentar las líneas SSLEngine, SSLCertificateFile, SSLCertificateKeyFile y SSLCertificateChainFile, y reinicie Apache.

Y ahora puede usar el primer subdominio que usa el certificado autofirmado para enviar los datos del ESP8266 al servidor, mientras que usa el segundo para acceder a la interfaz web desde su navegador. Certbot también se encargará de renovar automáticamente su certificado Let's Encrypt cada 3 meses, utilizando un temporizador systemd que debería estar habilitado de forma predeterminada.

Paso 6: Programación del ESP8266

Programando el ESP8266
Programando el ESP8266

Finalmente, lo único que queda por hacer es cargar el firmware en el microcontrolador. Para hacerlo, descargue el código fuente del firmware desde aquí y ábralo usando el IDE de Arduino. Deberá reemplazar [SSID] y [Contraseña] con el SSID y la contraseña reales de su red WiFi. También deberá reemplazar [ID de cliente] y [Clave de cliente] en la llamada a la función sprintf con las que utilizó en el script PHP en el servidor. Finalmente, deberá reemplazar el [Host] con el nombre de dominio o la dirección IP del servidor. Si está utilizando HTTPS, también deberá proporcionar la huella digital de su certificado como segundo argumento en la llamada de función de http.begin (). Expliqué cómo obtener la huella digital del certificado en la sección "Configuración de HTTPS" en el paso anterior.

A continuación, si aún no lo ha hecho, deberá instalar el paquete principal de la comunidad ESP8266 utilizando el Board Manager del IDE de Arduino. Una vez hecho esto, seleccione NodeMCU 1.0 (Módulo ESP-12E) en el menú de placas. A continuación, deberá instalar la biblioteca SimpleDHT utilizando el Administrador de bibliotecas. Finalmente, presione el botón Verificar en la esquina superior izquierda de su ventana IDE para asegurarse de que el código se compile sin errores.

Y ahora, finalmente es el momento de grabar el firmware en el microcontrolador. Para hacerlo mueva el jumper JP1 a la derecha, así GPIO0 del ESP8266 se conectará a tierra lo que habilitará el modo de programación. Luego, conecte su convertidor de USB a serie usando cables de puente al encabezado de programación que está etiquetado como P1. El pin 1 del encabezado de programación está conectado a tierra, el pin 2 es el pin de recepción del ESP8266 y el pin 3 es el de transmisión. Necesita la recepción del ESP8266 para ir a la transmisión de su convertidor de USB a serie, la transmisión a la recepción y, por supuesto, la tierra a tierra.

Finalmente, encienda el dispositivo con 5V usando su cable USB a conector DC y conecte el convertidor USB a serie a su computadora. Ahora debería poder ver el puerto serie virtual donde está conectado el ESP8266, tan pronto como abra el menú de herramientas en su IDE. Ahora, simplemente presione el botón Cargar y listo. Si todo salió como se esperaba, debería poder ver las lecturas de temperatura y humedad en la pantalla LCD del dispositivo. Después de que el ESP8266 se conecte a su red y comience a comunicarse con el servidor, la fecha y hora actuales también deberían aparecer en la pantalla.

Después de unas horas, cuando el servidor haya recopilado una buena cantidad de datos, debería poder ver las tablas de temperatura y humedad visitando http (s): // [host] /index.php?client_id= [id del cliente]. Donde [host] es la dirección IP de su servidor o el subdominio que está usando para la interfaz web, y [id de cliente] la identificación de cliente del dispositivo, que si lo deja en su valor predeterminado, debería ser 1.

Recomendado: