problemi e/o dubbi con sensore dht11 (temperatura ed umidità)

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.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

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

Ma tu hai un DHT11, giusto?

Quindi la porzione di codice che ti interessa è questa:

case DHT11:
      f = data[2];
      return f;

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

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:

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.. )

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.

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

secondo: micro4you.com is for sale | HugeDomains

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

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? :wink:

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)

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

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

:astonished: bene scoperto l'arcano.....