Hallo mal wieder,
ich stoße z.Z. wieder an ein Problem.
Ich möchte einen PWM-Ausgang für einen Lüfter mit 2 oder mehr Temperatursensoren (es sollen insgesamt 10 Stück werden) ansteuern.
Es gibt eine Besonderheit bei der Ein- und Ausschaltsequenz:
Der Lüfterausgang wir in diesem Code bei einer Temperatur von 30° Grad mit einem bestimmten PWM-Wert(0-255) angesteuert und erhöht sich dann mit steigender Temperatur bis zum max. Wert von 255.
Fällt die Temperatur und somit die Drehzahl (PWM-Wert hier 60(ca. bei 28° Grad)), dann schaltet sich der Lüfterausgang ab. Somit wird verhindert, dass sich der Lüfterausgang um die 30° Grad ständig ein- und ausschaltet (2° Grad Schaltdifferenz).
Um das zu Realisieren, setze ich einen Wert (0 oder 1) für den 'fanOut' damit der Arduino den Lüfterausgang als Zustand hat.
1=Lüfterausgang aus
0=Lüfterausgang an
Außerdem schalte ich den Lüfterausgang für einen kleinen Moment 'delay(500);' auf den max. PWM-Wert von 255, damit der Lüfter aus seiner Trägheitsposition in die relativ kleine min.Drehzahl anlaufen kann.
Das funktioniert alles soweit so gut mit einem Temperatursensor. Mit zwei Temperatursensoren funktioniert es in soweit, dass die Temperaturwerte-Werte im Monitor angezeigt werden und auch der 'fanOut-Wert'(auch im Monitor angezeigt), um die Schalttemperaturwerte richtig gesetzt wird.
Nur die Lüftergeschwindigkeit(PWM-Ausgang) wird bei dem 'temp' Fühler gesetzt und geregelt.
Bei dem 'temp1' Fühler bleibt der Lüfterausgang auf 0(auch im Monitor), bzw. sehe ich(da es der Pin13 ist) immer die kurze Anlaufdrehzahl (255) von 'delay(500);'. Allerdings wird der 'fanOut-Wert'(auch im Monitor angezeigt) richtig gesetzt.
Ich bin hier seit ein paar Stunden ratlos und komme nicht auf die Lösung für das Problem. Ich bin auch allerdings nicht der Profi in Sachen Programmierung. Es beschränkt sich eher auf Basis der "Hobbythek".
Vielleicht hat jemand hier im Forum eine zündende Idee.
Vielen Dank, schon mal .
Gruß Jens
// Konstanten
const int fanPin = 13; // Pin für den Lüfter
// Variablen
int fanSpeed = 0; // Variable für die Lüftergeschwindigkeit
int fanMin = 75; // Kleinster PWM Wert für den Lüfter befor er abschaltet
int fanOut = 1; // Variable um zu Prüfen, ob der Lüfter aus war
int tMin = 20; // Untere Grenze des Temperaturbereichs
int tMax = 60; // Obere Grenze des Temperaturbereichs
float temp; // Variable für die Berechnung der temperatur nach Steinhart
float temp1; // Variable für die Berechnung der temperatur nach Steinhart
//Bibliotheken einbinden
#define ONE_WIRE_BUS 28
#include <OneWire.h>
#include <DallasTemperature.h>
//Objekte initialisieren
OneWire oneWire(ONE_WIRE_BUS); // OneWire initialisierung
DallasTemperature sensors(&oneWire); // DallasTemperature initialisierung
void setup()
{
//TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
Serial.begin(9600); // Baudrate für die Ausgabe am Serial Monitor
pinMode(fanPin, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
}
void loop()
{
sensors.requestTemperatures(); // Temperatur lesen
temp = sensors.getTempCByIndex(0); // Temperatur vom Sensor 0 auslesen
temp1 = sensors.getTempCByIndex(1); // Temperatur vom Sensor 1 auslesen
Serial.print("Temperatur: "); // Werte über RS232 Port ausgeben
Serial.println(temp);
Serial.print("Temperatur1: "); // Werte über RS232 Port ausgeben
Serial.println(temp1);
Serial.print("FanOut: "); // Werte über RS232 Port ausgeben
Serial.println(fanOut);
// Lüftergeschwindigkeit über den Temperaturbereich einstellen
// TMin->0% PWM | TMax->100% PWM
fanSpeed = map(temp, tMin, tMax, 30, 255);
// Wenn der PWM Wert unter den van FanMin fällt, schält der Lüfter ab
if (fanSpeed < fanMin)
{
fanSpeed = 0;
fanOut = 1;
}
// Hysterese
if (fanOut == 1)
{
fanSpeed = 0;
}
if((temp >= 30)||(temp1 >= 30))
{
if(fanOut == 1)
{
fanOut = 0;
analogWrite(fanPin,255);
delay(500);
}
}
// PWM Wert auf 255 begerenzen
if (fanSpeed > 255)
{
fanSpeed = 255;
}
// Lüftergeschwindigkeit über den Seriellen Monitor ausgeben
Serial.print("Lueftergeschwindigkeit: ");
Serial.println(fanSpeed);
analogWrite(fanPin, fanSpeed); // Den Lüfter mit dem PWM Wert ansteuern
delay(500);
}