Pages: [1]   Go Down
Author Topic: problemi e/o dubbi con sensore dht11 (temperatura ed umidità)  (Read 3357 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 248
Posts: 21156
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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
 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma tu hai un DHT11, giusto?

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

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


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: November 24, 2011, 04:14:37 pm by ilconteste » Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 248
Posts: 21156
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?  smiley-wink
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5781
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5781
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek bene scoperto l'arcano.....
« Last Edit: November 29, 2011, 08:18:58 am by ilconteste » Logged

Pages: [1]   Go Up
Jump to: