Druckmessung

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 18.07.2018, 21:00

Homoran hat geschrieben:
18.07.2018, 19:19
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.[/quote]

Spoiler: Show hidden text

Code: Alles auswählen

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
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 18.07.2018, 21:06

Damit ich schon mal nicht schlafen sondern grübeln kann:
Thisoft hat geschrieben:
18.07.2018, 21:00
wo der D10 mit angesteuert wird..
Wie passiert das?
- was löst das aus?
- wie ist er active? (high/low)

Bis morgen
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 18.07.2018, 21:14

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

Code: Alles auswählen

  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.
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 18.07.2018, 21:19

Gut, aber dann wird im MOde 2 (oder1) immer alle 10 Sekunden gesendet, oder?
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 18.07.2018, 21:22

Prinzipiell ja, aber in der neuen Version nur wenn der gemessene Wert mehr als 0,5 bar vom letzten übertragenen abweicht.
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 19.07.2018, 12:49

Hallo Thilo,
Habe deinen Rat beherzigt
Thisoft hat geschrieben:
18.07.2018, 21:00
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:

Code: Alles auswählen

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 hat geschrieben:
18.07.2018, 21:22
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
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 19.07.2018, 13:56

Homoran hat geschrieben:
19.07.2018, 12:49

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:

Code: Alles auswählen

  DruckValue = (int) DruckValue / Messfaktor / 10;
Da muss das "/10" weg - das ist sozusagen "doppelt verfaktoriert" ;-)
Thisoft hat geschrieben:
18.07.2018, 21:22
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:

Code: Alles auswählen

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
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 19.07.2018, 14:14

Hallo Thilo,
ich wollte gerade den aktuellen Sketch vermelden - es läuft.
pressuresensor.jpg
Spoiler: Show hidden text

Code: Alles auswählen

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 hat geschrieben:
19.07.2018, 13:56
Da muss das "/10" weg - das ist sozusagen "doppelt verfaktoriert"
Hab ich schon gefunden ;-)

Thisoft hat geschrieben:
19.07.2018, 13:56
Das ist ganz einfach - 5. Zeile von oben:
Dito!
Thisoft hat geschrieben:
19.07.2018, 13:56
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
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 19.07.2018, 14:27

Freut mich dass es jetzt läuft :D

Jetzt überlege ich schon, ob ich mir auch noch so ein Dingens in meinen Poolkreislauf reinhänge... Aber dann wäre ja der nächste Schritt auch gleich noch phWert-Messung... und Chlorgehalt... Nein, hör auf jetzt.. ;)

Und siehst Du, jetzt hast du nebenbei auch gleich noch Arduino programmieren gelernt ;)

Gruß
Thilo
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 19.07.2018, 19:17

Thisoft hat geschrieben:
19.07.2018, 14:27
jetzt hast du nebenbei auch gleich noch Arduino programmieren gelernt
Nee, da gehört mehr zu. Ist wie mit Fremdsprachen: geschriebenen Text entziffern ist eins, fließend sprechen was ganz anderes.

Ich hätte da noch eine Frage, da es doch nicht ganz so läuft, wie es soll.
Ich fürchte er misst die differen nur > und nicht >=. Wenn ich also 2 eingestellt habe muss der druck sich mindestens von messung zu messung um 0,3 bar ändern.
Bei dem normaldruck von etwa 0,95bar ist das schon viel.
Dazu scheint zu kommen, dass beim an oder abschalten der Pumpe, je nach zufälligem messzeitpunkt es anscheinend vorkommen kann, dass der druck in jeweils 10 sekunden jeweils nur um 0,2 bar (0.9....0,7....0.5....0.3) sinkt oder steigt. Dann wird keine Änderung angezeigt, auch wenn der Druck in der Summe jetzt 0,6 bar gefallen ist.
Was passiert wenn luft drin ist kann ich noch nicht abschätzen.
Ist eine höhere Auflösung möglich, also zweistellig?
Ich hatte beim läppi nur auf die serielle Konsole geachtet, nicht auf die Werte in der ccu.

Gruß Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 19.07.2018, 21:45

Homoran hat geschrieben:
19.07.2018, 19:17

Nee, da gehört mehr zu. Ist wie mit Fremdsprachen: geschriebenen Text entziffern ist eins, fließend sprechen was ganz anderes.
Naja, fließend kann ich auch nur .NET. Die ganzen C-Dialekte sind für mich genau wie Javascript auch nur 2. Fremdsprachen wo ich hin und wieder im Wörterbuch nachschlagen muss ;)
Ich hätte da noch eine Frage, da es doch nicht ganz so läuft, wie es soll.
Ich fürchte er misst die differen nur > und nicht >=. Wenn ich also 2 eingestellt habe muss der druck sich mindestens von messung zu messung um 0,3 bar ändern.
Wenn du möchtest kannst du das ja in der folgenden Zeile von ">" in ">=" ändern. Oder eben den Grenzwert in 1 ändern...

Code: Alles auswählen

if (abs(DruckValue - lastValue) > MeldeDifferenz){
Bei dem normaldruck von etwa 0,95bar ist das schon viel.
Dazu scheint zu kommen, dass beim an oder abschalten der Pumpe, je nach zufälligem messzeitpunkt es anscheinend vorkommen kann, dass der druck in jeweils 10 sekunden jeweils nur um 0,2 bar (0.9....0,7....0.5....0.3) sinkt oder steigt. Dann wird keine Änderung angezeigt, auch wenn der Druck in der Summe jetzt 0,6 bar gefallen ist.
Nö - stimmt nicht. Der aktuelle Messwert wird immer mit dem zuletzt gesendeten Wert verglichen.
Was passiert wenn luft drin ist kann ich noch nicht abschätzen.
Ist eine höhere Auflösung möglich, also zweistellig?
Naja, wir könnten schon auf Hunderstelbar gehen. Dann musst du dir aber bewußt sein dass bei einem Wert über 2,55bar der übertragene Wert in der CCU nicht richtig ist (bzw. eben wieder bei 0 anfängt). Andere Möglichkeit wäre noch sowas krummes wie Fünfzigstelbar ...

Gruß Thilo
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 20.07.2018, 08:25

Thisoft hat geschrieben:
19.07.2018, 21:45
wo ich hin und wieder im Wörterbuch nachschlagen
bei mir wäre das eher ...bis auf ganz weniges NICHT im Wörterbuch... ;-)
Thisoft hat geschrieben:
19.07.2018, 21:45
in der folgenden Zeile von ">" in ">=" ändern. Oder eben den Grenzwert in 1 ändern.
letzteres hatte ich vor, ersteres war ich mir nicht sicher ob die Syntax das kennt.

Thisoft hat geschrieben:
19.07.2018, 21:45
Der aktuelle Messwert wird immer mit dem zuletzt gesendeten Wert verglichen.
Das ist gut zu hören, dann muss ich die Ursache woanders suchen :(


Thisoft hat geschrieben:
19.07.2018, 21:45
Naja, wir könnten schon auf Hunderstelbar gehen. Dann musst du dir aber bewußt sein dass bei einem Wert über 2,55bar der übertragene Wert in der CCU nicht richtig ist
Damit könnte ich leben. So hoch geht ja auch das Manometer nicht.
Solange da nichts zerschossen wird.

Danke mal wieder
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 20.07.2018, 10:18

Homoran hat geschrieben:
20.07.2018, 08:25
Thisoft hat geschrieben:
19.07.2018, 21:45
Naja, wir könnten schon auf Hunderstelbar gehen. Dann musst du dir aber bewußt sein dass bei einem Wert über 2,55bar der übertragene Wert in der CCU nicht richtig ist
Damit könnte ich leben. So hoch geht ja auch das Manometer nicht.
Solange da nichts zerschossen wird.
Was das Zerschießen betrifft kann ich mir das zwar nicht vorstellen dass da ein Zusammenhang bestehen soll. Es würden ja dann eben nur die niedersten 8 bit des Wertes übertragen, also nach der 255 käme einfach wieder eine 0...
Aber solange du noch nicht aufgeklärt hast wo der astronomische DC auf deiner CCU herkam...???

Ansonsten müsstest du dann lediglich in der void loop() die beiden "*10" durch "*100" ersetzen. Wobei zu bedenken ist, dass die durch den Sensor und die Auflösung des Analogeingangs gegebene Auflösung nur bei ca. 60/bar liegt!
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 20.07.2018, 10:35

Thisoft hat geschrieben:
20.07.2018, 10:18
Aber solange du noch nicht aufgeklärt hast wo der astronomische DC auf deiner CCU herkam...???
Sorry!
Hab ich, ein HM-SW1-PBU-FM hat sich im Millisekundenbereich gemeldet; habe ihn ausgetauscht jetzt ist Ruhe.
Der Sensor war aber inzwischen an einer eigenen Testumgebung mit dem neuen Funkmodul


Thisoft hat geschrieben:
20.07.2018, 10:18
ediglich in der void loop() die beiden "*10" durch "*100" ersetzen.
ich denke, das bekomme ich hin ;-)


Thisoft hat geschrieben:
20.07.2018, 10:18
dass die durch den Sensor und die Auflösung des Analogeingangs gegebene Auflösung nur bei ca. 60/bar liegt!
Hä?
also 60 Stufen statt 100?
Das ist besser als nix

Mach ich demnächst mal.
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 20.07.2018, 11:08

Ich zitiere mal aus einem meiner Posts ein Stück weiter vorn:
Nun mal theoretisch: lt. Datenblatt misst der Sensor von 0-1,2Mpa, also 0-12bar und gibt dementsprechend eine Spannung von 0,5-4,5V aus das bedeutet letztlich 4V/12bar = 0,333V/bar. Der gelesene Wert im Arduino entspricht 1024/5V = 204/V. Dementsprechend 68/bar.
Somit wirst du bei der Messung auf 0,01bar letztlich trotzdem nur eine Auflösung in Schritten von ca. 0,02 bar erhalten. Aber das ist schon mal besser als nix, oder eben als 0,1.
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 20.07.2018, 15:14

Es läuft nicht!!
kann aber nur an einem kleinen Problem hängen.

erst einmal das Positive.
Nachdem es gestern schon hing, habe ich mal den Impuls auf D10 auf 300msec verlängert; außerdem die 2x 10 gegen 100 getauscht und die Meldediffrenz erst auf 12, dann immer weiter runter bis auf 4.
Spoiler: Show hidden text

Code: Alles auswählen

int sensorPin = A7;  
int firstDigitPIN = 2;
int sendPIN = 10;   
int sensorValue = 0; 
int DruckValue = 0;
int lastValue = 0;
int MeldeDifferenz = 4;

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(300);
  digitalWrite(sendPIN, LOW);  
  Serial.println("Gestartet");
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin)*100; 
  Serial.println("Analogwert = " + (String) sensorValue);
  DruckValue = (sensorValue - (Nullpunkt * 100));
  if (DruckValue < 0) DruckValue = 0;
  DruckValue = (int) DruckValue / Messfaktor;
  Serial.println("Druckwert in 0.01bar = " + (String) DruckValue);
  if (abs(DruckValue - lastValue) > MeldeDifferenz){
    sendValue(DruckValue);
    lastValue = DruckValue;
  };
  delay(Zykluszeit*1000);
}
sah alles ganz gut aus, bis das System wieder einfror.
Soll heißen. in der seriellen Konsole lief alles prima weiter, in HM aber nicht.

Sketch neu hochgeladen, Kosole restart, lief . . . . bis es wieder einfror.
Das konnte ich mehrfach wiederholen.
Spoiler: Show hidden text

Code: Alles auswählen

Gestartet
Analogwert = 15700
Druckwert in 0.01bar = 100
Binärwert = 01100100

Analogwert = 15800
Druckwert in 0.01bar = 101
Analogwert = 15700
Druckwert in 0.01bar = 100
Analogwert = 15900
Druckwert in 0.01bar = 103
Analogwert = 15800
Druckwert in 0.01bar = 101
Analogwert = 15900
Druckwert in 0.01bar = 103
Analogwert = 16000
Druckwert in 0.01bar = 105
Binärwert = 01101001

Analogwert = 15900
Druckwert in 0.01bar = 103
Analogwert = 16000
Druckwert in 0.01bar = 105
Analogwert = 15600
Druckwert in 0.01bar = 98
Binärwert = 01100010

Analogwert = 15600
Druckwert in 0.01bar = 98
Analogwert = 15700
Druckwert in 0.01bar = 100
Analogwert = 15600
Druckwert in 0.01bar = 98
Analogwert = 16000
Druckwert in 0.01bar = 105
Binärwert = 01101001

Analogwert = 16000
Druckwert in 0.01bar = 105
Analogwert = 15600
Druckwert in 0.01bar = 98
Binärwert = 01100010

Analogwert = 15600
Druckwert in 0.01bar = 98
Analogwert = 16000
Druckwert in 0.01bar = 105
Binärwert = 01101001

Analogwert = 16000
Druckwert in 0.01bar = 105
Analogwert = 15600
Druckwert in 0.01bar = 98
Binärwert = 01100010

Die 98 wurden nicht mehr an die CCU gesendet, danach auch nichts mehr


Analogwert = 15800
Druckwert in 0.01bar = 101
Analogwert = 15600
Druckwert in 0.01bar = 98
Ab einem bestimmten Punkt wurde nichts mehr gesendet.

Dann habe ich den Läppi abgeklemmt und die externe Stromversorgung angeklemmt.
Wenn der DC des Sendemoduls am Ende gewesen sein sollte hätte der jetzt wieder resettet sein müssen, der Arduino ebenfalls.

Aber kommt nix neues mehr :(

Der Wert steht in der CCU immer noch auf 105, der DC der CCU ist auf 1
ich bin ratlos.


EDIT:
Sehe gerade dass ich das falsche Timeout auf 300 gesetzt habe.


Gruß
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 20.07.2018, 18:19

Nach langem probieren läuft es jetzt, wobei ich immer noch nicht weiß warum es nicht lief und ob es jetzt dauerhaft stabil laufen wird.
Pool_Pressure.jpg
Hier sieht man schön meine ganzen Versuche zwischen 17:15 und 17:30 ;-)

Nachdem es dann da immer noch nicht lief hatte ich alles abgebaut und mit reingenommen. In der Box zu arbeiten macht wirklich keinen Spaß.

Dann hatte ich mir nochmal die https://files.elv.com/Assets/Produkte/1 ... 17_web.pdf mehrfach durchgelesen. Ich habe nicht alles verstanden, aber da stand etwas zu dem Triggerimpuls:
DU30
Datenübernahme Kanal 3, low-aktiv
(Anlernen Kanal 3)
DUI30
Datenübernahme Kanal 3, 2–24 V,
high-aktiv, (Anlernen Kanal 3)
ich habe den D10 des Arduino aber an den DUI 30 angelötet.

In der Online-Hilfe zu den Modi in der BebUI ist immer nur vom DU30 die Rede.

Dann habe ich noch überlegt dass es in der Konfig ja eine "Datenstabilitätsfilterzeit" gibt. Die stand auf eine Sekunde.
Daraufhin habe ich diese auf 0.2sec gestellt und das Delay für den Impuls auf 0.5sec (ich hatte schon überlegt das auf 5-9 Sekunden zu stellen.

Dann habe ich diverse Modi versucht - mit deinem zweiten Sketch leif es ja sauber durch - und dann doch Mode 1 genommen. Mit offenen Enden gestartet und etwa alle 10 Sekunden einen Wert in der CCU. Inkl. der dauernden Konfigurationsänderungen stieg der DC so gaaanz langsam (in 10 Minuten) auf 6. Damit könnte man ja sogar noch leben.

Dann bin ich wieder raus und habe den Drucksensor angeschlossen - lief, und lief und lief.
Dann wieder alles verdrahtet und in das Gehäuse gepackt - hing!!!

externe Spannung ab, USB an den Arduino - lief!
Spannung geprüft; 5,21 volt am Arduino, anderes Netzteil 5,4 V lief auch nicht
Alle Kabel und Lötstellen gewackelt, keine Änderung
Ich wollte schon irgendwo einen Ferritkern drum wickeln, als es auf einmal stabil lief, nachdem ich die Antenne anders verlegt hatte. Also doch ein Funkproblem, die Konfigdaten klappten aber immer.

Ich bin erst einmal Froh, dass es läuft, werde mir ggf. mal ein zweites Modul kaufen; Arduinos hab ich ja noch.....


Noch mal VIELEN Dank
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Thisoft
professional
Beiträge: 727
Registriert: 15.10.2014, 21:34
Wohnort: Erzgebirge

Re: Druckmessung

Beitrag von Thisoft » 20.07.2018, 22:07

Also mit dem DU30 bzw. DUI30 das ist ein bisschen verwirrend. Im Prinzip ist's in deinem Fall mehr oder weniger egal, einer schaltet auf High, einer auf Low, da der Arduino beide Flanken auslöst sollte die Übertragung in jedem Fall getriggert werden.


Die Datenstabilitätsfilterzeit dürfte nur in den Modi 4 und 6 relevant sein, ist aber bestimmt kein Fehler die sehr klein einzustellen.


Das ist natürlich blöd wenn du jetzt ein Funkproblem von deinem Modul zur CCU hast. Müsstest du ja in der CCU sehen können wie der RSSI-Wert ist...


Wenn es dann mal läuft und der DC noch etwas zu hoch geht kannst du ja das Messintervall (Zykluszeit) ohne weiteres noch hochsetzen.
17 HM-Geräte; keine CCU - nur USB-Konfigadapter
ioBroker-Multihost auf Windows10(Master) und RasPi2(Client) und Ubuntu-VM(Client, nur Test)

Benutzeravatar
Stabilostick
professional
Beiträge: 500
Registriert: 23.05.2018, 14:52

Re: Druckmessung

Beitrag von Stabilostick » 21.07.2018, 00:41

Wegen Antenne möchte ich noch vorsichtig auf Seite 13 der Anweisung von ELV verweisen:
Für die Steuerung mit einem Mikrocontroller können auch die Spannungseingänge genutzt werden. Diese Eingänge reagieren ab einer Spannung von ca. 2 V. Es ist darauf zu achten, dass die Spannung im inaktiven Fall wirklich 0 V beträgt.
Wer zieht den Triggereingang auf 0V? Macht das der Arduino? Ich denke: ja. Ansonsten Pull down-Widerstand.

Passt das?
Pins configured as OUTPUT with pinMode() are said to be in a low-impedance state. This means that they can provide a substantial amount of current to other circuits. Atmega pins can source (provide positive current) or sink (provide negative current) up to 40 mA (milliamps) of current to other devices/circuits. This is enough current to brightly light up an LED (don't forget the series resistor), or run many sensors, for example, but not enough current to run most relays, solenoids, or motors.

Short circuits on Arduino pins, or attempting to run high current devices from them, can damage or destroy the output transistors in the pin, or damage the entire Atmega chip. Often this will result in a "dead" pin in the microcontroller but the remaining chip will still function adequately. For this reason it is a good idea to connect OUTPUT pins to other devices with 470Ω or 1k resistors, unless maximum current draw from the pins is required for a particular application.

Benutzeravatar
Homoran
guru
Beiträge: 12817
Registriert: 08.08.2014, 16:50

Re: Druckmessung

Beitrag von Homoran » 21.07.2018, 07:32

Stabilostick hat geschrieben:
21.07.2018, 00:41
Es ist darauf zu achten, dass die Spannung im inaktiven Fall wirklich 0 V beträgt.
Das hatte ich gelesen, und gehofft, dass Thilo das auch hat, weil och dazu nochts sagen kann.
Dann stand noch etwas, dass bei high die spannung ab 2v gilt.
Da wir auf high triggern, habe ich vermutet, dass die 0v nur für low gelten.
Aber alles nur Halbwissen, wenn überhaupt.

Habe heute nacht nochmal gegrübelt und keine glaubhafte andere Ursache aus meinen Versuchen ableiten können. Die Ursache muss im arduino oder der Stromversorgung liegen.

Der rssi ist brauchbar, habe gerade nachgesehen. Auf der anderen Installation hatte ich devconfig noch nicht aktiviert, da hätte er wegen des neuen Funkmoduls noch besser sein müssen

Gruß Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Antworten