SHT11 SHT21 unterschiedliche Luftfeuchte Werte

Gast #5679867
Lesenswert?

Hallo,
aufgrund der Abkündigung der SHT11 Feuchtesensoren von Sensirion habe 
ich auf SHT21 umgestellt.
Das Hand-Löten der SHT21 hat erstaunlich gut funktioniert.

Jetzt habe ich 2 Boards mit SHT11 und SHT21 nebeneinander stehen.
Folgende Messwerte:

SHT11: Rh=42,5% T=21,2°C
SHT21: RH=36,2% T=21,6°C

Leider bin ich nicht sicher, welcer der beiden RH (Relative Feuchte) 
stimmt.

Hat jemand ähnlicher Erfahrungen gemacht ?

SHT11 Code Umrechnung:
1
  RHlin =  (-2.0468 + (0.0367 * resultRH1) +  (-1.5955e-6 * resultRH1 * resultRH1)  )*10 ; // linearisizion according data sheet SHT71
2
  TEMPlin =   (-40.1 +  (0.01 * resultTEMP1 )) * 10 ; // linearisizion degree Celsius according data sheet SHT71
3
  RHtrue = (TEMPlin -25.0 ) * (0.01 + 0.00008 * resultRH1 ) + RHlin ; // according data sheet
4
  SHT_A_humi = (int) RHtrue;      // convert to global INT
5
  SHT_A_temp = (int) TEMPlin;      // convert to global INT

SHT21 Code Umrechnung:
1
//-----------state 8-------calculate Humidity----------------------------------------
2
  case 8:
3
  // resultRH1 = 25424;
4
        
5
  resultRH1 &= ~0x0003;           // clear bits [1..0] (status bits)
6
  SHT_A_humi = (long long)  (-60 + (1250 * resultRH1 / 0xffff )) ;
7
  
8
        state1++;
9
  break;
Gast #5679904
Lesenswert?

kenne die SHT21 nicht aber die DHT11 sind sehr ungenau und zeigen meiner 
Erfahrung nach immer zu viel an. DHT22 sind da deutlich besser als die 
DHT11, würde hier also davon ausgehen das die SHT21 den genaueren Wert 
liefern.
#5679955
Lesenswert?

Du musst den empfangenen Wert sofort in float umwandeln:
1
//==============================================================================
2
float SHT2x_CalcRH(u16t u16sRH)
3
//==============================================================================
4
{
5
ft humidityRH;
6
// variable for result
7
u16sRH &= ~0x0003;
8
// clear bits [1..0] (status bits)
9
//-- calculate relative humidity [%RH] --
10
humidityRH = -6.0 + 125.0/65536 * (ft)u16sRH; // RH= -6 + 125 * SRH/2^16
11
return humidityRH;
12
}
Angehängte Dateien:
Gast #5679970
Lesenswert?

Hallo Mario,
also ich wollte beim SHT21 Code eigentlich Fload vermeiden.
Deshalb rechne ich mit INT mit einer Nachkommastelle.

Wenn ich den im Datenblatt angegebenen Beispielwert von

resultRH1 = 25424;

nehme, dann kommt auch genau das Ergebnis raus, eas im Datenblatt steht.

@AK:  Aber ich caste doch auf 64 Bit, warum bist Du der Meinung, die 
Rechnung wird in 32 Bit ausgeführt ?
Ganzzahlt ist klar, aber mit 1 Nachkommastelle : Beispiel INT 600 = 60,0
#5679974
Lesenswert?

Dirk F schrieb:
> @AK:  Aber ich caste doch auf 64 Bit, warum bist Du der Meinung, die
> Rechnung wird in 32 Bit ausgeführt ?

Weil ich C kann und du nicht. ;-)

Du sperrst den Stall zu, nachdem der Gaul ausgebüxt ist. Die Rechnung
  (long long) (a * b)
findet in der Breite nur abhängig von a und b statt, erst das Ergebnis 
wird auf long long erweitert. Wäre anders bei
  ((long long)a * b)
Gast #5680305
Lesenswert?

Fehler erkannt.
Die alte Berechnung des SHT11 war fehlerhaft.
Ich habe zu früh mit 10 multipliziert um 1 Nachkommastelle zu bekommen.

Die Abweichng ist kleiner geworden, aber immer noch da.
SHT21:34%  zu SHT11:38%

Korrregierter Code SHT11:
1
//----calculate SHT11----------------------------------------
2
RHlin =  (-2.0468 + (0.0367 * resultRH1) +  (-1.5955e-6 * resultRH1 * resultRH1)  ) ; // linearisizion 
3

4
TEMPlin =   (-40.1 +  (0.01 * resultTEMP1 ))  ; // linearisizion degree Celsius 
5

6
RHtrue = (TEMPlin -25.0 ) * (0.01 + 0.00008 * resultRH1 ) + RHlin ; // according SHT11 data sheet
7

8
SHT_A_humi =  RHtrue*10;  // convert to global INT
9
SHT_A_temp =  TEMPlin*10;  // convert to global INT

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren