Analoge Werte Digital Messen

Analoge Werte Digital Messen Titelbild

Folgende Teile braucht ihr für die Anleitung

Jugend Programmiert Starterkit2.1 Produktbild

Jugend Programmiert Starterkit2.1 | 39.95€

24 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 so beim Raspberry Pi messen und müssen uns eines kleinen Tricks mit einem Kondensator bedienen. Doch zuerst wofür brauchen wir das überhaupt?

Photowiderstand show Kondensator show

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-Ω . Umso heller es wird, umso geringer wird der Widerstand. Alles was uns jetzt fehlt ist noch ein Kondensator. Denn ein Kondensator kann Spannung speichern und wieder abgeben. Du kannst dir einen Kondensator wie sehr kleine Akkus vorstellen, die du aufladen kannst und dann als Spannungsquelle wieder entladen kannst, aber diese Kondensatoren sind sehr schnell wieder entladen. Dazu kommt das sie sich sofort versuchen zu entladen wenn sie voll gefüllt sind. Die Speichergröße eines Kondensators wird in Farad oder Kurz F angegeben.

enter image description here

Anschlüsse Pi Anschlüsse Breadboard
3,3V Photowiderstand
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 Anzahl der Sekunden die es braucht um den Kondensator aufzuladen. Wenn du den Kondensator mit deinem Finger verdunkelt, das Licht aus oder an schaltest 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 Heißt umso größer der Widerstand oder der Kondensator ist, umso länger dauert das aufladen. In diesem Fall ist die Kapazität des Kondensators ein fester Wert, die Widerstandskraft des Widerstandes ist aber 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

Das Programm erklärt. In Zeile 1 bis 4 werden nur 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 ein Parameter übergeben werden muss. Das ist der Pin, an dem wir später messen werden. In Zeile 7 speichern wir in der Variablen startZeit die jetzige Zeit als Linux Timestamp. Diese Funktion haben wir schon einmal im Reaktionsspiel benutzt. Im nächsten Schritt legen wir die Funktion des Pins fest. In diesem Fall soll es ein Output sein und wird dann in Zeile 9 auf Low gesetzt. Mit diesen Befehlen wird der Kondensator, wenn er geladen war, wieder entladen. In Zeile 11 wird nochmal die Funktion auf ein Input geändert, weil wir ja wissen müssen, wann der Kondensator vollgeladen ist. In Zeile 12 wird dann der Pin solange ausgelesen, bis ein hoher Stromwert auf dem Pin gemessen werden kann. Das heißt, in diesem Fall ist die Spannung im Kondensator so hoch das es die 2V Marke überschreitet. In Zeile 15 wird dann die Zeit vom kompletten Entladen bis der Kondensator wieder geladen ist zurück gegeben. Dazu nehmen wir einfach nur die Startzeit und rechnen sie gegen die Zeit beim Rückgabewert. Das geht, weil diese Zeile erst dann aufgerufen wird, wenn die vorherige while-Schleife nicht mehr stimmt, also auf dem Pin eine Spannung liegt. In den nächsten Zeilen machen wir nichts anderes, als diese Funktion in das Programm einzubauen. Zusammen gefasst wird zuerst der Kondensator entleert. Danach wird dann vom Programm nur noch die Zeit gemessen, die der Kondensator braucht, um gefüllt zu werden. Da dieses abhängig von dem Photowiderstand ist, können wir dadurch einen Wert für die Helligkeit ermitteln. Wichtig ist nochmal zu sagen, dass dieser Wert keiner Lichteinheit entspricht, wir können ihn aber benutzen, um ungefähr zu sagen, wie hell es ist.

Mit diesem Wissen könnten wir beispielsweise unser eigenes Nachtlicht bauen mit einer leuchtenden LED, die nur dann anfängt zu leuchten, wenn wir das Lich ausgemacht haben. Alternativ haben wir jetzt auch endlich die Möglichkeit zu testen, ob wir das Lich im Zimmer angelassen haben oder ob das Licht im Kühlschrank wirklich die ganze Zeit brennt ;) Es gibt aber Limitierungen und mit dieser Methode lassen sich leider keine analoge Sensoren auslesen.

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!