Entwicklung: Temperatur Funk Sensor

  • Moin m55,

    ich habe dieses SHT21 Modul, (siehe Anhang).
    Der Sensor, SHT21, ist auf der Rückseite.
    An einem TX3-Board mit 4,1 V bekomme ich nur
    negative Werte für Temp und Feuchte. Die LED braucht einige
    Sekunden, bis sie aufleuchtet, und bleibt dann an.
    Gesendet wird weiterhin.
    An einem UNO läuft es mit 5 V.

    Hast Du eine Idee?

    Gruss
    rpi1950


  • Diese Partslisten hatte ich bereits gefunden; nur mit der Interpretierung hapert es anscheinend etwas... Mir ist dabei schon klar, dass ich bei 10K einen SMD Widerstand mit 10k Ohm benötige und der auch aus der R0805-Reihe sein soll. Dann hört es nach dem Attiny84 und RFM12B jedoch leider schon auf. Gibt es z. B. bei Reichelt einen fertigen Warenkorb?


    Es gab 2 Sammelbestellungen mit jeweils Stückzahlen > 300 , da wurden fast alle Bauteile bei Großhändlern wie Linear und Mouser bestellt, nur die Gehäuse und Batteriehalter kamen von Reichelt - woher die RFM12B kamen weiß ich aber mittlerweile auch nicht mehr..
    Also nein, es gibt keinen Warenkorb für die v4, sorry.

  • Uff, ja Du hast recht. Das Breakout-Board ist ja ziemlich verwirrend beschriftet- da stehen gleich drei Bezeichnungen drauf SHT21, HTU21 und SI7021.
    Leider kann man ja die Beschriftung auf dem Bauteil nicht erkennen, weil auf meinem Sensor noch eine Membran klebt, die den Sensor schützen soll,
    jedoch feuchtigkeitsdurchlässig ist. Das Board findet man auch noch unter der Bezeichnung GY-21 HTU-21 - bei den meisten Beschreibungen wird
    von SHT21 Kompatibilität gesprochen, was ja auch funktioniert. Doof, dass der SHT1x Kompatibilitätsmodus fehlt ...

    Die Messwerte habe ich über den Tag beobachtet. Die Temperatur wird recht zuverlässig gemessen, die Feuchtemessung steigt manchmal aus,
    so dass ein negativer Wert gesendet wird. Das muss ich im Sketch noch abfangen.

    Beste Grüße,
    /luetzel



    37


  • Nachtrag: Ich lese gerade deinen Beitrag #1.534 - Du suchst SMD Bauteile. Hast du denn TinyTX4 Platinen? Für die TinyTX3 von Nathan sollte der Reichelt Warenkorb von meigrafd passen - für die TX4 ist mir kein Reichelt Warenkorb bekannt...


    Ansonsten fragt doch mal bei Himbeerfreund nach. Er hatte die letzte Sammelbestellung mit den TinyTX4 bestückt / gelötete und hat damit sicherlich auch eine Einkaufsliste. Meines Wissens hat er auch noch ganz wenige Teile selbst "am Lager".

  • Scheint dass die Chinesen die Bezeichnung nicht ganz so ernst nehmen...
    Bei aliexpress gibts den SHT21 offenbar nur ohne Board:
    http://de.aliexpress.com/item/Sht21-tem…1786691381.html
    und teuer isser auch...

    Die negativen Feuchtewerte bringt meiner auch, und zwar immer genau den gleichen Wert,
    in ganz unregelmässigen Abständen. Bin leider nicht draufgekommen warum, hab den Wert dann halt auch ganz unelegant abgefragt und bereinigt. Und gestern hat er mir 4 oder 5mal eine Temperatur von 41*C geschickt, seither aber wieder alles normal ...

    Ich hab gesehen dass deiner auch eine Heizung hätte, da sollte Betauung ja kein Thema mehr sein,
    nur wie wirkt sich das auf die Temperaturmessung wohl aus :huh:

    Beste Grüße
    m55
    Automatisch zusammengefügt:

    Kann es sein, dass du 2 Pullupwiderstände zwischen Vcc -> Datapin und Vcc -> Clockpin brauchst - siehe luetzels posting weiter oben...
    Beim Uno dürften die Pullups schon eingebaut sein.
    Beste Grüße
    m55

    Edited once, last by m55 (January 13, 2016 at 7:17 PM).

  • Ich habe bei der Suche nach den Libraries gelesen, dass die negativen Werte immer dann erzeugt werden, wenn bei der Sensorabfrage die Kommunikation
    fehlschlägt. Das betrifft sowohl die Temperatur, als auch die Feuchtigkeit. Ich bin auch gerade dabei und ändere den Sketch, damit diese Werte nicht vom
    TinyTX übertragen werden.

    Über die Heizung habe ich auch gelesen, aber das ist in der Adafruit-Library leider nicht implementiert. Ich muss mir mal anschauen wie das genau funktioniert ...

    Im Moment bin ich über die 'Temperature Coefficient Compensation' gestolpert.

    RHcompensated = RHactualT + (25 - Tactual) * CoeffTemp

    Mit der Korrektur soll die angegebene Genauigkeit erreicht werden, nur finde ich nirgends den Korrekturfaktor 'CoeffTemp' dokumentiert :s
    Muss man den erst durch Kalibrierung herausfinden? Stehe grad auf dem Schlauch, ob der überhaupt notwendig ist ...


  • Hallo m55,

    sollte mit drauf sein, siehe Anhang.
    Evtl. ist die Vin zu gering, die wird ja von einem Pin
    geliefert.
    Gruss
    rpi1950

    Ich würde da einfach mal testweise verschiedene Pullups ausprobieren, auch wenn die schon verbaut sind. Ich hatte das Problem am
    Arduino, wenn ich die SoftwareI2C Library verwendet habe. Mit 'richtigem' I2C waren auch am Arduino UNO/Mega keine Pullups
    erforderlich. 10K Pullups waren jedoch nicht ausreichend - funktioniert hat es mit 22K und 47K.

    Weisst Du denn was bei Dir für eine Sensor-Variante verbaut ist?

    /luetzel


  • Hallo luetzel,

    der Sensor ist ein SHT21D

    Gruss
    rpi1950

    nach deinem Bild sieht das ja eher wie ein SI7021 aus, die Unterseite ist jedenfalls so wie luetzels.

    Dein Problem könnte auch mit der Umrechnung der RohdateN zu tun haben, und zwar mit der Wortbreite.
    Welche Library verwendest du denn?
    In der von mir modifizierten SHT1x.cpp gibts die Formel

    _temperature = (-46.85 + 175.72 / 16384.0 * (float)(_val));

    wobei _val der empfangene Rohwert ist und 16384 die Wortbreite in meinem Fall also 2hoch14 ist.
    Bei 16bit müßte da entsprechend 65536 stehen.

    beste Grüße
    m55
    Automatisch zusammengefügt:


    Ich habe bei der Suche nach den Libraries gelesen, dass die negativen Werte immer dann erzeugt werden, wenn bei der Sensorabfrage die Kommunikation
    fehlschlägt. Das betrifft sowohl die Temperatur, als auch die Feuchtigkeit. Ich bin auch gerade dabei und ändere den Sketch, damit diese Werte nicht vom
    TinyTX übertragen werden.

    Über die Heizung habe ich auch gelesen, aber das ist in der Adafruit-Library leider nicht implementiert. Ich muss mir mal anschauen wie das genau funktioniert ...

    Im Moment bin ich über die 'Temperature Coefficient Compensation' gestolpert.

    RHcompensated = RHactualT + (25 - Tactual) * CoeffTemp

    Mit der Korrektur soll die angegebene Genauigkeit erreicht werden, nur finde ich nirgends den Korrekturfaktor 'CoeffTemp' dokumentiert :s
    Muss man den erst durch Kalibrierung herausfinden? Stehe grad auf dem Schlauch, ob der überhaupt notwendig ist ...

    Ob man das überhaupt braucht, das war ja meine Frage vor kurzem....
    Im Datasheet zum SHT21 steht:
    The physical value RH given above corresponds to the relative humidity above liquid water according to World Meteorological Organization (WMO). For relative humidity above ice RHi the values need to be transformed from relative humidity above water RHw at temperature t. The equation is given in the following, compare also Application Note “Introduction to Humidity”

    Diese Introduction - ichhatte noch nicht den Nerv mich da durch zu arbeiten, wahrscheinlich fehlt mir dazu auch der dazupassende doktortitel :s
    https://www.sensirion.com/fileadmin/user…Humidity_V2.pdf

    Beste Grüße
    m55

    Edited once, last by m55 (January 14, 2016 at 11:16 AM).


  • nach deinem Bild sieht das ja eher wie ein SI7021 aus, die Unterseite ist jedenfalls so wie luetzels.

    In der von mir modifizierten SHT1x.cpp gibts die Formel

    _temperature = (-46.85 + 175.72 / 16384.0 * (float)(_val));

    wobei _val der empfangene Rohwert ist und 16384 die Wortbreite in meinem Fall also 2hoch14 ist.
    Bei 16bit müßte da entsprechend 65536 stehen.

    Also im Datenblatt für den SHT21 steht unter 6.1 und 6.2: "Temperature/Humidity Conversion - The temperature T is calculated by inserting temperature
    signal output ST into the following formula (result in °C), no matter which resolution is chosen.

    temp = -46.85 + 175.72 / 65536 * ST
    hum = -6 +125 / 65536 * ST

    Diese Gleichungen findet man auch im Datenblatt für den SI7021/HTU21D-F. Dort steht dann noch:

    "Similarly, the measured value of %RH may be slightly greater than 100 when the actual RH level is close to or equal to 100. This is expected
    behavior, and it is acceptable to limit the range of RH results to 0 to 100%RH in the host software by truncating values that are slightly outside
    of this range." Interessant, denn Du hattest ja mal erwähnt, dass Du auch Werte > 100 % gemessen hast.

    Über die compensated relative Humidity findet man mit Google zahlreiche Quellen, dass damit wohl die RH% unter "Standardbedingungen",
    d.h. 25 Grad *C gemeint ist. Könnte hinkommen denn es wird ja die Differenz zwischen 25 *C - und aktueller Temperatur einbezogen.

    RHcompensated = RHactualT + (25 - Tactual) * CoeffTemp

    Und in der Adafruit HTU21D-F library für den Arduino, findet man auch das hier:

    und in der header Datei findet man auch den Coefficient:

    Code
    #define TEMP_COEFFICIENT    -0.15   /* Temperature coefficient (from 0deg.C to 80deg.C) */

    Leider ohne Quelle, woher diese 'Magic Number' kommt :s


    Diese Introduction - ich hatte noch nicht den Nerv mich da durch zu arbeiten, wahrscheinlich fehlt mir dazu auch der dazu passende doktortitel :s
    https://www.sensirion.com/fileadmin/user…Humidity_V2.pdf

    Beste Grüße
    m55

    Ok, dieses PDF hatte ich auch noch nicht auf dem Schirm. Der 'Dr. rer. nat.' ist zwar vorhanden, aber meine Kenntnisse in Physikalischer Chemie von 'anno dunnemals'
    sind mangels Anwendung etwas angerostet :sleepy: ... werd' mal nach einem Kollegen suchen, der mir das erklären kann.

    Beste Grüße,

    /luetzel


  • Hallo m55,

    auf dem Sensor steht jedenfalls SHT21 und
    ich benutze Deine modifizierte SHT1x lib.

    Gruss
    rpi1950

    Interessant, laut Foto sind dein und mein SHT21 eindeutig verschiedene Sensoren, ich hab ein Bild weiter vorne gepostet, schau dir das mal an, gekauft hab ich bei http://shop.emsystech.de/themes/kategor…e=1&refertype=9

    Ich hab den Verdacht, dass wir zusammen mit luetzels Sensor jetzt drei verschiedene Sensoren haben, die
    "Sht21-kompatibel" sind, sich aber in Details unterscheiden...

    Trotzdem, ich würde mal versuchen in der SHT1x.cpp in beiden Funktionen readTemperatur und readHumidity die Conversion-Formel zu ändern, so wie es im Datenblatt zum HTU21 angegeben ist.

    Alternativ könntest du die Adafruit Library probieren, die luetzel benützt - siehe oben.

    Beste Grüße
    m55

  • Ich habe gestern leider beim versuch das Test_send sketch zu probieren die Batterien falsch herum angeschlossen.
    Kurze Qualmwolke und etwas stinken und dachte nur so ein mist.

    Was meint ihr was alles defekt ist?
    Trau mir auch nicht zu die Teile neu auf-zulöten.

  • Um welche Boards handelt es sich - TinyTX3 oder TinyTX4 mit Booster? Wenn es ein TX4 Board mit Booster war, dann ist der Booster hin. Beim TinyTX4 kannst Du versuchen den Jumper für 'No Booster' zu setzen, dann könntest Du Glück haben und der Rest geht noch... Was ist denn schwarz/verbrannt?

  • Also im Datenblatt für den SHT21 steht unter 6.1 und 6.2: "Temperature/Humidity Conversion - The temperature T is calculated by inserting temperature
    signal output ST into the following formula (result in °C), no matter which resolution is chosen.

    temp = -46.85 + 175.72 / 65536 * ST
    hum = -6 +125 / 65536 * ST

    Diese Gleichungen findet man auch im Datenblatt für den SI7021/HTU21D-F. Dort steht dann noch:
    ....

    Ok, langsam glaube ich kommt Licht in die Sache, ich fasse mal zusammen:

    Wir haben also 3 verschiedene SHT21-kompatible Sensoren.
    SHT21 (Schutzabdeckung extra, Bauteil eindeutig beschriftet)
    SI7021 (ggf mit Schutzabdeckung rechteckig mit abgeflachter Ecke)
    HTU21 (ggf mit Schutzabdeckung rechteckig)
    Was auf den Breakoutboards steht muss nicht unbedingt stimmen, gibt diverse/seltsame Varianten!
    Eigentlich sollten alle mit der HTU21 Adafruit Lib laufen, das wäre noch zu testen....

    - Die oben zitierten Formeln betreffen die Konvertierung, heisst die Umrechnung der Rohdaten in einer gegebenen Wortbreite/Auflösung in Grad C bzw % rel Feuchte. Alle Sensoren liefern 16bit breite Werte unabhängig von der Auflösung.
    Mit der SHT1x-Lib im Kompatibilitätsmodus muss allerdings die entsprechende Bitbreite in der Formel berücksichtigt werden!
    (Wie das für den HTU21 ist, ist noch offen)

    - Eine anschließende Temperatur-Kompensation der rel. Feuchte ist bei HTU21 (und bei den älteren SHT1x) erforderlich.
    Das geht sowohl aus den jeweiligen Datenblättern und auch aus den Libraries hervor.
    Bei SI7021 und SHT21 steht weder im Datasheet noch in den Libraries (für "echtes" i2c) etwas bezgl. Kompensation, deshalb ist anzunehmen, dass die Werte schon intern kompensiert werden.

    - Fragt sich noch, ob der SHT21 im Betrieb mit der SHT1x-Lib (im "Kompatibilitätsmode") auch kompensiert werden muss.
    Nehme das aber fast an - kompatibel sollte heissen neuer Sensor läuft mit alter Software ohne Änderung, also mit Kompensation. Es wird ja auch im Kompatibilitätsmodus eine andere Adresse angesprochen.
    Im SHT1x Modus ist zudem die Anpassung an die Wortbreite/Auflösung nötig, deshalb gibt es in der SHT1x-Lib auch 2 Koeffizienten T1 und T2.
    (Die Kompensation dürfte auch abhängig von der Versorgungsspannung sein, da die Koeffizienten @5V angegeben werden.)

    Beste Grüße
    m55

    Edited once, last by m55 (January 14, 2016 at 10:14 PM).

  • Eigentlich sollten alle mit der HTU21 Adafruit Lib laufen, das wäre noch zu testen....

    Danke für die Zusammenfassung. Ich habe inzwischen noch das hier gefunden und mal am Arduino getestet.

    https://github.com/enjoyneering/HTU21D

    In der Beschreibung steht:

    "This is an Arduino library for HTU21D, Si7021 and SHT21 Digital Humidity & Temperature Sensor
    Supports all sensors features:

    • read Humidity
    • calculate Compensated Humidity
    • read Temperature
    • change Resolution
    • soft Reset
    • check Battery Status
    • turn ON/OFF build-in Heater"


    Sehr interessant, weil alle Funktionen unterstützt werden. Bei den 'Examples' für diese Lib findet man auch ein Demo.ino für alle
    Funktionen, einschliesslich Heater. Wenn der einschaltet, dann steigt (wie erwartet) bei der Messung die Temperatur um 1-2 Grad *C.
    In der Demo wird geschrieben, dass der Heater nur zu 'Testzwecken' verwendet werden soll - das ist klar.

    Nun müsste man diese Lib "nur noch" auf SoftwareI2C portieren, damit man die Lib auch am TinyTX verwenden kann.

    m55: Noch ein Hinweis bzgl. der gelegentlichen Messwerte für die Feuchte. Ich habe den Sketch nun so geändert, dass
    zwischen der Temperatur und Feuchtemessung der Sensor ab, und nach einem delay(), wieder angeschaltet wird.

    Zurzeit ist delay(5000) eingestellt, evtl. kann man das noch verkürzen, damit der Tiny schneller in den Schlaf geschickt werden
    kann.


    Negative Werte habe ich beim Testbetrieb über Nacht nicht mehr erhalten. Zuvor hatte ich auch noch "Sprünge" in der RH%
    von Messung zu Messung beobachtet, die nicht besonders plausibel waren (mal 55%, dann 22%, dann wieder 55%).
    Die sind mit dem delay() zwischen den Messungen verschwunden.

    Beste Grüße,

    /luetzel

  • Hallo,

    ja, ich habe hier 11x TinyTX4 und 11x TinyRX4 und ca. 50x Booster Platinen. Hinzu kommen leidlicherweise noch 10x TinyTX3 Platinen, da ich dieses tolle Projekt erst später entdeckt habe. Davon brauche ich natürlich gerade einmal die Hälfte. Und um sie bestücken/löten zu lassen, muss ich natürlich wissen, was bestückt und gelötet werden soll. Ich habe auch eine Firma um die Ecke, die für uns bei der Arbeit lötet und bestückt, daher würde ich da zu gerne einmal vorbei schauen und einen Auftrag platzieren wollen.

    Gut, dann würde ich mich direkt an Himbeerfreund wenden und Ihn einmal befragen. Die Teile für den TinyTX3 liegen bereits zu Hause um gelötet zu werden, da war es sehr einfach, die Bauteile herauszufinden. Euch schon einmal vielen Dank für die bisherige Hilfe.


  • ja, ich habe hier 11x TinyTX4 und 11x TinyRX4 und ca. 50x Booster Platinen.

    Wenn Deine TinyTX3 noch nicht gelötet sind, dann kann bei denen ja auch kein Bauteil gegrillt worden sein, als du die Batterien verkehrtherum angeschlossen hast. Folglich muss es sich um einen TinyTX4 handeln, den Du gebraten hast. Was fehlt ist eine Angabe ob Deine TinyTX4 einen Booster aufgelötet haben oder nicht. Deine Angabe von 'ca. 50 Booster Platinen' legt nahe, dass das nicht der Fall ist.

    Wie bereits geschildert: Wenn Du die TinyTX4 mit Booster hast, dann ist der Booster am Ende nachdem Du die Batterien verkehrtherum angeschlossen hast. Den Schaden sollte man aber auch direkt auf der Platine recht gut sehen können. Den Booster auf der TinyTX4 Platine kannst Du mit dem Jumper 'No Booster' umgehen und dann einen von den 50 anderen Boostern als Ersatz nehmen.

    Ob Himbeerfreund aus der Ferne sehen kann, welches Bauteil bei Dir durchgebrannt ist wage ich mal zu bezweifeln - da könnte aber ein Foto helfen...

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!