Ardoino, Mosfett, PID und Peltier

habe ich das richtig verstanden?

#include <PID_v1.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// DS18B20 Sensoren
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// MOSFET Steuerung
const int mosfetPin = 9; // MOSFET Pin für Peltier-Element

// PID-Konstanten (angepasst für deine Anwendung)
double Setpoint = 1.0; // Gewünschte Temperatur (1 Grad Celsius)
double Kp = 2.0;       // Proportionaler Anteil
double Ki = 0.5;       // Integraler Anteil
double Kd = 1.0;       // Differentialer Anteil

// PID-Objekt
double temperature; // Deklaration der Variable temperature außerhalb der loop()
double output;      // Deklaration der Variable output außerhalb der loop()

PID pid(&temperature, &output, &Setpoint, Kp, Ki, Kd, DIRECT);

// DS18B20 Sensoren Adressen
DeviceAddress address1 = { 0x28, 0x44, 0xBC, 0x96, 0x54, 0x22, 0x08, 0x46 };
DeviceAddress address2 = { 0x28, 0x69, 0x5F, 0x95, 0x54, 0x22, 0x08, 0xA6 };

void setup() {
  Serial.begin(9600);
  sensors.begin();
  
  pinMode(mosfetPin, OUTPUT);
  digitalWrite(mosfetPin, HIGH);

  pid.SetMode(AUTOMATIC);
  pid.SetOutputLimits(0, 255); // Anpassen der Ausgabegrenzen an die MOSFET-Steuerung
}

void loop() {
  sensors.requestTemperaturesByAddress(address1);
  float temp1 = sensors.getTempCByIndex(0);

  sensors.requestTemperaturesByAddress(address2);
  float temp2 = sensors.getTempCByIndex(1); // Index 1 für den zweiten Sensor

  // Durchschnittliche Temperatur berechnen
  temperature = (temp1 + temp2) / 2.0;

  pid.Compute();

  // Debugging-Ausgaben
  Serial.print("Temperature 1: ");
  Serial.print(temp1);
  Serial.print(" C, Address 1: ");
  printAddress(address1);

  Serial.print("Temperature 2: ");
  Serial.print(temp2);
  Serial.print(" C, Address 2: ");
  printAddress(address2);

  Serial.print(" Average Temperature: ");
  Serial.print(temperature);
  Serial.print(" C, Setpoint: ");
  Serial.print(Setpoint);
  Serial.print(" Output: ");
  Serial.println(output);

  digitalWrite(mosfetPin, output);

  delay(1000); // Wartezeit zwischen den Regelschleifen
}

void printAddress(DeviceAddress address) {
  for (int i = 0; i < 8; i++) {
    Serial.print(address[i], HEX);
    if (i < 7) {
      Serial.print(":");
    }
  }
  Serial.println();
}

jetzt geht das element kurz an. und dann sofort wieder aus...

Ich muss lachen :laughing: in Std bin zu Hause dann schreibe was ich meine

Hallo
Das muss doch
analog.Write sein

Und ein pwm fähiger Ausgang

Sorry @fony hatte das schon geschrieben

Und dann mach erst mal den I Anteil und D Anteil 0

Sorry, aber wie soll ich daran erkennen, welcher Mosfet da verbaut ist ?
Warum postest du keinen Link von dem Teil ?
Oder soll ich für dich suchen ?
Ich kenne das Teil nicht, auch weil es nicht nur eins gibt.

also ich bin vielleicht schwer im begriff. aber sowohl analogWrite als auch digitalWrite ändern nichts. und ja es war ein PWM fähiger Pin.

Und sorry wenn ich das noch mal poste...
Temperature 1: 28.94 C, Address 1: 28:44:BC:96:54:22:8:46

Temperature 2: 3.00 C, Address 2: 28:69:5F:95:54:22:8:A6

Average Temperature: 15.97 C, Setpoint: 1.00 Output: 0.0

Muss sich denn nicht der Output andern egal ob der jetzt analogWrite oder digitalWrite.

Ist das nicht wichtig das wenn ich:
pid.SetOutputLimits(0, 255);
in
pid.SetOutputLimits(240, 255);
das der Mosfet angesteuert wird.

kann mich wirklich nur entschuldigen. bin halt ein Grünschnabel..

Hallo
Ich sehe da gerade noch ein anderes Problemchen. Du willst ja eigendlich kühlen

Sollwert > Istwert ergibt positive Stellgröße

Du hast aber in der Regel den Sollwert kleiner als den Istwert. Damit wirst du eine negative Stellgröße bekommen von der du dann erst mal den Betrag bilden must um sie auszugeben.

Der Regler muss also negative werte ausgeben können. Grenze -255,255

sorry. tut mir echt leid. habe nur dem Amazon Link Mosfet

hättest ja schreiben können das du damit nichts anfangen kannst.
sorry aber man bekommt ja schon fast angst was zu fragen.

Wer nicht fragt, der kann auch nix lernen.

Lass dir den Auspuff nicht von "Platzhirschen" dicht gipsen. :slight_smile:

1 Like

perfekt ich danke dir.. jetzt regelt er schon mal... bester Mann danke...

2 Likes

Ne ich weis. ich werde da halt auch nervös weil ich gefühlt gar kein plan habe. und dann wird man leicht eingeschüchtert weil man will ja auch nicht nerven man ist ja dann fohr wenn jemand hilft..

Abwarten und zwischendurch einen Kaffee trinken, dann die Antworten und Beiträge sichten, auswerten und umsetzen.

Na dass ist doch schon was. Und du solltest schon Wissen, das man in der Elektronik nur mit Bildchen nix anfangen kann. Da gibt es zu viele unterschiedliche.
Z.B. auch welche, die erst sicher bei höherer Spannung schalten.
Lt. Datenblatt tuts deiner schon ab 3 Volt, also alles gut.

Und nein, fragen ist doch ok. Nur können wir mit fehlenden Infos, keine genauen Antworten geben.

Wie ich schon geschrieben hab Peltierelemente sind sehr träge, und reagieren mit PWM nur begrenzt, besser ist die nur ein und ausschalten.
Andere Frage wie willst du das machen mit dem Kühlen? Die Warmeseite muss ach mit der Umgebungsluft gekühlt werden, außer dem ist der Wirkungsgrad sehr gering, und egal was du nimmst als "Wanne" für das 'Wasser die Oberfläche der Wanne früst dir ganze Kälte weg, nur wenn das ding ist gut verpackt mit Styropor oder ähnlichem Material wird die Kälte auf das Wasser übergeben

hmm.. meine idee ist ein flaschen oder dosen kühler.
die idee ist wasser zukühlen und im dem wasser soll dann die dose oder flasche rotieren.
bis jetzt war nur wichtig das ich irgendwie eine regelung hin bekomme.
jetzt will ich versuchen wasser zukühlen am besten knapp über null.
ich weiss das das ganze nicht Energieeffizienz ist ich weiss auch noch nicht wieviele ich von den Peltiers brauche. aber wir wegen sehen.
Ach und ja gekühlt wird das Element auch mit Radiator dementsprechend auch mit Wasser.

Ja wenn das ganze für zB. eine Flache Bier geschlossen eine Woche läuft :wink:
Man kann nach helfen im dem sine, das dass Ding nur die Temp hält.
Habe schon experimentiert mit Kühltasche + Eis nach ein paar Std. war ende mit Gelände.

Du möchtest kein Pelztier mit PWM ansteuern.
Nein, das möchtest du nicht.

ja das habe ich ja jetzt hier gelernt... danke dir.

das soll maximal ja nur 1,2 bis 1,5 liter wasser haben. mehr brauche ich denke ich nicht.
ich probiere es mal aus.

OT: jedem Pelztier sein Moosfett :wink:
SCNR

1 Like

Hallo, dann schau mal hier

zudem gibt es in der lib zum Regler ein Beispiel "RelaisOutput"
Heinz