Licht mit einer LED detektieren!

Kleines, aber sehr interessantes und lehrreiches Experiment, für Anfänger mit Arduino, ESP32 und Odroid-Go. Und ein kleines bisschen anspruchsvoller, als die üblichen ‘Wie lasse ich eine LED blinken?’ Tutorials. Wenn Du schon einen Odroid-Go besitzt, dann kannst Du mit diesem Experiment mit minimalem Aufwand (eine einzige LED) sehr viel lernen. Allerdings will ich in diesem Artikel nicht bei Adam und Eva anfangen. Ihr solltet schon wissen, was elektrischer Strom, die Arduino IDE, ein ESP32 und ein Odroid-Go ist.

Einleitung

Der längere Anschluss ist die Anode, der kürzere die Kathode.

Anfang der 70iger Jahre entdeckte Forrest Mims, das eine LED nicht nur Licht ausstrahlen, sondern auch Licht detektieren kann! Dieses Wissen ist aber wohl in den folgenden Jahrzehnten wieder etwas verloren gegangen. 2003 erschien ein Aufsatz des Mitsubishi Electric Research Laboratories (MERL), der sich damit beschäftigt, eine billige Fernsteuerung für Konsumartikel, mit der Fähigkeit auszustatten, nur bei Dunkelheit eine Hintergrundbeleuchtung der Tastatur einzuschalten und dabei die Idee mit der LED wieder aufgreift.

Als ich davon das erste Mal hörte, fand ich es schier unglaublich! Für mich war eine LED seit Jahrzehnten die moderne Weiterentwicklung einer Glühbirne, völlig unfähig irgendetwas anderes zu machen, als Licht auszusenden und schon gar nicht, Licht zu detektieren. Dafür, dachte ich immer, benötigt es so etwas Besonderes wie einen Fotowiderstand. Und einen Fotowiderstand fand ich schon als Jugendlicher ungemein faszinierend. Ich denke, es war für mich das erste elektronische Bauelement, mit dem ich eine für mich alltägliche physikalische Größe, wie eben die Helligkeit des Umgebungslichts, direkt in elektrische Größe umwandeln konnte. Direkt wahrnehmbar mit einem der ersten Digitalmultimeter in der Einstellung Widerstand. Hammer!

Hier das auf einem Breadbord zusammengesteckte Reaktivlicht. Rechts der Attiny 13 auf einem Breadboard Header von Tinkerlog. Darunter die LED, rechts daneben ein DC-DC Stepup Wandler, um aus 1.5 Volt 5 Volt zu machen und darüber die AA-Batterie in einem Batteriehalter.

Das eine LED das Gleiche tun kann, habe ich erstmals vor einigen Jahren festgestellt. Zum Beispiel anhand dem Einsatz in einem Reaktivlicht für das Geocaching. Damals habe ich so etwas Ähnliches als Rätsel für meine Kinder gebaut. Ein Reaktivlicht auf Basis eines Mikrocontrollers Atmel Attiny 13, dass, wenn es mit einer Taschenlampe angeleuchtet wird, die Koordinaten des örtlichen Buchgeschäftes im Morsecode blinkt. Das Kind, welches das Rätsel zuerst löst, darf sich dann dort ein beliebiges Buch kaufen.

Nach der langen Vorgeschichte jetzt zum Kern dieses Artikels. Ich möchte Euch zeigen, wie man völlig ohne Löten, nur mit einem Odroid-Go und einer LED, diesen Effekt einer LED selbst ausprobieren kann.

Voraussetzungen

Im Odroid-Go ist im oberen Gehäuserand eine Steckleiste untergebracht. Diese ermöglicht es mit ihm auf elektronischem Wege Kontakt aufzunehmen. Für das Experiment werden zwei General Purpose Input/Output (GPIO) Anschlüsse benötigt, die sowohl als Eingang und Ausgang konfiguriert werden können. Ich habe dazu die Pins 4 und 5 auserkoren. Dort steckt Ihr die LED hinein, wobei im Grunde egal ist, wie herum ihr sie hinein steckt.

Durch das durchsichtige Gehäuse könnt Ihr, leider etwas verschwommen, die nach außen geführte Anschlussleiste sehen. Links davon ist eine 1 und rechts eine 10 zu sehen.

Wie funktioniert es?

Am letzten Satz konntet Ihr schon merken, dass es mit den Beinchen der LED etwas Besonderes auf sich haben muss. Man unterscheidet bei den Beinchen einer LED zwischen Kathode und Anode. Ich will hier nicht bei Adam und Eva anfangen und nur sagen, dass eine LED nur leuchtet, wenn an der Anode der positive und bei der Kathode der negative Anschluss einer Stromquelle angeschlossen wird. Jetzt fragt Ihr bestimmt, warum es dann egal ist, wie Ihr sie in den Odroid-Go steckt?

Auf dem Bild ist eine von unten fotografierte LED zu sehen. Ihr könnt sehen, wie die kreisrunde Unterseite an einer Stelle abgeflacht ist. Auf dieser Seite ist die Kathode.

Es ist egal, weil Ihr im Programm selbst definieren könnt, welcher Anschluss der LED in welchem Port-Anschluss des Odroid-Go steckt! Das Coole an den beiden Anschlüssen ist, dass Ihr selbst bestimmt, ob der Anschluss ein Eingang oder ein Ausgang ist und im Falle eines Ausgangs, ob an diesem 0 Volt oder 5 Volt anliegen sollen. Sollte das unten gezeigte Programm die LED gar nicht zum Leuchten bringen, so steckt die LED einfach verkehrt herum hinein, oder tauscht im Programmcode die GPIO Nummern aus!

Welcher Port Pin des Odroid-Go welchem GPIO Pin entspricht, findet Ihr auf dieser Seite ganz unten.

Funktionsprinzip

Wenn die LED so angeschlossen wird, dass sie nicht leuchtet, dann sagt man, dass sie in Sperrrichtung betrieben wird. Die für die Sperrung verantwortliche Sperrschicht wirkt dann wie ein Kondensator. Und ein Kondensator kann eine bestimmte Menge Strom speichern! Polt ihr jetzt die LED um, also tauscht Plus und Minus,  schließt also die LED so an, dass sie eigentlich leuchten würde, fließt für einen kurzen Moment der gespeicherte Strom ab. Dies tut er unterschiedlich schnell, je nachdem, wie viel Licht auf die Sperrschicht der LED fällt. Die Zeit könnt ihr zählen und habt damit ein Maß für die Helligkeit.

Wie könnt Ihr Euch das vorstellen?

Ihr könnt Euch die Kapazität der LED wie einen kleinen Eimer vorstellen. An der Unterseite ist ein Wasserhahn angebracht. Wenn Ihr damit messen wollt, wie stark es gerade regnet, so macht Ihr es oben auf und lasst ihn voll laufen. Anschließend schließt ihr den Eimer und öffnet den Wasserhahn. Jetzt stellt Ihr Euch vor, dass der Hahn in Abhängigkeit von der Intensität des Lichts unterschiedlich weit geöffnet wird. Nun zählt Ihr, wie viele Sekunden es dauert, bis das Regenwasser komplett heraus gelaufen ist. Die Zeit könnt ihr zählen und habt damit ein Maß für die Helligkeit.

Genau so machen wir es jetzt mit der LED!

Programm

#define LED_CATHODE  4             // GPIO  4 ist Pin 5 am Odroid-Go
#define LED_ANODE 15 // GPIO 15 ist Pin 4 am Odroid-Go

void setup() { // Es muss nichts vorbereitet werden!
}

void loop() {
int lux = detect (); // Aufruf der Funktion zum Licht detektieren.
if (lux < 25000) { // Wenn der zurückgegebene Wert kleiner 25000 ist,
blink (); // ist es hell und wir blinken einmal.
}
}

int detect () { // Funktion 'Licht detektieren'.
long count; // Zählvariable 'count'.
pinMode(LED_CATHODE, OUTPUT); // Diesen GPIO als Ausgang schalten.
pinMode(LED_ANODE, OUTPUT); // Diesen GPIO auch als Ausgang schalten.
digitalWrite(LED_CATHODE, HIGH); // Die Kathode auf 5 Volt legen.
digitalWrite(LED_ANODE, LOW); // Die Anode auf 0 Volt legen.
pinMode(LED_CATHODE, INPUT); // Die Kathode als Eingang schalten.
digitalWrite(LED_CATHODE, LOW); // Den internen Pullup Widerstand ausschalten.

for (count = 0; count < 50000; count++) { // Die Zählschleife.
if (digitalRead(LED_CATHODE) == 0) { // Solange zählen bis am Eingang eine
break; // digitale 0 anliegt.
}
}

return count; // Den Zählerstand zurück geben.
}

void blink () { // Die Funktion 'Einmal Blinken'.
pinMode(LED_ANODE, OUTPUT); // Diesen GPIO als Ausgang schalten.
pinMode(LED_CATHODE, OUTPUT); // Diesen GPIO auch als Ausgang schalten.
digitalWrite(LED_ANODE, HIGH); // Die Anode auf 5 Volt legen.
digitalWrite(LED_CATHODE, LOW); // Die Kathode auf 0 Volt legen.
delay(1000); // Eine Sekunde warten.
digitalWrite(LED_ANODE, LOW); // Die LED wieder ausschalten.
digitalWrite(LED_CATHODE, HIGH);
}

Jetzt könnt Ihr einmal kurz mit einer hellen Taschenlampe auf die LED leuchten und sie sollte sofort danach einmal kurz blinken. Wenn es nicht gleich klappt, könnt Ihr versuchen mit der Taschenlampe näher heran zu gehen oder im Programmcode bei der Abfrage des Schwellwerts, diesen verändern.

Wer kann, der kann ein cooles Programm entwickeln, mit dem der gemessene Wert analog dargestellt wird. Gerade so, wie früher auf einem analogen Messgerät.

Neues Abhörszenario?

Wer sich heutzutage für das Thema Hausautomation interessiert, der weiß vermutlich, dass manche dort zum Einsatz kommende Geräte aus dem IoT-Bereich mit WiFi und Bluetooth ausgerüstet sind. Selbstverständlich ist dann stets auch ein kleiner Mikrocontroller nicht weit entfernt. Zum Beispiel ein ESP32. Könnte man dessen Firmware reprogrammieren, so lies sich das oben beschriebene Programm theoretisch dazu verwenden, Helligkeitsinformationen aus dem eigenen Heim ins Internet zu senden.

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert