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 è
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??
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...
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.
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"???
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
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...