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;
#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