Hallo Zusammen,
ich möchte diesen Thread hier (https://forum.fhem.de/index.php/topic,20956.0.html) 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 (http://www.pmt-fl.com/downloads/chemical-sensors/iAQ-core_Datasheet_EN_v1.pdf)
Dann diverse Facts:
Problem with Interfacing (AMS IAQ core P) gas sensor through I2C (https://forum.arduino.cc/index.php?topic=350712.0)
Problem while using IAQ-Core Pollution sensor (https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=137516)
I2C_clock_stretching (http://elinux.org/BCM2835_datasheet_errata#p35_I2C_clock_stretching)
I2C-user_manual (http://www.nxp.com/documents/user_manual/UM10204.pdf)
ESP8266 (http://www.esp8266.com/viewtopic.php?f=32&t=12155#)
Gegenstimmen (http://www.letscontrolit.com/forum/viewtopic.php?t=1367#p5898)
Hardware drumherum (https://knx-user-forum.de/forum/%C3%B6ffentlicher-bereich/knx-eib-forum/diy-do-it-yourself/866730-arduino-sensor-f%C3%BCr-co%C2%B2-bzw-voc/page2)
i2c-pull-resistors (https://rheingoldheavy.com/i2c-pull-resistors/)
i2c-signals (https://rheingoldheavy.com/i2c-signals/)
Alternativen:
bme680 (https://www.tindie.com/products/onehorse/bme680-environmental-sensor/) oder hier (http://www.uradmonitor.com/bosch-bme680/) und espressif (http://bbs.espressif.com/viewtopic.php?t=226)
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 (https://forum.fhem.de/index.php/topic,51267.0.html) mit einbeziehen.
Sobald die bestellten Exemplare dazu angekommen sind.
Für die VM800-Module von FTDI EVE (http://www.tme.eu/de/katalog/?art=VM800B43A-PL) 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
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 (https://www.arduino.cc/en/Reference/Wire)
Bevor ich den Sensor anschließe, teste ich noch die Pegelanpassung durch. ;)
ATmega32U4-Breakoutboard (Micro) von hier (https://oshpark.com/shared_projects/Je61wCYk)
OTA mit RFM12B / RFM69CW -> wäre dann JeeLink.
https://github.com/LowPowerLab (https://github.com/LowPowerLab)
https://github.com/vvvlc/Funky-FOTA/blob/master/README.md (https://github.com/vvvlc/Funky-FOTA/blob/master/README.md)
https://harizanov.com/2013/01/optiboot-on-the-micro-iot-gateway/ (https://harizanov.com/2013/01/optiboot-on-the-micro-iot-gateway/)
oder ESP8255:
https://www.itead.cc/blog/using-esp8266esp8285-to-blink-an-led (https://www.itead.cc/blog/using-esp8266esp8285-to-blink-an-led)
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://dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors)
http://www.gammon.com.au/i2c (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 (http://jamesreubenknowles.com/arduino-i2c-1680)
Hello World!
Verbesserte Version V1.2 + Arduino-Plot-Integration für Guide-to-Adruino-Serial-Plotter (http://www.instructables.com/id/Ultimate-Guide-to-Adruino-Serial-Plotter/) - Plot-Ausgabe (https://rheingoldheavy.com/new-arduino-serial-plotter/).
#ifdef USE_WITH_ARDU_PLOTTER
Serial.print(predict);
Serial.print(" ");
Serial.println(resistance);
Serial.print(" ");
Serial.println(tvoc);
//-- ende datensatz?
Serial.println(" ");
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.
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
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
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
Zitatvorher noch Zwiebelkuchen essen
Das wäre bei uns die Flammkuchen (http://www.lacouronne-roeschwoog.com/) -Variante ;D ;D ;D
Zitat von: juergs am 06 November 2016, 19:50:36
Das wäre bei uns die Flammkuchen (http://www.lacouronne-roeschwoog.com/) -Variante ;D ;D ;D
Alors, près de la France ;)
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 :(
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
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 (https://harizanov.com/wiki/wiki-home/funky-v3/)), 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 (https://www.itead.cc/prototyping/psf-a85.html) (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 (http://www.ebay.com/bhp/co2-sensor) oder Temperature-and-humidity-VOC-TVOC-CO2-formaldehyde-5in1-detection-sensor (http://www.ebay.com/itm/1PCS-Temperature-and-humidity-VOC-TVOC-CO2-formaldehyde-5in1-detection-sensor-/201701812573). Alternative (http://www.ebay.com/itm/Humidity-Dust-Formaldehyde-TVOC-Sensor-Module-Function-Integrated-Sensor-Module-/252559078432?hash=item3acdb1b420:g:fjgAAOSwNRdX6lz9)
Alle etwa in diesem Preissegment.
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
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
@Kölnsolar
danke für den Quer-Verweis. ;)
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 (http://www.fhemwiki.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen).
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.
Das sieht doch ganz gut aus, nach Aus- und Wiedereinschalten. ;D
Ich schaue mir mal die Asksin-Protokoll-Umsetzung an:
http://www.fhemwiki.de/wiki/HomeMatic_Asksin_Library (http://www.fhemwiki.de/wiki/HomeMatic_Asksin_Library)
https://github.com/trilu2000/AskSin (https://github.com/trilu2000/AskSin)
https://github.com/glueckkanja/AvrHmLibrary (https://github.com/glueckkanja/AvrHmLibrary)
Viel Lesestoff ...
Und der CC1101-Universal-Sensor:
https://github.com/kc-GitHub/Wettersensor (https://github.com/kc-GitHub/Wettersensor)
Alternativen:
http://www.figaro.co.jp/en/product/sensor/
http://www.figaro.co.jp/en/product/entry/tgs8100.html#ti
hier Platinen:
http://blog.thomasheldt.de/1-wire-baldachin-multi-sensor/ (http://blog.thomasheldt.de/1-wire-baldachin-multi-sensor/)
http://blog.thomasheldt.de/1-wire-luftguetesensor-mit-ds2438-und-tgs2600/#comment-291 (http://blog.thomasheldt.de/1-wire-luftguetesensor-mit-ds2438-und-tgs2600/#comment-291)
http://shop.thomasheldt.de/product_info.php?info=p56_tgs2600.html (http://shop.thomasheldt.de/product_info.php?info=p56_tgs2600.html)
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 (https://github.com/skaringa/TempHygroTX868)
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
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
Zitat... den CCS811
CCS811 (http://www.futureelectronics.com/en/Technologies/Product.aspx?ProductID=CCS811BJOPSCAMBRIDGECMOSSENSORS7066783&IM=0) evaluation-kits (http://ccmoss.com/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 (http://www.reichelt.de/?ARTICLE=159825&PROVID=2773&utm_source=Preisvergleich_&utm_medium=CPC&utm_campaign=Preisvergleich_&psuma=&&wt_mc=amc14189045499978) hier als begleitender Sensor?
I2C-Levelshifter:
AN97055.pdf (http://www.kip.uni-heidelberg.de/lhcb/Publications/external/AN97055.pdf)
running-both-5v-and-33v-devices-i2c (http://letsmakerobots.com/blog/unixguru/running-both-5v-and-33v-devices-i2c)
3V Tips 'n Tricks (http://ww1.microchip.com/downloads/en/DeviceDoc/chapter%208.pdf)
Bi-directional level shifter (http://www.kip.uni-heidelberg.de/lhcb/Publications/external/AN97055.pdf)
TGS8100 + TGS2600 (http://www.figaro.co.jp/en/product/feature/tgs8100.html) TGS8100 (http://shop.thomasheldt.de/product_info.php?products_id=56&no_boost=1)
p15_1-wire-sensor-air-q-kit (http://shop.thomasheldt.de/product_info.php?info=p15_1-wire-sensor-air-q-kit.html)
World Smallest mit 15 mW (http://www.figaro.co.jp/en/product/feature/tgs8100.html)
Temperature-humidity-VOC-TVOC-CO2-formaldehyde-5in1-detection-sensor (http://www.ebay.com/itm/1PCS-Temperature-and-humidity-VOC-TVOC-CO2-formaldehyde-5in1-detection-sensor-/201701812573)
USCSM_Produktinfo (http://www.unitronic.de/electronics/systeme/sensorik/unitronic-sensor-module/uscsm.html?file=tl_files/unitronic/upload/systeme/Sensorik/USCSM_Produktinfo_1301.pdf)
Hier mal ein Komplett-Projekt:
http://blog.thomasheldt.de/luftguete-anzeige-fuer-innenraeume/#more-2918 (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