Eigenbau Luftgüte-Sensor iAQ-core P (CO2)

Begonnen von juergs, 05 November 2016, 09:47:18

Vorheriges Thema - Nächstes Thema

juergs

Hallo Zusammen,
ich möchte diesen Thread hier aufgreifen und eine Implementierung mit dem Sensor der Fa. AMS
iAQ-core P mit I2C-Schnittstelle für FHEM implementieren.

Zuerst mal die Daten:
iAQ-core_Datasheet

Dann diverse Facts:
Problem with Interfacing (AMS IAQ core P) gas sensor through I2C
Problem while using IAQ-Core Pollution sensor
I2C_clock_stretching
I2C-user_manual
ESP8266
Gegenstimmen
Hardware drumherum
i2c-pull-resistors
i2c-signals

Alternativen:
bme680 oder hier und espressif

Im Moment bin ich  auf der Suche nach der passende Anbindungsform (Wireless, ESP, CC1101, RFM) an FHEM und eine funktionierende
Zugriffs-Bibliothek.

Würde auch als Standalone-Version diese Präsentationsmöglichkeit mit einbeziehen.
Sobald die bestellten Exemplare dazu angekommen sind.

Für die VM800-Module von FTDI EVE scheiden leider wegen des höheren Preises > 70€ und Einarbeitungsaufwand aus.

Über weitere Anregungen + Vorschläge würde ich mich freuen...

Grüße,
Jürgen

juergs

#1
Prototyp-Aufbau:

  • 3V3-TS5204-CX33 Spannungsregler, 150 mA-Typ
  • R-Netzwerk 3K3-10K zur Pegelanpassung TTL an 3V3-Pegel

Details zu I2C:
Zitat
Board            I2C / TWI pins
--------------------------------------
Uno, Ethernet      A4 (SDA), A5 (SCL)
Nano                    2 (SDA),    3 (SCL)
Leonardo,Micro      2 (SDA),    3 (SCL)
Mega2560              20 (SDA), 21 (SCL)
Due                      20 (SDA), 21 (SCL), SDA1, SCL1

Arduino-Lib zum Testen über I2C von Wire

Bevor ich den Sensor anschließe, teste ich noch die Pegelanpassung durch.  ;)

ATmega32U4-Breakoutboard (Micro) von hier


juergs

#3
Thema: Levelshifter, ohne Belastung des 3V3-Teils.
Offen zeigt der Output eine starke Verfälschung der Flanke ab ca. 1.04V. (Ohne Last könnte das OK sein.)

Die 2N7002 sind in der verwendeten Schaltung  nicht  Kurzschluss-geschützt!
Ein Abrutschen mit der Meßspitze, das war's dann für den MOSFET. 

http://dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors
http://www.gammon.com.au/i2c

ZitatThe Wire library provides a convenient high-level wrapper for I²C. It has some oddities that will cause trouble if you're not aware of them.
Here are some gotchas:

Small Buffer

The Wire object's internal buffer is fixed at 32 bytes. You cannot send larger packets without modifying the library.
Asymmetric Behaviour

The write() method's behaviour is different depending on whether the class is a master or a slave. See the sections on master and slave for details.
Type Coercion

The requestFrom() method's overloads may confuse the compiler. If you get compiler errors, try coercing the parameters, for example:

const byte SlaveDeviceId = 1;
...
// Request data from slave.
Wire.beginTransmission(SlaveDeviceId);
int bytesReceived = Wire.requestFrom(SlaveDeviceId, (uint8_t)2);

No Clock Stretching

The current version of the library does not support clock stretching.
Collisions Between Multiple Masters

I'm still looking into this more, but it appears that there is no mechanism for a master to wait for for a busy bus to clear. The transmission simply fails.

Kontrovers:
No Clock Stretching

juergs

#4
Hello World!


juergs

#5
Verbesserte Version V1.2 + Arduino-Plot-Integration für Guide-to-Adruino-Serial-Plotter - Plot-Ausgabe.

#ifdef USE_WITH_ARDU_PLOTTER
      Serial.print(predict);
      Serial.print(" ");
      Serial.println(resistance);
      Serial.print(" ");
      Serial.println(tvoc);     
      //-- ende datensatz?
      Serial.println(" ");

juergs

#6
Der Aufbau ist doch etwas "wilder" geworden.

Nun noch die Erkenntnisse über den "Output" sammeln ...  :)

Und diese Geschichte prüfen:
//--- ??? Luftguete_Test.ino:82:52: warning: left shift count >= width of type

Danach die Übertagungsart in "Funk" implementieren.

PeMue

Hallo Jürgen,

jetzt ist man mal einen Tag nicht online, und man verpasst so richtig was. Ich werde mir mal die Sache genauer durchlesen müssen  ;)

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#8
Hallo Peter,

ja. Habe mal meine Tür geschlossen, in der Hoffnung der CO2-Gehalt steigt etwas an ...   ;)

Mein Selbstbau-Micro hat mir auch noch ein paar Überraschungen beschert, funktioniert jetzt aber
bis auf den noch fehlenden SMD-Quarz ganz gut.  :D

Man muss auch noch die drei Ausgaben predict,resistance und tvoc "interpretieren" um das Verhalten des Sensor kennenzulernen
und wie die drei Größen in Beziehung zueinander stehen .....

Dazu habe ich mal die Skalierung des Plots etwas angepasst und die Zykluszeit auf 15 Sekunden erhöht und lasse mal mitlaufen.

Dann kann ich mich noch mal in der Zwischenzeit mit dem Datenblatt befassen....  ;)

Grüße,
Jürgen

PeMue

Zitat von: juergs am 06 November 2016, 19:20:06
Habe mal meine Tür geschlossen, in der Hoffnung der CO2-Gehalt steigt etwas an ...   ;)
Am besten den Sensor Nachts ins Schlafzimmer, Fenster zu und vorher noch Zwiebelkuchen essen  ;D ;D ;D

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#10
Zitatvorher noch Zwiebelkuchen essen

Das wäre bei uns die Flammkuchen -Variante  ;D ;D ;D

PeMue

RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#12
Es tut sich was ...

ZitatSensing technology
MEMS metal oxide sensor
Sensing range
I²C:    450 – 2000 ppm CO2 equivalents (relative)
           125 – 600 ppb TVOC equivalents (relative)
Values above the defined sensing range are provided as well.

Aber das Datenblatt ist doch etwas dünn bezüglichg des readouts  :(

Ma_Bo

Also wenn es ein CO2 Sensor für Jeelink, FS20, WLan oder Homematic werden würde, dann melde ich mal Interesse an, falls man diese dann evtl. fertig bei dir erwerben kann.  ;D

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

juergs

#14
Hallo Marcel,

danke für das Interesse, es liegt nur noch etwas Aufwand in der Sache, also dauert noch etwas ...   ;)

Ich kenne im Moment noch keine Sensor-seitigen Implementierungen von Protokollen (z.B. 868 mit RFM), deshalb muss ich da noch etwas nachforschen
oder noch mehr Aufwand in das Reengineeren der FHEM-Perl-Seite stecken (imho ...). 

Im Moment habe ich aber auch noch diese Möglichkeit mit dem ESP8265 (kleiner Bruder des ESP8266, $2.10 + $0.60 IPX-Folien-Antenne) im Fokus
(wäre aber WLAN, ggf. mit MySensors oder MQTT etc.) Persönlich würde ich aber gerne ein 868-Protokoll nehmen wollen. (CC1101 ...)
In 433 wäre ich quasi schon fertig, wenn die Quantifizierung des Sensor-Outputs gelingt:

Dann müsste man noch die Verfügbarkeit des Sensors prüfen, scheint gerade eine Inflation zu geben ...  ;)
Übersicht  oder Temperature-and-humidity-VOC-TVOC-CO2-formaldehyde-5in1-detection-sensor. Alternative
Alle etwa in diesem Preissegment.

juergs

#15
Oben im 7ten Chart:

Zitatwenn die Quantifizierung des Sensor-Outputs gelingt

Die oberen beiden Kurven bleiben weitestgehend konstant, der Skalierung geschuldet.

Die orangene Kurve repräsentiert den Wert  resistance der sich analog meiner Aufenthaltsdauer im Raum
interessanterweise ändert.

Ich verändert die Zykluszeit auf eine Minute und lasse es heute Nacht mal durchlaufen...

Zitat
Ready
450 -30.64 125

Ready
450 -19.71 125

KölnSolar

Zitatich möchte diesen Thread hier aufgreifen und eine Implementierung mit dem Sensor der Fa. AMS
iAQ-core P mit I2C-Schnittstelle für FHEM implementieren.
kannst ja das modul des usb-pendants als vorlage nutzen:
https://forum.fhem.de/index.php?topic=13166.0
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs

#17
@Kölnsolar
danke für den Quer-Verweis.  ;)

juergs

#18
Zitat... und lasse es heute Nacht mal durchlaufen...

Ok, ich habe ja den P-Sensor, also "pulsed".
Allerdings finde ich den Unterschied in der Handhabung nicht in den  Datenblättern.
Soll man das Verhalten des Sensors hellsehen?

Die bis zu 5 Minuten Aufwärmzeit ist gesetzt, dann .... Uupps!  ???

Nach dem Nachtdurchlauf  (Fenster eingestellt bei 17 Grad, ohne CO2 Produzent) und jetzigem Neustart (BurnIn?):

Aha, jetzt kommen alle drei (!) Werte.  Vorher waren predict und tvoc konstant auf niedrigstem Wert, ohne sich zu verändern.

Lasse trotz Typ-"P" weiterlaufen. D.h. Zum Betrieb gäbe es zwei Phasen "Aufwärmen" + "Einschwingen",
dann ausschalten und nach angemessener  Wartezeit erneut von vorne beginnen.

Zitat#ifdef USE_WITH_ARDU_PLOTTER
      Serial.print(predict);              -> Blau
      Serial.print(" ");
      Serial.println(resistance);       -> Orange
      Serial.print(" ");
      Serial.println(tvoc);   -> Rot

Zyjkluszeit: 10s, der Arduino-Plotter macht in X-Richtung 500 Meß-Punkte.

Im zweiten Bild habe ich ein Versuch gestartet -> einmal Anhauchen.
Siehe da prompte Reation des Sensors. Jetzt ist klar ich in welche Richtung die Vergrößerung des CO2 Gehaltes geht. :D
Das geht schon mehr in Richtung gleitender Mittelwert Gleitende_Mittelwerte_berechnen_und_loggen.


juergs

Da entweder SerialPlotter oder SerialMonitor geht.
Werde ich als nächstes SW-Serial einbauen um noch die konkreten Werte über eine zweite Serielle Schnittstelle abgreifen zu können.

juergs

Das sieht doch ganz gut aus, nach Aus- und Wiedereinschalten.  ;D

juergs

#21


juergs

ZitatArduino library to control the ELV TX868 rf transmitter module to send temperature and humidity values over the air at 868.35 MHz.
https://github.com/skaringa/TempHygroTX868

PeMue

#24
Hallo zusammen,

anbei die Ergebnisse der Befragung der Kollegen vom Schloß Unterpremstätten:
Es gibt einen iAQ-core C und einen P Typ. Der C-Typ (continous) wird immer geheizt und nach etwa 5 Minuten ist der Messwert stabil. Der P-Typ (pulsed) wird 1 s geheizt und 10 s wird nicht geheizt. Ein vernünftiges Ergebnis wird ebenfalls ab 5 min. zugesichert. Hierdurch wird der Stromverbrauch drastisch reduziert und der Sensor kann für Batteriebetrieb verwendet werden. Das Puls/Pausen Verhältnis kann eingestellt werden, sollte aber nicht deutlich verändert werden, weil die Heizung (bzw. im Endeffekt die Temperatur) die Messgüte wesentlich beeinflusst.
Es gibt mittlerweile auch einen weiteren Baustein, den CCS811, der eine ähnliche Genauigkeit hat, aber deutlich kleiner ist. Ein Datenblatt gibt es noch nicht, aber ich werde dranbleiben ...

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#25
Hallo Peter,

das ist ja interessant, warum können die sowas nicht ins Datenblatt schreiben ? High Secret?  ;)
Dann kann ich das ja gleich beim Programmieren berücksichtigen ....

ZitatDer P-Typ (pulsed) wird 1 s geheizt und 10 s wird nicht geheizt. Ein vernünftiges Ergebnis wird ebenfalls ab 5 min. zugesichert. Hierdurch wird der Stromverbrauch drastisch reduziert und der Sensor kann für Batteriebetrieb verwendet werden. Das Puls/Pausen Verhältnis kann eingestellt werden, sollte aber nicht deutlich verändert werden, weil die Heizung (bzw. im Endeffekt die Temperatur) die Messgüte wesentlich beeinflusst.

Variante Ablauf-1: Neustart: 5 Minuten einschalten -> Werte lesen -> 1 s einschalten ohne Auslesen -> 10 s ausgeschalten lassen -> nach 10s  einschalten -> dann Auslesen
oder
Variante Ablauf-2: Neustart: 5 Minuten einschalten -> Werte lesen -> einschalten + 1 s warten + nach 10 s auslesen. -> ausschalten + 10s warten + 1s einschalten und nach 10 s lesen ... etc.

Vermutlich Variante 2 .. mal schauen ....
Dann kamm man ja alle 2-3 Minuten einen Wert senden und zwischenzeitlich den Mittelwert der Zwischenmessungen bilden.

Ok, der erste 433MHz Prototyp ist mit dem ATtiny85 soweit fertig verdrahtet und funktioniert auch schon erst mal mit dem Dallas-Chip.

Erste Eckdaten (Version_1 - LaCrosse/433MHz):

  • 3V3 Betrieb (5V mit aktiver Pegelwandlung der I2C-Leitungen ist schon angedacht.
  • Batterie-Betrieb (AA oder AAA) mit Step-Up Regler. Ggf. aktive Umschaltung auf 5V Betrieb
  • Dallas-Powersave mit aktiver PullUp-Abschaltung
  • Evtl. Powersave des AMS-P-Typ-Sensors

Dann werde ich noch die ATtiny-I2C-Portierungen testen und einbinden, dann noch den Power-Down-Modus
implementieren. Damit wäre wohl Batterie-Betrieb sicherlich möglich.

Der iAQ-core ist noch nicht definitiv aufgelötet, da ich ja noch eine 868-CC1101-Variante plane.
Das hier ist erst der erste Wurf um den Sensor mal länger betreiben und auswerten zu können.

Grüße,
Jürgen

juergs

#26
Zitat... den CCS811

CCS811 evaluation-kits

ZitatQty in Stock :    0

der kostet ein Drittel des iAQ-core: mit $8.75 USD fast ein Schnäppchen  ;) :D

Mal schauen ob man den bekommen kann ...

Der BME280  hier als begleitender Sensor?

juergs


juergs

#28
TGS8100 + TGS2600 TGS8100
p15_1-wire-sensor-air-q-kit
World Smallest mit 15 mW
Temperature-humidity-VOC-TVOC-CO2-formaldehyde-5in1-detection-sensor
USCSM_Produktinfo

Hier mal ein Komplett-Projekt:
http://blog.thomasheldt.de/luftguete-anzeige-fuer-innenraeume/#more-2918
Allerdings mit einem Haken: die Rahmenbedingungen für eine CO2-Messung werden nicht konstant gehalten (Stichwort Temperatur-abhängige Regelung des Heizstromes
und Kompensation der Sensorkennlinie, die bei diesem Typ von Sensor auch noch Luftfeuchteabhängig ist).
Da müsste man mehr Aufwand hineinstecken, wie ich bisher dachte, obwohl der günstige Preis reizt.
Die Frage wäre, ob dies machbar wäre ....

Um einige Erfahrungen zu diesem Thema reicher ...  ;)
Jürgen