Hola lect@r hoy les traigo un tutorial para hacer un Medidor de Temperatura y Humedad Relativa con Arduino y el Sensor DHT11.

Este tutorial viene con el diagrama de conexiones echo en FRITZING, como vean en la imagen dentro de la descarga, tan solo se debe alimentar y mandar el OUT del sensor a Analog PIN 0 del Arduino. 

Al igual que se ve en la siguiente imagen:



Luego subimos el siguiente código a arduino y probamos nuestro experimento;
// Lectura de Humedad y Temperatua por Sensor DHT11
// fecha 01/01/2012
// limpiado, traducido y compartido por GUILLENXT

#define DHT11_PIN 0 // Analog pin 0

byte read_dht11_dat () {
byte i = 0;
byte result=0;
for(i=0; i< 8; i++){
while (!(PINC & _BV(DHT11_PIN))); // Espera hasta que el flanco asciende
delayMicroseconds(30);

if (PINC & _BV(DHT11_PIN)) 
result |= 1 << (7-i);
while ((PINC & _BV(DHT11_PIN))); // Espera hasta que el flanco desciende
}
return result;

}
void setup () {
DDRC |= _BV(DHT11_PIN); // Establecer DATA_PIN como salida
PORTC |= _BV(DHT11_PIN); // Llevar arriba DATA_PIN 
Serial.begin(19200);
Serial.println("GUILLENXT Sensor DHT11 Preparado");
}

void loop () {
byte dht11_dat[5];
byte dht11_check_sum;
byte i;

// Enviar datos de lectura de señales
PORTC &= ~_BV(DHT11_PIN); // Llevar abajo DATA_PIN por 18ms
delay(18);
PORTC |= _BV(DHT11_PIN); // Llevar arriba DATA_PIN por 18ms
delayMicroseconds(40);

DDRC &= ~_BV(DHT11_PIN); // Establecer DATA_PIN como entrada
while (PINC & _BV(DHT11_PIN)); // Espera hasta que el flanco desciende
delayMicroseconds(100);
while (!PINC & _BV(DHT11_PIN)); // Espera hasta que el flanco desciende
delayMicroseconds(80);

// Recibir Datos
for (i=0; i<5; i++) {
dht11_dat[i] = read_dht11_dat();
}

DDRC |= _BV(DHT11_PIN); // Establecer DATA_PIN como salida
PORTC |= _BV(DHT11_PIN); // Llevar arriba DATA_PIN 

// Verificar Suma de Chequeo
dht11_check_sum = dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3];
if (dht11_dat[4] != dht11_check_sum) {
Serial.println("DHT11 checksum error");
return;
}

Serial.print("Humedad Relativa = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("%; ");
Serial.print("Temperatura = ");
Serial.print(dht11_dat[2], DEC);
Serial.print(".");
Serial.print(dht11_dat[3], DEC);
Serial.println("C");
delay(2000);

}

Código sin errores e importación adicional del sensor dando click en al siguiente imagen:



Si tienen problemas a la hora de ver los valores en el MONITOR SERIAL revisen la velocidad introducida en la programación que coincida con la del monitor, ok.

Les dejo un video de como me quedo a mi;


Espero que les guste y sirva


8 Responses so far.

Deja un comentario

Suscribirse a Entradas | Suscribirse a los Comentarios

Bienvenid@s a mi Blog

- Copyright © GUILLENXT -Robotic Notes- Powered by Blogger - Re-Designed by Guillermo J. Gil Aitken -