LDR Empfindlichkeit einstellen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich habe drei LDR Sensoren an meinem Pi dran. Wenn ich sie anleuchte oder sie Tageslicht bekommen, zeigen sie auch EIN an. Jetzt habe ich sie an meine Heizungspumpen gebaut, die eine kleine gelbe LED anhaben, wenn sie laufen.

    Leider erkennt der LDR dies nicht richtig und sagt, die Pumpen wären aus, obwohl die LED brennt.

    Kann mir jemand sagen, wie ich die Empfindlichkeit meiner LDR etwas senken kann, so dass es bei wenig Licht schon EIN ist und nur bei Dunkelheit AUS.

    Ich weiß nicht, ob man beim Code =0 AUS und ungleich 0 oder >0 EIN  machen kann.

  • Kannst du den Widerstand des LDR messen (beide Werte - bei gelber LED an und bei gelber LED aus)?

    Dann kann man die Schaltung passend dimensionieren.

    Ist der LDR gut gegen Umgebungslicht abgeschirmt, damit es keine äußeren Einflüsse gibt?

    Hast du den LDR direkt an den GPIO gehängt oder einen Transistor dazwischen? Zeig doch bitte mal, wie du das verschaltet hast.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Eigentlich hat ein LDR nur eine analoge Ausgabe. Man kann das Teil aber auch z.B. mit einem 1µF Kondensator an den RPi anschließen um damit verwertbare Signale zu bekommen.

    Siehe dazu hier: https://gpiozero.readthedocs.io/en/stable/reci…ml#light-sensor

    und hier: https://gpiozero.readthedocs.io/en/stable/api_…ero.LightSensor

  • Hallo,

    Anmerkungen zum Quellcode:

    * Eingerückt wird bei Python mit 4 Leerzeichen, nicht 8 oder was auch immer.

    * Zeile 32 muss falsch sein. Im gezeigten Code würde die einen NameError liefern, weil p1 nicht definiert ist. Und wenn es definiert wäre, würde der Vergleich an der Stelle keinen Sinn machen, weil das Ergebnis des Vergleichs an keinen Wert gebunden wird.

    Zu

    Zitat

    Ich weiß nicht, ob man beim Code =0 AUS und ungleich 0 oder >0 EIN  machen kann.

    Wenn es nur zwei Zustände "ein" und "aus" gibt, dann sollte man das über Bool'sche Wert abbilden, also `True` und `False`. SInniger Weise an = True und aus = False.

    Gruß, noisefloor

    Einmal editiert, zuletzt von noisefloor (6. Mai 2023 um 17:31) aus folgendem Grund: NameError, nicht ValueError

  • Kannst du den Widerstand des LDR messen (beide Werte - bei gelber LED an und bei gelber LED aus)?

    Dann kann man die Schaltung passend dimensionieren.

    Ist der LDR gut gegen Umgebungslicht abgeschirmt, damit es keine äußeren Einflüsse gibt?

    Hast du den LDR direkt an den GPIO gehängt oder einen Transistor dazwischen? Zeig doch bitte mal, wie du das verschaltet hast.

    Nein, ich kann leider nicht die Widerstände messen bei LED ein und aus. Dafür müsste ich das Pumpengehäuse öffnen und dann wüsste ich auch nicht wie ich rankommen kann.

    LDR ist gut abgeschirmt und im Keller ist es meist dunkel.

    LDR hängt direkt an dem PI ohne was dazwischen.

    Eigentlich hat ein LDR nur eine analoge Ausgabe. Man kann das Teil aber auch z.B. mit einem 1µF Kondensator an den RPi anschließen um damit verwertbare Signale zu bekommen.

    Siehe dazu hier: https://gpiozero.readthedocs.io/en/stable/reci…ml#light-sensor

    und hier: https://gpiozero.readthedocs.io/en/stable/api_…ero.LightSensor

    Kann leider den Kondensator nicht tauschen, da dieser bei meinem LDR direkt auf der Platine gelötet ist. War einfacher es so zu bestellen und nicht selber basteln zu müssen.

    * Zeile 32 muss falsch sein. Im gezeigten Code würde die einen ValueError liefern, weil p1 nicht definiert ist. Und wenn es definiert wäre, würde der Vergleich an der Stelle keinen Sinn machen, weil das Ergebnis des Vergleichs an keinen Wert gebunden wird.

    Zu

    Wenn es nur zwei Zustände "ein" und "aus" gibt, dann sollte man das über Bool'sche Wert abbilden, also `True` und `False`. SInniger Weise an = True und aus = False.

    Zeile 32 hast du recht, dass war noch von einem Versuchscode.

    Wäre folgendes richtig?

    Code
    if pump1_status.value:
            print("P1 ist AUS")
            p1 = false
    else:
            print("P1 ist AN")
            p1 = true
  • Hallo,

    Zitat

    Wäre folgendes richtig?

    Programmieren ist nicht raten - probier's aus. Spoiler: du wirst einen NameError, bekommen, weil `true` nicht definiert ist. Die Wahrheitswerte schreibt man in Python am Anfang groß - siehe mein vorheriger Post.

    Zitat

    Nein, ich kann leider nicht die Widerstände messen bei LED ein und aus. Dafür müsste ich das Pumpengehäuse öffnen und dann wüsste ich auch nicht wie ich rankommen kann.

    Nee, hast du falsch verstanden: nicht den Widerstand der LED messen, sondern wie der Widerstand des LDR sich ändert, wenn die LED an geht.

    Gruß, noisefloor

  • Kann leider den Kondensator nicht tauschen, da dieser bei meinem LDR direkt auf der Platine gelötet ist.

    Auf der Platine steht "R 1". Na, wofür steht das große "R" nochmal? >> https://www.elektronik-kompendium.de/sites/grd/0201112.htm ;)

    Da ist also kein Kondensator!

  • Hallo zusammen,

    vielen Dank für eure Hinweise. Hab Widerstand mit Kondensator verwechselt.... :dau1:

    Ich habe jetzt auch mein Python Skipt ein wenig angepasst, hier ein Auszug:

    Es funktioniert auch alles so weit. Nur muss ich leider mit der Lampe richtig auf den Sensor leuchten, damit AN

    ausgeben wird. Die abzufragende LED ist leider etwas zu schwach für ein EIN.

    Hat jemand noch ne Idee, wie ich die Empfindlichkeit erhöhen kann?

  • Hat jemand noch ne Idee, wie ich die Empfindlichkeit erhöhen kann?

    Ja, mit einem 1µF Kondensator! ;) Damit hättest Du eine Art PWM-Signal, welches Du verwerten kannst.

    value
    Returns a value between 0 (dark) and 1 (light).

    Du hättest damit mit z.B. pump1_status.value einen Wert zwischen 0 und 1, den Du auswerten kannst. Also z.B. wenn pump1_status.value größer als 0.1 ist, dann leuchtet die LED / läuft die Pumpe 1.

  • hyle Danke für deine Hilfe.

    Ich habe mir die Values ausgeben lassen. Sie sind bei 0.0.....

    Die Empfindlichkeit scheint nicht hoch genug zu sein. Ich habe aber kein Bock mir jetzt noch nen Kondensator dazwischen zu fummeln.

    Hat jemand ne Idee für einen anderen LRD oder einen anderen Sensor, der empfindlicher ist?

    Oder wie ich meinen LDR empfindlicher machen kann ohne Kondensator....

    Python
    from gpiozero import LightSensor
    
    ldr = LightSensor(27) # Hier muss der korrekte GPIO-Pin angegeben werden
    if ldr.light_detected:
        print("Lampe an")
    else:
        print("Lampe aus")
    print("Aktueller Wert des Lichtsensors: ", ldr.value)
  • Dein Bauteil ist nichts anderes als ein Spannungsteiler, bei dem einer der Widerstände variabel ist (nämich der LDR), der andere ist fix (R 103 = 10 KOhm). Da die LED relativ dunkel ist, liegt der Widerstand des LDR sowol bei ein- als auch bei ausgeschalteter LED sehr hoch und der Spannugsteiler liefert dir immer low als Ausgangswert. Du müsstest den Festwiderstand an die Kennlinie des LDR und die Helligkeit der LED anpassen. Um das korrekt machen zu können, müsstest du (wie oben bereits angesprochen) die beiden Widerstandswerte (gelbe LED an und aus) direkt an den beiden Anschlüssen des LDR messen. Der Rest ist ein wenig Rechnerei und einlöten eines anderen Widerstandes oder noch besser eines Potis. Alternativ kannst du auch versuchen, gleich ein Poti an Stelle des Festwiderstandes zu setzen und damit die Empfindlichkeit einzustellen. Da würde ich es mal mit 100 KOhm versuchen.

    Falls es auf dem Weg gar nicht geht (weil vielleicht die LED zu dunkel ist, um mit der Spannungsteilertechnik hin zu kommen, kannst du ein einstellbares LDR-Modul verwenden. Die haben ein Trimmpoti zum Einstellen und einen Operationsverstärker, damit auch kleine Helligkeitsunterschiede sauber als 1/0-Signal ausgegeben werden. Sowas hier.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (6. Mai 2023 um 23:11)

  • Beitrag von shgmongo (6. Mai 2023 um 23:05)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!