Analoge Werte Digital Messen (LDR)

Bis jetzt haben wir beim Benutzen von GPIO.input(pinNummer) immer nur eine 1 oder 0 eine zurück bekommen. Das ist praktisch, wenn wir die Daten von einem Taster haben wollen, der entweder gedrückt ist (1) oder halt nicht (0). Das sind die digitalen Werte mit denen der Raspberry Pi am besten arbeiten kann. Es wird nur eine 1 gemessen, wenn eine Spannung von über 2V an dem Pin anliegt. Aber es gibt noch eine ganze Welt von Situationen, in denen es sehr hilfreich ist, nicht nur auf eine 1 oder 0 beschränkt zu sein und zwar bei analogen Werten. Diese analogen Werte können wir aber leider nicht einfach so mit dem Raspberry Pi messen und müssen uns eines kleinen Tricks mit einem Kondensator bedienen. Doch zuerst wofür brauchen wir das überhaupt?

PhotowiderstandKondensator

Für den Photowiderstand! Doch im Gegensatz zum ganz normalen Widerstand ist die Größe nicht immer gleich. In einem kompletten dunklen Raum liegt der Widerstand bei ein paar Mega-Ohm (MΩ). Je heller es wird, desto geringer wird der Widerstand. Alles was uns jetzt fehlt, ist ein Kondensator. Denn ein Kondensator kann kleine Mengen an elektrischer Energie speichern und wieder abgeben – ähnlich wie ein sehr kleiner Akku. Allerdings wird die Energie nicht wie beim Akku chemisch gewandelt. Desshalb lassen sich Kondensatoren sehr schnell laden und entladen. Die Speichergröße eines Kondensators wird in Farad (F) angegeben.

Anschlüsse PiAnschlüsse Breadboard
3,3VPhotowiderstand
GPIO 4+ Seite Kondensator und Photowiderstand
GND– Seite Kondensator
import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BCM)

def messen (pin):
    startZeit = time.time()
    gpio.setup(pin, gpio.OUT)
    gpio.output(pin, gpio.LOW)
    time.sleep(0.1)
    gpio.setup(pin, gpio.IN)
    while gpio.input(pin) == 0:
        pass
    return time.time() - startZeit

while True:
    print(messen(4))

Wenn ihr das Programm startet wird im Terminal immer wieder eine Zahl ausgeben. Das ist die Zeit in Sekunden, die es braucht, um den Kondensator aufzuladen. Wenn du zum Beispiel den Photowiederstand mit deinem Finger verdunkelst oder das Licht ausschaltest, solltest du eine Veränderung in der Länge erkennen. Denn die Zeit, die es braucht, um einen Kondensator aufzuladen, lässt sich so berechnen: Zeit = Kapazität * Widerstand * 5 Nach etwa fünf Zeiteinheiten ist der Kondensator vollständig aufgeladen. Je größer der Widerstand oder der Kondensator ist, desto länger dauert also das Aufladen. In unserem Fall ist die Kapazität des Kondensators ein fester Wert, der Wiederstand des Photowiederstandes ist allerings von der Helligkeit der Umgebung abhängig. Wir haben folgende Werte gemessen, die bei dir in einem ähnlichen Bereich liegen müssen: Direktes Anleuchten ca. 0,10 Beleuchtung von ca. 0,25 Verdunkelung mit dem Finger >0,75

Gucken wir uns nun das Progeamm etwas genauer an:
In Zeile 1 bis 4 werden die benötigten Bibliotheken importiert und die Pinbelegung festgelegt. Das ist ja nichts Neues.
Auch in Zeile 6 finden wir einen alten Bekannten; wir erstellen unsere eigene Funktion mit dem Namen messen(). Der Funktion übergeben wir als Parameter den Pin, an dem wir den Sensor angschlossen haben.
In Zeile 7 speichern wir in der Variablen startZeit die jetzige Zeit als Unix-Timestamp. Diese Funktion haben wir schon einmal im Reaktionsspiel benutzt.
Im nächsten Schritt legen wir die Funktion des Pins fest (Output) und setzten diesen auf LOW. Dadruch wird der Kondensator entladen.
In Zeile 11 wird die Funktion des Kondensators auf Input geändert, weil nun die Zeit gemessen werden soll, bis der Kondensator geladen ist. In Zeile 12 wird dann der Pin solange ausgelesen, bis ein positiver Wert gemessen wird; das heißt in diesem Fall, dass eine Spannug von ca. 2V am Kondesator anliegt.
In Zeile 15 wird die vergangene Zeit, die benötigt wurde um den Kondensator zu laden errechnet und ausgegeben.
In den nächsten Zeilen machen wir nichts anderes, als diese Funktion in das Programm einzubauen. Da die Ladezeit abhängig vom Photowiderstand ist, können wir dadurch Rückschlüsse auf die Helligkeit ziehen.

Mit diesem Wissen könnten wir zum Beispiel unser eigenes Nachtlicht bauen. Alternativ haben wir jetzt auch endlich die Möglichkeit zu testen, ob wir das Licht im Zimmer angelassen haben oder ob das Licht im Kühlschrank wirklich die ganze Zeit brennt 😉