Um einen Lüfter steuern zu können, muss man seine Versorgungsspannung regulieren. Das macht man mit dem Arduino, indem man per
analogWrite Befehl ein PWM Signal ausgibt. Der
PWM Wert kann dabei zwischen 0 und 255 liegen, wobei 0 = 0% und 255 = 100% ist.
In diesem Teil zeige ich euch, wie man mit Hilfe von zwei Tastern den PWM Wert schrittweise erhöht, bzw. senkt, um so die Geschwindigkeit des Lüfters zu steuern.
Der Code für 3 Pin Lüfter und 4 Pin PWM Lüfter unterscheidet sich dabei nicht, der Aufbau allerdings schon. Den 4 Pin PWM Lüfter kann man ohne zusätzliche Bauteile an eine 12V Stromversorgung und den Arduino anschließen, aber für die Ansteuerung eines 3 Pin Lüfters braucht man noch einen Transistor der über den Arduino angesteuert wird, da die Ausgänge des Arduinos nicht genügend Strom und Spannung liefern um einen Lüfter anzutreiben.
Teileliste
Anschlussplan
3 Pin Lüfter
4 Pin PWM Lüfter
Code
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/*
Arduino Tutorial 3.2 - Lüftergeschwindigkeit per Taster wechseln
In diesem Tutorial geht es darum die Geschindigkeit eines Lüfters
per Tastendruck um einen vordefinierten Wert zu erhöhen oder zu senken.
by Scynd 2016
http://www.scynd.de/tutorials/arduino-tutorials.html
*/
// Konstanten
const int fanPin = 9; // Pin für den Lüfter
const int taster1Pin = 2; // Pin für Taster 1
const int taster2Pin = 3; // Pin für Taster 2
const int schrittweite = 20; // Schrittweite pro Tasterdruck des PWM Wertes
const int minSpeed = 75; // Minimale Lüftergeschwindigkeit(ca.30%,ist bei jedem Lüfter anders, müsst ihr testen)
// Variablen
int fanSpeed = minSpeed; // PWM Startwert des Lüfters
int taster1Status = 0; // Variable zum speichern des Tasterstatus
int taster2Status = 0; // Variable zum speichern des Tasterstatus
void setup()
{
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
pinMode(fanPin, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
pinMode(taster1Pin, INPUT); // Setzt den Pin des Tasters 1 als Eingang
pinMode(taster2Pin, INPUT); // Setzt den Pin des Tasters 2 als Eingang
/* Der Lüfter bekommt 1 Sekunde einen Startimpuls und wird dann gedrosselt.
Das ist eine Sicherheitsmaßnahme, falls der Lüfter mit 30% nicht anläuft */
analogWrite(fanPin, 255);
delay(1000);
analogWrite(fanPin, fanSpeed);
}
void loop()
{
taster1Status = digitalRead(taster1Pin); // tasterPin1 lesen und Status speichern
taster2Status = digitalRead(taster2Pin); // tasterPin2 lesen und Status speichern
// Wenn Taster 1 gedrückt ist, um den Wert von "schrittweite" erhöhen
if(taster1Status == HIGH)
{
fanSpeed = fanSpeed + schrittweite;
delay(500);
}
// Wenn Taster 2 gedrückt ist, um den Wert von "schrittweite" senken
if(taster2Status == HIGH)
{
fanSpeed = fanSpeed - schrittweite;
delay(500);
}
// Der ausgegebene PWM Wert wird auf den Bereich 75-255 begrenzt
if(fanSpeed > 255)
{
fanSpeed = 255;
}
else if(fanSpeed < minSpeed)
{
fanSpeed = minSpeed;
}
analogWrite(fanPin, fanSpeed); // Gibt den PWM Wert am fanPin aus
}
|
Nach dem setzen der Konstanten und Variablen, wird im
setup die
Frequenz des PWM Signals eingestellt, sowie die Ein- und Ausgänge deklariert.
In den Variablen habe ich den Startwert des Lüfters mit
fanSpeed = 75 festgelegt. Das entspricht ca. 30% des PWM wertes, also ca. 4V. bei dieser Spannung läuft evtl. nicht jeder Lüfter los. Deshalb lasse ich den Lüfter beim Programmstart im
setup für 1 Sek mit 100% laufen um das Anlaufmoment des Lüfters zu überwinden. Danach wird er wie geplant mit 75 angesteuert.
Der
loop beginnt mit dem abfragen der Taster. Ist ein Taster gedrückt, wird die Variable
fanSpeed um 20 erhöht oder gesenkt.
Wenn
fanSpeed größer als 255 wird, wird sie auf 255 zurückgesetzt. Das gleiche passiert in die andere Richtung bei
minSpeed. So wird ein Steuerbereich von 75 - 255, also 30% - 100% eingestellt.
Nun wird der noch Wert von
fanSpeed per
analogWrite() Befehl an den Lüfter ausgegeben.
Das war es auch schon
.