Ich habe ein MKS GEN L, das hat ein Arduino AT Mega 2560 und wird eigentlich für 3d drucker verwendet.
Dieses möchte ich für eine einzige Aufgabe verwenden, eine Silikon Heizmatte auf einen bestimmten wert zu heizen.
Dazu habe ich einen Thermistor, das Board und alles was ich brauche, finde nur kein Sketchbeispiel dafür, wie man mit einem Arduino so eine Matte mit PID steuert. Könnt ihr mir helfen?
hevilp:
Dazu habe ich einen Thermistor, das Board und alles was ich brauche, finde nur kein Sketchbeispiel dafür, wie man mit einem Arduino so eine Matte mit PID steuert. Könnt ihr mir helfen?
// Toner-Transfer-Quetsche
#include <Piezo.h> // Siehe Weekender 3
Piezo audio(3);
unsigned long loopcount=0; // Zaehlt die loop()-Durchlaeufe
const byte LED_Power[]={11, 12}; // Power-LED
const byte LED_Heizung[]={9, 10}; // Duo-LED (Heizung)
// (gruen=aus, rot=an)
const byte SwitchPin=8; // Schalter des Potis
const byte P_Pin=A0; // Temperatur-Poti
const byte D_Pin=A3; // Temperatur-Sensor
const byte SSR_Pin=4; // SSR
bool SSR_lastState=LOW; // Zustand des SSR
// Wertebereiche von Temperatursensor und Poti
// -------------------------------------------
// Die Werte wurden u. A. durch "Schnueffelproben" ermittelt.
// Soll heissen: Wenn das Geraet zu stinken anfaengt, ist die
// Temperatur zu hoch.
const byte temp_max=123;
const byte temp_min=150;
const byte poti_max=140;
const byte poti_min=0;
void setup()
{
pinMode(LED_Heizung[0], OUTPUT);
pinMode(LED_Heizung[1], OUTPUT);
pinMode(LED_Power[0], OUTPUT);
pinMode(LED_Power[1], OUTPUT);
pinMode(SwitchPin, INPUT_PULLUP);
pinMode(SSR_Pin, OUTPUT);
digitalWrite(SSR_Pin, LOW);
digitalWrite(LED_Heizung[0], LOW);
digitalWrite(LED_Heizung[1], HIGH);
digitalWrite(LED_Power[0], HIGH);
digitalWrite(LED_Power[1], LOW);
audio.beep(READY);
}
void loop()
{
uint16_t P_val=analogRead(P_Pin);
uint16_t D_val=analogRead(D_Pin);
byte schwellwert=map(D_val, poti_min, poti_max, temp_min, temp_max);
if(D_val>(schwellwert+1) && SSR_lastState==LOW)
{
audio.beep(ON);
digitalWrite(LED_Heizung[0],LOW); // Ready-LED rot
digitalWrite(LED_Heizung[1],HIGH); //
digitalWrite(SSR_Pin, HIGH);
SSR_lastState=HIGH;
}
else if(D_val<(schwellwert-1) && SSR_lastState==HIGH)
{
audio.beep(OFF);
digitalWrite(LED_Heizung[0],HIGH); // Ready-LED gruen
digitalWrite(LED_Heizung[1],LOW); //
digitalWrite(SSR_Pin, LOW);
SSR_lastState=LOW;
}
// Warteschleife, damit loop() nur 1 mal pro Sek. durchlaeuft
while((millis()-loopcount*1000)<1000) {}
loopcount++;
}
Der code ist dafür zuständig? Ich werde ohne SSR arbeiten (also matte direkt am Mosfet des Boards) mit einem NTC beta 4200 Thermistor. Meine Temperatur kann ich direkt in den Code schreiben, die ist fix. Will das ding nur anschalten, dann soll er heizen und dann wieder aus, wenn ich strom weg nehme
Bei mir schnüffelt DuckDuckGo nach Inhalten im WWW, beim FireFox als Standard-Suchmaschine eingetragen.
Der Code von gregorss hat aber noch nicht viel mit PID am Hut, darin ist eine ganz normale 2-Punkt-Regelung (mit Hysterese +/- 1).
... etwas irritiert mich, daß max kleiner als min ist ... wird aber wohl Seine Richtigkeit haben ;)
Ja. Die Durchlassspannung der Diode sinkt mit steigender Temperatur. Siehe hier.
Wie auch immer....
Wenn min größer als max ist, dann läuft was falsch.
Und, wenn es kein logischer Fehler ist, dann ein semantischer.
OK, vielleicht ist "Fehler" ein zu hartes Wort...
"Irreführend" ist evtl. passender.
Dazu habe ich einen Thermistor, das Board und alles was ich brauche, finde nur kein Sketchbeispiel dafür, wie man mit einem Arduino so eine Matte mit PID steuert. Könnt ihr mir helfen?
Teile dein Vorhaben in Abschnitte.
Teste jeden Abschnitt einzeln.
Wieso willst Du dieses Board für so einen Spielkram verwenden..? Schade darum!!!
In Threads rein grätschen, scheinst du gerne zu machen.
Auch wenn du fachlich nichts beitragen kannst/willst.
Schade, eigentlich.
combie:
In Threads rein grätschen, scheinst du gerne zu machen.
Auch wenn du fachlich nichts beitragen kannst/willst.
Schade, eigentlich.
Ich kann kein [u]reingrätschen[/u] (den musste ich mir gönnen da Du ja immer zu gerne anderen die Welt erklärst) meinerseits erkennen!? Mein Angebot war ja durchaus ernst gemeint! Vielleicht ist so etwas ja so manches Mal besser als Deine herablassende Art ertragen zu müssen?
Abgesehen davon sind es "Persönlichkeiten" wie Du es die nicht nur mich, sondern auch so einige andere davon abhalten ihre Fortschritte hier zu berichten... Denk mal drüber nach!
Ich lese und lerne hier zu alledem, was schon vorhanden ist! Und glücklicherweise haben Leute wie Du nicht wirklich darüber zu entscheiden ob das gut ist oder nicht (auch wenn ich mal meinen Senf dazu gebe)!
Wie ich schon mehrfach sagte schätze ich durchaus Deine fachliche Expertise, aber alles in allem bist Du am Ende doch nur ein unglaublich anstrengender Mensch, der sich darauf erbaut zu anderen von oben herab zu reden (Ich nehme Dir nicht ab, das es bei Dir im Vordergrund steht anderen zu helfen! Dir geht es darum Dich hervorzuheben, und Dich erhöht zu fühlen)...
So, Gn8 mein Guter. Und ein Tipp am Ende:"Ignoriere mich doch bitte einfach solange ich nichts falsches sage)...
Whandall:
Eigentlich hat ein 3D-Drucker doch eine Heizbettregelung eingebaut,
die müsstest du doch direkt benutzen können, oder?
https://www.youtube.com/channel/UCU1N0OKG3IKTLdDQbmVF7iA befasst sich hauptsächlich mit Modifikationen anderer Druckerfunktionen (weil es an der Heizbettregelung wohl nicht viel zu verbessern gibt ) , aber obiges war auch mein erster Gedanke.
https://youtu.be/aUjJ3aLpsRs befasst sich zwar mit der Regelung eines Hotends, von der Temperatur (70°) her passt es aber eher zum Heizbett - warum auch immer. Einfach mal selber suchen oder anfragen.
Es liegt ja selten an der Suchmaschine sondern am Suchwort.
postmaster-ino:
... etwas irritiert mich, daß max kleiner als min ist ... wird aber wohl Seine Richtigkeit haben
Die beiden Werte sind nicht die Schaltschwellen sondern Calibrationswerte um den gelesenen Wert umzurechnen. Außerdem hat hevilp einen NTC (bekommt kleineren Widerstand wenn er gewärmt wird). er schreibt aber nicht wie er den NTC im Spannungstiler verschaltet hat den dadurch kann der gemessene ADC mit der Temperatur größer oder kleiner werden.
Ich finde dieses Problemlösung einfach falsch, auch wenn sie vieleicht funktionieren könnte.
Wie haben hier nämlich keine Schwellwerte sondern ein gemessener Wert wird mit einem aus ihm errechneten Wert verglichen. Es kann zwar funktionieren aber es unmöglich kompliziert das ganze zu eichen.
while((millis()-loopcount*1000)<1000) {}
Wieso machst Du das so kompliziert? schreibe einfach
delay(1000);
Vorschlag. Errechne irgentwas was proportional zur Temperatur ist und kontrolliere ob dieser Wert größer oder kleiner dem Sollwert ist.
hevilp:
Dazu habe ich einen Thermistor, das Board und alles was ich brauche, finde nur kein Sketchbeispiel dafür, wie man mit einem Arduino so eine Matte mit PID steuert. Könnt ihr mir helfen?
Wie genau soll die Temperatur geregelt werden. Wieviel darf sie von der Solltemperatur abweichen?
Wenn DU eine PID Regelung willst dann such mal die PID library und schaue Dir die mitgelieferten Beispiele an.playground.arduino.cc/Code/PIDLibrary
Wemm man "arduino PID" in eine Suchmaschiene eingibt bekommt man ja jede Menge an Seiten.
Ich finde dieses Problemlösung einfach falsch, auch wenn sie vieleicht funktionieren könnte.
Wie haben hier nämlich keine Schwellwerte sondern ein gemessener Wert wird mit einem aus ihm errechneten Wert verglichen. Es kann zwar funktionieren aber es unmöglich kompliziert das ganze zu eichen.
Dieser Code funktioniert wie erwünscht und ich halte das für verständlichen Code. Was das Eichen angeht: Wie im Kommentar erwähnt, habe ich den Wert durch „Schnüffelproben“ ermittelt. Mir kam es nur darauf an, dass das Platinenlayout „umgebügelt“ wird, ohne dass dabei der Laminator verkokelt. Der Laminator hat bislang etwa 20 Layouts übertragen und funktioniert immer noch.