achso
24.01.2019, 08:10
Hallo,
Mein Frequenzumrichter hat 4 (x1-x4) Eingänge. Wenn man Sie auf LOW setzt, ergeben sich je nach Konstellation 16 Frequenzen. Die er dann ausführt, wenn man x6(Vorwärts) auch auf LOW setzt.
Als Temperaturquelle dient ein MAX 6675 Modul mit "K" Fühler.
Regeln möchte ich die Drehzahl des Abgasgebläses, meines alten Holzvergasers.
Die Temperatur liegt bei 220°C. Die möchte ich auf 170-180° bringen.
Nun funktioniert es mit einer if Abfrage einwandrei.
Aber wenn ich eine weitere zufüge, friert das Programm ein.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int numRows = 2;
const int numCols = 16;
#include <max6675.h>
const int max6675SO = 9; // Serial Output am PIN 9
const int max6675CS = 10; // Chip Select am PIN 10
const int max6675CLK = 13; // Serial Clock am PIN 13
const int x1 = A1; //Analog Ausgänge
const int x2 = A2; //zum Transistor
const int x3 = A3;
const int x4 = A4;
const int x6 = 6;
// Initialisierung der MAX6675 Bibliothek mit
// den Werten der PINs
MAX6675 ktc(max6675CLK, max6675CS, max6675SO);
const float Temp1 = 30;//Das sind die einzustellenden
const float Temp2 = 29;//Gradzahlen des Abgases
const float Temp3 = 28;
const float Temp4 = 27;
const float Temp5 = 26;
const float Temp6 = 25;
const float Temp7 = 24;
const float Temp8 = 23;
const float Temp9 = 22;
const float Temp10 = 137;
const float Temp11 = 136;
const float Temp12 = 135;
const float Temp13 = 134;
const float Temp14 = 133;
const float Temp15 = 128;
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); // Analog Ausgang
pinMode(x2, OUTPUT);
pinMode(x3, OUTPUT);
pinMode(x4, OUTPUT);
pinMode(x6, OUTPUT);
}
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);//Solange Spannung anliegt-High. Der Frequenzumrichter liefert 16 Volt, die gegen COM gesetzt werden. Deshalb sind da noch NPN Tranistoren zwischen.
// Lesen des Temperaturwertes in Grad Celsius
float temperatur = ktc.readCelsius();
if ((temperatur < Temp1) || (temperatur > Temp2))
{
digitalWrite(x1, LOW);
}
else
{
digitalWrite(x1, HIGH);
delay(1000);
//Das Funktioniert bis hier. Aber wenn ich die folgende if
//dazustelle,friert das Programm ein
}
if ((temperatur < Temp2) || (temperatur > Temp3))
{
digitalWrite(x2, LOW);
}
else
{
digitalWrite(x2, HIGH);
delay(1000);
}
Serial.print(ktc.readCelsius());
Serial.println("C");
// 500ms Pause bis zum nächsten Durchlauf
delay(1000);
}
}
Arduino ist trotz Arduino Kochbuch nicht meine Welt. Trotzdem knacke ich daran rum.
Vieles funktioniert auch. Aber so richtig begreifen tue ich es nicht.
Also keine große Hoffnung auf Läuterung verschwenden.
Ganz zufrieden bin ich mit dem Max 6675 nicht. Manchmal fangen die Gradzahlen das schwimmen an. Teils 6°. Irgendwann kriegt er sich dann wieder ein.
Deshalb greife ich vielleicht auf einen PT1000 mit Messwandler zurück.
Nett wäre, wenn ich den Fehler wüsste und eine Lösung hätte.
Dankeschön
Achim
Mein Frequenzumrichter hat 4 (x1-x4) Eingänge. Wenn man Sie auf LOW setzt, ergeben sich je nach Konstellation 16 Frequenzen. Die er dann ausführt, wenn man x6(Vorwärts) auch auf LOW setzt.
Als Temperaturquelle dient ein MAX 6675 Modul mit "K" Fühler.
Regeln möchte ich die Drehzahl des Abgasgebläses, meines alten Holzvergasers.
Die Temperatur liegt bei 220°C. Die möchte ich auf 170-180° bringen.
Nun funktioniert es mit einer if Abfrage einwandrei.
Aber wenn ich eine weitere zufüge, friert das Programm ein.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int numRows = 2;
const int numCols = 16;
#include <max6675.h>
const int max6675SO = 9; // Serial Output am PIN 9
const int max6675CS = 10; // Chip Select am PIN 10
const int max6675CLK = 13; // Serial Clock am PIN 13
const int x1 = A1; //Analog Ausgänge
const int x2 = A2; //zum Transistor
const int x3 = A3;
const int x4 = A4;
const int x6 = 6;
// Initialisierung der MAX6675 Bibliothek mit
// den Werten der PINs
MAX6675 ktc(max6675CLK, max6675CS, max6675SO);
const float Temp1 = 30;//Das sind die einzustellenden
const float Temp2 = 29;//Gradzahlen des Abgases
const float Temp3 = 28;
const float Temp4 = 27;
const float Temp5 = 26;
const float Temp6 = 25;
const float Temp7 = 24;
const float Temp8 = 23;
const float Temp9 = 22;
const float Temp10 = 137;
const float Temp11 = 136;
const float Temp12 = 135;
const float Temp13 = 134;
const float Temp14 = 133;
const float Temp15 = 128;
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); // Analog Ausgang
pinMode(x2, OUTPUT);
pinMode(x3, OUTPUT);
pinMode(x4, OUTPUT);
pinMode(x6, OUTPUT);
}
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);//Solange Spannung anliegt-High. Der Frequenzumrichter liefert 16 Volt, die gegen COM gesetzt werden. Deshalb sind da noch NPN Tranistoren zwischen.
// Lesen des Temperaturwertes in Grad Celsius
float temperatur = ktc.readCelsius();
if ((temperatur < Temp1) || (temperatur > Temp2))
{
digitalWrite(x1, LOW);
}
else
{
digitalWrite(x1, HIGH);
delay(1000);
//Das Funktioniert bis hier. Aber wenn ich die folgende if
//dazustelle,friert das Programm ein
}
if ((temperatur < Temp2) || (temperatur > Temp3))
{
digitalWrite(x2, LOW);
}
else
{
digitalWrite(x2, HIGH);
delay(1000);
}
Serial.print(ktc.readCelsius());
Serial.println("C");
// 500ms Pause bis zum nächsten Durchlauf
delay(1000);
}
}
Arduino ist trotz Arduino Kochbuch nicht meine Welt. Trotzdem knacke ich daran rum.
Vieles funktioniert auch. Aber so richtig begreifen tue ich es nicht.
Also keine große Hoffnung auf Läuterung verschwenden.
Ganz zufrieden bin ich mit dem Max 6675 nicht. Manchmal fangen die Gradzahlen das schwimmen an. Teils 6°. Irgendwann kriegt er sich dann wieder ein.
Deshalb greife ich vielleicht auf einen PT1000 mit Messwandler zurück.
Nett wäre, wenn ich den Fehler wüsste und eine Lösung hätte.
Dankeschön
Achim