Go Down

Topic: Digitale Eingangsdruck Anzeige für Druckluftanlage (Read 1 time) previous topic - next topic

devilor

#30
Oct 07, 2020, 03:54 pm Last Edit: Oct 07, 2020, 04:00 pm by devilor
Moin  devilor
Wenn der Drucksensor eine lineare Kennlinie hat, dann kann die Umrechnung über die MAP-Funktion erfolgen:
Ausgangsspannung: 0,5-4,5 VDC
Arbeitsdruckbereich: 0-1,2 MPa
pressure = map(analogRead(A0),10,921,0,1200); // Ergebins in kPa
Viel Erfolg
Gruß Peter
und gesund bleiben
Hallo Peter,
vielen dank für deine Antwort.
Ich hatte gestern Abend auch noch bis nachts dran getüftelt [...]man war das eine kurze Nacht mit 3,5 std schlaf :P [...]
Ich habe meinen Code mehrfach überarbeitet.. getestet usw. Nun bin ich auf ein bis auf 0.1bar übereinstimmendes Ergebnis mit dem Manuellen Manometer gekommen.
Code: [Select]
 pressure = (analogRead(A0) - offset) * 1.2 / (fullScale - offset); // pressure conversion
  pressurebar = pressure * 10.0; // Ergebnis in Bar

Ich habe Testhalber jetzt mal den 3,3V Pin misbraucht als Sensorwert.
Da bekomme ich mit meiner Formel 8,7-8,8 bar im Serial Monitor angezeigt, mit deiner Formel ( für Bar muss ich ja nochmal durch 100 dividieren) 9,0-9,1 bar.
Kannst du mir dem Verständnishalber erklären woher das kommen kann?

Code: [Select]
 pressure = map(analogRead(A0),10,921,0,1200); // Ergebins in kPa
  pressurebar = pressure/100; // Ergebnis in Bar




Diese ganze MAP-Funktion hinterblicke ich nicht so wirklich, was sind das für Zahlen? Ich habe schon die Beschreibung der Funktion gelesen, verstehe aber nicht wie ich diese Zahlen in Verbindung bringe... ( ich will ja auch etwas lernen und verstehen)

Vielen Dank erstmal :)


devilor

Moin devilor,
schaue mal hier.
Ist eine handelsübeliche Berechnung über den Dreisatz  :)
Gruss Peter
und gesund bleiben

Moin, genau das habe ich mir bereits angesehen.
evtl. etwas konkreter: woher nimmst du die eingesetzten zahlen?
( 10, 921,0,1200 ) Die 921 kann ich mir als "fullScale" ja noch erklären, aber 10? die 1200 werden ja wahrscheinlich für die 1200kPa stehen, sprich 1,2Mpa.

so verstehe ich das:
10 - mir nicht klar, wäre ja "fromLOW"?
921 - Max. Wert des Sensors (4.5V)?
0 - von 0 kPa ?
1200 - max. 1200 kPa?

Warum kommt hierbei ein um 0,3 Bar anderes Ergebnis wie bei meiner Formel raus?


devilor

#34
Oct 23, 2020, 01:02 pm Last Edit: Oct 23, 2020, 01:04 pm by devilor
Moin,
ich hole diesen Thread nochmal hoch.
Die Anzeige ist nun schon etwas in Betrieb. Funktioniert von der gewollten Funktion auch super!

Leider musste ich feststellen, dass bei längerem Betrieb ( 6 std. ca. )
auf einmal sich die Anzeige aufhängte bzw. eingefroren war. ( ist mir aufgefallen, da der Kompressor ansprang, was er bei 7,3 bar tut , die anzeige aber noch 8,6 bar starr anzeigte )
Als ich dann den Hauptschalter betätigte und wieder einschaltete war die Uhr wieder genullt, alles andere ging aber wieder.
Dieses Phänomen tritt desöfteren, allerdings nach unterschiedlicher Einschaltzeit auf. Mal nach 1,5 Std , mal nach 6 Std, mal nach 4 Std.

Hat jemand eine Idee woran es liegen kann?

der aktuelle Sketch sieht so aus:
Code: [Select]
#include <Time.h>
#include <DS1307RTC.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int offset = 96.26; // Null Bar kalibrieren
int fullScale = 921.6; // maximaldruck kalibrieren
//SensormaxMPA = 1.2; // Maximaler Sensormesswert in MPA
float pressure; // Druck in MPA
float pressurebar; // Finaler Druck in Bar




// Manche (so wie meins) verwenden auch die Adresse 0x3F
// Setze die pins auf dem I2C-Chip, die für die LCD-Verbindungen verwendet werden:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F  , 20, 4);


void setup() {
  lcd.init(); //Im Setup wird der LCD gestartet
  lcd.backlight(); //Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus).
  Serial.begin(9600); //Öffnet den seriellen Port und legt die Baud Rate (9600) für die serielle Übertragung fest.
  setSyncProvider(RTC.get); //Dies ist die Funktion um die Zeit- und Datumsangabe von der RTC zu bekommen
}


void loop() {
//pressure = (analogRead(A0) - offset) * 1.2 / (fullScale - offset); // pressure conversion
//pressurebar = pressure * 10.0;
  pressure = map(analogRead(A0),99.26,921.6,0,1200); // Ergebins in kPa
  pressurebar = pressure/100;
  Serial.print("Systemdruck ist  ");
  Serial.print(pressurebar, 1);
  Serial.println("  bar");
  //delay(1000);

  // 0.5 Sekunden warten
  delay(500);

  // Position setzen, Überschrift anzeigen
  lcd.setCursor(4, 0); //setCursor gibt an wo der Text beginnen soll. In diesem Fall beim dritten Zeichen in der ersten Reihe
  lcd.print("SYSTEMDRUCK:");


  // Position setzen, Druck messen und anzeigen
  lcd.setCursor(6, 1);
  printDruck(pressurebar);
  //lcd.print(pressurebar, 1);
  lcd.print(" bar  ");

  lcd.setCursor(0, 3); //setCursor gibt an wo der Text beginnen soll. In diesem Fall beim ersten Zeichen in der vierten Reihe.
  printDigitsDate(hour());
  printDigits(minute());
  lcd.print(" ");
  lcd.print("Uhr");
  lcd.print(" ");
  printDigitsDate(day()); // Das Datum soll nun als
  lcd.print("."); // „Tag", „." „Monat" usw. angegeben werden.
  printDigitsDate(month());
  lcd.print(".");
  lcd.print(year());
}

void printDruck(float druck) {
  lcd.setCursor(6, 1);
  if (druck < 10)
    lcd.print(" ");
  if (druck < 0)
    lcd.setCursor(6, 1);
  lcd.print(druck, 1);
}


void printDigitsDate(int digitsDate) //In diesem Abschnitt wird festgelgt, dass bei Zahlen <10 im automatisch eine 0 vor den Ziffern angezeigt wird.
{
  if (digitsDate < 10)
    lcd.print('0');
  lcd.print(digitsDate);
}
void printDigits(int digits) //In diesem Abschnitt wird festgelgt, dass bei Zahlen <10 im automatisch eine 0 vor den Ziffern angezeigt wird.
{
  lcd.print(":");
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}


Das ist wirklich doof , da ich so ohne weiteres auch nicht an den Arduino komme.
Ihn ständig ausbauen um die Uhr neu zu stellen ist etwas doof.
Apropos Uhr: Erkennt er eigentlich selbstständig die Sommer/Winterzeit?

Über Eure erneute Hilfe wäre ich sehr dankbar :)

Gruß
Devilor.

agmue

Ihn ständig ausbauen um die Uhr neu zu stellen ist etwas doof.
Hat Deine RTC keine Batterie/Akku, um die Uhrzeit zu halten?

Apropos Uhr: Erkennt er eigentlich selbstständig die Sommer/Winterzeit?
Nein, kann man aber per Programm "nachrüsten".

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

my_xy_projekt

Die Anzeige ist nun schon etwas in Betrieb. Funktioniert von der gewollten Funktion auch super!

Leider musste ich feststellen, dass bei längerem Betrieb ( 6 std. ca. )
auf einmal sich die Anzeige aufhängte bzw. eingefroren war. ( ist mir aufgefallen, da der Kompressor

Über Eure erneute Hilfe wäre ich sehr dankbar :)
Da fallen  mir zwei Dinge ein:
mechanisch: Ferritperlen in die Zuleitungen vom Sensor und der Spannungsversorgung
programmteschnisch: Watchdog.

Letzteres führt, wenn der Arduino hängt, einen Reset direkt im AVR aus.
Keine Hardwareseitige Erweiterung nichts...

Im setup folgende Zeile als LETZTE einfügen:
Code: [Select]

  wdt_enable(WDTO_8S);


Am Ende von loop:
Code: [Select]

  wdt_reset();


Dann hängt der maximal 8 Sekunden.

devilor

Hat Deine RTC keine Batterie/Akku, um die Uhrzeit zu halten?

Nein, kann man aber per Programm "nachrüsten".
Doch das hat Sie. Die Uhr funktionierte jetzt ja auch immer wenn ich den Hauptschalter eingeschaltet habe... zumindest bis sich der Arduino das erste mal aufgehängt hatte, dabei scheint sich die Uhr zu resetten.
Das mit der Sommer/Winterzeit werde ich mal versuchen im Inet zu finden und versuchen nachzurüsten.

Da fallen  mir zwei Dinge ein:
mechanisch: Ferritperlen in die Zuleitungen vom Sensor und der Spannungsversorgung
programmteschnisch: Watchdog.

Letzteres führt, wenn der Arduino hängt, einen Reset direkt im AVR aus.
Keine Hardwareseitige Erweiterung nichts...

Im setup folgende Zeile als LETZTE einfügen:
Code: [Select]

  wdt_enable(WDTO_8S);


Am Ende von loop:
Code: [Select]

  wdt_reset();


Dann hängt der maximal 8 Sekunden.
Vielen Dank,
Also am sinnvollsten versuche ichs dann per Watchdog.
8sek hängen macht mir nicht aus. Wie siehts dann mit der RTC aus, verstellt diese sich ebenfalls immer um 8 sec, sodass nach x hängern auf einmal die Uhr nach dem "mond" geht?
Danke für eure Hilfe!

agmue

... dabei scheint sich die Uhr zu resetten.
Oder sie wird nicht gelesen, denn das passiert nur in setup().

Ein Reset der Uhr ist mir nicht bekannt.

Das mit der Sommer/Winterzeit ...
Gute Funktion von jurs, von mir leicht verbessert: summertimeEurope

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

my_xy_projekt

Doch das hat Sie. Die Uhr funktionierte jetzt ja auch immer wenn ich den Hauptschalter eingeschaltet habe...

Also am sinnvollsten versuche ichs dann per Watchdog.
8sek hängen macht mir nicht aus. Wie siehts dann mit der RTC aus, verstellt diese sich ebenfalls immer um 8 sec, sodass nach x hängern auf einmal die Uhr nach dem "mond" geht?
Moment, das sind ja neue unbekannte Infos, die bei der Fehlersuche behilflich sein könnten.
Aus Deiner Antwort könnte man lesen,  das der I2C-BUS das Einfallstor ist.

Wenn der BUS hängt, gibt es keine Ausgabe auf dem Display und keine Uhrzeit aus der RTC.
Der Watchdog wird das möglicherweise nicht abdecken.

Probiers.
Und geb Rückmeldung!!!



devilor

Ich werde es auf jeden fall probieren, kann allerdings ein paar tage dauern, da der kompressor auch nicht jeden Tag benutzt wird.
Es könnte auch der BUS sein, ja. hängt ja beides am I2C Bus.

Sobald sich die Uhr resettet hatte man anschließend das Beispielprog. Readtime geöffnet hat kam immer ein Fehler, dass keine Uhrzeit  ausgelesen werden kann. ( Wortlaut weiß ich nicht mehr genau..muss den Arduino erst aus dem Schaltkasten wieder ausbauen.)

@agmue Danke für den Link. Ich werde nun erstmal versuchen die Fehler zu beseitigen und mich anschließend damit befassen die S/W umschaltung noch mit einzubauen!

devilor

Hallo,

so nun mal die erste Rückmeldung.
Ich habe es am Wochenende mit dem Watchdog probiert. Am ersten Tag war nach ca. 5 Stunden eine Uhrzeitabweichung von 20min feststellbar. (kann dies daran liegen?)
am Samstag lief es dann den ganzen Tag problemlos. (ca. 8 std)

Ich muss es mal weiterhin beobachten ob die Uhr sich wieder verstellt.

Ein Hängen der Anzeige ist mir nicht aufgefallen.

Gruß
Maurice

devilor

So nun nochmal eine Rückmeldung.
Es lief nun wochenlang ohne Probleme. Die Uhr ging auch bis auf 1-2 Min. genau.
Nun hat sich aber die Uhr wieder zurückgesetzt 0.00 Uhr 1.1.1970 Datum...

hat jemand noch eine Idee? vllt. liegt es ja doch am BUS wo das I2C und die RTC drauf liegen... aber was kann ich dagegen tun?

beste Grüße und gesund bleiben
Devilor

noiasca

zeig mal Bilder worauf wir deinen vollen Aufbau erkennen. Sind die I2C Kabel eh minimal kurz?

Welche Spannung hat die Zelle am RTC?
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

devilor

#44
Dec 09, 2020, 11:51 pm Last Edit: Dec 09, 2020, 11:54 pm by devilor
zeig mal Bilder worauf wir deinen vollen Aufbau erkennen. Sind die I2C Kabel eh minimal kurz?

Welche Spannung hat die Zelle am RTC?
Hallo,
Ich hab leider gerade kein anders Foto zur Hand. Die Kiste ist inzwischen schon in der garage fest verbaut. (Ich mache nochmal neue)
Spannung an der Zelle war eig okay. Die Zelle ist auch ganz neu gewesen, also nichtmals zwei Monate alt. Kann ich aber auch  nochmal messen.



Go Up