Guten Tag,
ich möchte mit einem Mosfet meine 12V Aquarienpumpe via PWM steuern. Die Pumpe soll in Intervallen AN und AUS sein. Ich möchte später direkt am Poti während des Betriebs die Pumpgeschwindigkeit einstellen können. Da die Funktionalität in einen größeren Gesamtsketch eingebunden ist möchte ich das ganze ohne delay()
sondern mit millis()
realisieren.
Hier mein Aufbau - mein verwendeter MOSFET ist ein IRLZ44N, die Diode eine N4007, der Widerstand hat 10kOhm, der Poti ebenfalls linear 10kOhm, die Pumpe verträgt 12V und zieht ca. 0,6A, mein Netzteil liefert 12V und bis zu 2,5A, mein µC ist ein Arduino Nano und ist via USB an den PC angeschlossen (später wenn alles fertig ist wird er separat mit Strom versorgt):
Und hier mein kleiner sketch (alles was mit dem seriellen Monitor zu tun hat spielt im finalen sketch keine Rolle, kommt raus und dient hier nur der Kontrolle während des Aufbaus. Auch die gewählten Pumpintervalle sind nur beispielhaft. Zum Ausprobieren benötige ich möglichst viel AN):
const int Pump = 6;
const int PumpPoti = A0;
//int Pumpspeed;
int PumpPotiValue = 0;
int PumpSpeed = 0;
unsigned long MarkerPump = 0;
const long IntervalPump = 60000;
const long PumpTime = 50000;
void setup()
{
Serial.begin(9600);
pinMode (Pump, OUTPUT);
analogWrite (Pump, 0);
}
void loop()
{
if (millis() - MarkerPump > IntervalPump)
{
PumpPotiValue = analogRead(PumpPoti);
PumpSpeed = map(PumpPotiValue, 0, 1023, 0, 255);
analogWrite (Pump, PumpSpeed);
Serial.println(PumpSpeed);
MarkerPump = millis();
}
if (millis() - MarkerPump > PumpTime)
{
analogWrite (Pump, 0);
}
}
--> Der sketch funktioniert, die Pumpe läuft und der MOSFET wird nicht heiss, alles gut ABER:
Was nicht funktioniert ist, die Pumpgeschwindigkeit während die Pumpe läuft, zu verändert. Lediglich für den nächsten Zyklus übernimmt das Programm den in der Zwischenzeit am Poti neu eingestellten Wert. Jeweils zu Beginn der folgenden Kondition wird die Pumpegeschwindigkeit aktualisiert:
if (millis() - MarkerPump > IntervalPump)
Auch folgende Adaption des loops bringt keine Besserung/Änderung:
void loop()
{
PumpPotiValue = analogRead(PumpPoti);
PumpSpeed = map(PumpPotiValue, 0, 1023, 0, 255);
if (millis() - MarkerPump > IntervalPump)
{
analogWrite (Pump, PumpSpeed);
Serial.println(PumpSpeed);
MarkerPump = millis();
}
if (millis() - MarkerPump > PumpTime)
{
analogWrite (Pump, 0);
}
}
Weiss jemand weiter und kann mir sagen was ich ändern muss um die Pumpgeschwindigkeit während einer AN Phase quasi "live" ändern zu können?
Vielen Dank und Grüße,
Carola