Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Druckmessung

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Druckmessung

    This topic has been deleted. Only users with topic management privileges can see it.
    • Goersch
      Goersch last edited by

      Hab ein bisschen quergelesen.

      Ihr müsst die Ausgänge des Arduino negieren. Dann passen die Werte des Analog Eingangs im Arduino und die in der CCU zusammen.

      Bei dem Modus des ELV Moduls: Ich würde Modus 4 mit 0.5s oder Modus 5 mit 1 Sekunde wählen.

      Auch wenn die Pumpe nicht läuft, steht die Wassersäule im Rohr. D.h 1m Wassersäule = 0.1bar.

      1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators last edited by

        Danke!
        @Goersch:

        Ihr müsst die Ausgänge des Arduino negieren. `
        :lol:

        ich kann das nicht, dafür habe ich die Eingänge beim HM-Modul negiert.

        @Goersch:

        Ich würde Modus 4 mit 0.5s oder Modus 5 mit 1 Sekunde wählen. `
        ich hatte Modus5 mit 1 Sekunde genommen. - passt also!

        @Goersch:

        Auch wenn die Pumpe nicht läuft, steht die Wassersäule im Rohr. D.h 1m Wassersäule = 0.1bar. `
        Das ist korrekt; im dynamischen zustand hebt sich der Vor und Rücklauf auf, aber im statischen zustand sicher nicht 😉

        bei mir geht es etwa 5,5 Meter hoch auf die Garage = 0,55bar, im Moment zeigt der Sensor 0,62 bar an.

        Es ist noch (fast) keinerlei Korrektur angewandt.

        Gruß

        Rainer

        1 Reply Last reply Reply Quote 0
        • Thisoft
          Thisoft last edited by

          Hallo Rainer,

          jetzt hatte ich dich schon fast ein wenig vergessen - sorry.

          Hier erstmal der Sketch mit der Umrechnungsformel drin:

          ! int sensorPin = A7; int firstDigitPIN = 2; int sensorValue = 0; int DruckValue = 0; ! const int Zykluszeit = 10; //Messintervall in Sekunden const int Nullpunkt = 102; //dieser Analogwert entspricht 0 bar const int Messfaktor = 68; //durch diesen Wert wird der Analogwert geteilt ! void sendValue(int intVal){ String binZahl; byte aktBit; for (int b = 0; b < 8; b += 1){ aktBit = bitRead(intVal, b); binZahl = aktBit + binZahl; digitalWrite(firstDigitPIN + b,(boolean) aktBit); } Serial.println("Binärwert = " + binZahl); Serial.println(""); } ! void setup() { Serial.begin(9600); for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){ pinMode(digitPIN, OUTPUT); } Serial.println("Gestartet"); } ! void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin)/4; //weil der Arduino mit 10 bit Auflösung misst, wir aber nur 8 bit übertragen können Serial.println("Analogwert = " + (String) sensorValue); DruckValue = (sensorValue - Nullpunkt) / Messfaktor; sendValue(DruckValue); delay(Zykluszeit*1000); } !

          Ich habe die Umrechnungszahlen am Anfang als Constanten deklariert, so dass du die wenn du möchtest auch gerne anpassen kannst.

          Was das Negieren der Ausgänge betrifft denke ich kannst du das jetzt gerne so lassen dass du das im HM-Modul machst. Anderenfalls "kannst" du das bestimmt auch im Arduino-Sketch 😉 Dafür wäre das Ausrufezeichen in der folgenden Zeile verantwortlich:

           digitalWrite(firstDigitPIN + b,!(boolean) aktBit);
          

          Nun schau mal was du so für Werte erhältst und viel Spass beim Schwimmen 🙂

          1 Reply Last reply Reply Quote 0
          • Schubi
            Schubi last edited by

            Hat zwar etwas gedauert - ab jetzt ist der Test abgeschlossen.

            <size size="150">Anleitung zur Druckmessung mit Tasmota.</size>

            Benötigte Hardware:

            • Wemos D1 mini (oder ähnliches)

            • ADS1115 (A/D-Wandler)

            • Drucksensor (z.B.: https://de.aliexpress.com/item/DC-5V-G1-4-Pressure-Sensor-Transmitter-Pressure-Transducer-1-2-MPa-174-PSI-For-Water/32656389610.html?spm=a2g0s.9042311.0.0.3da24c4dqtznBO)

            Die Teile werden gemäß folgendem Schema zusammengeschlossen:
            1904_unbenannt3.jpg

            Beim Compilieren der Tasmota Firmware muss in der user_config.h die Unterstützung für den ADS1115 aktiviert werden!

            (Und noch ganz wichtig - die neueste Version direkt von GITHUB nehmen - auch die 6.1.1a hat noch einen Bug mit dem die Messung nicht gelingt!)

            • die beiden Schrägstriche in der angeführten Zeile wegnehmen!
              1904_unbenannt.jpg
              1904_unbenannt2.jpg

            Wenn die Firmware (Tasmota) auf dem Modul ist (und natürlich die Einstellungen für WIFI und MQTT angepasst wurden) muss man noch die Anschlüsse für den ADS1115 angeben:

            1904_unbenannt7.jpg

            Nach einem Neustart sollten dann auf der Hauptseite die Werte der 4 Analogeingänge zu sehen sein:

            1904_unbenannt5.jpg

            (Wenn mir jemand erklären kann woher der dämliche Temperaturwert kommt wäre ich sehr dankbar - er stört aber nicht weiters)

            Die angezeigten Werte müssen mit dem Faktor 0.0001875 mulipliziert werden um den wahren Spannungswert zu errechnen. - Das brauchen wir aber gar nicht, da es nur auf des Verhältnis zwischen EIngangsspannung (5V) und der Messspannung des Sensors ankommt.

            Bei uns sind das A0 - Eingansspannung A1-Messspannung.

            Man könnte hier aufhören und die Werte in ioBroker weiterverarbeiten - oder das ganze von Tasmot erledigen lassen:

            Jetzt kommen die sogenannten Rules zum Einsatz:

            Wir wechseln in die Console und tippen (kopieren ist besser) folgendes ein:

            rule on System#Boot do backlog var1 30000; var3 -1 endon
            on tele-ADS1115#A0 do backlog var1 %value%  endon
            on tele-ADS1115#A1 do backlog scale3 %value%, 0, %var1%, 0, 1; sub3 0.1; mult3 13.33333; publish stat/TEST/Druck %var3% endon
            

            Der Teil publish stat/TEST/Druck kann den eigenen Vorlieben angepasst werden.

            Danach noch die Regel aktivieren mit:

            rule 1
            

            Hoffe es kann jemand brauchen - oder an die eigenen Bedürfnisse anpassen.

            Sollte noch jemand Interesse an der Funktion der Rules haben, oder eine compilierte Version (mit ADS1115) benötigen bitte melden.

            LG Schubi

            Aphofis M 2 Replies Last reply Reply Quote 1
            • Homoran
              Homoran Global Moderator Administrators last edited by

              @Thisoft:

              jetzt hatte ich dich schon fast ein wenig vergessen - sorry. `

              Bad news first:

              Das nette Teil hat mir meine gesamte HM lahmgelegt 😞

              gut geflasht - am Schreibtisch ohne Sensor 0 (Hurra!)

              Angeklemmt - beim Versuch zu überprüfen blieb der Wert auf 0; bei der HM lief nichts mehr - WebUI kam nicht mehr hoch; über CuxD nachgesehen -> ReGa Crash!

              neu gestartet -> gleiches Bild 😞

              Sensor abgeklemmt - CCU neu gestartet - lief; aber der Sensor war weg!?

              Sensor neu angelernt -> CCU hing.

              ich konnte noch kurz sehen, dass der Wert auf 255 stand.

              Abgeklemmt -> lief wieder.

              Angeklemmt 0 -> 255 -> 0 -> hing 😢

              Hast du eine Idee?

              ich fürchte der sendet die Signale zu oft (durch die "Kalibrierung" zu hohe Spreizung und zu häufige Schwankungen??)

              Dann muss ich ggf. den Mode wechseln.

              Sollte es am Sketch liegen kann ich nichts dazu sagen.

              Übrigens:

              auch bei Pumpe aus und anschließendem Anklemmen kommt 0 -> 255 -> 0

              EDIT:

              so sieht es mit offenem Eingang aus (Sensor abgeklemmt - der hängt noch am Filter)

              Gestartet
              Analogwert = 145
              Binärwert = 00000000
              
              Analogwert = 255
              Binärwert = 00000010
              
              Analogwert = 155
              Binärwert = 00000000
              
              Analogwert = 227
              Binärwert = 00000001
              
              Analogwert = 255
              Binärwert = 00000010
              
              Analogwert = 163
              Binärwert = 00000000
              
              Analogwert = 167
              Binärwert = 00000000
              
              Analogwert = 253
              Binärwert = 00000010
              
              Analogwert = 198
              Binärwert = 00000001
              
              

              EDIT2:

              und so sieht es mit dem alten Sketch aus:

              Gestartet
              Analogwert = 893
              Binärwert = 01111101
              
              Analogwert = 736
              Binärwert = 11100000
              
              Analogwert = 753
              Binärwert = 11110001
              
              Analogwert = 1023
              Binärwert = 11111111
              
              Analogwert = 744
              Binärwert = 11101000
              
              Analogwert = 634
              Binärwert = 01111010
              
              Analogwert = 984
              Binärwert = 11011000
              
              Analogwert = 803
              Binärwert = 00100011
              
              

              Ich weiß, dass man nicht mit offenen Eingängen arbeiten soll.

              Aber vielleicht sollten wir mBar ausgeben, damit die Werte höher sind??

              Gruß

              Rainer

              1 Reply Last reply Reply Quote 0
              • Thisoft
                Thisoft last edited by

                Hallo Rainer,

                zuerst mal verwundert mich das ein wenig dass man durch "falsche" Werte mit denen man das Schnittstellenmodul füttert die gesamte HM zum Aufhängen bringen kann. Da ist wohl auch was noch nicht ganz ausgereift, zumal es in der Bedienungsanleitung keinen Hinweis auf Einschränkungen beim Wertebereich o.ä. gibt.

                Zugegeben war der Sketch noch insofern unsauber dass evtl. negative Werte entstehen konnten. Darauf deutet auch hin dass in deinem Test die Binär- nicht zu den Analogwerten passten. Hier erstmal eine Korrektur:

                ! ````
                int sensorPin = A7;
                int firstDigitPIN = 2;
                int sensorValue = 0;
                int DruckValue = 0;
                ! const int Zykluszeit = 10; //Messintervall in Sekunden
                const int Nullpunkt = 102; //dieser Analogwert entspricht 0 bar
                const int Messfaktor = 68; //durch diesen Wert wird der Analogwert geteilt
                ! void sendValue(int intVal){
                String binZahl;
                byte aktBit;
                for (int b = 0; b < 8; b += 1){
                aktBit = bitRead(intVal, b);
                binZahl = aktBit + binZahl;
                digitalWrite(firstDigitPIN + b,!(boolean) aktBit);
                }
                Serial.println("Binärwert = " + binZahl);
                Serial.println("");
                }
                ! void setup() {
                Serial.begin(9600);
                for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){
                pinMode(digitPIN, OUTPUT);
                }
                Serial.println("Gestartet");
                }
                ! void loop() {
                // read the value from the sensor:
                sensorValue = analogRead(sensorPin)/4; //weil der Arduino mit 10 bit Auflösung misst, wir aber nur 8 bit übertragen können
                Serial.println("Analogwert = " + (String) sensorValue);
                DruckValue = (sensorValue - Nullpunkt);
                if (DruckValue < 0) DruckValue = 0;
                DruckValue = (int) DruckValue / Messfaktor * 10;
                Serial.println("Druckwert in 0.1bar = " + (String) DruckValue);
                sendValue(DruckValue);
                delay(Zykluszeit*1000);
                }

                
                Ich hab den Ausgabewert jetzt mal in Zehntelbar gerechnet. Dein Einwand ist richtig, aber mBar geht nicht da die größte mit 8bit darstellbare Zahl 255 ist und 0,25bar ein wenig knapp wäre ;-)
                
                Probier ruhig erstmal mit offenen Eingängen aus, das macht in diesem Fall nix - hast du wenigstens gleich realisitsch schwankende Werte ;)
                
                Dass der Arduino die Daten zu oft sendet kann ich mir eigentlich nicht vorstellen - er sendet ja nur aller 10s.
                
                Falls sich mit dem geänderten Sketch jetzt die HM wieder aufhängt müssen wir erstmal rauskriegen was das Modul bzw. die HM dabei übelnimmt…
                
                Gruß
                
                Thilo
                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  @Thisoft:

                  er sendet ja <size size="150">nur</size> aller 10s. `
                  und das Sendemodul dann wenn der Wert 1 Sekunde stabil ist.

                  Das darf aber wegen des DC nur etwa alle drei Minuten senden (oder entsprechend viele Pakete pro Stunde).

                  Ich fürchte, dass das quittierungspflichtige Pakete sind (allerdings war der DC der CCU nicht hochgegangen)

                  Im Moment ist dein Sketch v1 drauf und alles läuft rund.

                  Ich werde gleich mal wieder in den Garten gehen und den Arduino neu flashen.

                  @Thisoft:

                  zuerst mal verwundert mich das ein wenig dass man durch "falsche" Werte mit denen man das Schnittstellenmodul füttert die gesamte HM zum Aufhängen bringen kann. `
                  Das hatte ich auch gedacht und deswegen das zu häufige Senden als Ursache vermutet. Die CCU ist schließlich kein Arduino 😉

                  Es ist allerdings auch nicht auszuschließen, dass es wegen unplausibler Werte (Range > 8Bit, aber das hast du ja abgefangen) zu den Hängern kam

                  Danke für deine Mühe

                  Rainer

                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators last edited by

                    Dein V3 zeigt jetzt:

                    Gestartet
                    Analogwert = 198
                    Druckwert in 0.1bar = 10
                    Binärwert = 00001010
                    
                    Analogwert = 158
                    Druckwert in 0.1bar = 0
                    Binärwert = 00000000
                    
                    Analogwert = 229
                    Druckwert in 0.1bar = 10
                    Binärwert = 00001010
                    
                    Analogwert = 250
                    Druckwert in 0.1bar = 20
                    Binärwert = 00010100
                    
                    Analogwert = 237
                    Druckwert in 0.1bar = 10
                    Binärwert = 00001010
                    
                    Analogwert = 174
                    Druckwert in 0.1bar = 10
                    Binärwert = 00001010
                    
                    Analogwert = 183
                    Druckwert in 0.1bar = 10
                    Binärwert = 00001010
                    
                    Analogwert = 250
                    Druckwert in 0.1bar = 20
                    Binärwert = 00010100
                    
                    

                    @Thisoft:

                    dass in deinem Test die Binär- nicht zu den Analogwerten passten `
                    Das sieht jetzt schon mal besser aus.

                    aber die Werte sind trotzdem IMHO nicht brauchbar.

                    da gibt es nur 10 (0001010) und 20 (00010100), keine Werte dazwischen 😞

                    Ich bau das Teil erst mal nicht ein, sondern lass es hier auf dem Schreibtisch (und versuche in der Zwischenzeit mal den Sketch zu verstehen)

                    EDIT:

                    Mutig ich bin 😉

                    Wäre es nicht besser statt

                    DruckValue = (int) DruckValue / Messfaktor * 10;
                    

                    zu machen:

                    DruckValue = (int) DruckValue * 10 / Messfaktor;
                    

                    nee, hier gilt das Kommutativgesetz 😞

                    Aber wie bekommt man die Stufen raus?

                    Gruß

                    Rainer

                    1 Reply Last reply Reply Quote 0
                    • Thisoft
                      Thisoft last edited by

                      Ja - natürlich :oops: Das kommt davon wenn man das schnell nebenher zusammenschreibt ohne zu Testen. Hoffentlich hab ich jetzt keine neuen Faselfehler drin… Ist jetzt nicht der gesamte Sketch sondern nur die Loop-Routine, bekommst du hin - oder?

                      void loop() {
                        // read the value from the sensor:
                        sensorValue = analogRead(sensorPin)*10; 
                        Serial.println("Analogwert = " + (String) sensorValue);
                        DruckValue = (sensorValue - (Nullpunkt * 10));
                        if (DruckValue < 0) DruckValue = 0;
                        DruckValue = (int) DruckValue / Messfaktor / 10;
                        Serial.println("Druckwert in 0.1bar = " + (String) DruckValue);
                        sendValue(DruckValue);
                        delay(Zykluszeit*1000);
                      }
                      

                      Übrigens - wenn der Arduino seltener senden soll kannst du das ganz einfach machen indem du im Sketch die Variable "Zykluszeit" änderst (steht ziemlich am Anfang…)

                      1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators last edited by

                        @Thisoft:

                        bekommst du hin - oder? `
                        Denke ich schon - Danke!

                        @Thisoft:

                        Übrigens - wenn der Arduino seltener senden soll kannst du das ganz einfach machen indem du im Sketch die Variable "Zykluszeit" änderst (steht ziemlich am Anfang…) `
                        Habe ich gesehen, aber das könnte man auch über das Sendemodul konfigurieren, dann müssten aber die Signale im Arduino negiert werden, da es nicht alle Varianten für high oder low active gibt.

                        ~~![](</s><URL url=)<link_text text="download/file.php?id=30636&mode=view">https://forum.iobroker.net/download/file.php?id=30636&mode=view</link_text>" />

                        habe bisher Mode5 und jetzt auf Mode 7 gestellt

                        ggf dann aber doch über den D030 des Moduls, der mit dem D10 des Arduino verbunden ist, dann kann man triggern.

                        Im MOment ist der DC der CCU auf 97% 😞

                        Die neuen Werte sehen so aus:

                        Gestartet
                        Analogwert = 9990
                        Druckwert in 0.1bar = 13
                        Binärwert = 00001101
                        
                        Analogwert = 6520
                        Druckwert in 0.1bar = 8
                        Binärwert = 00001000
                        
                        Analogwert = 6670
                        Druckwert in 0.1bar = 8
                        Binärwert = 00001000
                        
                        Analogwert = 7340
                        Druckwert in 0.1bar = 9
                        Binärwert = 00001001
                        
                        Analogwert = 8920
                        Druckwert in 0.1bar = 11
                        Binärwert = 00001011
                        
                        Analogwert = 9510
                        Druckwert in 0.1bar = 12
                        Binärwert = 00001100
                        
                        Analogwert = 9840
                        Druckwert in 0.1bar = 12
                        Binärwert = 00001100
                        
                        

                        in der CCU steht immer noch 255, kann aber am DC liegen, oder dasss mode7 eben wegen high active nichts bringt

                        Gruß

                        Rainer~~

                        1 Reply Last reply Reply Quote 0
                        • Thisoft
                          Thisoft last edited by

                          Mit Mode 7 kann momentan normalerweise nichts übertragen werden deshalb wäre mir die 255 jetzt schon plausibel.

                          Allerdings ist der DC von 97% überhaupt nicht plausibel 😞

                          Ich hab jetzt mal die Unterstützung für den Dateneingang an D10 mit eingebaut. Außerdem sollte beim Starten erstmal eine 0 übertragen werden.

                          Die Werte innerhalb des Arduino sehen ja jetzt gut aus…

                          ! ````
                          int sensorPin = A7;
                          int firstDigitPIN = 2;
                          int sendPIN = 10;
                          int sensorValue = 0;
                          int DruckValue = 0;
                          ! const int Zykluszeit = 10; //Messintervall in Sekunden
                          const int Nullpunkt = 102; //dieser Analogwert entspricht 0 bar
                          const int Messfaktor = 68; //durch diesen Wert wird der Analogwert geteilt
                          ! void sendValue(int intVal){
                          String binZahl;
                          byte aktBit;
                          for (int b = 0; b < 8; b += 1){
                          aktBit = bitRead(intVal, b);
                          binZahl = aktBit + binZahl;
                          digitalWrite(firstDigitPIN + b,!(boolean) aktBit);
                          }
                          digitalWrite(sendPIN, HIGH);
                          delay(100);
                          digitalWrite(sendPIN, LOW);
                          Serial.println("Binärwert = " + binZahl);
                          Serial.println("");
                          }
                          ! void setup() {
                          Serial.begin(9600);
                          for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){
                          pinMode(digitPIN, OUTPUT);
                          digitalWrite(digitPIN,LOW);
                          }
                          pinMode(sendPIN, OUTPUT);
                          digitalWrite(sendPIN, HIGH);
                          delay(100);
                          digitalWrite(sendPIN, LOW);
                          Serial.println("Gestartet");
                          }
                          ! void loop() {
                          // read the value from the sensor:
                          sensorValue = analogRead(sensorPin)/4; //weil der Arduino mit 10 bit Auflösung misst, wir aber nur 8 bit übertragen können
                          Serial.println("Analogwert = " + (String) sensorValue);
                          DruckValue = (sensorValue - Nullpunkt);
                          if (DruckValue < 0) DruckValue = 0;
                          DruckValue = (int) DruckValue / Messfaktor * 10;
                          Serial.println("Druckwert in 0.1bar = " + (String) DruckValue);
                          sendValue(DruckValue);
                          delay(Zykluszeit*1000);
                          }

                          1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators last edited by

                            Habe jetzt einiges herumgespielt und für mich ist für heute erst mal Schluss.

                            Ich bin erst einmal zu folgendem Schluss gekommen:

                            • der erhöhte DC hat aktuell wohl nichts mit dem Sensor zu tun, ich habe diesen jetzt an eine Testumgebung gehängt, an der ich allerdings den DC nicht monitoren kann 😞

                              • ob das Gerät der Auslöser (wie auch immer) war kann ich nicht nachvollziehen, ich hoffe nur dass sich der DC in meiner produktiven Umgebung irgendwann einbekommt. Gestartet ist er exakt mit den Problemen mit dem Sensor. ab da stieg er stetig bis auf 97.
                            • du scheinst die Negierung der Pins gemacht zu haben, also führt mein Setting mit erneuter Negierung zu 255 statt 0 😉

                            • in deinem letzten Sketch hast du die Änderung, die ich mit deinem Snippet in dem vorletzten eingebaut hab nicht drin gehabt, da kamen wieder nur 0, 10 und 20 raus.

                            • im angeschlossenen Zustand kam nur noch 0; da muss ich wohl noch mit den Faktoren spielen.

                              • und mit den verschiedenen Modi.
                              • einerseits soll ziemlich schnell ein Leck/Luft detektiert werden, andererseits brauche ich bei minimalen Abweichung nicht alle 10 Sec. einen Wert.

                            Danke nochmals bis hier hin

                            Rainer

                            1 Reply Last reply Reply Quote 0
                            • Thisoft
                              Thisoft last edited by

                              @Homoran:

                              Habe jetzt einiges herumgespielt und für mich ist für heute erst mal Schluss.

                              Ich bin erst einmal zu folgendem Schluss gekommen:

                              • der erhöhte DC hat aktuell wohl nichts mit dem Sensor zu tun, ich habe diesen jetzt an eine Testumgebung gehängt, an der ich allerdings den DC nicht monitoren kann 😞

                                • ob das Gerät der Auslöser (wie auch immer) war kann ich nicht nachvollziehen, ich hoffe nur dass sich der DC in meiner produktiven Umgebung irgendwann einbekommt. Gestartet ist er exakt mit den Problemen mit dem Sensor. ab da stieg er stetig bis auf 97. `

                              Ja - wäre gut zu wissen was da los war…

                              ` > - du scheinst die Negierung der Pins gemacht zu haben, also führt mein Setting mit erneuter Negierung zu 255 statt 0 😉

                              • in deinem letzten Sketch hast du die Änderung, die ich mit deinem Snippet in dem vorletzten eingebaut hab nicht drin gehabt, da kamen wieder nur 0, 10 und 20 raus. `

                              Stimmt - das war eher aus Versehen mit passiert :roll:

                              ` > - im angeschlossenen Zustand kam nur noch 0; da muss ich wohl noch mit den Faktoren spielen.

                                • und mit den verschiedenen Modi. `

                              Die Modi sollten m.E. jetzt gar nicht mehr so entscheidend sein wo der D10 mit angesteuert wird..

                              Um die Werte bzw. Faktoren in dir richtige Richtung zu rücken wäre es gut wenn du erstmal den Seriellen Monitor auf einem Lappi oder so mitlaufen lassen könntest…

                              > - - einerseits soll ziemlich schnell ein Leck/Luft detektiert werden, andererseits brauche ich bei minimalen Abweichung nicht alle 10 Sec. einen Wert.
                              Ich habe jetzt noch einen Parameter "MeldeDifferenz" eingebaut. Um diesen Wert (in Zehntelbar) muss sich der neue Messwert vom letzten übertragenen unterscheiden damit der neue Wert gesendet wird.

                              ! ````
                              int sensorPin = A7;
                              int firstDigitPIN = 2;
                              int sendPIN = 10;
                              int sensorValue = 0;
                              int DruckValue = 0;
                              int lastValue = 0;
                              int MeldeDifferenz = 5;
                              ! const int Zykluszeit = 10; //Messintervall in Sekunden
                              const int Nullpunkt = 102; //dieser Analogwert entspricht 0 bar
                              const int Messfaktor = 68; //durch diesen Wert wird der Analogwert geteilt
                              ! void sendValue(int intVal){
                              String binZahl;
                              byte aktBit;
                              for (int b = 0; b < 8; b += 1){
                              aktBit = bitRead(intVal, b);
                              binZahl = aktBit + binZahl;
                              digitalWrite(firstDigitPIN + b,!(boolean) aktBit);
                              }
                              digitalWrite(sendPIN, HIGH);
                              delay(100);
                              digitalWrite(sendPIN, LOW);
                              Serial.println("Binärwert = " + binZahl);
                              Serial.println("");
                              }
                              ! void setup() {
                              Serial.begin(9600);
                              for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){
                              pinMode(digitPIN, OUTPUT);
                              digitalWrite(digitPIN,LOW);
                              }
                              pinMode(sendPIN, OUTPUT);
                              digitalWrite(sendPIN, HIGH);
                              delay(100);
                              digitalWrite(sendPIN, LOW);
                              Serial.println("Gestartet");
                              }
                              ! void loop() {
                              // read the value from the sensor:
                              sensorValue = analogRead(sensorPin)10;
                              Serial.println("Analogwert = " + (String) sensorValue);
                              DruckValue = (sensorValue - (Nullpunkt * 10));
                              if (DruckValue < 0) DruckValue = 0;
                              DruckValue = (int) DruckValue / Messfaktor / 10;
                              Serial.println("Druckwert in 0.1bar = " + (String) DruckValue);
                              if (abs(DruckValue - lastValue) > MeldeDifferenz){
                              sendValue(DruckValue);
                              lastValue = DruckValue;
                              };
                              delay(Zykluszeit
                              1000);
                              }

                              
                              Dann für morgen viel Erfolg!
                              
                              Und - nichts zu Danken, du hast hier schon so viel geholfen, da hast du alle Hilfe verdient…
                              
                              Gruß
                              
                              Thilo
                              1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators last edited by

                                Damit ich schon mal nicht schlafen sondern grübeln kann:
                                @Thisoft:

                                wo der D10 mit angesteuert wird.. `

                                Wie passiert das?

                                • was löst das aus?

                                • wie ist er active? (high/low)

                                Bis morgen

                                Rainer

                                1 Reply Last reply Reply Quote 0
                                • Thisoft
                                  Thisoft last edited by

                                  Das passiert indem der D10 jeweils kurz auf HIGH und 100ms später wieder auf LOW gesetzt wird:

                                    digitalWrite(sendPIN, HIGH);
                                    delay(100);
                                    digitalWrite(sendPIN, LOW);
                                  

                                  das passiert erstmal in der void setup() und dann wieder in void sendValue() nachdem die 8bit auf den neuen Wert gesetzt wurden.

                                  Somit ist der D10 also im Normalfall auf LOW und wird nach einer Aktualisierung des Wertes kurz auf HIGH und dann wieder auf LOW gesetzt so dass da jeweils eine steigende und eine fallende Flanke ausgelöst wird.

                                  1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators last edited by

                                    Gut, aber dann wird im MOde 2 (oder1) immer alle 10 Sekunden gesendet, oder?

                                    1 Reply Last reply Reply Quote 0
                                    • Thisoft
                                      Thisoft last edited by

                                      Prinzipiell ja, aber in der neuen Version nur wenn der gemessene Wert mehr als 0,5 bar vom letzten übertragenen abweicht.

                                      1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators last edited by

                                        Hallo Thilo,

                                        Habe deinen Rat beherzigt
                                        @Thisoft:

                                        den Seriellen Monitor auf einem Lappi oder so mitlaufen lassen könntest… `

                                        Arduino IDE auf einem Pentium Läppi installiert Kabel drangehängt und den letzten Sketch geflasht (die anderen sind au dem PC).

                                        Natürlich ist so ein Kabel immer zu kurz -)

                                        Der "Live-Log" wie folgt:

                                        Gestartet
                                        Analogwert = 1570
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1570
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 970
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 970
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 970
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 970
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 970
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1570
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1570
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        Analogwert = 1560
                                        Druckwert in 0.1bar = 0
                                        
                                        

                                        Pumpe an mit ziemlich exakt 1bar laut Manometer -> 1560

                                        Pumpe aus -> 970

                                        Pumpe an -> 1560

                                        Das ist schon mal reproduzierbar. Mal sehen ob ich die Formel geändert bekomme.

                                        @Thisoft:

                                        wenn der gemessene Wert mehr als 0,5 bar vom letzten übertragenen abweicht. `
                                        Da muss ich auch mal ran. Die Idee ist super, allerdings sind 0,5 bar, bei etwa 1 bar maximalem Druck (naja auch 1,3 könnte sein, üblich ist aber 0,8 bis 1,1) etwas zu hoch. Mal sehen ob ich den Wert finde und erst einmal auf 0,2 ändern kann.

                                        Dann muss ich noch immer die Ursache für 95% DC finden, der Sensor hängt im Moment an einem anderen System.

                                        Gruß

                                        Rainer

                                        1 Reply Last reply Reply Quote 0
                                        • Thisoft
                                          Thisoft last edited by

                                          @Homoran:

                                          Das ist schon mal reproduzierbar. Mal sehen ob ich die Formel geändert bekomme. `
                                          Wiedermal ein einfacher Faselfehler. Such mal die folgende Zeile im Sketch:

                                            DruckValue = (int) DruckValue / Messfaktor / 10;
                                          

                                          Da muss das "/10" weg - das ist sozusagen "doppelt verfaktoriert" 😉

                                          ` > @Thisoft:

                                          wenn der gemessene Wert mehr als 0,5 bar vom letzten übertragenen abweicht. Da muss ich auch mal ran. Die Idee ist super, allerdings sind 0,5 bar, bei etwa 1 bar maximalem Druck (naja auch 1,3 könnte sein, üblich ist aber 0,8 bis 1,1) etwas zu hoch. Mal sehen ob ich den Wert finde und erst einmal auf 0,2 ändern kann.

                                          Das ist ganz einfach - 5. Zeile von oben:

                                          int MeldeDifferenz = 5;
                                          

                                          > Dann muss ich noch immer die Ursache für 95% DC finden, der Sensor hängt im Moment an einem anderen System.
                                          Ja - ich fürchte da kann ich dir im Moment nicht wirklich helfen…

                                          Gruß

                                          Thilo

                                          1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators last edited by

                                            Hallo Thilo,

                                            ich wollte gerade den aktuellen Sketch vermelden - es läuft.
                                            144_pressuresensor.jpg

                                            ! ````
                                            int sensorPin = A7;
                                            int firstDigitPIN = 2;
                                            int sendPIN = 10;
                                            int sensorValue = 0;
                                            int DruckValue = 0;
                                            int lastValue = 0;
                                            int MeldeDifferenz = 2;
                                            ! const int Zykluszeit = 10; //Messintervall in Sekunden
                                            const int Nullpunkt = 97; //dieser Analogwert entspricht 0 bar
                                            const int Messfaktor = 60; //durch diesen Wert wird der Analogwert geteilt
                                            ! void sendValue(int intVal){
                                            String binZahl;
                                            byte aktBit;
                                            for (int b = 0; b < 8; b += 1){
                                            aktBit = bitRead(intVal, b);
                                            binZahl = aktBit + binZahl;
                                            digitalWrite(firstDigitPIN + b,!(boolean) aktBit);
                                            }
                                            digitalWrite(sendPIN, HIGH);
                                            delay(100);
                                            digitalWrite(sendPIN, LOW);
                                            Serial.println("Binärwert = " + binZahl);
                                            Serial.println("");
                                            }
                                            ! void setup() {
                                            Serial.begin(9600);
                                            for (int digitPIN = firstDigitPIN; digitPIN <= firstDigitPIN + 7; digitPIN += 1){
                                            pinMode(digitPIN, OUTPUT);
                                            digitalWrite(digitPIN,LOW);
                                            }
                                            pinMode(sendPIN, OUTPUT);
                                            digitalWrite(sendPIN, HIGH);
                                            delay(100);
                                            digitalWrite(sendPIN, LOW);
                                            Serial.println("Gestartet");
                                            }
                                            ! void loop() {
                                            // read the value from the sensor:
                                            sensorValue = analogRead(sensorPin)10;
                                            Serial.println("Analogwert = " + (String) sensorValue);
                                            DruckValue = (sensorValue - (Nullpunkt * 10));
                                            if (DruckValue < 0) DruckValue = 0;
                                            DruckValue = (int) DruckValue / Messfaktor;
                                            Serial.println("Druckwert in 0.1bar = " + (String) DruckValue);
                                            if (abs(DruckValue - lastValue) > MeldeDifferenz){
                                            sendValue(DruckValue);
                                            lastValue = DruckValue;
                                            };
                                            delay(Zykluszeit
                                            1000);
                                            }

                                            
                                            ~~@Thisoft:~~ 
                                            
                                            > Da muss das "/10" weg - das ist sozusagen "doppelt verfaktoriert" `  
                                            Hab ich schon gefunden ;-)
                                            
                                            ~~@Thisoft:~~ 
                                            
                                            > Das ist ganz einfach - 5\. Zeile von oben: `  
                                            Dito!
                                            
                                            ~~@Thisoft:~~ 
                                            
                                            > Ja - ich fürchte da kann ich dir im Moment nicht wirklich helfen… `  
                                            nee, nich wirklich, aber du hast schon genug geholfen.
                                            
                                            Danke dafür
                                            
                                            Gruß
                                            
                                            Rainer
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            452
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            118
                                            14104
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo