Forum: Mikrocontroller und Digitale Elektronik SHT11 SHT21 unterschiedliche Luftfeuchte Werte


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dirk F (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
resultRH1 ist 16 Bit breit.

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Dirk F schrieb:
> Long Long ist 64 Bit INT.

Was hier keinerlei Rolle spielt.

von Dirk F (Gast)


Bewertung
0 lesenswert
nicht 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:

Bewertung
-1 lesenswert
nicht 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)


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

Ja. Ganzzahlig.

von Dirk F (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Ah
danke AK.
Stimmt ich bin nicht gut in C.

von Dirk F (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.