Hausnummer-Beleuchtung
(mit Fotowiderstand und Arduino)
Ein Fotowiderstand (bezeichnet auch als LDR:Light Dependent Resistor) ändert seinen Widerstand in Abhängigkeit von
Lichteinstrahlung. Damit ist das Geheimnis dieses Bauelementes schon mal gelüftet. Je mehr Licht auf einen Fotowiderstand fällt, desto
kleiner wird sein Widerstand. Eine klassische Anwendung eines Fotowiderstandes ist ein Dämmerungsschalter, der abhängig vom Tageslicht
z.B. eine Straßenbeleuchtung ein- bzw. ausschaltet. In der folgenden Schaltung wird abhängig von der Lichteinstrahlung eine Hausnummer-Beleuchtung
gesteuert.
Fotowiderstand
Hausnummer-Beleuchtung
Der Fotowiderstand ändert seinen Widerstand im Bereich von ca. 100 Ohm bis zu mehreren MOhm. Er wird hier zusammen in Reihe mit
einem festen Widerstand (R2 = 10k) verschaltet und bildet mit ihm einen Spannungsteiler. Je nach Lichteinstrahlung ändert der Fotowiderstand
seinen Widerstand. Folglich liefert der Spannungsteiler jeweils eine andere Spannung. Da der Spannungsteiler mit 5 V eingespeist ist,
kann das Signal direkt an Arduino weiter geleitet werden. Die entsprechende Verbindung geht an Anschluss A4 (analoger Eingang) des Arduino.
Zur Kontrolle kann man die am analogen Eingang ausgelesenen Werte im IDE-Monitor anzeigen lassen. In diesem Fall pendeln die Werte
im Bereich von 550 (dunkel) bis 980 (hell). Der maximale Wert, der bei 5V geliefert wird, beträgt 1023.
In dem Sketch wird das Signal ausgewertet und die Hausnummer-Beleuchtung entweder ein- oder ausgeschaltet. Für die Beleuchtung verwenden
wir die 8x8 RGB- Matrix, die mehrfarbige Beleuchtung zulässt.
Die Schaltung enthält noch weitere zusätzliche Komponenten. Die Rolle der Sonne, die im Normalfall fürs Tageslicht zuständig ist,
übernimmt die Leuchtdiode LD2. Mit dem Potenziometer P1 kann man das Tageslicht simulieren. Je nach Einstellung des Potenziometers leuchtet
sie voll auf oder wird fast ganz ausgeschaltet. Um Außeneinflüsse zu begrenzen, werden so die Leuchtdiode LD2 als auch der Fotowiderstand mit
einer „Verdunkelungshülse“ verdeckt.
Tageslicht-Simulation
Anordnung der Elemente mit Abdeckung
Zusätzlich enthält die Schaltung die Leuchtdiode LD1 mit dem Vorwiderstand R3. Diese Erweiterung soll als Beispiel für die
Überwachung der Funktionalität des Sensors dienen. In dem Fall, wo der Fotowiderstand z.B. zerstört wird, geht die
rote LD1 an.
Schaltplan
Testschaltung
Das Programm (Sketch)
Das Programm untersucht in bestimmten Zeitabständen den analogen Eingang A4, liest den aktuellen Wert aus und vergleicht ihn mit
Vorgaben, die für diese Schaltung festgelegt wurden.
Ist der ausgelesene Wert größer-gleich 750 (hell) wird die Hausnummer-Beleuchtung ausgeschaltet. Ist der Wert größer 750 (dunkel) geht
die Beleuchtung an. Die zweite Grenze, die 500 beträgt, dient der Überwachung des Sensors. Wenn sein Widerstand zu stark ansteigt (Sensor
defekt oder fehlt ganz), geht die rote Störung-Leuchtdiode an. Man könnte den Sensor zusätzlich noch auf Kurzschluss untersuchen und ggf. auch
eine Störung melden.
Die Steuerung der RGB-Matrix übernimmt eine Komposition aus drei For-Schleifen, die miteinander verschachtelt sind. Die erste Schleife (i)
bezieht sich auf die aktuelle Farbe der Matrix, die für alle Pixel stets gleich bleibt. Die zweite Schleife (j) beschäftigt sich mit der
Helligkeit der einzelnen Matrix-Pixel. Die dritte (k) schließlich durchläuft alle Pixel, die aktiviert werden sollen. Ihre Nummern sind in der
Liste Pixel[] zusammengefasst.
Für die Ansteuerung der Matrix wird die Bibliothek „Adafruit_NeoPixel.h“ verwendet, die mit Hilfe des Bibliotheken-Verwalters
installiert werden kann.
// ********************************************************************************
// Hausnummer - Beleuchtung
// mit Fotowiderstand und 8x8 RGB-Matrix
// Arduino Nano, IDE 1.8.12
// ********************************************************************************
#include<Adafruit_NeoPixel.h>
#ifdef __AVR__
#include<avr/power.h>
#endif#define LED_PIN 3
#define LED_COUNT 64
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
int Signal_Pin = A4;
int Error_LED = 2;
int i;
int Pixel [] = { 2,3,4,5,
9,10,13,14,
17,18,21,22,
25,26,29,30,
34,35,36,37,38,
45,46,
49,50,53,54,
58,59,60,61 };
int Farbe [3][3] = { {255,0,0}, {0,255,0}, {0,0,255} };
void Ausgabe ( int i, int j ) { // Farbige Pixel an ..........................
for (int k=0; k<32; k++) {
strip.setBrightness(j); // Helligkeit ................................
strip.show();
strip.setPixelColor(Pixel [k], Farbe [i][0], Farbe [i][1], Farbe [i][2]); }
delay(5);
}
void setup() {
strip.begin();
strip.show();
strip.setBrightness(50);
strip.clear();
pinMode(Error_LED, OUTPUT);
}
void loop() {
int AnalogWert = analogRead(Signal_Pin);
// Hausnummer anzeigen .........................
if (AnalogWert < 750) {
for (i=0; i<3; i++) {
strip.clear();
for (int j=0; j<50; j++) { Ausgabe (i,j); }
for (int j=50; j>0; j--) { Ausgabe (i,j); } }
} else { // Lampe aus ...................................
strip.show();
strip.clear(); }
if (AnalogWert < 500) { // Störung, rote LED an ........................
digitalWrite(Error_LED, HIGH);
} else {
digitalWrite(Error_LED, LOW); }
delay (1000);
}
// -----------------------------------------------------------
Kurzvideo
Kurzvideo: Hausnummer-Beleuchtung mit Fotowiderstand