Fotowiderstand (Helligkeitssensor) am Raspberry Pi

20. April 2017
10 Comments

Um z.B. eine Wetterstation zu betreiben ist es auch wichtig die Helligkeit zu kennen. Mit einem Raspberry Pi Helligkeitssensor (Fotowiderstand / Lichtsensor) ist es sehr einfach einen Wert zu ermitteln, womit man bspw. sagen kann ob es Tag, Dämmerung oder Nacht ist.

Damit ließen sich wiederum Projekte zum Steuern der (Außen-)Lichter realisieren, die ab einer gewissen Dunkelheit sich automatisch anschalten. In diesem Tutorial schließen wir einen solchen Helligkeitssensor an und lesen die Lichtwerte entsprechend aus, sodass wir darauf reagieren können.

 

Zubehör

Den verwendeten Fotowiderstand gibt es neben der eigentlichen Fassung auch auf einem PCB (Leiterplatte), worauf u.a. Widerstände aufgelötet sind. Dadurch kann zusätzlich ein digitales Signal ausgelesen werden, dass für „über/unter Schwellwert“ steht. Das Auslesen diesen digitalen Signals ist sehr einfach und wird in einigen anderen Tutorials behandelt (z.B. hier oder hier). Beide Versionen können mit diesem Tutorial genutzt werden, lediglich hat die eine Version eben noch eine zusätzliche Funktionalität. Für Projekte wie das Unterscheiden zwischen Hell/Dunkel ist es sicherlich eine einfache Alternative.

Raspberry Pi Helligkeitssensor PCB Fototransistor

Auf eine Leiterplatte aufgelöteter Fotowiderstand hat ein Potentiometer dabei, sodass Schwellwerte einstellbar sind.

Folgende Bauteile sind für dieses Tutorial jedenfalls nötig:

Falls dich die Funktionsweise von Fotowiderständen (LDR) im Allgemeinen interessieren, kannst du hier mehr dazu lesen. Im Allgemeinen kann man sagen, dass sich der Widerstand je nach Helligkeit verändert.

 

Raspberry Pi Helligkeitssensor anschließen

Raspberry Pi MCP3008 Pinout

Auf der linken Seite des MCP3008 befinden sich die 8 analog auslesbaren Channels.

Bevor wir den Fototransistor jedoch anschließen und auslesen können, müssen wir einen Analog-Digital-Wandler verbinden. Dazu findest du hier einen recht ausführlichen Artikel zum MCP3008, den wir auch in diesem Tutorial verwenden. Um diesen Artikel nicht unnötig aufzublähen gehe ich hier nicht näher auf den MCP3008 ein. Die genaue Verbindung zwischen ADC und Raspberry Pi findest du ebenfalls im Artikel.

Wichtig ist, dass der Helligkeitssensor auch eine Verbindung (über einen 10kΩ Widerstand) zum Masse Anschluss hat, da ansonsten der Wert nicht eindeutig auszulesen ist. Kommt durch den LDR überhaupt keine Spannung, so ist diese bei 0 (durch den Anschluss an GND).Falls Spannung fließt, geht ein Teil durch den 10kΩ Widerstand zurück, allerdings ist dieser Teil sehr gering, da der Widerstand groß ist. Wie bei anderen Widerständen auch spielt es keine Rolle auf welcher Seite die Positive Spannung am Fotowiderstand angelegt wird.

Schematisch sieht der Aufbau wie folgt aus:

Falls später selbst bei weniger Beleuchtung recht hohe Werte angezeigt werden, kannst du zwischen positiven Spannung und dem Pin des Lichtsensors noch einen zusätzlichen Widerstand setzen.

Solltest du einen aufgelöteten Photowiderstand nutzen, muss lediglich 3.3V (Pin 1) vom Raspberry Pi an VCC und GND kommt and GND (Pin 6) vom Pi. Der Pin A0 wird direkt an den Analog-Digital Wandler angeschlossen. Somit ist kein 10k Pullup Widerstand nötig. Der Vorteil besteht darin, dass du den Vorwiderstand per Potentiometer (Drehwiderstand) individuell einstellen kannst – je nach maximaler Helligkeit.

 

 

Helligkeitssensor am Raspberry Pi auslesen

In dem anderen Tutorial zum MCP3008 haben wir eine Klasse erstellt, welche wir auch hier nutzen werden. Stelle sicher, dass SpiDev wie beschrieben installiert ist. Zur Erinnerung findest du den Inhalt der Klasse hier noch einmal:

Sofern diese Klasse im aktuellen Verzeichnis besteht, kannst du einfach die Python Konsole per sudo python öffnen (oder alternativ ein Skript erstellen) und folgendes eingeben:

Bei mir ergab komplette Dunkelheit (Finger darauf gehalten) einen Wert von ca. 600 was bedeutet, dass ca. 1.95V Spannung von den ursprünglichen 3.3V an den MCP3008 kamen. Bei Helligkeit hatte ich dauerhaft einen Wert von 1023.

Die maximalen Widerstandsgrößen unterscheiden sich ein wenig, je nachdem welcher Lichtwiderstand genommen wurde. Sofern die Helligkeit sehr hoch ist (Tageslicht) empfiehlt sich ein Vorwiderstand bzw. ein anderer Pull-Widerstand (bisher 10k).

10 Kommentare

  1. Prima, da habe ich doch gleich mal 10 St. bestellt…
    Prima, werde ich versuchen als Garagenlichtangelassenmelder zu nutzen. Das mit dem Temp.sensor funktioniert nicht optimal, weil das Kabel zu lang ist…

    Apropos Kabellänge… kann es da zu Problemen kommen, wenn die Kabel vom Lichtsensor zu lang sind (ca. 8 m) oder kann man das mit einem kleineren Widerstand ausgleichen?

    Gruß Ingo

    Antworten
  2. Ist möglicherweise eine Dumme Frage,
    aber wie lange dürfte die Verbindung vom rpi zum Helligkeitssensor sein. Und oder wäre dann eine Variante über Funk (v.a. welche Variante) bei etwas Entfernung sinnvoller ?

    Und wie kann man (vielleicht was für eine weiteres Tutorial) mehrere Sensoren gleichzeitig/parallel abfragen?

    Antworten
    • Das kommt auf den Spannungsverlust an, welcher mit der Länge und Material des Kabels zusammenhängt.
      Die Funkübertragung wäre eine Option, dafür eignet sich z.B. ein Arduino.
      Mit dem MCP3008 kannst du bis zu 8 analoge Werte gleichzeitig auslesen.
      LG, Felix

      Antworten
  3. Es erschliesst sich mir nicht wie ich nun an irgendwelche Daten komme. Dazu muss es doch ein Befehl geben.

    Antworten
  4. Erstmal vielen Dank für das super Tutorial, hat sehr weitergeholfen.
    So wie ich den fritzing-Schaltplan interpretiere, ist die Schaltung recht simpel: Fotosensor ist in Reihe geschaltet zu einer Parallelschaltung aus MCP und 10k-Widerstand. Muss gleich dazu sagen, dass sich meine Elektrotechnikkenntnisse start in Grenzen halten.

    Wenn ich nun einen zweiten Fotowiderstand auslesen möchte (über Ch.1 des MCP), kann ich den unteren Teil (AJ20-AJ23) einfach nochmal darunter „Copy-Pasten“? Natürlich mit dem Unterschied, dass das gelbe Kabel zu Ch.1 statt Ch.0 führt. Also im Endeffekt einen zweiten Fotowiderstand mit 10k-Widerstand und Verbindung zu Ch.1 parallel zu dem ursprünlichen Schaltplan.

    Ist das möglich so? Müssen in dem Fall die 10k-Widerstände durch andere ersetzt werden? Und ist das Vorgehen skalierbar bis 8 Sensoren (bei diesem Schaltplan)?

    Vielen Dank schonmal vorab! Grüße

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!