Unlösbare Auflagen Meisterprojekt

Egal wo man abschreibt, egal wen man beauftragt, einem die Arbeit zu erledigen...
Wenn das raus kommt ist die Arbeit im Arsch und man kann ein Jahr nachsitzen.

Bedenke:
Du versuchst gerade den fortgesetzten Betrug Gesellschaftsfähig zu machen.

Ok, ich habe nichts dagegen wenn DU ChatGPT als Hirnprotese benutzt.
Aber ein lernender, hat da nichts von.

1 Like

Die Wahrscheinlichkeit dafür ist hoch, denn die meisten Lehrenden, die solche Aufgaben stellen, lesen die einschlägigen Foren mit, um solche Betrugsversuche frühzeitig zu erkennen.

Gruß Tommy

Hallo Leute,

erstmal vielen Dank für die rege Beteiligung zu dem Thema.

Ich habe mal kurz in der Mittagspause für euch den IST-Zustand des Projektes in Fritzing gezeichnet, habe aber schon gesehen, dass bei anderen projekten 4 Pins vom MAX31865 zum Arduino gehen.

Da viele das Thema Betrug nennen, nein das ist kein Betrug, solange ich diesen Teil des Meisterprojektes als ,,Zukauf" deklariere. Diese Möglichkeit besteht, damit nicht jeder alles können muss, diese Teile werden jedoch nur begrenzt, oder gar nicht in die Bewertung mit aufgenommen. Ich muss die Programmierung usw. jedoch nicht in der Präsenzzeit erstellen, von daher ist ein ,,Zukauf" doch genau das Richtige ;).

Eine Masterarbeit kann ja auch Teile einer Quelle enthalten, solange man diese angibt ist alles schick.

Schaltbild Arduino_Steckplatine.pdf (890,5 KB)

Blöd nur, wenn die Arbeit nur aus Zukauf bestehen sollte, worauf Deine Klassifizierung der Aufgabenstellung als "unlösbar" hin deutet.

Gruß Tommy

Ich werde mich heute Abend mal hinsetzten und zu den Bauteilen mal etwas zusammensuchen. Ich glaube auch ein Video von Bastelbruder bei YouTube gesehen zu haben, was so in etwas das zeigt was ich brauche, außer vielleicht die verschiedenen Temperaturstufen und die Haltezeit.

Den Programmablaufplan muss ich mir dann auch überlegen und dann hoffentlich noch vor dem Wochenende hier posten.

Es geht bei dem für mich unlösbaren um die Auflagen und nicht um das gesamte Meisterprojekt. Diese Vorführschaltung ist ein kleiner Teil des Projektes, der für mich jedoch sehr schwer zu greifen und noch schwerer zu programmieren ist. Hätte ich mein Projekt von Anfang an mit einem Arduino geplant, hätte ich mich da schon irgendwie reingearbeitet, aber da der Faktor Zeit jetzt leider sehr klein ist, habe ich hier um Hilfe gebeten.

Es ist ja bekanntlich noch kein Meister vom Himmel gefallen :wink: .

1 Like

Ich habe mir letztes Frühjahr einen elektrisch (mit Bordspannung ~ 18V) betriebenen Boiler für mein Wohnmobil gebaut. "Heizung" sind 4 Heizpads (weil sie gerade übrig waren).
Hier mal der Sketch, ist seeehr laienhaft geschrieben, aber ich denke deshalb auch relativ einfach nachzuvollziehen.
Für mich das Wichtigste: er macht was er soll... :slight_smile:

Boiler_Steuerung
/*
  Regelung eines mit 4 12V 50W Heizpads betriebenen  WW Boilers.
  Zu Regelnde Größe: Wassertemperatur
  Einflußfaktoren:
  Wassertemperatur
  Batteriespannung

*/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(4);                  //OLED Display 4



const long ntcNominal = 10000;                 // Wiederstand des NTC bei Nominaltemperatur
const int tempNominal = 25;                     // Temperatur bei der der NTC den angegebenen Wiederstand hat
const int bCoefficient = 3977;                  // Beta Coefficient(B25 aus Datenblatt des NTC)
const int serienWiederstand = 8000;            // Wert des Wiederstands der mit dem NTC in Serie geschalten ist

unsigned long currentMillis;
unsigned long previousMillis = 0;
const int interval = 1000;

byte tasterplus = 2;
byte tasterminus = 3;

byte heizpad1 = 6;                            // Steuerpin Heizpad 1
byte heizpad2 = 7;                            // Steuerpin Heizpad 2
byte heizpad3 = 8;                            // Steuerpin Heizpad 3
byte heizpad4 = 9;                            // Steuerpin Heizpad 4

byte ntc_pad1 = A0;
byte ntc_pad2 = A1;
byte ntc_pad3 = A2;
byte ntc_pad4 = A3;

byte voltpin = A7;
byte wassertemppin = A6;

int low_bat = 670;                               // AD Wert, - an Spannungsteiler anpassen (aktuell 18,77 Volt = AD Wert 712)
int heizpadlimit = 750;                          // AD Wert, - passend zu Temperaturfühlern setzen
int bordspannung = 0;

int pad1 = 0;
int pad2 = 0;
int pad3 = 0;
int pad4 = 0;


float wassertemp = 0.0;
int wunschtemp = 44;





void setup() {

  digitalWrite(heizpad1, LOW);
  digitalWrite(heizpad2, LOW);
  digitalWrite(heizpad3, LOW);
  digitalWrite(heizpad4, LOW);

  pinMode(heizpad1, OUTPUT);
  pinMode(heizpad2, OUTPUT);
  pinMode(heizpad3, OUTPUT);
  pinMode(heizpad4, OUTPUT);

  pinMode(tasterplus, INPUT_PULLUP);
  pinMode(tasterminus, INPUT_PULLUP);



  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  //define I2C Adress
  display.clearDisplay();




}


void loop() {

  if (digitalRead(tasterplus) == HIGH) {
    waermer();
  }

  if (digitalRead(tasterminus) == HIGH) {
    kaelter();
  }

  currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    work();
  }


}


void work() {

  read_bordspannung();
  read_wassertemperatur();

  heizen();


  displayausgabe();


}

void waermer()  {
  delay(500);
  wunschtemp = wunschtemp + 1;
  delay(500);
}

void kaelter()  {
  delay(500);
  wunschtemp = wunschtemp - 1;
  delay(500);
}


void displayausgabe() {

  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);

  display.setCursor(0, 0);
  display.print("soll  ");
  display.print(wunschtemp);

  display.setCursor(0, 8);
  display.print("ist   ");
  display.print(wassertemp, 1);

  display.setCursor(0, 17);
  display.print(bordspannung);

  display.setCursor(0, 25);
  display.print(pad1);
  display.setCursor(30, 25);
  display.print(pad2);
  display.setCursor(60, 25);
  display.print(pad3);
  display.setCursor(90, 25);
  display.print(pad4);

  display.display();

}



void read_bordspannung() {

  bordspannung = 0;

  int i = 0;
  for (i = 0; i < 25; i++) {
    bordspannung += analogRead(voltpin);
  }

  bordspannung = bordspannung / i;


}



void read_wassertemperatur() {

  float sensorwert = 0;

  int i = 0;
  for (i = 0; i < 20; i++) {
    sensorwert += analogRead(wassertemppin);
  }
  sensorwert = sensorwert / i;
  sensorwert = map(sensorwert, 0, 1023, 1023, 0);         // aktivieren wenn Schaltung : + -> NTC -> Arduino
  sensorwert = 1023 / sensorwert - 1;                     // Umwandlung des Wertes in Wiederstand
  sensorwert = serienWiederstand / sensorwert;
  wassertemp = 0.0;                                                 // Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
  wassertemp = sensorwert / ntcNominal;                 // (R/Ro)
  wassertemp = log(wassertemp);                                 // ln(R/Ro)
  wassertemp /= bCoefficient;                             // 1/B * ln(R/Ro)
  wassertemp += 1.0 / (tempNominal + 273.15);             // + (1/To)
  wassertemp = 1.0 / wassertemp;                                // Invertieren
  wassertemp -= 273.15;                                   // Umwandeln in °C

}



void heizen() {

  int wassert = (int)wassertemp;

  pad1 = 0;

  int i = 0;
  for (i = 0; i < 20; i++) {
    pad1 += analogRead(ntc_pad1);
  }
  pad1 = pad1 / i;

  if (pad1 >= heizpadlimit) {
    digitalWrite(heizpad1, LOW);              // Schaltet Heizpad  bei zu hoher Pad-Temperatur aus
  }

  else if (wassert > wunschtemp)  {        // Schaltet Heizpad bei erreichen der Wunschtemperatur aus
    digitalWrite(heizpad1, LOW);
  }

  else if (bordspannung <= low_bat)  {        // Schaltet Heizpad bei zu niedriger Bordspannung aus
    digitalWrite(heizpad1, LOW);
  }

  else  {
    digitalWrite(heizpad1, HIGH);             // Ansonsten wird geheizt
  }



  pad2 = 0;

  i = 0;
  for (i = 0; i < 20; i++) {
    pad2 += analogRead(ntc_pad2);
  }
  pad2 = pad2 / i;

  if (pad2 >= heizpadlimit) {
    digitalWrite(heizpad2, LOW);
  }

  else if (wassert > wunschtemp)  {
    digitalWrite(heizpad2, LOW);
  }

  else if (bordspannung <= low_bat)  {
    digitalWrite(heizpad2, LOW);
  }

  else  {
    digitalWrite(heizpad2, HIGH);
  }


  //

  pad3 = 0;

  i = 0;
  for (i = 0; i < 20; i++) {
    pad3 += analogRead(ntc_pad3);
  }
  pad3 = pad3 / i;

  if (pad3 >= heizpadlimit) {
    digitalWrite(heizpad3, LOW);       // Schaltet Heizpad1 bei zu hoher Temperatur aus
  }

  else if (wassert > wunschtemp)  {
    digitalWrite(heizpad3, LOW);
  }

  else if (bordspannung <= low_bat)  {
    digitalWrite(heizpad3, LOW);
  }

  else  {
    digitalWrite(heizpad3, HIGH);
  }


  //

  pad4 = 0;

  i = 0;
  for (i = 0; i < 20; i++) {
    pad4 += analogRead(ntc_pad4);
  }
  pad4 = pad4 / i;

  if (pad4 >= heizpadlimit) {
    digitalWrite(heizpad4, LOW);       // Schaltet Heizpad1 bei zu hoher Temperatur aus
  }

  else if (wassert > wunschtemp)  {
    digitalWrite(heizpad4, LOW);
  }

  else if (bordspannung <= low_bat)  {
    digitalWrite(heizpad4, LOW);
  }

  else  {
    digitalWrite(heizpad4, HIGH);
  }

}
1 Like

Lass dir von den ganzen Schlaumeiern nicht den Auspuff zugipsen!
Du alleine trägst die Verantwortung für dein Projekt, dass du vor der Prüfungskommmision verteidigen darfst, bei der auch die Informationsbeschaffung und Verarbeitung ein Bewertungskriterium seien wird.

Hau rein Kapelle, die Zeit rennt.

Moin, also ich hab mal kurz drauf geschaut. Ist doch übersichtlich... :wink:
Der Taster ist flasch angeschlossen. Aber egal, es ist besser als vieles, was ich bisher gesehen habe.

Die Versorgung der Heizpads läuft mit 60V?
Mit den relais könnte das gehen. Ich habe nur Bedenken, was die Genaugkeit der Schaltpunkte angeht um die Temperatur zu halten. Und damit einhergehend auch der Verschleiß der Kontakte.

Alternativ könnte da ein PWM-gesteuerter Mosfet rein?
Pins dafür sind ja vorhanden :wink:

Achso - Wie willst Du die Auswahl der Temperaturstufen lösen? Zweiten Taster? Rotary-Encoder? Oder ist das StateMachine, das alle drei Stufen nacheienader angefahren werden? (Das wär ja schon fast zu einfach)

Das Netzteil dient nur der Darstellung, ich hab jetzt mit einem deutschen Hersteller für Heizplatten einen Deal gemacht, er schickt mir 4x 12V 7Watt Heizstreifen(dünne Matten), die ich dann in Reihe schalte und dann mit dem 48V 480Watt Netzteil was ich eh schon benutzen möchte versorge.

Ich würde auch lieber einen Mosfet einsetzen, da die ganzen kleinen Relais-Module ja nur 30VDC schalten können und der PWM-gesteuerte Mosfet vermutlich auch ein besseres Ansprechverhalten hat.

In der Aufgabenstellung steht ja, dass die 3 Temperaturstufen nacheinander mit einer Haltezeit angefahren werden sollen. Wenn das die einfachste Lösung ist, würde ich genau das wählen.

Hab den kleinen Schalter auch nur zum testen gewählt und bisher noch keine Polung gemessen :smiley:

:+1:
Und ja, ich würd den Mosfet definitiv vorziehen.
es muß ja nicht gleich nen PID sein, aber zumindest kurz vor Erreichen der Solltemperatur ne Rampe fahren wäre damit möglich.

Und deine Drei Temp's sind nen Klacks.
Da fehlt jetzt nur noch die Zeit, wie lange die gehalten werden sollen.

Der wäre gut, ist aber mit dem bissl Kram nichts zwingendes.
Wenn Du nur einen Taster für Start und Abbruch hast, ist es das einzige, was nicht so recht in die Schrittkette passt, da der Zustand "Start" eben nicht bei gedrückter sondern erst bei wieder losgelassenem Taster erfolgen darf, damit im Zustand "gestartet" die gedrückte Taste nicht zum Abbruch führt.
Alles andere nix was großartig Probleme bereiten sollte.

Das sind SPI-Pins, die Standard-Pins beim UNO nutzen, siehe Adafruit MAX31865 RTD PT100 or PT1000 Amplifier.

Das I²C-Display belegt A4 und A5.

Der R3 hat die noch oben über AREF parallel rausgeführt.
grafik
Von daher passt das schon.

Ja, paßt schon, aber dennoch A4 gleich SDA und A5 gleich SCL. Darauf wollte ich hinweisen, mehr nicht.

1 Like

OMG, ein Master-Abschluss in IT ist so einzigartig, finden Sie nicht? :heart_eyes: Es sei denn, Sie möchten ein paar aufstrebende Auszubildende coachen.

Kleine Pause hier - daher mal ne Zwischenfrage zur Aufgabenstellung:
Gibt es Vorgaben zu:

  • Temperatur, die die Heizung je Stufe halten soll? Interessant ist vor allem die Grenze bis zu der jeweils geheizt werden soll und die Toleranz/Hysterese, bis wohin bei erreichen der Abschalttemperatur wieder abgekühlen darf.
  • Die Zeit, die dieser Zustand gehalten werden soll.
  • zusätzlich: die temp geht nur nach oben? Oder heizt die erste Stufe und in der zweiten kommt es zu einer Auskühlphase um dann im dritten step vollständig durchzuheizen?
  • zusätzlich: die Haltezeiten sind immer gleich oder hat jede Stufe ihre eigene Zeit?
  • Mit welcher Genauigkeit soll das gehen? - Immerhin verwendest Du PT1000 und nicht Ds18x20 :wink: Reicht die Zahl vor dem Komma, oder müssen es 2 Stellen nach dem Komma auch noch sein?
  • Und was soll alles auf dem Display zu sehen sein?

Dann schaun wa ma.

Achso... Der Plan war soweit i.O. der Anschluß des MAX geht via softwareSPI, so wie im Example beschrieben ohne Probleme. Bleibt die onBoard-Led noch frei für Spielerein...

Da ich die Auslösetemperatur der Thermalkamera frei definieren kann, sollten die Temperaturstufen nicht allzu wichtig sein, aber 50/70/130°C wäre so meine Vorstellung.

Würde ich auf 30 Sekunden definieren.

Nach der Haltezeit kann die nächste Temperaturstufe angefahren werden, ich denke dadurch verkürzt sich auch die Zeit zwischen den Stufen.

Ich würde die ersten 2 Haltezeiten geringer als die finale Haltezeit gestalten, die anderen beiden soll nur zeigen wie genau die Kamera arbeitet (in Verbindung mit dem PT1000+LCD als Vergleich).

Die reine Temperatur ohne Nachkommastellen sollte reichen.

Ich vermute also, dass auch von der VMS/ Adam-Modul ein Trigger Richtung Arduino gehen muss, damit die Auslösezeit und Auslösetemperatur dargestellt wird. Mit der Größe des Displays 20x4 sollte denke ich genug Platz dafür sein.

Guten Morgen,

na das ist doch eine Aufgabe, die einfacher zu lösen ist, als gedacht :slight_smile:
Wenn die Nachkommastelle bei der Teperatur wegfällt, ist schon die Hälfte der Probleme gelöst.
Das mit dem Auslöser ist nichtt das Problem, die Laufzeit kannst Du auf jedes beliebige Ereignis triggern.
Da - zumindest bis jetzt - auch keine großartigen Dinge mit interrupts passieren, ist die Nutzung von millis() auch kein Problem.

Damit braucht da nicht auf einen Trigger gewartet werden. :wink:
Allerdings wird die Zeit nicht zwingend kürzer. Mit steigender Temperatur der beheizten Flöche steigt auch die Abgabe an die Umgebung, was dazu führt, dass die Fläche schneller auskühlt / langsamer erwärmt.

Ich halte das mit wenig Aufwand für lösbar.

Sehe ich auch so.
Die Befähigung zum Meister hängt nicht daran, ob man das selber irgendwie hinkriegt, sondern ob man das seinen "Lehrlingen" beibringen kann. Möglichst so, dass die denken, sie wären selbst drauf gekommen, aber der Meister hätte das zur Not auch selbst geschafft.

1 Like

Die der Unterseite gut dämmen hilft deutlich.