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