Interpolation zur Eliminierung fehlerhafter MEsswerte

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
harvey
Beiträge: 136
Registriert: 01.12.2013, 13:19
Danksagung erhalten: 3 Mal

Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von harvey » 15.01.2020, 08:53

Hi,

ich hatte bei einem DHT22 ständig sporadisch Meßfehler, also deutlich niedrigere Werte, durchaus mehrfach am Tag.
Zuerst hattte ich den Zeitabstand bei den Messungen im Verdacht, da der DHT22 im Gegensatz zum DHT11 einen Abstand von 2 Sekunden hat, der DHT11 nur 500 Millisekunden.

Daraufhin hatte ich die Library "sensors/Dht.h" angepasst:

Code: Alles auswählen

  else if( measure > 0 ) {
		 if (TYPE == DHT11) {	
                   _delay_ms(500);
		 } else {
                   _delay_ms(2500);
	         }
 ...  
Allerdings hat das die Fehlmessungen nicht deutlich verändert.

Dann habe ich eine Anpassung der Messung selbst vorgenommen, die die Meßfehler ausblendet. Dazu wird die prozentuale Abweichung zum letzten Meßwert ermittelt und entsprechend der zurück gegebene Meßwert gemittelt. Eventuell overkill, aber jetzt habe ich eine recht saubere, glatte Linie.

Code: Alles auswählen

      if (!dht.measure()) {
        DPRINTLN(F("DHT measurement NOT ok."));
      } else {
        uint16_t delta_h = 0;
        if ( (!firstloop) && (humidity != 0) ) {    // after second measure calc abs difference in %
          delta_h = int( abs( (100.0 * ((float)dht.humidity() / (float)humidity)) - 100.0));
//          DPRINT(F("### gemessen  : "));DDECLN(dht.humidity());
//          DPRINT(F("### alter wert: "));DDECLN(humidity);
//          DPRINT(F("### delta H%  : "));DDEC(delta_h);DPRINTLN(F("%"));
        }
        if ( (delta_h > 10) && (delta_h <= 25) && (!firstloop) ) {     // use interpolation when more than 10% and less than 25% difference
          humidity = int( (humidity + ((dht.humidity() - humidity) * 0.3) ) );
        } else if ( (delta_h > 25) && (!firstloop) ) {                         // vey small interpolation when more than 25% difference
          humidity = int( (humidity + ((dht.humidity() - humidity) * 0.01) ) );
        } else {
          humidity = dht.humidity();                                               // no interpolation on firstloop or lessequal 10% diffference
        } 
....
   }
Auch wenn das Beispiel um den DHT22.humidity() geht ist es auch auf andere Messungen mit Störpotential anpassbar.
Als Hinweis:
humidity ist die Variable aus dem Sketch, die als Wert im Telegramm zurückgegeben wird, sie wird danach nicht gelöscht und behält so den Wert der letzten Meßwertrückgabe,
firstloop ist eine bool Variable, die nur bei der ersten Messung true ist, da dann noch kein humidity-Wert vorhanden ist. Außerdem wird nicht durch humidity=0 geteilt, dann ist delta_h=0 und der Meßwert wird nicht interpoliert.

Viel Erfolg damit und
ciao
Harvey
Homematic raspberrymatic, iobroker, Asksinpp und Arduinos - rund 50 Geräte

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von der-pw » 15.01.2020, 09:11

Hut ab, dass du die Zeit und Ideen in solch ein Schätzeisen investiert hast. :D

Ich referenziere meine Thermometer (meist mit BME280) immer gegen ein HM-TC-IT-WM-W-EU und stelle fest, dass der BME seit der letzen Anpassungen in der Lib sogar etwas flotter reagiert, einzig ein offset von +/-1°K muss hinterlegt werden.
Kannst du was zur Vergleichbarkeit sagen ggü. einem HM-TC-IT-WM-W-EU?
Grüße,
Patrick

https://github.com/der-pw

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von jp112sdl » 15.01.2020, 09:21

Ich habe im Laufe der Zeit auch viele Sensoren durchprobiert.

Unbedarft am Anfang am Wemos D1 mit den DHT, die aber bei mir alles nur Schätzeisen waren.
5 Geräte nebeneinander auf dem Tisch -> 5 unterschiedliche Werte, extrem abweichend (teilweise 1,6K)!

Dann AskSin++ kennen gelernt, erste Sensoren mit SHT10 aufgebaut -> Top. Abweichungen im 0,1-0,2K Bereich
Mal nachgeschaut, was eQ-3 so verbaut: SHT20.

Die Sensirion Sensoren sind echt klasse. Ich würde keine anderen Sensortypen verbauen.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von jp112sdl » 15.01.2020, 09:22

der-pw hat geschrieben:
15.01.2020, 09:11
Hut ab, dass du die Zeit und Ideen in solch ein Schätzeisen investiert hast. :D
Ja, solche tollen Ausarbeitungen gehen hier nur nach ner Hand voll Threads im Nirvana unter.
Schade eigentlich.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von der-pw » 15.01.2020, 09:34

jp112sdl hat geschrieben:
15.01.2020, 09:22
lche tollen Ausarbeitungen gehen hier nur nach ner Hand voll Threads im Nirvana unter.
Du meinst, wir brauchen einen "gute Ideen"-Katalog auf Asksinpp.de? :)
Grüße,
Patrick

https://github.com/der-pw

harvey
Beiträge: 136
Registriert: 01.12.2013, 13:19
Danksagung erhalten: 3 Mal

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von harvey » 15.01.2020, 09:42

Hi,
na so aufregend war das auch nicht, aber Danke!

Auch ich habe zeitweise diverse Sensoren nebeneinander gehabt, etwa im Bad, wo Feuchtigkeit und Temperatur (z.B. durch Duschen) sich ändern.
Neben den sporadischen Meßfehlern eigentlich nicht so schlecht, also durchaus parallel. Außerdem, wer interessiert sich für 1% bei Feuchtigkeit?
Absolut oder relativ, es geht (neben dem Spaß am Bauen) etwa um "Lüften über 70% Luftfeuchtigkeit". In dem konkreten Projekt sind die Fehler sogar ohne Bedeutung, da alle Ausreißer nach unten waren, die Lüftersteuerung aber eben hohe Luftfeuchtigkeit zur Auslösung braucht.

Auch andere Sensoren haben (bei mir) sporadische Abweichungen, teilweise sehen die Grafiken nur merkwürdig aus: der Regenwassertank spinnt immer wieder, wenn es stark regnet, vermutlich durch plätschern oder unruhige Wasseroberfläche. Die Grafik lässt sich prima durch Interpolation beruhigen, der Meßwert kann sich physikalisch ja garnicht sooooo schnell bewegen.

Auch experimentiere ich mit Windrichtung (eigentlich ziemlich kompletter Unsinn, was will ich damit steuern?!?). Meine Testfahne schafft es ständig, sich komplett im Kreis zu drehen! Da denke ich in Wachträumphasen sogar über eine Dämpfung im Ölbad (o.ä.) nach. Für die Bastelsuperfreaks: es gibt sogar bewegungslose Windrichtungsmessung mit mehreren Ultraschallstrecken, DA kann sich der Bastler richtig austoben!!!! Friert auch bei extremen Temperaturen nicht ein, aber das Problem wird ja gerade anders gelöst :-)

Macht einfach SPASS und das soll auch weiter so bleiben!
ciao
Harvey
Homematic raspberrymatic, iobroker, Asksinpp und Arduinos - rund 50 Geräte

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 71 Mal

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von klassisch » 15.01.2020, 09:50

Hatte auch mit DHT22 begonnen und wegen der Spikes extra einen FIR-Filter implementiert. Vergebliche Liebesmüh' für den DHT.
Als T-Sensor mag der noch durchgehen, aber H ist unterirdisch.
Die Dallas Sensoren DS18B20 sind auch ordentliche und günstige T-Sensoren.
Mit H-Sensoren im Freien bin ich generell nicht so euphorisch.
Schaut mal die aktuellen Werte meines "Zoos":
H-rel-Garten-20200115.JPG
- Rot und Grün sind BM280. Grün einige Wochen alt, Rot ca ein Jahr alt
- Dunkelblau Sensirion SHT31. 2 Jahre alt oder so, jedenfalls waren die H-Werte von Anfang an verdächtig niedrig und sind es noch bis heute
- Hellblau: der "Mercedes": Sensirion SHT35, wenige Wochen alt
- Gelb: HM Außensensor, also wohl SHT20?. Etliche Jahre alt. Leicht anderer Standort, hält noch ordentlich mit.
- Pink: Billigsensor 433MHz und etwas anderer Standort, näher am Haus.

BME280 und SHT71 kommen auch dort gut weg: http://www.kandrsmith.org/RJS/Misc/Hygr ... _many.html

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von jp112sdl » 15.01.2020, 10:00

harvey hat geschrieben:
15.01.2020, 09:42
Außerdem, wer interessiert sich für 1% bei Feuchtigkeit?
Ich mich nicht. Bei der Temperatur hätte ich es schon gern genau. Aber :arrow:
klassisch hat geschrieben:
15.01.2020, 09:50
Vergebliche Liebesmüh' für den DHT.

===
harvey hat geschrieben:
15.01.2020, 09:42
es gibt sogar bewegungslose Windrichtungsmessung mit mehreren Ultraschallstrecken, DA kann sich der Bastler richtig austoben!!!!
Ich finde Windrichtung- und -geschwindigkeitsmessung in One über Differenzdruck sehr interessant.
https://developer.sensirion.com/applica ... ing-sdp3x/

Huch, sind wir schon wieder bei Sensirion. :mrgreen:
Nein, ich bekomme keine Provision :mrgreen:

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: Interpolation zur Eliminierung fehlerhafter MEsswerte

Beitrag von der-pw » 15.01.2020, 10:48

harvey hat geschrieben:
15.01.2020, 09:42
Macht einfach SPASS und das soll auch weiter so bleiben!
So soll das sein! ;-)
Grüße,
Patrick

https://github.com/der-pw

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“