quarta-feira, 24 de outubro de 2012

Review DHT11 Arduino Digital Temperature Humidity Sensor

Introdução:

Esse review é sobre o sensor de temperatura e umidade DHT de baixo custo. Esses sensores são muito básicos, mas são ótimos para amadores que querem fazer algum registro de dados básicos. Os sensores de DHT são feitos de duas partes, um sensor de umidade capacitivo e um termistor. Há também um chip dentro muito básico que faz a mesma conversão de analógico para digital e coloca na saída um sinal digital com a temperatura e umidade. O sinal digital é bastante fácil de ler usando qualquer microcontrolador.

                             

Possui uma saída de sinal calibrado digital. Usando a técnica de aquisição de sinal digital e temperatura e umidade de sensoriamento, garante alta confiabilidade e estabilidade a longo prazo. Este sensor inclui um componente de medição de temperatura NTC, e se conecta a um microcontrolador de 8 bits, oferecendo excelente qualidade, resposta rápida, capacidade anti-interferência e de custo-eficácia.



Sobre o DHT11:

  • Custo muito baixo 
  • 3 a 5V e I / O 
  • 2.5mA uso corrente máxima durante a conversão (quando solicitar dados) 
  • Bom para leituras de umidade 20-80% com precisão de 5% 
  • Bom para 0-50 ° C de temperatura leituras ± 2 ° C de precisão 
  • Não mais do que uma taxa de amostragem de Hz (uma vez por segundo) 
  • Tamanho de 15,5 milímetros x 12mm x 5,5 milímetros 
  • 4 pinos com 0,1 de espaçamento "
                                    

Código de Exemplo:

#define DHT11_PIN 0      // ADC0

byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while(!(PINC & _BV(DHT11_PIN)));  // wait for 50us
    delayMicroseconds(30);
    if(PINC & _BV(DHT11_PIN)) 
      result |=(1<<(7-i));
    while((PINC & _BV(DHT11_PIN)));  // wait '1' finish
    }
    return result;
}


void setup()
{
  DDRC |= _BV(DHT11_PIN);
  PORTC |= _BV(DHT11_PIN);
  Serial.begin(9600);
  Serial.println("Ready");
}
void loop()
{
  byte dht11_dat[5];
  byte dht11_in;
  byte i;// start condition
// 1. pull-down i/o pin from 18ms
  PORTC &= ~_BV(DHT11_PIN);
  delay(18);
  PORTC |= _BV(DHT11_PIN);
  delayMicroseconds(40);
  DDRC &= ~_BV(DHT11_PIN);
  delayMicroseconds(40);
  
  dht11_in = PINC & _BV(DHT11_PIN);
  if(dht11_in)
  {
    Serial.println("dht11 start condition 1 not met");
    return;
  }
  delayMicroseconds(80);
  dht11_in = PINC & _BV(DHT11_PIN);
  if(!dht11_in)
  {
    Serial.println("dht11 start condition 2 not met");
    return;
  }
  
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
    dht11_dat[i] = read_dht11_dat();
  DDRC |= _BV(DHT11_PIN);
  PORTC |= _BV(DHT11_PIN);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
  Serial.print("Current humdity = ");
  Serial.print(dht11_dat[0], DEC);
  Serial.print(".");
  Serial.print(dht11_dat[1], DEC);
  Serial.print("%  ");
  Serial.print("temperature = ");
  Serial.print(dht11_dat[2], DEC);
  Serial.print(".");
  Serial.print(dht11_dat[3], DEC);
  Serial.println("C  ");
  delay(2000);
}

Nenhum comentário:

Postar um comentário