Wow - das klingt echt gut. Könnte man ja auch gut an Stellen einsetzen wo kein Buskabel liegt :-)
Wäre doch einen eigenen Thread wert, oder ? :-)
Ankündigung
Einklappen
Keine Ankündigung bisher.
Arduino-Sensor für CO² bzw. VOC
Einklappen
X
-
Auch wenn ich es nicht mit einem Arduino versuche, hier ein kurzes feedback von mir bzgl. ESP8266 und dem iAQ Core VOC Sensor:
Scheint zu laufen. Musste mich erst etwas mit der Lua Scriptsprache vertraut machen. War weniger schwer als gedacht:
Ausgabe auf der seriellen Konsole:Code:-- reference id id=0 -- D1 sda=1 -- D2 scl=2 iaqAddr = 0x5a; -- initialize i2c i2c.setup(id,sda,scl,i2c.SLOW) -- read data register -- i2c_addr: i2c address of i2c device to read -- reg_addr: register address to read -- lenght: number of bytes to read local function read_reg(i2c_addr, reg_addr, length) i2c.start(id) i2c.address(id, i2c_addr, i2c.RECEIVER) bytes = i2c.read(id, length) i2c.stop(id) return bytes end data = read_reg(iaqAddr, 0xb5, 9) for i=0,8 do print("byte["..i.."]="..string.format("%02x", string.byte(data, i+1))) end
0x01c2 --> 450 CO2 eq. ppm> dofile("iaqtest1.lua");
byte[0]=01
byte[1]=c2
byte[2]=10
byte[3]=00
byte[4]=04
byte[5]=cf
byte[6]=cc
byte[7]=00
byte[8]=7d
0x10 --> Aufwärmphase
0x0004cfcc --> 315340 Ohm (????)
0x007d --> 125 TVOC eq. ppb (was auch immer das ist)
Als nächstes wandern die Daten auf's Netzwerk und dann über meine Logikengine auf den Bus.
Auch interessant: Das Ding (kostet über Aliexpress übrigens nur 4,24EUR inkl. Versand aus dem Land der aufgehenden Sonne) beherrscht auch MQTT, und angeblich auch "verschlüsselt". Bin da noch am schauen wo und wie. Aber wenn das geht, dann könnte man daraus ohne weiteres ein (weitgehend) "sicheres" Sensor/Aktor-Netzwerk aufbauen und an KNX anbinden. Und das ohne jedes mal einen BCU hinzu ziehen zu müssen. Mit einem DC-DC-Stepdown-Regler aus der Bucht, kann man die Dinger locker über grau/gelb der Busleitung mit Strom versorgen.
Aber gut, back to Topic --> Arduino ...Zuletzt geändert von tuxedo; 30.10.2015, 19:51.
Einen Kommentar schreiben:
-
War aber eine sehr fruchtbare Diskussion von euch zweien :-D. Hab heute meinen Pegelwandler bekommen und werde mein Schaltbild ausprobieren. Melde mich dann mit Neuigkeiten. Danke für eure Informationen.Zitat von dreamy1 Beitrag anzeigenHallo Max,
die externen Clamp-Dioden wären wohl der beste Weg, da hast Du Recht.
Der Königsweg wäre, gleich am Anfang einen effizienten Schaltregler an die 5V der BCU zu hängen, die dann die ganze restliche 3,3V-Schiene incl. eines 3,3V-Arduino versorgt. Ich nehme dazu eben oft den Typ, den ich ein paar Posts vorher genannt habe. Damit ist man auf Sensorseite praktisch eigensicher und hat die notwendige zweite Spannungsebene mit maximaler Effizienz erzeugt. Die ganze Thematik kam ja nur auf, weil der User "brandst" unbedingt seine 5V-Arduinos weiterverwenden möchte :-)
Einen Kommentar schreiben:
-
Hallo Max,Zitat von l0wside Beitrag anzeigen...die Z-Diode würde ich nicht nehmen. Schau dir in http://www.farnell.com/datasheets/1808429.pdf mal Fig. 5 an, der 3,3V-Typ hat bei ca. 5mA eine Spannung von 3,3V. Über 30k hast du aber nie und nimmer so viel Strom, sondern eher ein Zehntel davon. Dann eher eine Schottky-Diode von SDA (Anode) nach 3,3V (Kathode), das ist dann im Grunde die diskrete Realisierung der Klammerdioden im VOC-Sensor.
die externen Clamp-Dioden wären wohl der beste Weg, da hast Du Recht.
Der Königsweg wäre, gleich am Anfang einen effizienten Schaltregler an die 5V der BCU zu hängen, die dann die ganze restliche 3,3V-Schiene incl. eines 3,3V-Arduino versorgt. Ich nehme dazu eben oft den Typ, den ich ein paar Posts vorher genannt habe. Damit ist man auf Sensorseite praktisch eigensicher und hat die notwendige zweite Spannungsebene mit maximaler Effizienz erzeugt. Die ganze Thematik kam ja nur auf, weil der User "brandst" unbedingt seine 5V-Arduinos weiterverwenden möchte :-)Zitat von l0wside Beitrag anzeigen...Was meinst du mit "zu geringer Pegel am 3,3V-Ausgang des Arduino z.B. durch zu hohen Entnahmestrom für die Sensorik"? Notfalls spendierst du eben einen separaten LDO von 5V nach 3,3V, das kostet einen Centbetrag. Aber bitte keinen 7803, sondern etwas Moderneres wie LP2980 (gibt´s auch von TI als Sample). Sonst säuft der Regler selbst mehr Strom als die daran hängende Peripherie.
Einen Kommentar schreiben:
-
Hallo Stefan,
die Z-Diode würde ich nicht nehmen. Schau dir in http://www.farnell.com/datasheets/1808429.pdf mal Fig. 5 an, der 3,3V-Typ hat bei ca. 5mA eine Spannung von 3,3V. Über 30k hast du aber nie und nimmer so viel Strom, sondern eher ein Zehntel davon. Dann eher eine Schottky-Diode von SDA (Anode) nach 3,3V (Kathode), das ist dann im Grunde die diskrete Realisierung der Klammerdioden im VOC-Sensor.
Was meinst du mit "zu geringer Pegel am 3,3V-Ausgang des Arduino z.B. durch zu hohen Entnahmestrom für die Sensorik"? Notfalls spendierst du eben einen separaten LDO von 5V nach 3,3V, das kostet einen Centbetrag. Aber bitte keinen 7803, sondern etwas Moderneres wie LP2980 (gibt´s auch von TI als Sample). Sonst säuft der Regler selbst mehr Strom als die daran hängende Peripherie.
Max
Einen Kommentar schreiben:
-
Hallo Max,
danke für die Rückmeldung.
Zu der Pullup-Geschichte: man könnte ja auch einfach zusätzlich zu den externen Pullups je eine antiseriell geschaltetet Z-Diode auf den beiden Leitungen mit 3,3V gegen Masse schalten, das wäre vielleicht auch eine Alternative. Die zudem unabhängig vom Wert der Pullups auf der 5V-Schiene ist....was meinst Du?
Damit könnte man zumindest diesen Fall abdecken - nicht abgedeckt wäre jedoch ein zu geringer Pegel am 3,3V-Ausgang des Arduino z.B. durch zu hohen Entnahmestrom für die Sensorik.
Einen Kommentar schreiben:
-
Hallo Stefan,
wenn die Bibliothek das so macht, sind deine Bedenken natürlich berechtigt. Allerdings scheint der interne Pullup 30k...60k zu haben. Mit 30k internem Pullup auf 5V und 2,2k externem Pullup auf 3,3V stellt sich in High Impedance (d.h. High) eine Spannungserhöhung um ca. 150mV ein, d.h. 3,45V statt 3,3V. Das sollte der VOC überleben. Schlimmstenfalls hängst du noch 56k nach Masse dran, dann hast du genau 3,3V.
Ich bin mir auch ziemlich sicher, dass der VOC intern klammert; alles andere wäre nicht Stand der Technik, man braucht ja auch einen ESD-Schutz.
Die 30k bringen für I2C im Grunde gar nichts, da gehen nur extrem lahme Geschwindigkeiten, weil der High-Pegel erst nach einer gefühlten Ewigkeit erreicht wird.
Zu den Ports: diese werden bei I2C tatsächlich zwischen Ein- und Ausgang umgeschaltet. Ich kenne die Atmels nicht, aber das müsste der µC selbständig können. Im Grunde hat der Port zwei Zustände: High = Input = High Impedance und Low = Ausgang. Wenn der Port Low ist, muss ich ja nicht zurücklesen.
Wenn man I2C per Bitbanging (also "zu Fuß") implementiert, muss man tatsächlich zwischen Ein- und Ausgang umschalten. Das gibt es auch bei anderen Protokollen, in meinem 1-Wire-Treiber mache ich das auch. Das Umschalten geht innerhalb eines Taktes.
Max
Einen Kommentar schreiben:
-
@Max:
Die 5V-Pullups im Arduino werden bei Verwendung der Wire-Bibliothek automatisch eingeschaltet. Je nachdem wie "gut" die Pullups sind, fließen dann Querströme zu den Pullups auf der 3,3V-Schiene und es stellen sich mehr oder minder große Pegel an den Leitungen ein, die auf jden Fall oberhalb 3,3V sind und dann am VOC-Sensor anliegen, der jedoch fix mit 3,3V versorgt wird. Überlastet man den 3,3V-Ausgang am Arduino, sinkt dessen Pegel während die 5V-Schiene stabil bleibt und die Bilanz sieht noch schlechter aus. Da ich nicht weiß ob der VOC interne Clamp-Dioden an den SDA/SCL-Leitungen hat, könnte dieser Schaden nehmen. Deshalb meine Bedenken - so ein Sensor kostet immerhin 40€.
Was mir noch nicht klar ist: die SDA- und SCL- Leitungen sind ja low-aktiv, werden also von einem als Ausgang konfigurierten Portausgang nach GND gezogen (open drain). Soweit klar....aber wie wird dann eigentlich ein I2C-Telegramm ausgewertet? Die Portausgänge müssten dann ja zumindest teilweise auch als Porteingänge abgefragt werden, sonst merkt der I2C-Teilnehmer doch gar nichts davon...oder mache ich da einen Denkfehler? Hätte aber zumindest keine Auswirkungen auf o.g. Problematik, da die Ports dann im high-impedance-state sind....Zuletzt geändert von dreamy1; 28.10.2015, 20:41.
Einen Kommentar schreiben:
-
Dh. Pegelwandler ist deiner Meinung nach bei 5V Arduinos, welche rein mit dem I2C Bus arbeiten nicht notwendig?Zitat von l0wside Beitrag anzeigenDie Schaltung sieht unkritisch aus. I2C ist nicht Push-Pull, sondern Open Drain. Das heißt: die einzelnen Teilnehmer schalten entweder gegen Masse oder lassen den Pin offen (hochohmig). Das wird auch als Wired-OR bezeichnet, siehe Wikipedia.
Die 3,3V des High-Pegels kommen von den Pullup-Widerständen, die auf der Arduino-Seite als bedrahtete Widerstände mit Farbcodes eingezeichnet sind. 4,7k sind ein sinnvoller Wert, irgendwo im Bereich 2,2k...10k sind sinnvolle Werte. 5V liegen auf dem I2C bei dieser Schaltung nie an, wenn man die Pullups abschaltet. Die Empfehlung im Artikel, die 5V-Pullups anzulassen, halte ich für Unfug.
Das einzige Problem ist jetzt, dass der High-Pegel 3,3V ist und der Arduino-Eingang lt. Spezifikation erst ab 3,5V sicher High erkennt. Praktisch glaube ich nicht, dass das ein Problem gibt, vielleicht bei höheren Temperaturen.
Für einen "richtigen" I2C-Pegelwandler muss man ein entsprechend geeignetes Bauteil nehmen (jedenfalls für SDA, für SCL ist kein Pegelwandler nötig, weil der Arduino diesen nur als Ausgang verwendet).
Das ist ein Standardproblem im Embedded-Bereich: man kann durch falsche Programmierung ganz schnell den Lötkolben brauchen. [Anekdote]Beim Debuggen eines Boost-Schaltreglers hatte ich das Problem, dass beim Anhalten des Programms der sonst immer getaktete FET ggf. plötzlich dauerhaft an war, weil der µC ja stand. Das hat der FET regelmäßig ca. 500ms überlebt, bevor er sich lautstark im Raum verteilte. Nach dem dritten oder vierten Austausch des Bauteils war die Platine drunter dann rabenschwarz.[/Anekdote]
Max
Einen Kommentar schreiben:
-
Die Schaltung sieht unkritisch aus. I2C ist nicht Push-Pull, sondern Open Drain. Das heißt: die einzelnen Teilnehmer schalten entweder gegen Masse oder lassen den Pin offen (hochohmig). Das wird auch als Wired-OR bezeichnet, siehe Wikipedia.
Die 3,3V des High-Pegels kommen von den Pullup-Widerständen, die auf der Arduino-Seite als bedrahtete Widerstände mit Farbcodes eingezeichnet sind. 4,7k sind ein sinnvoller Wert, irgendwo im Bereich 2,2k...10k sind sinnvolle Werte. 5V liegen auf dem I2C bei dieser Schaltung nie an, wenn man die Pullups abschaltet. Die Empfehlung im Artikel, die 5V-Pullups anzulassen, halte ich für Unfug.
Das einzige Problem ist jetzt, dass der High-Pegel 3,3V ist und der Arduino-Eingang lt. Spezifikation erst ab 3,5V sicher High erkennt. Praktisch glaube ich nicht, dass das ein Problem gibt, vielleicht bei höheren Temperaturen.
Für einen "richtigen" I2C-Pegelwandler muss man ein entsprechend geeignetes Bauteil nehmen (jedenfalls für SDA, für SCL ist kein Pegelwandler nötig, weil der Arduino diesen nur als Ausgang verwendet).
Das ist ein Standardproblem im Embedded-Bereich: man kann durch falsche Programmierung ganz schnell den Lötkolben brauchen. [Anekdote]Beim Debuggen eines Boost-Schaltreglers hatte ich das Problem, dass beim Anhalten des Programms der sonst immer getaktete FET ggf. plötzlich dauerhaft an war, weil der µC ja stand. Das hat der FET regelmäßig ca. 500ms überlebt, bevor er sich lautstark im Raum verteilte. Nach dem dritten oder vierten Austausch des Bauteils war die Platine drunter dann rabenschwarz.[/Anekdote]wenn nicht programmtechnisch sicher verhindert wird, dass dieser auch auf HIGH geschaltet wird
Max
Einen Kommentar schreiben:
-
Puuh, ich muss mir das nochmal in Ruhe anschauen.
Im Grunde steht aber dort das geschrieben, was ich oben gepostet habe. Es fließen Querströme und das Potential an der 3,3V-SDA/SDL-Leitung wird angehoben. Im Artikel wird dies rein auf die internen Pullups des Arduino geschoben, das wäre vermutlich unkritisch wenn diese tatsächlich um den Faktor 10 oder noch mehr von den 4,7k abweichen.
Was mir noch nicht klar ist: einer im Ring muss ja der I2C-Master sein und ich gehe davon aus, dass dies der Arduino ist. Das bedeutet, dass er die SDA-Leitung auch aktiv auf GND ziehen können muss, damit wäre der Portpin in dem Fall als Output geschaltet...und wenn nicht programmtechnisch sicher verhindert wird, dass dieser auch auf HIGH geschaltet wird, ist das Problem noch größer: denn dann liegen definitiv 5V an der SDA-Leitung des VOC-Sensors an, da helfen auch die Pullups zur 3,3V nicht weiter...
Einen Kommentar schreiben:
-
Nochmal ich. Ich habe auf der Arduino Playground Seite diesen Artikel gefunden: http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
In diesem Artikel wird beschrieben, wie man den I2C-Bus (Sensor) direkt über 3.3V an einen 5V Arduino mit 3.3V Ausgang hängt. Also genauso wie ich das mache. Sehe ich da jetzt etwas falsch oder liefern die A5 und A4 Pins, welche ja als I2C angegeben sind nur 3.3V und ist auch ohne Pegelwandler auf der sicheren Seite. Irgendwie verwirrend...
Einen Kommentar schreiben:
-
Gerade mal nachgesehen: Meine Arduino Alternative "ESP8266" arbeitet mit 3.3V (https://www.adafruit.com/images/prod...t__EN_v4.3.pdf), sitzt aber auf einem Board das mit 5V/USB versorgt werden kann (http://www.ebay.de/itm/252106393360?...%3AMEBIDX%3AIT).
Den iAQ sollte man also ohne Umwege direkt anschließen können. Sofern aber der TPUART wieder mit ins Spiel kommt, braucht's wieder den Pegelwandler 3.3V<->5V für Rx/Tx. Da aber WLAN schon onboard ist, werde ich mir das mal sparen. Macht die Handhabung mit dem KNX-Stack auch einfacher (unter der Prämisse dass WLAN statt KNX-Busverdrahtung kein Problem für einen ist): Im Netzwerk nimmt meine Logikengine die Daten entgegen und schickt sie auf den Bus.
Der Sensor sollte heute in der Post sein. Der ESP8266 wird aber noch ne Weile mit dem Schiff unterwegs sein *gääääähn*
Einen Kommentar schreiben:
-
Zitat von dreamy1 Beitrag anzeigenBezüglich Stromaufnahme des Arduino: den hatte ich hier mal gemessen: https://knx-user-forum.de/forum/öffen...397#post561397
Die 66mW des VOC-Sensor könnte man also noch locker am TP-UART abgreifen....ginge sogar noch ein kleines TFT als Anzeige :-)
Hoffentlich wirds bald Winter, damit ich dafür wieder Zeit hab :-)
Hi, ich hab jetzt mal einen Schaltplan davon gezeichnet. So sollte es doch gehen oder?
Angehängte Dateien
Einen Kommentar schreiben:

Einen Kommentar schreiben: