Es hat geklappt.
Dadurch, dass ich den Wärmetauscher umgebaut habe, erübrigt sich eine ausgiebige elektronische Steuerung.
Der Code funktioniert, aber benutzen kann ich ihn nicht.
Das K Modul schwimmt zu stark.
Das schein normal zu sein.
Einen PID REX 100FK02 hatte ich mir zum Testen bestellt.
Den habe ich nur an den Oszi gehängt.
Auch hier schwingt es zwischen LOW und HIGH nur so rum. Solange die Temperatur 2°C vor dem Schaltpunkt und 6° hinter dem Schaltpunkt liegt, schalte er sauber durch. Aber in diesem Bereich ist es eine Katastrophe. Merkwürdigerweise gibt es meinem Metrawatt Thermometer (TYP-K) sowas nicht.
Also warte ich, bis Pollin meinen Kram geschickt hat und baue das mit dem PT1000 auf.
Danke für Eure Anregungen und Tipps!
Achim
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int numRows = 2;
const int numCols = 16;
#include "max6675.h" //Die MAX6675 Bibliothek
const int max6675SO = 9; // Serial Output am PIN 8
const int max6675CS = 10; // Chip Select am PIN 9
const int max6675CLK = 13; // Serial Clock am PIN 10
// Initialisierung der MAX6675 Bibliothek mit
// den Werten der PINs
MAX6675 ktc(max6675CLK, max6675CS, max6675SO);
const double x1 = A1; //Prog 105 Ausgänge über Transistor
const double x2 = A2; //Prog 106 zum Umrichter
const double x3 = A3; //Prog 108
const double x4 = A4; //Prog 112
const double x6 = 6;
//Abgastemperatur
const float Temp1 = 30;//über 150°
const float Temp2 = 28;//145°-150°
const float Temp3 = 26;//140°-145°
const float Temp4 = 24;//unter 140°
const long oneSecond = 1000;
const long oneMinute = oneSecond * 60;
void setup() {
lcd.begin(numCols, numRows);//Start
Serial.begin(9600); // Begin der Seriellen Kommunikation mit 9600 Baud
delay(500); // eine kleine Pause damit der Sensor sich kalibriert
pinMode(x1, OUTPUT); //Programm 105 Ausgang
pinMode(x2, OUTPUT);//Programm 106
pinMode(x3, OUTPUT);
pinMode(x4, OUTPUT);//Programm 108
pinMode(x6, OUTPUT);//FWD=Start
}
void loop()
{
lcd.setCursor(0, 0); //1. Reihe 1.Zeichen
lcd.print("Abgastemperatur"); //Schreibt das Wort
lcd.setCursor(10, 1); //2. Reihe
lcd.print("Grad");
lcd.setCursor(2, 1); //2. Reihe 4.Zeichen
lcd.print(ktc.readCelsius()); //Schreibt den Wert
digitalWrite(x6, HIGH);//Startet den Umrichter
// Lesen des Temperaturwertes in Grad Celsius
double temperatur = ktc.readCelsius();
if (temperatur > Temp1) //über 155°C
{
digitalWrite(x1, HIGH);//Ist Programm 105 soll auf 40HZ
}
else
{
digitalWrite(x1, LOW);
}
if ((temperatur < Temp2) || (temperatur > Temp1)) //über 145°, aber
//unter 150°
{
digitalWrite(x2, LOW);// Programm 106, ca 43 HZ
} else {
digitalWrite(x2, HIGH);
}
if ((temperatur < Temp3) || (temperatur > Temp2)) //über 140°, aber
//unter 145°
{
digitalWrite(x3, LOW);// Programm 106, ca 46 HZ
} else {
digitalWrite(x3, HIGH);
}
if ((temperatur < Temp4) || (temperatur > Temp3)) //über 135°, aber
//unter 140°
{
digitalWrite(x4, LOW);// Programm 106, ca 50 HZ
} else {
digitalWrite(x4, HIGH);
}
if (temperatur < Temp4) // unter 135°
{
digitalWrite(x4, HIGH);//Programm 108,weniger als 25HZ
}
else
{
digitalWrite(x4, LOW);
}
Serial.print(temperatur);
Serial.println("C");
// 500ms Pause bis zum nächsten Durchlauf
delay(1000);
}
Lesezeichen