Sensor de temperatura DHT11 com registro em arquivo

O DHT11 é um sensor de temperatura e umidade, relativamente barato, e interessante para automação. Em um projeto IOT (Internet of Things) você pode consultar a temperatura da sua casa a distância, por exemplo, e determinar se vai ligar o ar condicionado (também a distância) previamente para chegar em casa já com um ambiente refrigerado. Este, claro, é só um exemplo de utilização.

Vejamos como usá-lo para, a cada 2 segundos, exibir estas informações (temperatura e umidade) no Monitor Serial (Arduino IDE) e também fazer o registro em arquivo no cartão SD. As ligações são as seguintes:

DHT11 Arduino
+ 5V
- GND
S/DATA/OUT A1

Você precisará instalar esta biblioteca (DHT11.zip) no Arduino IDE (Sketch -> Include Library -> Add .ZIP Library…).

E o código a ser utilizado é este:

#include <dht11.h>
#include <SPI.h>
#include <SD.h>

File f;
dht11 DHT11;

#define DHT11PIN A1

void setup()
{
  Serial.begin(9600);
  delay(1000);
  Serial.println("DHT11 to SDCard EXAMPLE");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();

  Serial.print("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case DHTLIB_OK: 
		Serial.println("OK"); 
		break;
    case DHTLIB_ERROR_CHECKSUM: 
		Serial.println("Checksum error"); 
		break;
    case DHTLIB_ERROR_TIMEOUT: 
		Serial.println("Time out error"); 
		break;
    default: 
		Serial.println("Unknown error"); 
		break;
  }

  int h = DHT11.humidity;
  int t = DHT11.temperature;
  
  Serial.print("Humidity (%): ");
  Serial.println((float)h, 2);

  Serial.print("Temperature (Celsius): ");
  Serial.println((float)t, 2);

  f = SD.open("readings.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (f) {
    Serial.print("Writing to readings.txt...");
    f.print(h);
    f.print(",");
    f.println(t);
    // close the file:
    f.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening readings.txt");
  }
  
  delay(2000);
}

Para o cartão SD utilizei o Ethernet Shield, cujo pino CS é o 4 (utilizado no SD.begin(4)). Caso utilize outro módulo com slot SD verifique qual é o pino CS para fazer a alteração.

Então, vai usar o DHT11 para fazer o quê? Deixe seu comentário!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Translate »