Das Akronym LDR steht für light dependent resistor (lichtabhängiger Widerstand) oder kurz Fotowiderstand. Auf einer Keramikschicht ist eine dünne Schicht fotosensitiven Materials (CdS -
Cadmium Sulfid, CdSe - Cadmium Selenid) aufgebracht. Die Elektroden sind mit kammartigen sich gegenüberstehenden Metallflächen verbunden; das Ganze ist in Kunstharz vergossen.
Fotowiderstände besitzen je nach verwendetem Material unterschiedliche Lichtempfindlichkeiten; die höchste Empfindlichkeit liegt bei den meisten LDRs im Bereich von 530 nm - 600 nm.
Der Widerstand eines LDR ändert sich bei einem Übergang von hell zu dunkel langsamer (mit ca. 200 kOhm pro Sekunde) als von dunkel zu hell.
Der Dunkelwiderstand liegt je nach Bauform zwischen ca. 120 kOhm und 5 MOhm.
In der folgenden Übung wird als Lichtquelle eine 10mm LED mit 13500 mcd mit einem Vorwiderstand von 470 Ohm an 4,8V eingesetzt.
Alternativ kann auch eine Taschenlampe oder Schreibtischlampe verwendet werden. Für die Versuchsreihe wird ein völlig abgedunkelter Raum benötigt (Dunkelkammer,
Raum ohne Fenster). Ein Mikrocontroller wird in der ersten Übung nicht benötigt.
Kennlinienaufnahme LDR |
Material |
- 4x LDR, versch. Typen
- 1x Multimeter
- 2x Kabel mit Abgreifklemmen
|
Aufgaben |
- Schließe den LDR an ein Multimeter an; wähle den Bereich Widerstandsmessung.
- Stelle eine Lichtquelle 10 cm entfernt vom LDR auf.
- Schalte die Lichtquelle ein und bestimme den Widerstand des LDR. Notiere den Wert.
- Wiederhole die Schritte bei 20 cm, 30 cm, 40 cm und 50 cm Abstand.
- Trage die Messwerte in eine Wertetabelle ein und erstelle den Graph. Abszisse: Abstand, Ordinate: Widerstandswert (Programm Excel).
- Wiederhole die Messungen mit den anderen LDRs.
|
Abbildung 1 - Versuchsaufbau zur Aufnahme der Kennlinie eines LDR. Alternativ zur LED kann auch eine Taschenlampe o.ä. verwendet werden. Wichtig ist, dass die optische Achse sich während der Versuchsdurchführung nicht ändert.
Tabelle 1 - Für vier verschiedene LDRs wurde der Widerstand in Ohm in Abhängigkeit zum Abstand von einer Lichtquelle aufgenommen.
Die vier Kennlinien bestätigen, dass bei einer höheren Mäanderzahl die Empfindlichkeit eines LDR zunimmt. LDR3 und LDR4 sind von der Oberfläche identisch, nur die
Mäanderzahl ist beim LDR4 deutlich höher. LDR 1 und LDR2 unterscheiden sich ebenfalls etwas in der Mäanderzahl; LDR1 ist empfindlicher als LDR2. Alle LDRs sind CdS-Sensoren.
Zur Bestimmung des Dunkelwiderstandes wird der LDR auf dem Steckbrett in eine lichtundurchlässige Pappröhre gesteckt, die oben verschlossen ist. Bevor die Messung
beginnt, muss mit dem Oszilloskop der Spannungswert am Ausgang der Energiequelle gemessen und als Referenzwert in die Programmzeile 30 übernommen werden. Als Dunkelwiderstand wird der
Widertstandswert 5s nach Abdunkelung genommen.
Aufgaben
- Baue die Schaltung nach der Skizze auf.
- Übertrage das Programm ldr1.bas in den BASCOM Editor und speichere es ab.
- Starte das Programm.
- Miss die Spannung der Energiequelle und trage den Wert in Programmzeile 30 ein.
- Miss die Dunkelwiderstände.
Material
- 1x Steckbrett
- 1x Nullkraftsockel
- 1x USB-UART Adapter
- 1x Netzteil
- 1x ATmega8A oder ähnlich
- 1x Programm BASCOM
- 1x Programm CoolTerm
- div. Steckdrähte
- USB-Oszilloskop
- 1x Widerstand, 6,8 MOhm
- 2x verschiedene LDR
Die nachfolgenden Abbildungen zeigt fünf Messwerte für einen LDR. In der ersten Spalte steht der vom ADC gelieferte Rohwert (liegt hier immer zwischen 0 und 1023),
in Spalte 2 erscheint die in einen Spannungswert umgerechnete Voltangabe.
Zur Berechnung des Dunkelwiderstandes wird der Spannungswert 5 Sekunden nach Verdunkelung des LDR genommen.
Berechnung des Dunkelwiderstandes
Die von mir ermittelten Dunkelwiderstände liegen zwischen 3,2 MOhm und 6,3 MOhm. Dies deckt sich mit den Angaben in den Datenblättern.
In vielen Hotels gibt es Bäder oder Räume ohne Fenster, bei denen, wenn man sie betritt und einen Lichtschalter betätigt, das Licht angeht und nach einer gewissen
Zeit auch ein Ventilator anspringt.
In dieser Übung wird eine solche Steuerung praktisch umgesetzt.
Ein Schiebeschalter schaltet eine LED an, wenn die Umgebungshelligkeit gering ist; sonst bleibt sie dunkel. Nach einer Verzögerungszeit soll sich dann ein
Lüfter/Ventilator dazuschalten.
Wird der Schiebeschalter in die Ausgangsstellung zurückgeschoben, erlischt die LED und der Lüfter/Ventilator läuft noch eine gewisse Zeit nach.
Den für diese Übung notwendigen Lüfter/Ventilator kann man für wenig Hartgeld im Internet kaufen.
Aufgabe
- Erstelle eine Schaltung und ein Programm dazu, das, sobald ein Schalter auf ON gestellt wird, ein Licht (LED) einschaltet und nach einer Zeit t auch einen
Lüfter. Wird der Schalter auf AUS gestellt, geht das Licht aus und nach einer Zeit t auch der Lüfter.
Material
- 1x Schiebeschalter
- 1x LED, rot
- 1x LDR
- 1x Lüfter
- 1x Widerstand, 470 Ohm
- 1x Widerstand, 10 kOhm
- 1x ATmega 8
- 1x Steckbrett
- diverse Steckdrähte
- 1x Netzteil
- 1x Programmer
- 1x USB-Verbindungskabel
Das Programm ldr_luefter.bas
Der hier vorgestellte Programmvorschlag weist Schwächen auf, die man sehr schnell herausbekommt, wenn man das Programm praktisch erprobt oder es Programmzeile für
Programmzeile durcharbeitet.
Eine bessere Lösung erzielt man mit einem timer0-Interrupt, der den Controller während der allgemeinen
Programmausführung nicht blockiert, wie ein wait-Befehl (Übung 4).
Der Widerstand von 10 kOhm im LDR-Schaltkreis muss ggf. an die Realsituation und den verwendeten LDR neu angepasst werden. Hilfreich ist dafür die Kennlinie des LDR
(Datenblatt).
Wie arbeitet das Programm ldr_luefter.bas
Zeilen 16 - 21
Die Ports PB.0 und PB.1 werden als Ausgänge deklariert; sie steuern die LED und den Lüfter.
Der Analog-Digital-Wandler (ADC) wird in der folgenden Programmzeile definiert und in Zeile 19 gestartet. Informationen zu den einzelnen Parametern gibt es über die umfassende Hilfe in
BASCOM.
In Zeile 21 wird die Variable Wert deklariert, die den Rückgabewert des ADC aufnimmt.
Zeilen 23 - 35
In dieser Endlosschleife werden die Entscheidungen für die jeweilige Steuerung getroffen. Mit dem Rückgabewert des ADC, abgelegt in der Variablen Wert, und dem Zustand am Eingang PB.2 wird das weitere Vorgehen entschieden.
- 1. Möglichkeit: Schalter in Position 1 und hohe Lichtintensität vom LDR gemessen (Wert < 400)
Es wird in das Unterprogramm An_hell verzweigt.
- 2. Möglichkeit: Schalter in Position 1 und niedrige Lichtintensität (Wert > 400)
Es wird das Unterprogramm An_dunkel aufgerufen.
- 3. Möglichkeit: Schalter in Position 0
Lüfter und Licht sind ausgeschaltet.
Die ersten beiden Unterprogramme sorgen dafür, dass das Licht aus und der Lüfter eingeschaltet bzw. Licht und Lüfter eingeschaltet werden. Das dritte
Unterprogramm schaltet Licht und Lüfter aus.
Der Aufbau ist in dieser Übung der gleiche wie in Übung 3, nur das Programm wird verändert. Die Veränderung im Verhalten der Schaltung erkennt man daran,
dass
- die LED sofort angeht, wenn sich das Umgebungslicht verdunkelt und
- die Nachlaufzeit des Lüfters konstant ist und nur von dem voreingestellten Wert abhängt.
Aufgabe
- Erstelle eine Schaltung und ein Programm dazu, das, sobald ein Schalter auf ON gestellt wird, ein Licht (LED) einschaltet und nach einer Zeit t auch einen
Lüfter. Wird der Schalter auf AUS gestellt, geht das Licht aus und nach einer Zeit t auch der Lüfter.
Material
- 1x Schiebeschalter
- 1x LED, rot
- 1x LDR
- 1x Lüfter
- 1x Widerstand, 470 Ohm
- 1x Widerstand, 10 kOhm
- 1x ATmega 8
- 1x Steckbrett
- diverse Steckdrähte
- 1x Netzteil
- 1x Programmer
- 1x USB-Verbindungskabel
Vorbemerkung
Bei einem interrupt-gesteuerten Programm läuft die sogenannte Interrupt-Service-Routine (ISR) parallel zum eigentlichen
Hauptprogramm. Immer dann, wenn ein Interrupt ausgelöst wird, verzweigt das Programm zur ISR, führt den dort befindlichen (möglichst kurzen) Programmcode aus, kehrt anschließend in das Hauptprogramm
zurück und setzt dort seine Arbeit fort.
Wie ein timer0-Interrupt in BASCOM aufgerufen wird, kann über die programminterne Hilfe über das Suchwort
timer0 oder config timer0 nachgeschlagen werden. Weitere Informationen zum timer0 gibt es in der Rubrik Grundlagen unter Timer - Teil 1 und Timer - Teil2.
Das Programm ldr_luefter2.bas
Wie arbeitet das Programm ldr_luefter2.bas?
Die Reaktionsmöglichkeiten der vorliegenden Schaltung lassen sich in vier Positionen aufteilen:
- Ist Schalter = 0 und flag = 0 (Anfangszustand), steht
alles still: LED = 1, Lüfter = 0.
- Ist Schalter = 1 und die Umgebungshelligkeit > 400,
dann
LED = 0 (Licht an), Lüfter = 1 nach
10 s.
- Ist Schalter = 1 und die Umgebungshelligkeit < 400,
dann
LED = 1 (Licht aus), Lüfter = 1 nach 10
s.
- Ist Schalter = 0 und flag = 1 (Schalter von 1 auf 0),
dann
LED = 1 (Licht aus) und Lüfter = 0 nach 10 s.
Drei dieser vier Optionen erscheinen im Hauptprogramm in den Entscheidungsabfragen
IF ... THEN... END IF.
Nur für den Fall, dass Taster = 0 ist, verbleibt das Programm in einer Endlosschleife WHILE ... WEND.
Innerhalb der Entscheidungsabfragen wird der Ventilator zu- oder abgeschaltet, das Flag auf 1 gesetzt, um zu signalisieren, dass der Schalter in der Position 1 ist
und die Variable Sekunde, die in der ISR hochgezählt wird, auf 0 zurückgesetzt.
Ist zum Beispiel Schalter = 1 und LDR < 400, dann wird
LED = 1 (Zeile 45) oder die LED ausgeschaltet, da die Umgebungshelligkeit sehr groß ist und zusätzliches Licht nicht benötigt wird.
In der folgenden Entscheidungsabfrage wird überprüft, ob der Wert in der Variablen Sekunde größer als der Wert der Variablen Zeitverzoegerung ist.
Der im Hintergrund arbeitende timer0 startet mit Sekunde = 0, wenn der Schalter von 0 auf 1 gesetzt wird.
Seine Zählgeschwindigkeit hängt vom eingestellten Systemtakt (hier: 8 MHz) und Prescaler
(hier: 256) ab. Daraus ergibt sich eine Frequenz von 31250 Hz. Der Vorzähler ist auf 95 eingestellt, das heißt, dass der timer0
nicht von 0 bis 255, sondern von 95 bis 255 zählt; das sind 160 Clicks. Daraus folgt, dass mit einer Frequenz von 195,31 Hz (31250 / 160) oder alle 5,2 ms ein timer0-Interrupt ausgelöst wird, der das Programm in die Routine Timer_isr verzweigen lässt und dort die Variable Zaehler um 1
erhöht. Nach 200 Interrupts ist ca. 1 Sekunde (200*5,2 ms = 1040 ms = 1,04 s) vergangen und die Variable Sekunde wird um 1 erhöht.
Wenn der Wert der Variablen Sekunde größer ist als der Wert der Variablen Zeitverzoegerung (hier: 10), dann reagiert das Programm und schaltet den
Lüfter ein, setzt das Flag auf 1 und die Sekunden auf 0 zurück.
Weiter geht´s mit dem Kapitel LCD
Anzeige