Ein Fotowiderstand zeigt zusammen mit dem Arduino seinen Nutzen
Die Umgebungshelligkeit als Regelinstrument
Fotowiderstände haben die praktische Eigenschaft, ihren Widerstand je nach Menge des einfallenden Lichts zu ändern. Dieses Verhalten kann nutzbringend eingesetzt werden. Dazu genügen wenige Bauteile und ein Arduino.
Ob Radiodisplay, Fernsehgerät oder Smartphone – vielfach wird die Displayhelligkeit automatisch dem Umgebungslicht angepasst. Möglich macht dies ein elektronisches Bauteil, dessen Widerstandswert sich abhängig vom einfallenden Licht ändert. Dieses Bauteil hört auf den Namen ›Fotowiderstand‹, wird jedoch oft nur mit dem Begriff ›LDR‹ bezeichnet, was die Abkürzung für ›Light Dependent Resistor‹ ist.
Wissenswert:
Ein LDR besitzt einen größer werdenden Widerstand, je mehr sich das Umgebungslicht der Dunkelheit nähert oder je mehr das Bauteil abgedeckt wird. Wird das Umgebungslicht jedoch heller beziehungsweise wird die Abdeckung entfernt, so wird der Widerstand des LDR geringer, wodurch ein elektrischer Strom das Bauteil leichter durchqueren kann.
Ein Fotowiderstand reagiert relativ langsam auf Lichtstromänderungen, was sehr schön mit einem Multimeter beobachtet werden kann. Derartige Bauteile sind daher nicht geeignet, wenn auf wechselnde Beleuchtungsstärken eine rasche Reaktion einer elektronischen Schaltung gewünscht ist.
Um eine nützliche Anwendung mit einem LDR zu erstellen, müssen keine komplizierten Schaltungen entworfen werden. Es genügt bereits ein Mikrokontroller, wie etwa ein Arduino, um die faszinierenden Eigenschaften eines LDR zu ergründen.
Lediglich ein Widerstand von 10 Kiloohm ist noch nötig, um ein erstes Experiment zu starten. Dazu sind die Bauteile wie nebenstehend gezeigt aufzubauen.
Der ständig sich ändernde Widerstand des LDR entspricht einem analogen Signal, das in dieser Schaltung über die grüne Signalleitung dem Arduino zugeführt wird. Hier ist wichtig, dass die Signalleitung an einem Pin angeschlossen wird, der analoge Spannungen verarbeiten kann. Beim Arduino sind diese mit ›Analog in‹ gekennzeichnet.
Ein entsprechendes Programm zum Auswerten eines Fotowiderstandwerts könnte wie folgt aussehen:
int wertLDR=0; //Analogwert vom LDR als Integerzahl
int LDRPin=0; // Analog-Pin 0 nimmt Analogwerte vom LDR entgegen
void setup() {
Serial.begin(9600); // Serielle Schnittstelle initialisieren
}
void loop() {
wertLDR = analogRead(LDRPin); // Wert des LDRs einlesen
Serial.print("LDR-Wert: "); // Text auf Monitor ausgeben
Serial.println(wertLDR); // LDR-Wert auf Monitor ausgeben
delay(500); // eine halbe Sekunde warten
}
Die Ausgabe der LDR-Werte erfolgt über den sogenannten Monitor, der über Werkzeuge/Serieller Monitor aktiviert werden kann.
Sobald die Aktivierung erfolgt ist, kann die Ausgabe der aktuellen Raumhelligkeit beziehungsweise das Abdecken des Fotowiderstands umgehend beobachtet werden, da die Werte sich je nach Lichteinfall laufend ändern.
Die gezeigte Schaltung bietet sich zur Erweiterung um eine LED an, deren Helligkeit sich in Abhängigkeit von der Umgebungshelligkeit automatisch ändern soll. Die erweiterte Schaltung könnte wie folgt aussehen:
Hier fällt auf, dass die LED über den 330-Ohm-Widerstand an Pin 6 angeschlossen ist. Dies ist ein digitaler Pin, der in der Lage ist, PWM-Signale auszugeben. Auf diese Wiese ist es möglich, die Helligkeit der LED stufenlos von 0 bis 100 Prozent zu regeln.
Das dazu nötige Programm könnte wie folgt aussehen:
// LDR steuert LED-Helligkeit
int wertLDR = 0; //Analogwert vom LDR als Integerzahl
int LDRPin = 0; // Analog-Pin 0 nimmt Analogwerte von LDR entgegen
int LEDpin = 6; //LED-Pin mit PWM-Moeglichkeit
int LEDHelligkeit; // Variable für LED-Helligkeit
void setup() {
Serial.begin(9600); // Serielle Schnittstelle initialisieren
}
void loop() {
wertLDR = analogRead(LDRPin); // Wert des LDRs einlesen
Serial.print("LDR-Wert: "); // Ausgabe des Textes auf Monitor
Serial.println(wertLDR); // Ausgabe des LDR-Wertes auf Monitor
LEDHelligkeit = map(wertLDR,1023,0,0,255);
analogWrite(LEDpin,LEDHelligkeit);
delay(500);
}
Das Programm ist nahezu selbsterklärend. Lediglich der map-Befehl bedarf einer Erläuterung. Dieser Befehl wandelt eine Zahl von einem Wertebereich in einen anderen Wertebereich um. Da ein PWM-Digitalsignal nur Werte zwischen 0 und 255 annehmen kann, ist es nötig, die Analog-Widerstandswerte des LDR umzuwandeln, was der map-Befehl erledigt.
Dieser Befehl ist nach folgendem Schema aufgebaut: map (Wert, fromLow, fromHigh, toLow, toHigh). Er wandelt einen Wert, der sich zwischen zwei Werten eines Quellbereichs befindet, in eine Zahl um, die sich aus dem gleichen Verhältnis eines Zielbereichs ergibt.
Folgendes Bild zeigt den Zusammenhang:
Es zeigt sich, dass die Zahl 818 in die Zahl 204 umgewandelt wird, wenn der Quellbereich eine Ausdehnung von 1023 und der Zielbereich eine Ausdehnung von 255 besitzen. Entscheidend ist das Verhältnis, das der Umwandlung zugrunde liegt: Wenn die Obergrenze des Quellbereichs (Zahl 1023) 100 Prozent einnimmt, so liegt die Zahl 818 demnach bei 80,4 Prozent. Im Zielbereich ist die höchste Zahl 255, die daher 100 Prozent einnimmt. 80,4 Prozent von 255 ergibt somit einen Wert von rund 205.
Die Variable ›LEDHelligkeit‹ würde demnach den Wert 205 erhalten und die angeschlossene LED mit nahezu maximaler Helligkeit leuchten.