Forum: Mikrocontroller und Digitale Elektronik SHT11 SHT21 unterschiedliche Luftfeuchte Werte


von Dirk F (Gast)


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;

von Wolle G. (wolleg)


Lesenswert?

Überprüfen kann man die Fühler, indem man die Feuchtigkeit über 
gesättigten Lösungen misst.
Werte dazu: siehe z.B. 
Beitrag "Re: DHT11 Feuchtigkeitssensor sehr ungenau"

von Dirk F (Gast)


Lesenswert?

Hallo Wolleg,
ich denke die Sensoren sind OK, da ich von jedem 2 Stück betreibe.
Beide SHT11 zeigen das gleiche an, beide SHT21 auch.

von ich (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

Dirk F schrieb:
> SHT_A_humi = (long long)  (-60 + (1250 * resultRH1 / 0xffff )) ;

Will nur vorsichthalber darauf hinweisen, dass die Breite der Rechnung 
hier nicht von dem (long long) bestimmt wird, sondern vom unbekannten 
Typ von resultRH1 und der unbekannten Wortbreite des Prozessors.

: Bearbeitet durch User
von Dirk F (Gast)


Lesenswert?

resultRH1 ist 16 Bit breit.

von (prx) A. K. (prx)


Lesenswert?

Dann wäre es bei einem 16 Bit Prozessor eher Zufall, wenn es mal stimmen 
sollte. Denn 1250 * resultRH1 hätte ein 16 Bit Ergebnis.

: Bearbeitet durch User
von Dirk F (Gast)


Lesenswert?

Der Prozessor ist ein PIC32MX.

(long) ist hier 32 Bit, hätte gereicht, Long Long ist 64 Bit INT.

von (prx) A. K. (prx)


Lesenswert?

Dirk F schrieb:
> Long Long ist 64 Bit INT.

Was hier keinerlei Rolle spielt.

von Dirk F (Gast)


Lesenswert?

A. K. schrieb:
> Was hier keinerlei Rolle spielt.

Also wird Deiner Meinung nach die o.g. Rechnung in 32 Bit durchgeführt 
`?

von Mario M. (thelonging)


Angehängte Dateien:

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
}

von (prx) A. K. (prx)


Lesenswert?

Dirk F schrieb:
> Also wird Deiner Meinung nach die o.g. Rechnung in 32 Bit durchgeführt

Ja. Ganzzahlig.

von Dirk F (Gast)


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

von (prx) A. K. (prx)


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)

: Bearbeitet durch User
von Dirk F (Gast)


Lesenswert?

Ah
danke AK.
Stimmt ich bin nicht gut in C.

von Dirk F (Gast)


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

von Einhart P. (einhart)


Lesenswert?

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

Das sieht doch einwandfrei aus. Mehr wird die Genauigkeit der Sensoren 
nicht hergeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.