Tabla de contenido:

Sensor de temperatura de la red doméstica: 7 pasos
Sensor de temperatura de la red doméstica: 7 pasos

Video: Sensor de temperatura de la red doméstica: 7 pasos

Video: Sensor de temperatura de la red doméstica: 7 pasos
Video: Arduino desde cero en Español - Capítulo 7 - Temperatura y Humedad ambiente con DHT22 o DHT11 🌡️ 2024, Noviembre
Anonim
Sensor de temperatura de la red doméstica
Sensor de temperatura de la red doméstica

Qué necesitas saber para hacer este proyecto:

Necesita saber sobre: - Algunas habilidades en electrónica (soldadura)

- Linux

- IDE de Arduino

(deberá actualizar placas adicionales en el IDE:

- Actualización / programación de una placa ESP a través del IDE de Arduino.

(hay algunos buenos tutoriales disponibles en la web)

Esto se puede hacer usando un Arduino Uno o usando un FTDI (adaptador usb a serie).

Usé mi Uno porque no tenía ningún puerto serie en mi PC ni tenía un FTDI

Paso 1: Ve de compras

Ir de compras
Ir de compras

¿Qué necesitarás para que esto suceda?

Para el sensor digital de temperatura y humedad:

- Ya sea una placa de pruebas o una alternativa como prototipo de PCB, soldadura, soldador …

- Algo de alambre

- dos puentes

- una resistencia de 10k Ohm

- un ESP12F (otros modelos también pueden funcionar …)

- un DHT22 (un poco más caro que el DHT11 pero más preciso)

- 3 pilas recargables AA y un portapilas

- una cajita de plástico para poner tu proyecto

- En una etapa posterior, planeo agregar un HT7333 con dos capacitores de 10uF entre el paquete de baterías y el ESP

para estabilizar la tensión de entrada (VCC) a los 3,3 V recomendados, pero también para proteger el ESP de sobretensiones.

Para la parte de la red:

- Tu red WiFi doméstica

Para la parte del servidor:

- Cualquier sistema basado en Linux (¡siempre encendido!)

Usé una Raspberry Pi (que también uso como servidor para mis cámaras IP para exteriores).

- compilador gcc para compilar el código de su servidor

- paquete rrdtool para almacenar los datos y generar gráficos

- apache (u otro servidor web)

Su PC o computadora portátil favorita con Arduino IDE.

Paso 2: Configuración y antecedentes

Configuración y antecedentes
Configuración y antecedentes

En esta versión de un sensor de temperatura y humedad conectado a WiFi, por no decir IOT, utilicé un ESP12F, un DHT22 y un portapilas de 3 pilas AA con pilas recargables.

Cada 20 minutos, el ESP toma una medida del DHT22 y la envía a un servidor (una Raspberry Pi) a través de UDP en mi red WiFi doméstica. Una vez enviadas las mediciones, el ESP entra en un sueño profundo. Esto significa que solo el reloj de tiempo real del módulo permanece encendido, lo que resulta en un increíble ahorro de energía. Durante aproximadamente 5 segundos, el módulo requiere aproximadamente 100 mA, luego durante los 20 minutos de sueño profundo solo 150uA.

No quería usar ningún servicio basado en Internet porque tengo mi Raspberry Pi que siempre está encendida de todos modos y de esta manera tuve el placer de escribir la parte del servidor también.

En el servidor (una Raspberry Pi con Raspbian) he escrito un oyente UDP simple (servidor) que almacena los valores en un RRD simple. (Base de datos Round Robin con RRDtool de Tobias Oetiker).

La ventaja de RRDtool es que crea su base de datos una vez y el tamaño sigue siendo el mismo. Además, no es necesario tener un servidor de base de datos (como mySQLd) ejecutándose en segundo plano. RRDtool le brinda las herramientas para crear la base de datos y generar los gráficos.

Mi servidor crea los gráficos de forma periódica y muestra todo en una página http muy simple. ¡Puedo consultar mis lecturas con un navegador simple conectándome al servidor web Apache2 en la Raspberry Pi!

Finalmente, no tenía un FTDI (USB to Serial), así que usé mi Arduino UNO. Necesitas conectar el TX y el RX y el GND del ESP y el UNO. (Lo sé, tu instinto podría decirte que cruces RX y TX … lo intenté también, no funciona).

No hice una conversión de nivel (UNO: Alto = 5V pero ESP es básicamente un dispositivo de 3.3V … Hay algunos FTDI agradables en el mercado donde incluso puede seleccionar su nivel Alto para que sea 5 o 3.3V.

Mi circuito funciona con 3 pilas recargables AA, de hecho, 3 X 1,2 V. En una fase posterior, pretendo colocar un HT7333 entre el paquete de baterías y el circuito por seguridad; las baterías recién cargadas pueden tener más de 1,2 V y el ESP debe alimentarse con mín. 3V y máx. 3.6V. Además, si decido, en un momento de debilidad, poner pilas alcalinas (3 X 1,5 V = 4,5 V), ¡mi ESP no se freirá!

También consideré usar un panel solar de 10 cm x 10 cm, pero simplemente no valía la pena. Al hacer 3 mediciones por hora (básicamente 3 x 5 segundos a 100 mA máx. Y el resto del tiempo a 100 uA), espero alimentar mi circuito durante 1 año con las mismas baterías recargables.

Paso 3: La parte Arduino - ESP12

El Arduino - Pieza ESP12
El Arduino - Pieza ESP12
El Arduino - Pieza ESP12
El Arduino - Pieza ESP12

Hice este proyecto en diferentes pasos.

Hay varios enlaces que le ayudan a importar el ESP12 (también conocido como ESP8266) en el IDE de Arduino. (Tuve que usar la versión 2.3.0 en lugar de la última debido a un error que podría haberse resuelto mientras tanto …)

Comencé conectando el ESP, a través de mi Arduino UNO (solo se usa como puente entre mi PC a través de USB al Serial) a la interfaz serial ESP. Hay Instructables separados que explican esto.

En mi proyecto terminado, dejé los cables para conectarme al Serial en caso de que alguna vez necesite solucionar un problema.

Luego, debe conectar su ESP12 de la siguiente manera:

Pines ESP …

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Inicialmente intenté alimentar mi ESP desde 3.3V en el UNO, pero rápidamente pasé a alimentar mi ESP con una fuente de alimentación de banco, pero también puede usar su paquete de baterías.

GPIO0 Lo conecté con un jumper a GND para habilitar el parpadeo (= programación) del ESP.

Primera prueba: deje el puente abierto e inicie un monitor en serie en el IDE de Arduino (¡a 115200 baudios!).

Apague y encienda el ESP, debería ver algunos caracteres basura y luego un mensaje como:

Listo para Ai-Thinker Technology Co. Ltd

En este modo, el ESP actúa un poco como un módem pasado de moda. Necesita usar comandos AT.

Prueba los siguientes comandos:

AT + RST

y los siguientes dos comandos

AT + CWMODE = 3

OK

AT + CWLAP

Esto debería darle una lista de todas las redes WiFi en el área.

Si esto funciona, está listo para el siguiente paso.

Paso 4: Probar el ESP como un cliente de protocolo de tiempo de red (NTP)

Prueba del ESP como cliente de protocolo de tiempo de red (NTP)
Prueba del ESP como cliente de protocolo de tiempo de red (NTP)
Prueba del ESP como cliente de protocolo de tiempo de red (NTP)
Prueba del ESP como cliente de protocolo de tiempo de red (NTP)

En el IDE de Arduino, en Archivo, Ejemplos, ESP8266WiFi, cargue NTPClient.

Se necesitan pequeños ajustes para que funcione; debe ingresar su SSID y contraseña de su red WiFi.

Ahora coloque el puente, cortocircuitando GPIO0 a GND.

Apague y encienda el ESP y cargue el boceto en el ESP.

Después de la compilación, debería comenzar la carga al ESP. El LED azul del ESP parpadeará rápidamente mientras se descarga el código.

Me di cuenta de que tenía que jugar un poco reiniciando el IDE, reiniciando el ESP antes de que la carga funcionara.

Antes de comenzar a compilar / cargar el boceto, asegúrese de cerrar la consola en serie (= monitor en serie) porque esto le impedirá realizar la carga.

Una vez que la carga se haya realizado correctamente, puede volver a abrir el monitor en serie para ver cómo el ESP obtiene la hora de Internet de manera efectiva.

Genial, has programado tu ESP, conectado a tu WiFi y obtuviste la hora de Internet.

En el siguiente paso probaremos el DHT22.

Paso 5: Prueba del sensor DHT22

Prueba del sensor DHT22
Prueba del sensor DHT22

Ahora se requiere algo de cableado adicional.

Pines DHT … Conecte el pin 1 (a la izquierda) del sensor a VCC (3.3V)

Conecte el pin 2 ESP GPIO5 (DHTPIN en el boceto)

Conecte el pin 4 (a la derecha) del sensor a TIERRA

Conecte una resistencia de 10K del pin 2 (datos) al pin 1 (alimentación) del sensor.

De manera similar a la prueba NTP, busque el boceto DHTtester y modifíquelo de la siguiente manera:

#define DHTPIN 5 // seleccionamos GPIO5 para conectarnos al sensor # define DHTTYPE DHT22 // ya que estamos usando un DHT22 pero este código / biblioteca también es adecuado para DHT11

Nuevamente, cierre el monitor en serie, apague y encienda el ESP y compile y actualice el ESP.

Si todo va bien, debería ver aparecer las medidas en el monitor en serie.

Puedes jugar un poco con el sensor. Si respiras sobre él, verás que sube la humedad.

Si tiene una lámpara de escritorio (que no sea LED), puede iluminar el sensor para calentarlo un poco.

¡Excelente! Ahora están funcionando dos grandes partes del sensor.

En el siguiente paso comentaré el código final.

Paso 6: Armado …

Poniendo todo junto…
Poniendo todo junto…

Una vez más, un poco de cableado adicional … esto es para hacer posible el DeepSleep.

Recuerde, DeepSleep es una función increíble para dispositivos IoT.

Sin embargo, si su sensor está cableado para DeepSleep, puede ser difícil reprogramar el ESP, por lo que vamos a hacer otra conexión de puente entre

GPIO16-RST.

Sí, DEBE ser GPIO16, porque ese es el GPIO que está cableado para activar el dispositivo cuando suena el reloj en tiempo real después del DeepSleep.

Mientras está probando, puede decidir hacer un DeepSleep de 15 segundos.

Cuando estaba depurando, movía el puente a GPIO0 para poder actualizar mi programa.

Una vez completada la descarga, movería el puente a GPIO16 para que DeepSleep funcione.

El código del ESP se llama TnHclient.c

Tienes que cambiar tu SSID, Contraseña y la dirección IP de tu servidor.

Hay líneas adicionales de código que puede usar para solucionar problemas o probar su configuración.

Paso 7: El lado del servidor

El lado del servidor de las cosas
El lado del servidor de las cosas
El lado del servidor de las cosas
El lado del servidor de las cosas

Es un malentendido común que UDP no es confiable y TCP es …

Eso es tan tonto como decir que un martillo es más útil que un destornillador. Son simplemente diferentes herramientas muy útiles y ambas tienen sus usos.

Por cierto, sin UDP Internet no funcionaría… DNS se basa en UDP.

Entonces, elegí UDP porque es muy liviano, fácil y rápido.

Tiendo a pensar que mi WiFi es muy confiable, por lo que el cliente enviará como máximo 3 paquetes UDP si el acuse de recibo "OK!" no se recibe.

El código C para TnHserver está en el archivo TnHServer.c.

Hay varios comentarios en el código que lo explican.

Necesitaremos algunas herramientas adicionales en el servidor: rrdtool, apache y tal vez tcpdump.

Para instalar rrdtool en Raspbian, simplemente puede instalar el paquete de esta manera: apt-get install rrdtool

Si necesita depurar el tráfico de red, tcpdump es útil apt-get install tcpdump

Necesitaba un servidor web para poder usar un navegador para consultar los gráficos: apt-get install apache2

Usé esta herramienta: https://rrdwizard.appspot.com/index.php para obtener el comando para crear la base de datos Round Robin. Solo necesita ejecutar esto una vez (si lo hace bien la primera vez).

rrdtool create TnHdatabase.rrd --start now-10s

--paso '1200'

'DS: Temperatura: CALIBRE: 1200: -20.5: 45.5'

'DS: Humedad: GAUGE: 1200: 0: 100.0'

'RRA: PROMEDIO: 0.5: 1: 720'

'RRA: PROMEDIO: 0.5: 3: 960'

'RRA: PROMEDIO: 0.5: 18: 1600'

Finalmente, uso una entrada crontab para reiniciar mi TnHserver todos los días a la medianoche. Ejecuto TnHserver como un usuario normal (es decir, NO root) como medida de seguridad.

0 0 * * * / usr / bin / pkill TnHserver; / inicio / usuario / bin / TnHserver> / dev / null 2> & 1

Puede comprobar que TnHserver se está ejecutando haciendo

$ ps -elf | grep TnHserver

y puede verificar que está escuchando paquetes en el puerto 7777 haciendo

$ netstat -anu

Conexiones de Internet activas (servidores y establecidas)

Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Finalmente CreateTnH_Graphs.sh.txt es un script de ejemplo para generar los gráficos. (Genero los scripts como root, es posible que no desee hacer esto).

Con una página web muy simple, puede ver los gráficos desde cualquier navegador de su red doméstica.

Recomendado: