Tabla de contenido:

DHT12 (sensor de temperatura y humedad económico i2c), uso rápido y fácil: 14 pasos
DHT12 (sensor de temperatura y humedad económico i2c), uso rápido y fácil: 14 pasos

Video: DHT12 (sensor de temperatura y humedad económico i2c), uso rápido y fácil: 14 pasos

Video: DHT12 (sensor de temperatura y humedad económico i2c), uso rápido y fácil: 14 pasos
Video: Sensor DHT11 - Medir Temperatura y humedad relativa - Arduino 2024, Noviembre
Anonim
DHT12 (sensor de temperatura y humedad barato i2c), uso rápido y fácil
DHT12 (sensor de temperatura y humedad barato i2c), uso rápido y fácil

Puede encontrar actualizaciones y otras en mi sitio

Me gusta el sensor que se puede usar con 2 cables (protocolo i2c), pero me encanta el económico.

Esta es una biblioteca Arduino y esp8266 para la serie DHT12 de sensores de temperatura / humedad de muy bajo costo (menos de 1 $) que funcionan con i2c o una conexión de cable.

Muy útil si desea usar esp01 (si usa serial, solo tiene 2 pines) para leer la humedad y la temperatura y mostrarlas en la pantalla LCD i2c.

AI leyó que en algún momento parece que necesita calibración, pero tengo un árbol de esto y obtengo un valor muy similar al DHT22. Si tiene este problema de calibración, abra el problema en github y agrego la implementación.

Paso 1: Cómo funciona I2c

Cómo funciona I2c
Cómo funciona I2c

I2C funciona con sus dos cables, SDA (línea de datos) y SCL (línea de reloj).

Ambas líneas son de drenaje abierto, pero se levantan con resistencias.

Por lo general, hay un maestro y uno o varios esclavos en la línea, aunque puede haber varios maestros, pero hablaremos de eso más adelante.

Tanto los maestros como los esclavos pueden transmitir o recibir datos, por lo tanto, un dispositivo puede estar en uno de estos cuatro estados: maestro de transmisión, maestro de recepción, esclavo de transmisión, esclavo de recepción.

Paso 2: biblioteca

Puedes encontrar mi biblioteca aquí.

Descargar

Haga clic en el botón DESCARGAS en la esquina superior derecha, cambie el nombre de la carpeta sin comprimir DHT12.

Verifique que la carpeta DHT contenga DHT12.cpp y DHT12.h.

Coloque la carpeta de la biblioteca DHT en su carpeta / libraries /.

Es posible que deba crear la subcarpeta de bibliotecas si es su primera biblioteca.

Reinicie el IDE.

Paso 3: comportamiento

Esta biblioteca intenta emular el comportamiento de los sensores de la biblioteca DHT estándar (y copia mucho código), y agrego el código para administrar i2c olso de la misma manera.

El método es el mismo que el del sensor de biblioteca DHT, con algunos agregados como la función de punto de rocío.

Paso 4: uso de I2c

Para usar con i2c (dirección predeterminada y pin SDA SCL predeterminado), el constructor es:

DHT12 dht12;

y tome el valor predeterminado para el pin SDA SCL.

(Es posible redefinir con el constructor especificado para esp8266, necesario para ESP-01). o

DHT12 dht12 (uint8_t direcciónOrPin)

addressOrPin -> dirección

para cambiar de dirección.

Paso 5: uso de un cable

Para usar un cable:

DHT12 dht12 (uint8_t addressOrPin, verdadero)

addressOrPin -> pin

El valor booleano es la selección del modo oneWire o i2c.

Paso 6: lectura implícita

Puede usarlo con "implícito", "lectura simple" o "lectura completa": Implícito, solo la primera lectura hace una lectura verdadera del sensor, la otra lectura que se convierte en 2seg. intervalo son el valor almacenado de la primera lectura.

// La lectura del sensor tiene 2 segundos de tiempo transcurrido, a menos que pase el parámetro de fuerza

// Leer la temperatura como Celsius (por defecto) float t12 = dht12.readTemperature (); // Lee la temperatura como Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Las lecturas del sensor también pueden tener hasta 2 segundos de antigüedad (es un sensor muy lento) float h12 = dht12.readHumidity (); // Calcular el índice de calor en Fahrenheit (el valor predeterminado) float hif12 = dht12.computeHeatIndex (f12, h12); // Calcular el índice de calor en grados Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Calcular el punto de rocío en Fahrenheit (predeterminado) float dpf12 = dht12.dewPoint (f12, h12); // Calcular el punto de rocío en grados Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Paso 7: lectura simple

Lectura simple para obtener un estado de lectura.

// La lectura del sensor tiene 2 segundos de tiempo transcurrido, a menos que pase el parámetro de fuerza

bool chk = dht12.read (); // la lectura verdadera está bien, problema de lectura falsa

// Leer la temperatura en grados Celsius (por defecto)

flotador t12 = dht12.readTemperature (); // Lee la temperatura como Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Las lecturas del sensor también pueden tener hasta 2 segundos de antigüedad (es un sensor muy lento) float h12 = dht12.readHumidity (); // Calcular el índice de calor en Fahrenheit (el valor predeterminado) float hif12 = dht12.computeHeatIndex (f12, h12); // Calcular el índice de calor en grados Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Calcular el punto de rocío en Fahrenheit (predeterminado) float dpf12 = dht12.dewPoint (f12, h12); // Calcular el punto de rocío en grados Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Paso 8: lectura completa

Lectura completa para obtener un estado específico.

// La lectura del sensor tiene 2 segundos de tiempo transcurrido, a menos que pase el parámetro de fuerza

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nRead sensor:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); rotura; case DHT12:: ERROR_CHECKSUM: Serial.println (F ("Error de suma de comprobación")); rotura; case DHT12:: ERROR_TIMEOUT: Serial.println (F ("Error de tiempo de espera")); rotura; case DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Error de tiempo de espera en señal baja, intente poner resistencia de pullup alta")); rotura; case DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Error de tiempo de espera en señal baja, intente poner resistencia de pullup baja")); rotura; case DHT12:: ERROR_CONNECT: Serial.println (F ("Error de conexión")); rotura; case DHT12:: ERROR_ACK_L: Serial.println (F ("Error de AckL")); rotura; case DHT12:: ERROR_ACK_H: Serial.println (F ("Error de AckH")); rotura; case DHT12:: ERROR_UNKNOWN: Serial.println (F ("Error desconocido DETECTADO")); rotura; case DHT12:: NONE: Serial.println (F ("Sin resultado")); rotura; predeterminado: Serial.println (F ("Error desconocido")); rotura; }

// Leer la temperatura en grados Celsius (por defecto)

flotador t12 = dht12.readTemperature (); // Lee la temperatura como Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Las lecturas del sensor también pueden tener hasta 2 segundos de antigüedad (es un sensor muy lento) float h12 = dht12.readHumidity (); // Calcula el índice de calor en Fahrenheit (el valor predeterminado) float hif12 = dht12.computeHeatIndex (f12, h12); // Calcular el índice de calor en grados Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Calcular el punto de rocío en Fahrenheit (predeterminado) float dpf12 = dht12.dewPoint (f12, h12); // Calcular el punto de rocío en grados Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Paso 9: Diagrama de conexión

Con ejemplos, está el diagrama de conexión, es importante usar la resistencia pullup correcta.

Gracias a Bobadas, dplasa y adafruit, por compartir el código en github (donde tomo código e ideas).

Paso 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Paso 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Paso 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Paso 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Paso 14: Gracias

Zona de juegos de Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

Serie de proyectos i2c (Colección):

  • Sensor de temperatura y humedad
  • Expansor analógico
  • Expansor digital
  • Pantalla LCD

Recomendado: