Ankündigung

Einklappen
Keine Ankündigung bisher.

Arduino-Sensor für CO² bzw. VOC

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Hi,
    ja - der code sieht gut aus.
    Kannst du noch sagen welche Libraries du verwendest? So blind gelesen vermute mal das ist meine vanilla library?
    Dazu sieht es im Code so aus als wenn nur die Co2 werte gelesen werden (byte 0+1 des Telegramms) - nicht aber die VOC-Werte (byte 3-6).
    Richtig? Und wenn ja: warum?

    Gruß
    Thorsten

    Kommentar


      #47
      Guten Morgen,

      ich habe den Code mal ges​chwind zusammengebastelt. Darum sind die VOC-Werte noch nicht drinnen. Da ich den IAQ selbst noch nicht habe, wurde der Code ohne testen hinzugefügt. Als Libraries verwende ich für die BCU-Anbindung deine. Für den IAQ-Core die von I2CDevlib(Link), für den HTU21D die existierende Adafruit Library(Link) und die I2C Devlibs selbst (Link).


      Kommentar


        #48
        Zitat von dreamy1 Beitrag anzeigen
        In Deinem Fall hat der HTU21D ja die Pullups onboard (sofern Du das Breakout von Sparkfun einsetzt) - diese hängen dann intern an den 3,3V an der angeschlossenen Versorgung. Die SCL und SDA hängen jedoch auch am 5V-Arduino und dessen interne Pullups der Ports ziehen die Leitungen dann auf 5V. Ist vermutlich unkritisch da alles low-aktiv ist und die Widerstände strombegrenzend wirken, aber es fließen dann permament Ausgleichsströme.

        Magst Du uns Dein Programm mal zeigen?
        Eine Frage hätte ich noch dazu: Damit ich nicht meine vier Arduino Nano mit 5 Volt auf die Halde schicken müsste, kann ich den Pegelwandler auch zwischen SDA und SCL der jeweiligen I2C Sensoren und dem Arduino legen? Wenn ich dich richtig verstanden habe, kann ich durch die 3.3 Volt Pin den I2C Sensor grundsätzlich versorgen und die Pins (welche 5 Volt sind), lasse ich durch den Pegelwandler mit dem Arduino kommunizieren.​

        Oder liege ich da mit meinen Überlegungen komplett falsch? Wenn nicht, kann ich den Pegelwandler auch für zwei I2C-Sensoren verwenden, oder benötige ich dann vier Eingänge (jeweils 2 x SDA und 2 x SCL)?

        lg Thomas

        Kommentar


          #49
          Hi Thomas,

          das müsste auf den ersten Blick gehen - ein Schaltbild wäre da nicht verkehrt, nicht dass man sich da neue Probleme ins Haus holt...
          Viele Grüße,
          Stefan

          DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

          Kommentar


            #50
            Zitat von dreamy1 Beitrag anzeigen
            Bezü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

            Kommentar


              #51
              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*

              Kommentar


                #52
                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... ​
                Zuletzt geändert von brandst; 26.10.2015, 18:27. Grund: Link hinzugefügt

                Kommentar


                  #53
                  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...
                  Viele Grüße,
                  Stefan

                  DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                  Kommentar


                    #54
                    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).

                    wenn nicht programmtechnisch sicher verhindert wird, dass dieser auch auf HIGH geschaltet wird
                    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

                    Kommentar


                      #55
                      Zitat von l0wside Beitrag anzeigen
                      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]


                      Max
                      Dh. Pegelwandler ist deiner Meinung nach bei 5V Arduinos, welche rein mit dem I2C Bus arbeiten nicht notwendig?

                      Kommentar


                        #56
                        @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.
                        Viele Grüße,
                        Stefan

                        DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                        Kommentar


                          #57
                          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

                          Kommentar


                            #58
                            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.
                            Viele Grüße,
                            Stefan

                            DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                            Kommentar


                              #59
                              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

                              Kommentar


                                #60
                                Mein ESP8266 Board ist eben eingetroffen:
                                esp.png


                                Arbeitet mit 3,3V Logik und bietet 3,3V Versorgungsausgang. Ich werde berichten wie's läuft. Muss mich erstmal in Lua zurecht finden ...

                                Kommentar

                                Lädt...
                                X