Go Down

Topic: problemi e/o dubbi con sensore dht11 (temperatura ed umidità) (Read 4062 times) previous topic - next topic

Hola a todos
sono nuovo su arduino ma qualcosa con i PIC in basic l'ho fatto (non conosco i vari dialetti del C )
ho collegato il sensore dht11 sul pin A0 e messo la resistenza di pull up da 4.7K
ho  scaricato 3 programmi e relative librerie
http://arduino.cc/playground/Main/DHT11Lib
http://www.dfrobot.com/index.php?route=product/product&filter_name=dht11&product_id=174
http://www.ladyada.net/learn/sensors/dht.html

l'unico che mi funziona ( con le opportune modifiche del pin e del sensore da usare) è l'ultimo
MA non mi da i valori decimali ho solo valori "interi"
ad esempio 46.00 % e 22.00 *C

come mai? non mi pare sia una limitazione del sensore...

spulciando nel codice dell'esempio e poi nella libreria dht.cpp

ho trovato la funzione

float DHT::readTemperature(void) {
  float f;

  if (read()) {
    switch (_type) {
    case DHT11:
      f = data[2];
      return f;
    case DHT22:
    case DHT21:
      f = data[2] & 0x7F;
      f *= 256;
      f += data[3];
      f /= 10;
      if (data[2] & 0x80)
   f *= -1;

      return f;
    }
  }
  Serial.print("Read fail");
  return NAN;
}


mi pare di capire che dopo la lettura dei byte inviati dal sensore con il CASE testa il tipo di sensore e nel caso del DHT11 mette solo la parte numerica intera "data[2]" nel valore di ritorno della funzione
mentre negli altri modelli mette anche la parte decimale
ma mi sfugge (non sono afferrato in C) cosa faccia con la parte di codice

f = data[2] & 0x7F;
      f *= 256;
      f += data[3];
      f /= 10;
      if (data[2] & 0x80)
   f *= -1;

ed ancora cosa sono f* oppure f+ f/

grazie e scusate delle domande banali....
stefano

uwefed

Code: [Select]
f = data[2] & 0x7F;
      f *= 256;
      f += data[3];
      f /= 10;
      if (data[2] & 0x80)
   f *= -1;

Dal data[2] cancella il bit piú alto perché segna il positivo o negativo, lo moltiplica per 256 e somma data[3] (per ,mettere einsieme quando hai il numero in 2 Byte e divide tutto per 10.
poi aggiunge il - se il bit 8 é messo.
Ciao Uwe

molte grazie!!! ora mi è chiaro
mi devo abituare a leggere il C non come se fosse il basic... suggerimenti per qualche tutorial?


googlando ho poi notato una cosa.. non è per niente chiaro se il dht11 misura o meno i valori decimali
ho trovato dei pdf che dicono che la risoluzione è di 1 grado altri di 0.1....

grazie
stefano

leo72

Ma tu hai un DHT11, giusto?

Quindi la porzione di codice che ti interessa è questa:
Code: [Select]
case DHT11:
      f = data[2];
      return f;


Nel caso del tuo sensore, restituisce il valore di data[2] senza manipolazioni.

leo72

Leggendo poi l datasheet, viene riportato:
Accuratezza: umidità +-5% - temperatura +-2°C
Risoluzione: umidità +-1% - temperatura +-0.1°C

Quindi la risoluzione è di 0,1°C anche se poi ha un'accuratezza di +- 2°C. Quindi vuol dire che può segnare 18.9° anche se magari in realtà ce ne sono 19.6°C, per capirsi.

Tornando al collegamento, il datasheet è chiaro:
http://www.dfrobot.com/image/data/DFR0067/DFR0067_DS_10_en.pdf
A pag. 3 c'è lo schema:

Pin 1 a 5V
Pin 4 a GND
Pin 2 al pin analogico di Arduino con R da 5K. Se non ce l'hai, mettine in serie un paio (tipo 3K3 e 1K8) per avvicinarti il più possibile.

Metti anche un condensatore (0.1uF o 100nF: sono uguali) per disaccoppiare l'alimentazione fra 5V ed il pin di GND, come suggerisce il datasheet.

Aspetta 1 secondo prima di leggere, 2 secondi fra ogni lettura.

si ho un dht11
infatti notavo che c'è una differenza tra la parte del dht11 e dht22
a sto punto ancor di + non si capisce se il dht11 legge i decimali o no  (alcuni datasheet dicono di no.. )

#6
Nov 24, 2011, 07:11 pm Last Edit: Nov 24, 2011, 10:14 pm by ilconteste Reason: 1

Leggendo poi l datasheet, viene riportato:
Accuratezza: umidità +-5% - temperatura +-2°C
Risoluzione: umidità +-1% - temperatura +-0.1°C

Quindi la risoluzione è di 0,1°C anche se poi ha un'accuratezza di +- 2°C. Quindi vuol dire che può segnare 18.9° anche se magari in realtà ce ne sono 19.6°C, per capirsi.


purtroppo anche io avevo letto tale datasheet ma ho appena modificato la funzione: gli faccio scrivere sia la parte intera che la parte decimale e a meno di miei errori sembra proprio che i datasheet sia sbagliati... non trasmette nessun valore decimale ne della T ne della RH
qualcuno può gentilmente confermare???
tnks

uwefed

secondo: http://www.micro4you.com/files/sensor/DHT11.pdf

Resolution 1? 8 Bit tipical
Repeatability ±1? tipical
Accuracy ±1? tipical max ±2?
Measurement Range 0 -50?

percui confermo niente decimali per il DHT11
anche perché non ha senso avere decimali se l' errore é 1 ?

Ciao Uwe

leo72

Allora girano più versioni di datasheet dello stesso sensore....
Tu hai un datasheet in cui si dice che la risoluzione è 1°C, quello che ho linkato io dice che la risoluzione è di 0.1°... quale dei 2 ha ragione?  ;)

Testato

confermo anche io che non ci sono decimali, infatti lo scartai all'epoca della scelta del mio sensore, anche se mi piaceva l'idea di avere in un unico pezzo H e T

il trucco sta nel fatto che nessuno dei due datasheet da voi postati e' l'originale, cioe' dfrobots non e' il produttore originale . Il datasheet ufficiale e' tutto cinese, e dfrobots lo avra' tradotto, sbagliando da quleche parte.

se il dth11, econoicissimo, darebbe idecimali sarebbe bello (ache se con quell'errore cosi' grande, come dice uwe, sarebbe solo uno sfizio)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Testato

e' il fratello maggiore, il dht22, che pero' costa sulla decina di euro, ad avere migliori caratteristiche,

Accuracy humidity +-2%RH(Max +-5%RH); temperature +-0.5Celsius
Resolution or sensitivity humidity 0.1%RH; temperature 0.1Celsius

ma di certo se ti interessa solo la temp meglio un 18B20
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

E' vero. Nel datasheet in cinese c'è appunto "Risoluzione +/-1°C"

#12
Nov 24, 2011, 10:16 pm Last Edit: Nov 29, 2011, 02:18 pm by ilconteste Reason: 1
:smiley-eek: bene scoperto l'arcano.....

Go Up