HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

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

Moderator: Co-Administratoren

jp112sdl
Beiträge: 4470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 128 Mal
Danksagung erhalten: 284 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 03.11.2019, 22:29

Hmm dann bin ich etwas überfragt.
Aber das Gerät ist ohnehin nicht wirklich verlässlich.
Oder hast du noch was am Code angepasst?
Ich hab’s ja damals irgendwann aufgeben (siehe ersten Beitrag des Threads)

VG,
Jérôme

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 03.11.2019, 22:45

jp112sdl hat geschrieben:
03.11.2019, 22:29
Hmm dann bin ich etwas überfragt.
Aber das Gerät ist ohnehin nicht wirklich verlässlich.
Oder hast du noch was am Code angepasst?
Ich hab’s ja damals irgendwann aufgeben (siehe ersten Beitrag des Threads)
Ich habe einen BME680 Sensor über pmatic ohne Funkanbindung als Innenraumsensor seit ca. 2 Jahren in Benutzung. Nun will ich einen BE680 Funkaußensensor dazufügen.

Am Code geändert hatte ich bisher nur die Device Properties:

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0xf1, 0xd1, 0x01}, // Device ID
"JPIAQ0001", // Device Serial
{0xf1, 0xd1}, // Device Model Indoor
0x10, // Firmware Version
as::DeviceType::THSensor, // Device Type
{0x01, 0x00} // Info Bytes
};

und die Abtastrate:

uint32_t delay () {
return seconds2ticks(max(this->device().getList0().updIntervall(), 240));
}

Zwei BME280 basierte HM-WDS40-TH-I Asksinpp Sensoren ließen sich problemlos in meine Raspberrymatic einbinden.

VG

Ewald
Grüße

Ewald

jp112sdl
Beiträge: 4470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 128 Mal
Danksagung erhalten: 284 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 04.11.2019, 07:14

Ich meine, die Messwerte vom BME680 sind nicht plausibel. Die werden dir nix nützen... deshalb liegt das Projekt auch auf Eis.

VG,
Jérôme

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 25.11.2019, 19:14

Hallo Jerome,

nun hab ich endlich die Ursache des Fehlers gefunden: Mein Fehler: Die Device ID war nur 9 stellig. Nach der Korrektur auf 10 Zeichen läuft alles wie erwartet. Der Sensor funktioniert :) . Nun kann ich mir die Messroutinen anschauen und werde berichten, wenn ich was Brauchbares gefunden habe.

Gruß

Ewald
Grüße

Ewald

jp112sdl
Beiträge: 4470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 128 Mal
Danksagung erhalten: 284 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 25.11.2019, 20:49

Ja cool. Berichte mal!

VG,
Jérôme

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 23.12.2019, 16:06

Hallo Jerome,

nach einigem Suchen bin ich auf die vermutliche Ursache der sprunghaften Gaswiderstands- und IAQ-Werte gestoßen:

Das Bitmapping für das Auslesen des Gaswiderstandregister in der referenzierten Library 'ClosedCube_BME680' ist m.E. falsch. In 'ClosedCube_BME680.cpp' steht, meiner Ansicht nach falsch, in Zeile 119 - 133:

uint32_t ClosedCube_BME680::readGasResistance() {
typedef union {
uint8_t raw;
union {
uint8_t range : 2;
uint8_t lsb : 6;
};
} gas_lsb_t;

gas_lsb_t gas_lsb;

uint8_t gas_msb = readByte(0x2A);
gas_lsb.raw = readByte(0x2B);

uint16_t gas_raw = gas_msb << 8 | gas_lsb.lsb;

Richtig ist m.E. entsprechend des Datenblatts BME60 Kapitel 5.2 'Memory Map', Seite 25, Register Name gas_r_lsb und gas_r_lsb:

uint32_t ClosedCube_BME680::readGasResistance() {
typedef union {
uint8_t raw;
union {
uint8_t range : 4;
uint8_t heat_stab_r: 1;
uint8_t gas_valid_r: 1;
uint8_t lsb : 2;
};
} gas_lsb_t;

gas_lsb_t gas_lsb;

uint8_t gas_msb = readByte(0x2A);
gas_lsb.raw = readByte(0x2B);

uint16_t gas_raw = ((uint16_t)gas_msb) << 2 | (uint16_t)gas_lsb.lsb;

Die Validierung dieser Änderung läuft noch. Erste Ergebnisse zeigen keine Sprünge der Messwerte mehr.

Gruß

Ewald
Grüße

Ewald

stan23
Beiträge: 847
Registriert: 13.12.2016, 21:14
Wohnort: Altmühltal
Hat sich bedankt: 117 Mal
Danksagung erhalten: 57 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von stan23 » 23.12.2019, 17:16

Da ist noch ein Fehler drin:
das innere Element darf kein Union sein, sondern eine Struct.

Code: Alles auswählen

uint32_t ClosedCube_BME680::readGasResistance() {
	typedef union {
		uint8_t raw;
		struct {
			uint8_t range : 4;
                        uint8_t heat_stab_r: 1;
                        uint8_t gas_valid_r: 1;
			uint8_t lsb : 2;
		};
	} gas_lsb_t;

	gas_lsb_t gas_lsb;

	uint8_t gas_msb = readByte(0x2A);
	gas_lsb.raw = readByte(0x2B);

	uint16_t gas_raw = (uint16_t)gas_msb << 2 | (uint16_t)gas_lsb.lsb;
[/quote]
Viele Grüße
Marco

RaspberryMatic
~70 Geräte (HM, HmIP, HMW, HBW, AskSin)

jp112sdl
Beiträge: 4470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 128 Mal
Danksagung erhalten: 284 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 23.12.2019, 18:07

Schön, dass hier noch Bewegung drin ist.
Bin gespannt auf die weiteren Ergebnisse

VG,
Jérôme

FUEL4EP
Beiträge: 24
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von FUEL4EP » 27.12.2019, 12:07

Hallo Zusammen,

unten die ersten IAQ Messwerte nach der Korrektur. Der IAQ Verlauf nach der Korrektur entspricht meinen Erwartungen. GAS_UPPER_LIMIT ist manuell auf 170kOhm gesetzt. Der Sensor läuft seit ca. 4 Wochen und misst alle 4 Minuten. Das initiale "Einbrennen" des Sensors ist weitgehend abgeschlossen.
Um die weitere Alterung des Sensors zu berücksichtigen, ist mein Vorschlag, ein Infinite Impulse Response (IIR) Filter für GAS_UPPER_LIMIT und GAS_LOWER_LIMIT einzuführen, das den oberen und unteren Grenzwert automatisch nachführt.

Der unterste Graph zeigt den sprunghaften Verlauf des IAQ vor der Korrektur.

Gruß

Ewald
BME680_IAQ1.png
Sensor außen auf Fenstersims, nach Korrektur. Der Sprung nach unten ist durch das Öffnen des Fensters und Austritt von Kochdüften verursacht.
BME680_IAQ2.png
Sensor zuerst innen, dann außen auf Fenstersims, nach Korrektur
BME60_IAQ_mit_Sprüngen_vor_Korrektur.png
IAQ mit Sprüngen aufgrund falschen Auslesens der Gasregisterbits vor der Korrektur
Grüße

Ewald

jp112sdl
Beiträge: 4470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 128 Mal
Danksagung erhalten: 284 Mal
Kontaktdaten:

Re: [temporarily discontinued] HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Beitrag von jp112sdl » 27.12.2019, 13:30

FUEL4EP hat geschrieben:
27.12.2019, 12:07
Um die weitere Alterung des Sensors zu berücksichtigen, ist mein Vorschlag, ein Infinite Impulse Response (IIR) Filter für GAS_UPPER_LIMIT und GAS_LOWER_LIMIT einzuführen, das den oberen und unteren Grenzwert automatisch nachführt.
Meinst du als Einstellmöglichkeit über die WebUI?

VG,
Jérôme

Antworten

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