Hallo zusammen,
ich habe folgende Ausgangssituation:
es soll ein Arduino UNO oder Mega (beides vorhanden) als Dual PID Controller mit Autotunefunktion ,Visualisierung sowie Bedienung über einen Drehencoder und ein OLED realisiert werden.
Dabei sollen zwei Regelstrecken, Dampf und Wasser geregelt werden. Auf dem OLED sollen zwei Menüs RK1 und RK2 anwählbar sein. In den jeweiligen Menüs sollen der Soll- und der Istwert angezeigt werden. Der Sollwert soll geändert werden. Idealerweise kann man die Regelparameter Kp, Ki und Kd auch aus dem jeweiligen Menü geändert werden können.
Als Hardware dienen einer der genannten Boards, Zur Erfassung der Temperaturen dienen Pt100 mit Messumformer mit 0-5V Ausgang.
Am Ausgang sollen pro Regler ein SSR geschaltet werden.
Zur Absicherung sind Sicherheitsthermostate in die Versorgungsschleife eingebaut.
Als Addon ist ein Druckmessumformer vorhanden der den aktuellen Druck in einem dritten Menü anzeigt.
Messbereiche: RK1 0-105°C -- RK2 0-145°C -- Druck 0-15bar
Nun zu mir, die Technik liegt bereits in der Schublade. Jedoch habe ich mich in meiner Euphorie der Möglichkeiten dermaßen überschätzt. Einen Timer mit OLED und Encoder habe ich vor langer Zeit fertig gestellt. Dies übersteigt meine Fähigkeiten. Die PID LIB und die Autotune LIB verstehe ich nicht. Ist schonmal ein guter Anfang :o
Wer kann und möchte mir in diesem Projekt Hilfestellung geben?
Beste Grüße von der Küste
Max_HH:
Wer kann und möchte mir in diesem Projekt Hilfestellung geben?
Hier gibt es sehr viele, die dir bei deinem Projekt helfen, allerdings musst du uns deine Sketche zeigen, ohne die wir nicht helfen können.
Setze die Sketche in Code-Tags.
Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.
Damit wird dieser für alle besser lesbar.
Hallo HotSystems,
Soweit bin ich nicht gekommen. Ich kann die Libs für PID Autotune und Oled laden, aber mehr schaffe ich dann auch nicht
Max_HH:
Hallo HotSystems,
Soweit bin ich nicht gekommen. Ich kann die Libs für PID Autotune und Oled laden, aber mehr schaffe ich dann auch nicht
Ok, dann frage ich, wie sollen wir dir helfen.
Den Sketch musst du selber schreiben, nur du hast die entsprechende Hardware vor dir liegen.
Das Schreiben kann dir keiner abnehmen. Notwendige Tipps und Hilfestellung wirst du sicher erhalten.
Ohne eigene Vorleistung von Dir wird das wohl nichts werden.
Wenn Du einen suchst, der das für Dich programmiert, wirst Du wohl einen Dienstleister kaufen müssen.
Wir helfen gern als Hilfe zur Selbsthilfe. Der Hauptteil muss aber von Dir kommen.
Gruß Tommy
Guten Morgen,
danke für die deutlichen Worte.
Ein Dienstleister wäre eine Option. Wobei das ganze Projekt ein Eigenbau ist, wäre es schön auch die Programmierung irgendwie selber zu realisieren.
Ich hänge mich nochmal ein und dann würde es mich freuen das Stück für Stück durch zu sprechen.
Danke bis hier, jetzt muss ich erstmal liefern 
#include <PID_v1.h>
#define RelayPin_s 6 // PID Dampf Relaypins für das SSR
#define Relaypin_b 7 // PID Wasser Relaypins für das SSR
//Define Variables we'll be connecting to
double Setpoint_d, Input_d, Output_d;
//Specify the links and initial tuning parameters
PID myPID_d(&Input_d, &Output_d, &Setpoint_d,2,5,1, DIRECT); // Dampf PID Regelparameter? Kp, Kd, Ki ?
int WindowSize = 5000; // Was bedeutet Windowsize, ist das die länge des Zyklus in ms ?
unsigned long windowStartTime;
void setup()
{
windowStartTime = millis();
//initialize the variables we're linked to
Setpoint_d = 100; //dieser soll per Drehencoder angepasst werden, und ist später der Sollwert? Bezogen auf was? Irgendwo muss ja ein Messbereich festgelegt werden.
//tell the PID to range between 0 and the full window size
myPID_d.SetOutputLimits(0, WindowSize); // bedeutet das (0 oder 1) steigende oder fallende Flanke?
//turn the PID on
myPID_d.SetMode(AUTOMATIC);
}
void loop()
{
Input = analogRead(0); // der Analog Read muss ja noch irgendwo eingelesen werden? Da müsste ja oben ein define analogread erfolgen?
myPID_d.Compute();
/************************************************
* turn the output pin on/off based on pid output
************************************************/
unsigned long now = millis();
if(now - windowStartTime>WindowSize)
{ //time to shift the Relay Window
windowStartTime += WindowSize;
}
if(Output > now - windowStartTime) digitalWrite(RelayPin,HIGH);
else digitalWrite(RelayPin,LOW);
Soweit meine Gehversuche heute Abend.
Ich habe an den Rändern schon ein paar Kommentare als Fragen formuliert.
Für den OLED und den Drehencoder muss ich ja noch weitere Bibliotheken laden. Ebenfalls für die Autotune Funktion. Die werden dann ganz oben mit dem INCLUDE Befehl aufgerufen?
Ich habe den PID myPID_d genannt. Für den Zweiten Regler soll dann ein zweiter Regler als myPID_w definiert werden. Dazu kopiere ich den ersten und ändere die entsprechenden parameter von _d auf _w ab und packe es in eine eigene Schleife?
Wo definiere ich die Inputpins für die Temperatur am Eingang?
Bitte möglichst Anfängerfreundlich formulieren 
Beste Grüße
Max
kann geschlossen werden, war erfolgreich.