Lüftersteuerung funktioniert nicht

Hallo!

Ich bin absoluter Anfänger was Arduino betrifft. Ich wollte mir eine Lüftersteuerung für meine Ameisenfarm bauen und habe auf Youtube folgendes Video gefunden : Klick

In der Videobeschreibung ist der Bastelplan und der Sketch (kann nicht alles verlinken da ich neu bin)

Ich habe alle Bauteile (bis auf den Lüfter, da habe ich diesen : Klick genommen) ,gekauft die in der Videobeschreibung zu finden sind und alles 1:1 so zusammengebaut wie im Video/Bastelplan beschrieben.

Das Problem ist nun: der Lüfter läuft bzw. schaltet sich nur auf höchster Stufe (5/MAX) - also wenn die maximale Temp erreicht ist, bei Stufe 1-4 bleibt der Lüfter stehen. An was könnte das liegen? Danke und viele Grüsse

Hallo,
keine Ahnung , Du könntest aber den Sketch hier reinstellen. Hast Du eventuell einen Pin für den Lüfter genommen der kein PWM kann.
Heinz

Hier ist der Bastelplan:

und hier der Sketch:

#include "DHT.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27,20,4);

//====================================== Temperatureinstellungen
#define solltemp 21
#define stufe1 solltemp+1
#define stufe2 solltemp+2
#define stufe3 solltemp+3
#define stufe4 solltemp+4
#define stufe5 solltemp+5
//==============================================================

#define DHTPIN 2 
#define FanPin 9
#define DHTTYPE DHT22
float temp;
String status;

DHT dht(DHTPIN, DHTTYPE);

void setup() {
lcd.init();
lcd.backlight();
dht.begin();
TCCR1B = TCCR1B & B11111000 | B00000001;
pinMode(FanPin,OUTPUT);
}
void loop() {
delay(2000);
float temp = dht.readTemperature();
if (temp <= solltemp) { digitalWrite(FanPin,LOW); status = "AUS      "; }else
if (temp >= stufe5) { digitalWrite(FanPin,HIGH); status = "Stufe-MAX"; }else
if (temp >= stufe4) { analogWrite(FanPin,190); status = "Stufe-4  "; }else
if (temp >= stufe3) { analogWrite(FanPin,150); status = "Stufe-3  "; }else
if (temp >= stufe2) { analogWrite(FanPin,90); status = "Stufe-2  "; }else
if (temp >= stufe1) { analogWrite(FanPin,40); status = "Stufe-1  "; }else
if (temp >= solltemp) { analogWrite(FanPin,20); status = "Stufe-LOW"; }
lcd.setCursor(0,0);
lcd.print("L\365ftersteuerung");
lcd.setCursor(0,1);
lcd.print("Aktuell: ");
lcd.print(temp);
lcd.print("\337C");
lcd.setCursor(0,2);
lcd.print("Soll: ");
lcd.print(solltemp);
lcd.print("\337C");
lcd.setCursor(0,3);
lcd.print("Status: ");
lcd.print(status);
delay(1000);
}

Der Lüfter wird im Video und bei mir nur über 12V(+) und GND(-) angesteuert.

Und bei walchen Temp. soll der schalten ? Arduino hat keine Glasskugeln und kann nicht deine Gedanken lesen😁

Bei den stufen schreib mall gewünschte temperatur und nich stufe1 usw. Nicht geau geschaut?

hmm aber das steht doch im sketch ...

stufe1 : solltemp+1

das heisst bei 22 Grad schaltet er auf Stufe 1 ...

Im Video hat er gesagt man kann das so machen oder einfach gleich

#define stufe1 22

schreiben. Ist aber egal, es funktioniert weder so noch so :confused:

der Lüfter schaltet sich nur bei

#define stufe5 solltemp+5

also 26 Grad ein ...

PWM-Ausgang geht eigentlich per analogWrite

?

Hallo plexxy

Hier kommt ein Tipp für die range based switch case Anweisung.

Damit kannst du sinnvoll den Salat von if/else ersetzen.

aaah sorry ... ich muss den Sketch überarbeiten, das ist nicht er Originale wie ich ihn verwende sondern ein geänderter weil ich herumprobiert habe ... EDIT: Sketch bearbeitet

Am Sketch rumprobieren ist immer gut, solange man nicht durcheinanderkommt. :slight_smile:

Was macht denn die lcd-Anzeige? Zeigt die die erwarteten Stufen an?

Ich würde immer erstmal einen Einzeltest machen:
Kannst du deinen Lüfter mit deinem Mosfet-Modul überhaupt per PWM in der Drehzahl beeinflussen?
Wenn du statt des Mosfet eine LED mit Vorwiderstand für 5V anschließt, oder
Wenn du statt des Lüfters eine LED mit Vorwiderstand passend für 12V anschließt,
... kannst du deren Helligkeit ändern?

Jep, die LCD Anzeige funktioniert und zeigt auch je nach Temp die verschiedenen Lüfterstufen an... das klappt ...

Kannst du deinen Lüfter mit deinem Mosfet-Modul überhaupt per PWM in der Drehzahl beeinflussen?

Gute Frage :smiley: ... Ich habe beim Kauf nur darauf geachtet das es ein 12V Lüfter mit 3 Pins ist, genau so wie der Lüfter den er verwendet ... der Unterschied (für mich) war nur die Grösse des Lüfters ...

Laut Artikelbeschreibung des Arctic F12 (den er verwendet) steht da "Art der Steuerung: Festdrehzahl" ... bei meinen kann ich so eine Angabe nicht finden ...

Solche Komponenten habe ich jetzt leider nicht zur Verfügung :confused:

Hast du mal versucht den Lüfter ganz simpel nur mit analogWrite anzusteuern? Also ohne die ganze Temperatur-Reglung.

Wenn ich mich recht entsinne, werden PC Lüfter mit 22kHz gesteuert. Der Uno Pin 9 ist Standart bei 490Hz. Aber das betrifft eigentlich nur das PWM-Signal für einen 4Pin Lüfter.

Edit: Ich habe übersehen, das die Frequenz im Sketch schon angepasst wird.

Am Telefon habe die 21 übersehen :wink:

1 Like

Auf dem MOSFET Modul ist ein IRF520 das ist kein Lowlevel MOSFET, je nach Model funktionieren die nicht sauber bei Arduino, mit ESP ist noch schlimmer. Bei IOR ist VGS(th) mit 2 bis 4V angegeben, andere Hersteller geben an 4 und 5V.

1 Like

Der TO schreibt, dass der Lüfter ein drei Pin Lüfter ist. Die werden nur über die Spannung gesteuert.

PWM gesteuert sind nur vier Pin Lüfter. Hier kann die Frequenz zwischen 21kHz und 28kHz liegen

Stimmt nicht ganz so, es gibt 3 Pin Lüfter mit PWM, 3 Pin Lüfter mit RPM und so wie du schreibst 4 Pin mit VCC, GND, PWM und Tacho Signal(RPM), mittlerweile gibt's mehr als vier Sorten wo bei die neuen haben anderen Stecker damit man zB. PC Board nicht schrotet.
Also auch bei simplen Lüfter Datenblatt befragen.

Ok. Drei Pin PWM sind mir noch nicht unter gekommen. Ich habe auch den vorletzten Satz von @Plumps überlesen.

Am einfachsten ist DC mit PWM steuern, und die "unbekannte" Pins nicht verwenden, das funktioniert immer, manchmal nicht im ganzen kompletten Drehzahlbereich :wink:

Man kann bei den Lüftern mit 3 Pin und Drehzahl Feedback auch die Versorgung mit PWM steuern, um die Drehzahl zu regulieren.

Nur kann das Feedback der Drehzahl, was üblicherweise über einen Hallsensor ermittelt wird, Fehlerhaft bei PWM Ansteuerung sein, da der Hallsensor im Moment der Messung zufällig keine 5V hat.

Da Feedback aber hier nicht angeschlossen bzw. nicht genutzt wird, ist das relativ egal.

Hallo,

lade mal das zum testen drauf

const byte fanpin = 9;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

  analogWrite(fanpin, 50);
  delay(3000);

  analogWrite(fanpin, 120);
  delay(3000);

  analogWrite(fanpin, 255);
  delay(3000);

  analogWrite(fanpin, 0);
  delay(3000);

}

Drehzahl sollte sich ändern

2 Likes