Termómetro e higrómetros digitales y online con Arduino
Última actualización
Última actualización
Podemos probar de crear un Arduino que envíe información a través de una interfaz web y que, a su vez, guarde información dentro de un servidor Linux.
El Github es el siguiente:
Placa Arduino con todo
4x cables mín.
Termo-higrómetro (DHT)
LED
Botón switch (single pole double throw, SPDT)
1x resistencia 220 Ohm
1x resistencia 10 kOhm
Primeramente empezaremos por diseñar la parte del circuito necesaria para toda la práctica, oseaser el sensor de temperatura y humedad junto con un botón switch con estados encendido/apagado por defecto y un LED que nos indicará ese estado para mayor comodidad.
Para la práctica deberemos tener en cuenta algunas cosas importantes de los componentes:
El LED tiene dos pines, el largo que deberá ir conectado a la resistencia y en serie con el puerto y el corto que deberá ir al GND.
El botón switch (SPDT) tiene tres pines da igual la orientación o el orden pero:
Los pines de los lados serán los dos estados (en nuestro caso encendido/3'3V y apagado/GND)
El pin central deberá ir conectado al puerto del Arduino y se conectará a uno u otro circuitos.
El termohigrometro (DHT):
El pin SDA es un pin de datos, que se utiliza para comunicarse con otros dispositivos. Este debe conectarse por resistencia al VCC que, a su vez, irá conectado al circuito de 3'3.
El pin NC (Not Connected Pin) es un tipo de pin que se encuentra en varios paquetes de circuitos integrados. Este pin no debe conectarse a ninguna de las conexiones del circuito.
Básicamente lo que hace el cogido es:
Inicializar variables en el setup.
En la función loop:
Revisar el valor del botón switch (que siempre será 1 si tiene electricidad o 0 si no tiene).
Si es positivo, enciende el LED e inicia la función de lectura del sensor que es la llamada "leerTempHum" y muestra un mensaje de información.
Iguala el valor del switch al lastSwitchValue, una variable de control.
Si se apaga el botón, apagará el LED y revisará que la variable de control no sea la misma que el valor del switch (0 en este caso).
A continuación lo que intentaremos es visualizar los datos a través de terminal (no solo por el monitor en serie del Arduino IDE) y, a partir de estos datos, exportarlo a un archivo de texto.
Ten cuidado, los puertos COM en Windows solo permiten una aplicación con la conexión por lo que deberás cerrar una aplicación u otra según te convenga.
En mi caso usaré el siguiente script con el terminal de Powershell en modo administrador (Ctrl+X
> Ejecutar Powershell como administrador) :
Para ejecutarlo recuerda guardarlo como leerScript.ps1
o .bat
. A través del terminal, accede a la carpeta donde se encuentra o pon la ruta absoluta al archivo:
Si te da algún error de permisos, puede ser por que tu sistema no permita la ejecución de scripts, prueba con la siguiente opción:
En otro orden de cosas, ¡recuerda también modificar la ruta del script en el código!
El script lee los datos de la conexión, los muestra por consola y los va añadiendo al archivo CSV separado por comas para luego intentar usar esos datos en la interfaz web.
Pulsa Ctrl+C para dejar de escribir el archivo.
Deberia tratar de automatizar este proceso!
A partir de un tutorial que vi, me pareció interesante ver como poder crear un servidor web con Arduino, encontré un código muy práctico para el tema y decidí probarlo sobre mi placa y con mis parámetros para ver si funcionaba.
Con este tutorial y código no solo se puede crear la web con HTML+CSS sino que también te permite embeber JavaScript e incluso modificar el estado de módulos (como LEDs) por web.
A priori no he modificado nada, solamente he cambiado los parámetros y quitado el tema de los LEDs.
Solamente ten en cuenta de añadir el archivo data.h
con el SSID y la contraseña del Wifi y poner el Monitor serie en 115200 bauds. Al iniciar el monitor debería darte la IP para conectarte al servidor siempre y cuando estés dentro de la misma red.
Dentro del archivo de data.h
he añadido el siguiente código de html/css/js:
El código de la pagina no carga, presupongo que es por la cantidad de información, probare con el código de la guía oficial. Sino puede ser la libreria de JS
Para esta práctica, me he basado en las siguientes guías:
El código lo puedes encontrar aquí:
Ya que el propio monitor serial de Arduino IDE no nos permite exportar los datos, deberemos hacerlo a través de otro terminal, como es el propio Powershell de Windows, , Putty o como podríamos hacer con interfaces Linux.
La fecha la saca con el comando Get-Date
y formateado como tu prefieras, la explicación y ejemplos los he sacado de . He decidido hacerlo así ya que Arduino solo permite sacar la fecha y hora actuales con un módulo específico y es más fácil de esta forma.
El código lo tienes en el Github:
Para el gráfico dinámico he usado la librería de , open-source y fácil de usar incluso para mi.