Índice:

DHT12 (sensor de temperatura e umidade i2c barato), uso rápido e fácil: 14 etapas
DHT12 (sensor de temperatura e umidade i2c barato), uso rápido e fácil: 14 etapas

Vídeo: DHT12 (sensor de temperatura e umidade i2c barato), uso rápido e fácil: 14 etapas

Vídeo: DHT12 (sensor de temperatura e umidade i2c barato), uso rápido e fácil: 14 etapas
Vídeo: Arduino IoT Cloud con ESP32, Relé (relay) y Sensor DHT22. Guía completa paso a paso desde cero 2024, Novembro
Anonim
DHT12 (sensor de temperatura e umidade i2c barato), uso rápido e fácil
DHT12 (sensor de temperatura e umidade i2c barato), uso rápido e fácil

Você pode encontrar atualizações e outras no meu site

Gosto de sensor que pode ser usado com 2 fios (protocolo i2c), mas adoro o barato.

Esta é uma biblioteca Arduino e esp8266 para a série DHT12 de sensores de temperatura / umidade de custo muito baixo (menos de 1 $) que funcionam com i2c ou conexão de um fio.

Muito útil se você quiser usar esp01 (se você usar serial, você tem apenas 2 pinos) para ler umidade e temperatura e exibi-las no LCD i2c.

Ai li que às vezes parece que preciso de calibração, mas tenho árvore disso e consigo valor muito parecido com o DHT22. Se você tiver esse problema de calibração, abra o problema no github e adiciono a implementação.

Etapa 1: Como funciona o I2c

Como funciona o I2c
Como funciona o I2c

O I2C trabalha com seus dois fios, o SDA (linha de dados) e o SCL (linha do relógio).

Ambas as linhas têm dreno aberto, mas são puxadas para cima com resistores.

Normalmente, há um mestre e um ou vários escravos na linha, embora possa haver vários mestres, mas falaremos sobre isso mais tarde.

Tanto mestres quanto escravos podem transmitir ou receber dados, portanto, um dispositivo pode estar em um destes quatro estados: mestre transmitir, mestre receber, escravo transmitir, escravo receber.

Etapa 2: Biblioteca

Você pode encontrar minha biblioteca aqui.

Baixar

Clique no botão DOWNLOADS no canto superior direito, renomeie a pasta descompactada DHT12.

Verifique se a pasta DHT contém DHT12.cpp e DHT12.h.

Coloque a pasta da biblioteca DHT em sua pasta / libraries /.

Você pode precisar criar a subpasta de bibliotecas se for sua primeira biblioteca.

Reinicie o IDE.

Etapa 3: Behaivor

Esta libray tenta emular o comportamento dos sensores da biblioteca DHT padrão (e copia muito código), e eu adiciono o código para gerenciar o i2c olso da mesma maneira.

O método é o mesmo do sensor da biblioteca DHT, com algumas funções adicionais de ponto de orvalho.

Etapa 4: Uso I2c

Para usar com i2c (endereço padrão e pino SDA SCL padrão), o construtor é:

DHT12 dht12;

e pegue o valor padrão para o pino SDA SCL.

(É possível redefinir com o construtor especificado para esp8266, necessário para ESP-01). ou

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> endereço

para alterar o endereço.

Etapa 5: Uso de um fio

Para usar um fio:

DHT12 dht12 (uint8_t addressOrPin, true)

addressOrPin -> pin

O valor booleano é a seleção do modo oneWire ou i2c.

Etapa 6: leitura implícita

Você pode usá-lo com "implícito", "leitura simples" ou "leitura completa": Implícito, apenas a primeira leitura faz uma leitura verdadeira do sensor, a outra leitura que se torna em 2 segundos. intervalo é o valor armazenado da primeira leitura.

// A leitura do sensor tem 2 segundos de tempo decorrido, a menos que você passe o parâmetro force

// Lê a temperatura como Celsius (o padrão) float t12 = dht12.readTemperature (); // Lê a temperatura como Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // As leituras do sensor também podem ser de até 2 segundos 'antigas' (é um sensor muito lento) float h12 = dht12.readHumidity (); // Computa o índice de calor em Fahrenheit (o padrão) float hif12 = dht12.computeHeatIndex (f12, h12); // Computa o índice de calor em Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Computa o ponto de orvalho em Fahrenheit (o padrão) float dpf12 = dht12.dewPoint (f12, h12); // Calcula o ponto de orvalho em Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Etapa 7: leitura simples

Leitura simples para obter um status de leitura.

// A leitura do sensor tem 2 segundos de tempo decorrido, a menos que você passe o parâmetro force

bool chk = dht12.read (); // leitura verdadeira está ok, problema de leitura falsa

// Lê a temperatura como Celsius (o padrão)

float t12 = dht12.readTemperature (); // Lê a temperatura como Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // As leituras do sensor também podem ser de até 2 segundos 'antigas' (é um sensor muito lento) float h12 = dht12.readHumidity (); // Computa o índice de calor em Fahrenheit (o padrão) float hif12 = dht12.computeHeatIndex (f12, h12); // Computa o índice de calor em Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Computa o ponto de orvalho em Fahrenheit (o padrão) float dpf12 = dht12.dewPoint (f12, h12); // Calcula o ponto de orvalho em Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Etapa 8: leitura completa

Leitura completa para obter um status especificado.

// A leitura do sensor tem 2 segundos de tempo decorrido, a menos que você passe o parâmetro force

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nLer sensor:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); pausa; case DHT12:: ERROR_CHECKSUM: Serial.println (F ("Erro de checksum")); pausa; case DHT12:: ERROR_TIMEOUT: Serial.println (F ("Erro de tempo limite")); pausa; case DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Erro de timeout em sinal baixo, tente colocar resistência de pullup alta")); pausa; case DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Erro de timeout em sinal baixo, tente colocar baixa resistência pullup")); pausa; case DHT12:: ERROR_CONNECT: Serial.println (F ("Erro de conexão")); pausa; case DHT12:: ERROR_ACK_L: Serial.println (F ("AckL error")); pausa; case DHT12:: ERROR_ACK_H: Serial.println (F ("Erro AckH")); pausa; case DHT12:: ERROR_UNKNOWN: Serial.println (F ("Erro desconhecido DETECTADO")); pausa; case DHT12:: NONE: Serial.println (F ("Sem resultado")); pausa; padrão: Serial.println (F ("Erro desconhecido")); pausa; }

// Lê a temperatura como Celsius (o padrão)

float t12 = dht12.readTemperature (); // Lê a temperatura como Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // As leituras do sensor também podem ser de até 2 segundos 'antigas' (é um sensor muito lento) float h12 = dht12.readHumidity (); // Computa o índice de calor em Fahrenheit (o padrão) float hif12 = dht12.computeHeatIndex (f12, h12); // Computa o índice de calor em Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Computa o ponto de orvalho em Fahrenheit (o padrão) float dpf12 = dht12.dewPoint (f12, h12); // Computa o ponto de orvalho em Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Etapa 9: Diagrama de conexão

Com exemplos, há o diagrama de conexão, é importante usar o resistor pullup correto.

Agradeço a Bobadas, dplasa e adafruit, por compartilhar o código no github (de onde levo alguns códigos e ideias).

Etapa 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Etapa 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Etapa 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Etapa 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Etapa 14: Obrigado

Playground do Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

série de projetos i2c (coleção):

  • Sensor de temperatura e umidade
  • Expansor analógico
  • Expansor digital
  • Tela de LCD

Recomendado: