Go Down

Topic: 2 Lüfter unterschiedlich laufen lassen. (Read 2771 times) previous topic - next topic

Modding

Guten Tag,

Multitasking gibt es ja nicht so in dem Sinne in der Arduino-Welt. Also habe ich gelesen....

Ich habe folgendes Problem und zwar...
Ich habe eine Arduino, 2 Temperatursensoren und 2 Lüfter.
Für jeden Lüfter ist also 1 Temperatursensor zuständig, der die Temperatur misst und an den Arduino weiter gibt, der Arduino entscheidet dann die Geschwindigkeit, mit der der jeweilige Lüfter drehen soll.

Wie schaffe ich es, dass der Arduino die Temperaturen ausließt und die Lüfter je nach Temperatur unterschiedlich schnell drehen lässt?
Weil mein Hauptproblem ist, dass ich die Lüfter über ein delay() ein und ausschalte, um die unterschiedlichen Geschwindigkeiten zu bekommen...
Also so:

          digitalWrite(FanPin1, HIGH);
          delay(18);
          digitalWrite(FanPin1, LOW);
Je nach Temperatur wird das delay() halt immer länger. :smiley-confuse:

uwefed

äh?

Nimm PWM Lüfter (4-polige PC-Lüfter) und steuere sie mittels eines PWM-Ausgangs an.

Grüße Uwe

HotSystems

digitalWrite(FanPin1, HIGH);
          delay(18);
          digitalWrite(FanPin1, LOW);
Je nach Temperatur wird das delay() halt immer länger. :smiley-confuse:
Ja, und genau das ist dein Problem.
Damit das so funktioniert, wie du es möchtest, darfst du niemals "delay()" einsetzen.

Verwende dazu millis und siehe dir dazu "BlinkWithoutDelay" an.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Modding

Ja, und genau das ist dein Problem.
Damit das so funktioniert, wie du es möchtest, darfst du niemals "delay()" einsetzen.
Ich weiß, dass das mein Problem ist ;)
Steht ja oben in meinem Post drinnen ;)

Hab ich schon ich werde nur nicht ganz schlau aus den millis... Wie funktioniert das denn genau?
Führt der arduino das dann für die Zeit weiter aus und arbeitet trotzdem das Skript zeitgleich ab? oder wie geht des...

combie

Anstelle mit delay() blockierend zu warten, testest du dauernd die Schaltbedingungen.

Aber wie schon gesagt:
Du machst nichts anderes als eine SoftPWM.
Dafür gibts schon super Libs, die dir das Gehampel abnehmen.
Und, dein Arduino wird Hardware PWMs haben. Was gefällt dir an denen nicht?

Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

HotSystems

Hab ich schon ich werde nur nicht ganz schlau aus den millis... Wie funktioniert das denn genau?
Führt der arduino das dann für die Zeit weiter aus und arbeitet trotzdem das Skript zeitgleich ab? oder wie geht des...
Ja, der Sketch wird durchlaufen, ohne eine Pause durch delay zu machen.

Hier findest du eine schöne Erklärung dazu:
Blinken ohne Delay
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uwefed

Vieleicht hast Du meinen Vorschlag nicht ganz verstanden: Lüfter funktionieren mit PWM der Versorgungsspannung nicht richtig, da sie Blushlessmotoren mit integrierter Ansteuerelektronik sind.
Grüße Uwe

combie

Da er nicht sagt welche Lüfter er verwendet.....
Da keine Treiberstufe erwähnt wird, gehe ich davon aus, dass er PWM Lüfter verwendet.
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

Modding

Ich habe ganz einfache 5V Lüfter mit einem + und einem - Pohl genommen, weil die meisten PWM mit 3 oder 4 Pohlen 12V benötigen, ich aber nur ein 5V Netzteil verwenden möchte.

Ich hab grade ein bisschen über die millis was gelesen, leider raff ich einfach nicht, wie ich das in mein Script einbauen könnte bzw. wie ich die Funktion richtig verwende... und mir ist noch ein Problem aufgefallen und zwar, schalte ich die Lüfter mit einem Transistor (BC547).... immer wenn ich den Lüfter auf vollgas laufen lasse, verfälschen meine Temperaturmessergebnisse. :(

nicepix4u

du ksnnst doch den ausgang an dem der lüfter hängt pulsen mit einer rechteckspannung je kürzer die High phasen sind um so langsamer läuft er

Modding

du ksnnst doch den ausgang an dem der lüfter hängt pulsen mit einer rechteckspannung je kürzer die High phasen sind um so langsamer läuft er

Wie genau stell ich das an mit der rechteckspannung?
und geht das auch mit 2 Lüftern, die unabhängig laufen sollen?

Theseus

#11
May 12, 2016, 04:10 pm Last Edit: Aug 26, 2017, 11:45 am by Theseus
du ksnnst doch den ausgang an dem der lüfter hängt pulsen mit einer rechteckspannung je kürzer die High phasen sind um so langsamer läuft er
Wie genau stell ich das an mit der rechteckspannung?
und geht das auch mit 2 Lüftern, die unabhängig laufen sollen?
Genau das machst du ja schon.

Zu Millis: Stell dir vor du kochst. Zunächst soll ein Kuchen 30min. im Backofen backen und danach 10min. abkühlen. Jetzt kannst du dir einen Kurzzeitwecker stellen und 30min. lang dem Kuchen beim Backen zuschauen. Anschließend stellst du den Wecker auf 10min und schaust dem Kuchen 10min. beim abkühlen zu. Dem entspricht Delay. Funktioniert wunderbar, solange du nichts weiteres machen willst.

Jetzt willst du aber gleichzeitig was zweites z.B. eine Suppe 40min kochen und 10min. abkühlen lassen. Das geht mit dem Kurzzeitwecker Delay nicht. Statt dessen merkst du dir die Uhrzeit1 (altmillis1) wann du den Kuchen in den Ofen geschoben hast und Uhrzeit2 (altmillis2), wann du die Suppe aufgestellt hast. Jetzt vergleichst du regelmäßig die aktuelle Uhrzeit (millis() ) mit Uhrzeit1 und 2. Wenn die Differenz zwischen akt. Uhrzeit und Uhrzeit1 großer als 30min (interval1). ist, bringst du den Kuchen zum abkühlen. Jetzt merkst du dir die Zeit, wann du den Kuchen aus dem Ofen geholt hat und vergleichst weiter die akt. Zeiten mit den gemerkten Zeiten. So kannst du mehrere Sachen quasi gleichzeitig machen. 

Modding

Danke das war ne echt gute Erklärung zu den millis. :)

uwefed

.. und mir ist noch ein Problem aufgefallen und zwar, schalte ich die Lüfter mit einem Transistor (BC547).... immer wenn ich den Lüfter auf vollgas laufen lasse, verfälschen meine Temperaturmessergebnisse. :(
Wahrscheinlich bricht die Versorgungsspannung etwas ein weil die Lüfter zuviel Strom benötigen und darum die Temperaturmessung eine falsch Referenz hat.
Genaueres oder sicheres kann ich nur sagen, wenn ich weiß welche Temperatursensoren Du verwendest.
Grüße Uwe

Doc_Arduino

#14
May 12, 2016, 05:55 pm Last Edit: May 12, 2016, 05:55 pm by Doc_Arduino
Zu Millis: Stell dir vor du kochst. Zunächst soll ein Kuchen 30min. im Backofen backen und danach 10min. abkühlen. Jetzt kannst du dir einen Kurzzeitwecker stellen und 30min. lang dem Kuchen beim Backen zu schauen. Anschließend stellst du den Wecker auf 10min und schaust dem Kuchen 10min. beim abkühlen zu. Dem entspricht Delay. Funktioniert wunderbar, solange du nichts weiteres machen willst.

Jetzt willst du aber gleichzeitig was zweites z.B. eine Suppe 40min kochen und 10min. abkühlen lassen. Das geht mit dem Kurzzeitwecker Delay nicht. Statt dessen merkst du dir die Uhrzeit1 (altmillis1) wann du den Kuchen in den Ofen geschoben hast und Uhrzeit2 (altmillis2), wann du die Suppe aufgestellt hast. Jetzt vergleichst du regelmäßig die aktuelle Uhrzeit (millis() ) mit Uhrzeit1 und 2. Wenn die Differenz zwischen akt. Uhrzeit und Uhrzeit1 großer als 30min (interval1). ist, bringst du den Kuchen zum abkühlen. Jetzt merkst du dir die Zeit, wann du den Kuchen aus dem Ofen geholt hat und vergleichst weiter die akt. Zeiten mit den gemerkten Zeiten. So kannst du mehrere Sachen quasi gleichzeitig mahen.  
Wenn das mal keine anschauliche Erklärung zur Verwendung von millis() ist.  Gefällt mir sehr gut.  :)
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up