Fotozellen-Tutorial!

Fotozellen alias CdS-Zellen, Fotowiderstände, LDR (lichtabhängiger Widerstand) ...

Was ist eine Fotozelle?

Fotozellen sind Sensoren, mit denen Sie Licht erfassen können. Sie sind klein, kostengünstig, stromsparend, einfach zu bedienen und nutzen sich nicht ab. Aus diesem Grund erscheinen sie häufig in Spielzeugen, Geräten und Geräten. Sie werden häufig als CdS-Zellen (sie bestehen aus Cadmiumsulfid), lichtabhängigen Widerständen (LDR) und Fotowiderständen bezeichnet.

Eine Fotozelle ist im Grunde ein Widerstand, der seinen Widerstandswert (in Ohm) ändert, je nachdem, wie viel Licht auf das verschnörkelte Gesicht scheint. Sie sind sehr kostengünstig, in vielen Größen und Spezifikationen leicht zu bekommen, aber sehr ungenau. Jeder Fotozellensensor verhält sich etwas anders als der andere, auch wenn er aus derselben Charge stammt. Die Variationen können sehr groß sein, 50% oder höher! Aus diesem Grund sollten sie nicht verwendet werden, um genaue Lichtverhältnisse in Lux oder Millicandela zu bestimmen. Stattdessen können Sie davon ausgehen, dass Sie nur grundlegende Lichtänderungen feststellen können

Bei den meisten lichtempfindlichen Anwendungen wie "Ist es hell oder dunkel", "Befindet sich etwas vor dem Sensor (das Licht blockieren würde)", "Unterbricht etwas einen Laserstrahl" (Unterbrechungsstrahlsensoren) oder "Welcher von mehreren Sensoren hat das meiste Licht?", Fotozellen können eine gute Wahl sein!

Einige grundlegende Statistiken

Diese Statistiken gelten für die Fotozelle im Adafruit-Shop, die dem PDV-P8001 sehr ähnlich ist. Fast alle Fotozellen haben leicht unterschiedliche Spezifikationen, obwohl sie alle ziemlich gleich funktionieren. Wenn es ein Datenblatt gibt, sollten Sie darauf verweisen

  • Größe: Rund, 5 mm Durchmesser (0, 2 "). (Andere Fotozellen können einen Durchmesser von bis zu 11 mm erreichen!)
  • Preis 1, 50 USD im Adafruit-Shop
  • Widerstandsbereich: 200 K Ohm (dunkel) bis 10 K Ohm (10 Lux Helligkeit)
  • Empfindlichkeitsbereich: CdS-Zellen reagieren auf Licht zwischen 400 nm (violett) und 600 nm (orange) Wellenlängen und erreichen einen Peak bei etwa 520 nm (grün).
  • Stromversorgung: So ziemlich alles bis zu 100 V, verbraucht durchschnittlich weniger als 1 mA Strom (abhängig von der Versorgungsspannung)
  • Datenblatt und ein anderes Datenblatt
  • Zwei Anwendungshinweise zur Verwendung und Auswahl von Fotozellen, aus denen fast alle diese Grafiken stammen

Schritt 1: Messen des Lichts mit einer Fotozelle


Wie bereits erwähnt, ändert sich der Widerstand einer Fotozelle, wenn das Gesicht mehr Licht ausgesetzt wird. Wenn es dunkel ist, sieht der Sensor wie ein großer Widerstand mit bis zu 10 M Ohm aus. Wenn der Lichtpegel steigt, sinkt der Widerstand. Diese Grafik zeigt ungefähr den Widerstand des Sensors bei verschiedenen Lichtstärken. Denken Sie daran, dass jede Fotozelle etwas anders sein wird. Verwenden Sie diese nur als Richtlinie!

(Siehe Widerstand gegen Beleuchtungsdiagramm unten)
Beachten Sie, dass das Diagramm nicht linear ist, sondern ein Log-Log-Diagramm!

Fotozellen, insbesondere die häufig vorkommenden CdS-Zellen, sind nicht lichtempfindlich. Insbesondere neigen sie dazu, lichtempfindlich zwischen 700 nm (rot) und 500 nm (grün) Licht zu sein.

Grundsätzlich löst blaues Licht den Sensor nicht annähernd so effektiv aus wie grünes / gelbes Licht!

Was zum Teufel ist Lux?

Die meisten Datenblätter verwenden Lux, um den Widerstand bei bestimmten Lichtstärken anzuzeigen. Aber was ist Lux? Es ist keine Methode, mit der wir die Helligkeit beschreiben, daher ist es schwierig zu beurteilen. Hier ist eine Tabelle aus einem Wikipedia-Artikel zum Thema!
(Siehe Beleuchtungstabelle unten)

Schritt 2: Testen und Anschließen Ihrer Fotozelle


Testen Sie Ihre Fotozelle

Der einfachste Weg, um festzustellen, wie Ihre Fotozelle funktioniert, besteht darin, ein Multimeter im Widerstandsmessmodus an die beiden Kabel anzuschließen und zu sehen, wie sich der Widerstand ändert, wenn Sie den Sensor mit Ihrer Hand beschatten, Lichter ausschalten usw. Da sich der Widerstand stark ändert, Ein automatisches Messgerät funktioniert hier gut. Andernfalls stellen Sie einfach sicher, dass Sie verschiedene Bereiche zwischen 1 M Ohm und 1 K Ohm ausprobieren, bevor Sie aufgeben.

Anschließen an Ihre Fotozelle

Da Fotozellen grundsätzlich Widerstände sind, sind sie nicht polarisiert. Das heißt, Sie können sie "so oder so" verbinden und sie funktionieren einwandfrei!

Fotozellen sind ziemlich robust, Sie können sie leicht anlöten, die Kabel befestigen, sie in Steckbretter stecken, Krokodilklemmen verwenden usw. Sie sollten nur darauf achten, dass die Kabel nicht direkt am epoxidierten Sensor verbogen werden, da sie abbrechen können wenn zu oft gebeugt.

Schritt 3: Projektbeispiele



Geräuschemacher, der die Frequenz je nach Lichtstärke ändert.


Motorwert- und Richtungssteuerung mit Fotowiderständen und Mikrocontroller


Linienfolgender Roboter, der Fotozellen verwendet, um das von weißen / schwarzen Streifen reflektierte Licht zu erkennen

Ein weiterer Roboter, dieser hat zwei Sensoren und bewegt sich in Richtung Licht (sie heißen Braitenberg-Fahrzeuge)


Verwenden einer Fotozelle und eines Taschenlaserzeigers zum Erstellen eines Breakbeam-Sensors

Schritt 4: Analoge Spannungslesemethode


Der einfachste Weg, einen Widerstandssensor zu messen, besteht darin, ein Ende an die Stromversorgung und das andere Ende an einen Pulldown-Widerstand an Masse anzuschließen. Dann wird der Punkt zwischen dem festen Pulldown- Widerstand und dem variablen Fotozellenwiderstand mit dem Analogeingang eines Mikrocontrollers wie eines Arduino (gezeigt) verbunden.
(Siehe Schaltplan unten)

In diesem Beispiel zeige ich es mit einer 5-V-Versorgung, aber beachten Sie, dass Sie dies mit einer 3, 3-V-Versorgung genauso einfach verwenden können. In dieser Konfiguration reicht der analoge Spannungswert von 0 V (Masse) bis ungefähr 5 V (oder ungefähr gleich der Versorgungsspannung).

Dies funktioniert so, dass mit abnehmendem Widerstand der Fotozelle der Gesamtwiderstand der Fotozelle und des Pulldown-Widerstands von über 600 kOhm auf 10 kOhm abnimmt. Dies bedeutet, dass der durch beide Widerstände fließende Strom zunimmt, was wiederum dazu führt, dass die Spannung am festen 10K-Ohm-Widerstand ansteigt. Es ist ein ziemlicher Trick!

(Siehe erste Tabelle unten)
Diese Tabelle zeigt die ungefähre analoge Spannung basierend auf dem Sensorlicht / Widerstand mit einer 5-V-Versorgung und einem 10-K-Ohm-Pulldown-Widerstand

Wenn Sie planen, den Sensor in einem hellen Bereich zu platzieren und einen 10K-Ohm-Pulldown zu verwenden, wird er schnell gesättigt. Das bedeutet, dass es die 'Decke' von 5V erreicht und nicht in der Lage ist, zwischen etwas hell und wirklich hell zu unterscheiden. In diesem Fall sollten Sie den 10K-Ohm-Pulldown durch einen 1K-Ohm-Pulldown ersetzen. In diesem Fall kann es auch keine Dunkelpegeldifferenzen erkennen, aber es kann helle Lichtunterschiede besser erkennen. Dies ist ein Kompromiss, über den Sie sich entscheiden müssen!

(Siehe zweite Tabelle unten)
Diese Tabelle zeigt die ungefähre analoge Spannung basierend auf dem Sensorlicht / Widerstand mit einer 5-V-Versorgung und einem 1K-Pulldown-Widerstand

Beachten Sie, dass unsere Methode keine lineare Spannung in Bezug auf die Helligkeit liefert! Außerdem ist jeder Sensor anders. Mit zunehmendem Lichtpegel steigt die analoge Spannung an, obwohl der Widerstand abnimmt:

Vo = Vcc (R / (R + Fotozelle))

Das heißt, die Spannung ist proportional zum Kehrwert des Fotozellenwiderstands, der wiederum umgekehrt proportional zu den Lichtpegeln ist

Schritt 5: Einfache Demonstration der Verwendung


In dieser Skizze wird der analoge Spannungswert verwendet, um zu bestimmen, wie hell die rote LED ist. Je dunkler es ist, desto heller wird die LED! Denken Sie daran, dass die LED an einen PWM-Pin angeschlossen werden muss, damit dies funktioniert. In diesem Beispiel verwende ich Pin 11.

Diese Beispiele setzen voraus, dass Sie einige grundlegende Arduino-Programmierungen kennen. Wenn nicht, verbringen Sie vielleicht einige Zeit damit, die Grundlagen des Arduino-Tutorials zu überprüfen.

/ * Einfache Testskizze für Fotozellen.

Schließen Sie ein Ende der Fotozelle an 5 V an, das andere Ende an Analog 0.
Verbinden Sie dann ein Ende eines 10K-Widerstands von Analog 0 mit Masse
Verbinden Sie die LED von Pin 11 über einen Widerstand mit Masse
Weitere Informationen finden Sie unter www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 0; // Die Zelle und das 10K-Pulldown sind mit a0 verbunden
int photocellReading; // die analoge Anzeige vom Sensorteiler
int LEDpin = 11; // Rote LED an Pin 11 anschließen (PWM-Pin)
int LEDbrightness; // //
void setup (void) {
// Wir senden Debugging-Informationen über den seriellen Monitor
Serial.begin (9600);
}}

void loop (void) {
photocellReading = analogRead (photocellPin);

Serial.print ("Analog Reading =");
Serial.println (photocellReading); // das rohe analoge Lesen

// LED wird heller, je dunkler sie am Sensor ist
// das heißt, wir müssen den Messwert von 0-1023 zurück auf 1023-0 umkehren
photocellReading = 1023 - photocellReading;
// Jetzt müssen wir 0-1023 auf 0-255 abbilden, da dies der Bereich ist, den analogWrite verwendet
LED-Helligkeit = Karte (photocellReading, 0, 1023, 0, 255);
analogWrite (LEDpin, LEDbrightness);

Verzögerung (100);
}}

Je nach Lichtstärkebereich, den Sie erkennen möchten, können Sie verschiedene Pulldown-Widerstände ausprobieren!

Schritt 6: Einfacher Code für analoge Lichtmessungen:


Dieser Code führt keine Berechnungen durch, sondern druckt nur qualitativ aus, was er als Lichtmenge interpretiert. Für die meisten Projekte ist dies so ziemlich alles, was benötigt wird!

/ * Einfache Testskizze für Fotozellen.

Schließen Sie ein Ende der Fotozelle an 5 V an, das andere Ende an Analog 0.
Verbinden Sie dann ein Ende eines 10K-Widerstands von Analog 0 mit Masse

Weitere Informationen finden Sie unter www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 0; // Die Zelle und das 10K-Pulldown sind mit a0 verbunden
int photocellReading; // der analoge Messwert vom analogen Widerstandsteiler

void setup (void) {
// Wir senden Debugging-Informationen über den seriellen Monitor
Serial.begin (9600);
}}

void loop (void) {
photocellReading = analogRead (photocellPin);

Serial.print ("Analog Reading =");
Serial.print (photocellReading); // das rohe analoge Lesen

// Wir werden ein paar Schwellenwerte haben, die qualitativ festgelegt sind
if (photocellReading <10) {
Serial.println ("- Dark");
} else if (photocellReading <200) {
Serial.println ("- Dim");
} else if (photocellReading <500) {
Serial.println ("- Light");
} else if (photocellReading <800) {
Serial.println ("- Bright");
} else {
Serial.println ("- Sehr hell");
}}
Verzögerung (1000);
}}

Um es zu testen, begann ich in einem sonnenbeschienenen (aber schattigen) Raum und bedeckte den Sensor mit meiner Hand, dann bedeckte ich ihn mit einem Stück Verdunkelungsstoff.

Schritt 7: BONUS! Lesen von Fotozellen ohne analoge Stifte


Da Fotozellen im Grunde genommen Widerstände sind, können Sie sie auch dann verwenden, wenn Sie keine analogen Pins an Ihrem Mikrocontroller haben (oder wenn Sie sagen, dass Sie mehr anschließen möchten als analoge Eingangsstifte). Wir nutzen dazu eine grundlegende elektronische Eigenschaft von Widerständen und Kondensatoren. Wenn Sie einen Kondensator nehmen, der anfänglich keine Spannung speichert, und ihn dann über einen Widerstand an die Stromversorgung (z. B. 5 V) anschließen, wird er langsam auf die Netzspannung aufgeladen. Je größer der Widerstand, desto langsamer ist er.

Diese Aufnahme von einem Oszilloskop zeigt, was auf dem digitalen Pin passiert (gelb). Die blaue Linie zeigt an, wann die Skizze mit dem Zählen beginnt und wann das Zählen abgeschlossen ist, ca. 1, 2 ms später.

Dies liegt daran, dass der Kondensator wie ein Eimer wirkt und der Widerstand wie ein dünnes Rohr ist. Das Befüllen eines Eimers mit einem sehr dünnen Rohr dauert so lange, bis Sie herausfinden können, wie breit das Rohr ist, indem Sie festlegen, wie lange es dauert, bis der Eimer zur Hälfte gefüllt ist.

In diesem Fall ist unser "Eimer" ein 0, 1 uF Keramikkondensator. Sie können den Kondensator fast beliebig ändern, aber auch die Zeitwerte ändern sich. 0, 1 uF scheint ein guter Ausgangspunkt für diese Fotozellen zu sein. Wenn Sie hellere Bereiche messen möchten, verwenden Sie einen 1uF-Kondensator. Wenn Sie dunklere Bereiche messen möchten, gehen Sie auf 0, 01 uF.

/ * Einfache Testskizze für Fotozellen.
Schließen Sie ein Ende der Fotozelle an die Stromversorgung an, das andere Ende an Pin 2.
Schließen Sie dann ein Ende eines 0, 1 uF-Kondensators von Pin 2 an Masse an
Weitere Informationen finden Sie unter www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 2; // Der LDR und die Kappe sind mit Pin2 verbunden
int photocellReading; // das digitale Lesen
int ledPin = 13; // Sie können einfach die eingebaute LED verwenden

void setup (void) {
// Wir senden Debugging-Informationen über den seriellen Monitor
Serial.begin (9600);
pinMode (ledPin, OUTPUT); // habe eine LED für die Ausgabe
}}

void loop (void) {
// Lesen Sie den Widerstand mit der RCtime-Technik
photocellReading = RCtime (photocellPin);

if (photocellReading == 30000) {
// Wenn wir 30000 haben, bedeutet das, dass wir eine Zeitüberschreitung haben.
Serial.println ("Nichts verbunden!");
} else {
Serial.print ("RCtime Reading =");
Serial.println (photocellReading); // das rohe analoge Lesen

// Je heller es ist, desto schneller blinkt es!
digitalWrite (ledPin, HIGH);
Verzögerung (photocellReading);
digitalWrite (ledPin, LOW);
Verzögerung (photocellReading);
}}
Verzögerung (100);
}}

// Verwendet einen digitalen Pin zum Messen eines Widerstands (wie ein FSR oder eine Fotozelle!)
// Wir tun dies, indem der Widerstand Strom in einen Kondensator einspeist und
// Zählen, wie lange es dauert, bis Vcc / 2 erreicht ist (für die meisten Arduinos sind das 2, 5 V)
int RCtime (int RCpin) {
int Reading = 0; // beginne mit 0

// setze den Pin auf einen Ausgang und ziehe auf LOW (Masse)
pinMode (RCpin, OUTPUT);
digitalWrite (RCpin, LOW);

// Setzen Sie nun den Pin auf einen Eingang und ...
pinMode (RCpin, INPUT);
while (digitalRead (RCpin) == LOW) {// Zähle, wie lange es dauert, bis HIGH erreicht ist
Lesen ++; // Inkrementieren, um die Zeit zu verfolgen

if (Lesen == 30000) {
// Wenn wir so weit gekommen sind, ist der Widerstand so hoch
// Es ist wahrscheinlich, dass nichts verbunden ist!
brechen; // Verlasse die Schleife
}}
}}
// OK, entweder haben wir das Maximum bei 30000 erreicht oder hoffentlich einen Messwert erhalten, geben Sie die Zählung zurück

Rücklesung;
}}

Ähnlicher Artikel