Errore di lettura temperatura tra due sonde DS18B20 ed un DHT22

Buon giorno, nuovo progetto nuova vita...
Sto impazzendo e non riesco a darmi una spiegazione, vi chiedo aiuto.
Ho un sistema che legge due sensori DS18B20 ed un DHT22.
Ho caricato il seguente sketch di prova

#include <OneWire.h>           //
#include <DHT.h>               //libreria DHT 
#include <DallasTemperature.h> // libreria per sonde temperatura
//########## Costanti DHT22
#define DHTPIN 49   //Pin a cui è connesso il sensore 
#define DHTTYPE DHT22   //Tipo di sensore che stiamo utilizzando (DHT22)
//########## Costanti sensori temperatura
#define sensore_t 26          //sensori di temperatura DS18B20  
OneWire ds(sensore_t);           //oggetto sonda temperatura
DallasTemperature sensors(&ds); 
DeviceAddress sonda1,sonda2;
DHT dht(DHTPIN, DHTTYPE); //
//########## Variabili
float t_letta_z1;
float t_letta_z2;
float t_letta_air;
float h_letta_air;

int nsonde;
unsigned long scan_dht;
void setup() {
Serial.begin(9600); 
  dht.begin();                    //inizializzo i sensori
  sensors.begin();                   //avvia i sensori di temperatura ed assegna la risoluzione
 
  nsonde = sensors.getDeviceCount();
  Serial.print("Dispositivi trovati ");Serial.println(nsonde,DEC);
  if (!sensors.getAddress(sonda1, 0)) Serial.println("Not Found Sensor 1");
  if (!sensors.getAddress(sonda2, 1)) Serial.println("Not Found Sensor 2");
  scan_dht=millis();     //precarico il timer per le letture 
}

void loop() {
//########   ogni due secondi leggo i valori di umidità e temperatura
if (millis()-scan_dht>=2000){
                             scan_dht=millis();
                             h_letta_air= dht.readHumidity();
                             t_letta_air= dht.readTemperature();
                             sensors.requestTemperatures();
                             t_letta_z1= sensors.getTempC(sonda1);
                             delay(10);
                             t_letta_z2= sensors.getTempC(sonda2);
                             if(t_letta_z1==(-127)){Serial.println("Sonda1 non connessa");
                             }
                             if(t_letta_z2==(-127)){Serial.println("Sonda2 non connessa");
                             }
//****************** solo per test visualizza valori su seriale di umidità e temperatura
                             
                             Serial.print(F("h_aria "));Serial.print(h_letta_air);
                             Serial.print(F(" t_aria "));Serial.println(t_letta_air);
                             Serial.print(F("T1="));Serial.println(t_letta_z1);
                             Serial.print(F("T2="));Serial.println(t_letta_z2);
                           }  //chiusura campionatura due secondi   
}
ma quello che restituisce è

14:42:23.630 -> h_aria 18.20 t_aria 28.20
14:42:23.630 -> T1=21.37
14:42:23.630 -> T2=20.94

dove T1 eT2 sono le due sonde DS18B20 mentre t_aria h_aria è dato dal DHT22.
Le sonde sono insieme ma trovo le letture completamente sbalgiate.
Come posso correggere l'errore??
Graize.

Non aver ricevuto risposte temo che sia perchè non ci sono risposte...
Questo però non risolve il mio rpoblema...
Possibile che non vi siano alternative??

Quando un uomo con l'orologio incontra...
Un uomo con l'orologio...
L'uomo con l'orologio diventa un uomo dubbioso

Per parafrasare un film del grande Sergio...

Oppure come diceva un mio collega di tanti anni fa (che mi ha esplicitamente autorizzato a copiarlo)

L'uomo con un orologio conosce l'ora
L'uomo con due orologi conosce il dubbio

Seriamente:
Hai guardato cosa dicono i DS dei varii dispositivi?

Bella citazione....
Si standardoil, il DS18B20 restituisce un valore digitale nello scratchpad....nessuna alternativa di poterlo tarare/modificare...
Ho pensato anche ad un problema di alimentazione, ma ho messo un regolatore a 5V precisi.
Li uso in modalità "alimentazione parassita".
Il DHT22 invece mi restituisce valori corretti, secondo un termo/igrometro di riferimento calibrato.
Non so come fare...
:face_exhaling:

e quindi cosa dice il DS del DS18B20?

Non ho trovato l'informazione...
:weary:

perché non hai saputo cercare...

cominciamo con domande semplici:

hai provato a cambiare il piedino dei due DS18?

se ne tieni uno in mano, vedi cambiare la sua lettura?

la lettura del DHT è credibile? hai provato a scaldarlo e vedere se cambia?

come fai a sapere che il DHT non sbaglia?

metti un DS18 in acqua fredda e l'altro in acqua tiepida, metti un termometro clinico e vedi di avere delle misure indipendenti...

... in realtà ti ha già risposto ...

Guglielmo

Si Standardoil, come ti ha detto anche Guglielmo, ho messo un termometro di riferimento e il DHT segna corretto, mentre le due sonde DS18 hanno valori diversi sia dal DHT che tra di loro.
Ho provato anche con due pin diversi, ma non cambia nulla...
Le due sonde funzionano, vedo i valori variare ma non sono corretti, si discostano di 5-6°C dal termometro di riferiemento, e discostano di 2-3°C tra di loro, messe nello stesso punto.
A questo punto, davvero non so cosa fare.....
Qualche aiuto?
Grazie.

Premesso che mooooolto raramente ho trovato un sensore che indicasse, senza correzioni, la giusta temperatura ... ho in giro per casa, praticamente in ogni stanza, degli ottimi BME280, e ... ce ne fosse uso per cui non ho dovuto applicare una correzione (anche di qualche grado) da software per portarli al valore indicato da un termometro da laboratorio, calibrato, che uso per queste cose, ... tutto ciò premesso, ma tu che modello ESATTO hai dei DS18B20 quello standard o quello con il P stampigliato sulla sigla?

   

... perché, anche se da datasheet vecchio di Maxim, sembrerebbe che quello senza P possa lavorare in parasite-power mode, quello che ha la P, di dallas/Maxim, è specifico per lavorare in tal modo.

Guglielmo

Per lo op

Hai fatto le altre prove che ti ho detto?

Standardoil, mi sembrava di averti già risposto comunque di seguito nello specifico:

hai provato a cambiare il piedino dei due DS18?

si, fa uguale

se ne tieni uno in mano, vedi cambiare la sua lettura?

si

la lettura del DHT è credibile? hai provato a scaldarlo e vedere se cambia?

Come detto in una risposta, l'ho testato con un termometro calibrato, e varia regolarmente senza errori di rilievo.

come fai a sapere che il DHT non sbaglia?

Testandolo con un termometro calibrato

Questa prova non l'ho fatta, ma se scaldo e raffreddo le due sonde variano, senza però dare il valore di temperatura corretto.

Grazie Guglielmo, questo vuol dire che ogni sonda che andrò ad inserire nel mio progetto dovrà essere calibrata....
Nello specifico ho due tipi di sonde DS18B20, un tipo senza P della DALLAS, e l'altro è incapsultato e non reisco a leggere la sigla.
Vuoi dire che è meglio farlo lavorare non in modalità "parassita"???

... mah ... io proverei e vedrei se cambia qualche cosa ... non si sa mai ... :roll_eyes:

Guglielmo

a me sembra strano che due sonde sbaglino e sbaglino alla stessa maniera

infatti sono andato a vedere e ho scoperto, da data sheet del DS18B20 che in modalità parassita il collegamento al microcontrollore è differente....

tu come hai collegato le sonde?

BTW, tanto ma tanto tempo fa, ai tempi delle prime prove del termoremoto avevo anche sviluppato una tecnica per alimentare in parassita un DS18B20 connesso NON parassita

magari dopo cerco...

... beh, questo lo davo per scontato.

Per questo chiedevo di provare in modalità NON parasite-power :grin:

Guglielmo

1 Like

Scusate il ritardo, settimana difficile...
Ho collegato le sonde in modalità normale ma nulla, fanno uguale...
Due pin diversi, fanno uguale....
Mi sto rassegnando a dov fare una calibrazione sw....
Anche se non è il massimo... :weary:

... ti ripeto che è cosa che faccio regolarmente su tutti i sensori che compero. Mai trovato uno che fosse esattamente come il termometro calibrato. :roll_eyes:

Guglielmo

Grazie comunque...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.