Hell/Dunkel digital erkennen

OP #5197452
Lesenswert?

Hi,

ich möchte mit einem ESP8266 hell und dunkel erkennen können. Leider hat 
der verwendete ESP-01 keinen ADC (*). Ich hab auch nur noch einen pin 
frei, sodass I2C-Lösungen auch nicht in Frage kommen.
Der Eingang braucht >2,4V für ein sauberes "1" und <0,8V für ein "0". 
Meine Versuche mit LDR und Spannungsteiler haben dann auch nicht 
funktioniert, weil der Bereich dazwischen zum flackern des Signals 
führt.
Die Schaltung braucht nicht schnell zu sein und Zwischenwerte sind auch 
uninteressant. Die Schaltschwelle müsste nur einstellbar sein.

Gelesen habe ich unter anderem:
https://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor
Beitrag "Leicht erhältlicher digitaler Helligkeitssensor"
Beitrag "Welcher Fotowiderstand ???"
Beitrag "Verständnisfrage Fototransistor an µC"

Eine Lösung habe ich für meine Anwendung dabei nicht gefunden (oder 
nicht verstanden).

Danke für eure Tipps und Hinweise!



(*) er hat schon einen - den nach zu rüsten übersteigt aber meine 
Lötfertigkeiten
Gast #5197465
Lesenswert?

Dein Ansatz mit LDR und Spannungsteiler ist ja nicht schlecht - nur, wie 
du schon selber erkannt hast, brauchst du irgendwas, was "hart" schaltet 
und nicht "flackert".

Such mal hier nach Schmitt-Trigger, an den Eingang klemmst du deinen 
Spannungsteiler, der Ausgang kommt an deinen Logikeingang.
Gast #5197467
Lesenswert?

Das Zauberwort heißt Komparator. :-)

Entweder aus zwei Transistoren oder besser einem OPA oder eben noch 
besser einem 'richtigen' Komparatorbaustein.
Die Schaltschwelle ist einstellbar, weil sinnvollerweise der LDR in 
Reihe zu einem Widerstand liegt, den man verstellbar ausführen kann.
Der Abgriff zwischen R und LDR ist dann das Eingangssignal des 
Komparators.
#5197537
Lesenswert?

Eine Möglichkeit wäre One-Wire.

z.B.
DS28E17 (One-Wire <-> I2C Master bridge)

oder

DS2438 (ist zwar eigentlich zur Batterieüberwachung gedacht, hat aber 
auch einen ADC für andere Nutzungen an Bord)

oder

da I2C offenbar ausfällt: evtl. hast du ja bereits einen SPI Bus in 
deinem System, und kannst den freien Pin als CS# Signal für einen SPI 
ADC nutzen.

oder

einen Voltage to Frequency converter (könnte z.B. aus einem NE555 
aufgebaut werden, oder 74xx123 bei 3.3V), und dann die am IO anliegende 
Frequenz messen.
#5197546
Lesenswert?

Hi

Wenn schon externe Bauteile, dann würde ich doch einen ASM (astabilen 
Multivibrator) aufbauen und hätte somit einen quasi-Analogwert.

Oder einen anderen µC vorschalten und dann diese Beiden über diese eine 
Leitung miteinander schwätzen lassen, 1-wire wäre da möglich, da so 
Beide Master sein können und es bestenfalls Datensalat gibt, wenn Beide 
sich nicht zum Slave machen lassen wollen, da der Bus extern hochgezogen 
wird und nur aktiv auf LOW geschaltet wird.

MfG

... zu langsam
#5197566
Lesenswert?

Nochmal zur Idee die Lichtstärke in eine Frequenz zu wandeln:

Der einfachste Weg wäre ein invertierender Schmitt-Trigger, gibts dann 
auch schön als kleines SOT32.
Den LDR vom Ausgang zum Eingang, und am Eingang noch ein Kondensator 
(z.B. 100nF) zu GND.
Fertig ist der lichtgesteuerte Oszillator.
#5197572
Lesenswert?

Hi

Hier geht es doch darum, mit einem freien Digital-Pin einen analogen 
Wert einzulesen.
Weshalb 1-Wire ausgeschlossen wurde, erschließt such mir nicht - einen 
Zentimeter neben dem aktuellen µC dürften sich Dessen 
Versorgungsspannung noch abgreifen lassen, womit ist wirklich nur diesen 
einen Draht brauche.
Und anders als z.B. ein ASM, Dessen Pulsweite/Frequenz/Whatever ich 
einlesen und auswerten muß, kann ich mit ähnlichem Bauteilaufwand (~ 1µC 
in beliebigem Gehäuse und dem LDR, wenn ich einen Pin mit PullUp als 
Spannungsteiler missbrauche) bekomme ich wesentlich Mehr, als nur die 
Möglichkeit EINEN Sensorwert noch in diesen µC rein zu bekommen.

Klar kann ich den µC oder den alternativ genannten 4-Kerner einsparen, 
wenn ich noch größer baue und die aktuellen Werte online abfrage - 
zumindest, wie hell es Theoretisch gerade hier ist, müsste ich auch ganz 
ohne diesen Pin feststellen können: 1 freier Pin über, mit Dem wir jetzt 
immer noch was anstellen können.

Problem: LDR-Wert digital einlesen
Lösung: ASM oder vorgesetzter µC

Ist doch gar nicht so schwer wenn man Mal NACHdenkt ;)

MfG
#5197578
Lesenswert?

Patrick J. schrieb:
> Hier geht es doch darum, mit einem freien Digital-Pin einen analogen
> Wert einzulesen.

Eigentlich nicht. Es geht darum, eine ggf. auch manuell per Poti 
einstellbare Helligkeitsschwelle zu erkennen, mit etwas Hysterese damit 
es nicht flackert.

ADC-Lösungen und Licht/Frequenz-Wandler sind aber ulkigerweise leichter 
fix und fertig zu finden und die Schaltschwellen sind dann 
softwareseitig definierbar.
Gast #5197586
Lesenswert?

Markus M. schrieb:
> Leider hat der verwendete ESP-01 keinen ADC (*). Ich hab auch nur
> noch einen pin frei, sodass I2C-Lösungen auch nicht in Frage kommen.

Verlasse deine Denk-Einbahnstraße.

Du könntest die Wahl zu messenden Größe, die Auswahl des µC-Boards oder 
die Belegung der anderen Pins überdenken.

Wenn du unbedingt mit einem Pin auskommen möchtest, könntest du statt 
einer Spannungsmessung eine Zeitmessung machen. Schalte parallel zu 
deinem LDR einen Kondensator. Den Kondensator lädst du auf, indem du den 
Pin kurz auf Ausgang mit High-Pegel setzt. Dann konfigurierst du ihn als 
Eingang und misst aus, wie lange der Kondensator braucht, um sich über 
den LDR zu entladen. Und schon hat du - auch mit nur einem Pin - ein Maß 
für die Helligkeit. Ohne vernünftigen Komparator ist das sicher keine 
Präzisionsmessung, aber für deine Zwecke könnte das reichen.
Gast #5197598
Lesenswert?

Du kannst einen Kondensator über einen LDR aufladen und messen wie lange 
das dauert.
Ich würde den io Pin als Open-drain Output konfigurieren. Mit Low 
würdest du den Kondensator entladen. Mit High beginnt die Messung.

Schalte zur Strombegrenzung 100 Ohm in Reihe zum Kondensator.

Nachtrag: Oh misst, Wolfgang hat ja schon fast das selbe geschrieben.
OP #5197601
Lesenswert?

Erstmal Danke an alle, die geantwortet haben!


Der NE555 braucht 5V und ich hab nur 3,3V. Das geht leider nicht. Es 
gibt allerdings den 7555 der mit 3,3V läuft.

Der TSL235R hat eine Ausgangsfrequenz von 250kHz. Dafür ist der Eingang 
an ESP zu langsam.

Schmitt-Trigger ist eine gangbare Lösung. Mit Transistoren sind das aber 
schon eine Menge Bauteile. Mit einem OPV sieht das recht einfach aus. 
Ich kenn mich mit den Teilen aber gar nicht aus und habe auch nichts 
fertiges gefunden.

Die Idee mit dem vorgesetzten µC ist auch nicht schlecht. Einen ATTiny85 
habe ich da. Der hat einen ADC und läuft auch mit 3,3V. Da kann ich 
wieder den LDR & Spannungsteiler nehmen und mir die Hysterese 
programmieren.

Die Idee von @wolfgang finde ich aber am besten. Zu dem LDR nur ein 
weiteres Bauteil und der Rest Software. Tolle Idee.


Nochmal Danke an alle!
#5197613
Lesenswert?

Markus M. schrieb:
> Der NE555 braucht 5V und ich hab nur 3,3V. Das geht leider nicht. Es
> gibt allerdings den 7555 der mit 3,3V läuft.

Oder TLC555.

> Der TSL235R hat eine Ausgangsfrequenz von 250kHz. Dafür ist der Eingang
> an ESP zu langsam.

Der TSL230R hat einen per Pins konfigurierbaren Teiler und eine per Pins 
einstellbare Empfindlichkeit.

Welchen Frequenzbereich kann der ESP denn messen oder zählen?

> Die Idee von @wolfgang finde ich aber am besten. Zu dem LDR nur ein
> weiteres Bauteil und der Rest Software. Tolle Idee.

Nur hat der ESP keine klare Schaltschwelle. Das Verhalten im 
Übergangsbereich ist undefiniert, weshalb das ganze u.U. auch deutlich 
temperaturabhängig werden könnte.
Gast #5197623
Lesenswert?

Markus M. schrieb:
> Die Idee von @wolfgang finde ich aber am besten. Zu dem LDR nur ein
> weiteres Bauteil und der Rest Software. Tolle Idee.

Den von Stefan Us vorgeschlagenen Widerstand zur Ladestrombegrenzung 
solltest du schon auch noch gönnen ;-)

A. K. schrieb:
> Der ESP hat m.W. keinen Schmitt-Trigger am Eingang. Das macht es zur
> Glücksache, ob das einigermassen gut funktioniert.

Nein, den Schmitt-Trigger braucht man nur, damit die Anzeige im 
kritischen Helligkeitsbereich nicht dauernd zwischen "Hell" und "Dunkel" 
hin und her kippt. Bei der Zeitmessung kann man die Zeiten für die 
Entladedauer so nehmen, wie sie kommen und macht den Schmitt-Trigger in 
Software.
Gast #5197637
Lesenswert?

A. K. schrieb:
> Das Verhalten im Übergangsbereich ist undefiniert, weshalb das
> ganze u.U. auch deutlich temperaturabhängig werden könnte.

Deswegen sage ich, dass das keine Präzisionsmessung wird. Aber um zu 
erkennen, ob es Tag oder Nacht ist, reicht es locker.
Es kommt einfach drauf an, wie die geforderte Genauigkeit aussieht, d.h. 
welche Erkennungstoleranzen man sich für die Schwellwerte beim Übergang 
Hell-undefiniert-Dunkel in der Anwendung genehmigen kann.
Eine LDR-Kennlinie hat eine ziemliche Dynamik.
#5197661
Lesenswert?

Markus M. schrieb:
> Schmitt-Trigger ist eine gangbare Lösung. Mit Transistoren sind das aber
> schon eine Menge Bauteile. Mit einem OPV sieht das recht einfach aus.
> Ich kenn mich mit den Teilen aber gar nicht aus und habe auch nichts
> fertiges gefunden.

Für einen Oszillator muss es ein Schmitt-Trigger mit Inverter sein.
Da gibt es jede Menge Auswahl (74xx14), auch als Single-Gate,
z.B. MC74HC1G14 oder NC7WZ14P6X...
Im Gegensatz zum Aufbau mit einem Op-Amp benötigen diese Teile keine 
weiteren externen Bauteile (ausser 100nF an den Versorgungspins).
Angehängte Dateien:
Gast #5197932
Lesenswert?

Vka schrieb:
> Durch die Referenzquelle bleibt der
> Schaltpunkt präzise. Der Spannungsbereich sollte auch passen.

Die ganze Präzision der Referenzspannungsquelle nützt aber nur etwas, 
wenn die Spannung für den LDR aus einer genauso stabilen Quelle kommt, 
da beim einfachen Spannungsteiler/Kondensatorentladung der Wert der 
Versorgungsspannung als Faktor in der gemessenen Ausgangsspannung mit 
drin steckt. (ratiometrisches Messprinzip)
Gast #5197970
Lesenswert?

batman schrieb:

> Das heißt dann schlicht, daß es nicht eindeutig hell oder dunkel ist.
> Ein anderer Sensor wird das nicht ändern.

Genau. Wohl aber könnte es ein richtiger Programmierer sehr leicht 
ändern. Einfach einen Software-Tiefpass mit passender Zeitkonstante, 
gefolgt von einer Umkehrhysterese passender Größe. Das sind zusammen in 
C nur etwa 20 Zeilen Code, in Assembler auch nicht viel mehr. Und man 
kann damit wohl fast jedes gewünschte Verhalten für das Problem 
Hell/Dunkel-Erkennung erschlagen.

Man muss halt einfach nur tatsächlich programmieren können, mehr 
nicht...
Gast #5198216
Lesenswert?

#5198350
Lesenswert?

Wolfgang schrieb:
> A. K. schrieb:
>> Der ESP hat m.W. keinen Schmitt-Trigger am Eingang. Das macht es zur
>> Glücksache, ob das einigermassen gut funktioniert.
>
> Nein, den Schmitt-Trigger braucht man nur, damit die Anzeige im
> kritischen Helligkeitsbereich nicht dauernd zwischen "Hell" und "Dunkel"
> hin und her kippt. Bei der Zeitmessung kann man die Zeiten für die
> Entladedauer so nehmen, wie sie kommen und macht den Schmitt-Trigger in
> Software.

Ein Schmitt-Trigger am Eingang ist auch für eine präzisere Messung über 
die Entladezeit sinnvoll. Ein Singlegate wie MC74HC1G14 ist problemlos 
einzubauen.
Gast #5198376
Lesenswert?

Joe F. schrieb:
> z.B.
> DS28E17 (One-Wire <-> I2C Master bridge)
>
> oder
>
> DS2438 (ist zwar eigentlich zur Batterieüberwachung gedacht, hat aber
> auch einen ADC für andere Nutzungen an Bord)

Patrick J. schrieb:
> Wenn schon externe Bauteile, dann würde ich doch einen ASM (astabilen
> Multivibrator) aufbauen und hätte somit einen quasi-Analogwert.

Sagt mal, lest ihr auch was der TO will? Er möchte bei einer bestimmten 
Helligkeit ein Signal auslösen und das war's. Irgendwelche speziellen 
Protokolle (I2C) fallen aus, weil er das nicht möchte. Er hat es doch im 
Eröffnungspost genau beschrieben.

Für so etwas nimmt man einen Schmitt-Trigger oder Komperator. Den 
Schmitt-Trigger baut man entweder diskret auf (2 Transistoren)oder man 
nimmt was fertiges wie NE555 oder Typen aus der EX-DDR wie A902, A302 
(TCA345A) oder A301. Ein 74LS14 (Gatter mit Schmitt TRigger Eingang) 
bzw. der entsprechende CMOS-Typ sollten auch gehen.
Oder man nimmt einen Komperator wie z.B. LM311 bzw. einen OPV den man 
als Komperator beschaltet.

@TO
Google mal nach Dämmerungsschalter, da wirst Du definitiv fündig.
#5198384
Lesenswert?

Hi

Zeno schrieb:
> Sagt mal, lest ihr auch was der TO will?

Doch, ab und zu lesen 'wir' hier auch, was 'die Anderen' so absondern ;)
Wenn Du meinen Post komplett gelesen hättest, wäre Dir vll. aufgefallen, 
daß mit ähnlich geringem Bauteilaufwand wesentlich MEHR möglich ist.
Nur nebenbei angemerkt.

So, Du schlägst einen Komparator vor - ok, wird funktionieren und 
liefert ein Signal 'dunkel/hell'.

Meine Idee, einen AVM davor zu setzen liefert einen analogen Wert, 
worauf ich im µC beliebig reagieren kann - ich hätte somit eine durch 
den Anwender verstellbare Schwelle - bei Dir geht Das durch externe 
Hardware oder Umlöten.

War Dir vll. nicht ganz klar, dem TO vll. aber schon, da Er sich einen 
Kopf macht, was Er erreichen will.

Ich werde 'Es' aber auch überleben, wenn der TO Deinen Vorschlag 
umsetzt, da keine im µC anpassbare Schaltschwelle benötigt wird, für I²C 
kein Platz mehr vorhanden ist oder Ihm die Komparator-Lösung einfach am 
Besten gefällt.

MfG
#5198385
Lesenswert?

Falls du ein einfaches Modul suchst:
https://www.aliexpress.com/item/Photosensitive-Sensor-Module-Light-Detection-Module-for-Arduino/32248249658.html

Da ist genau das drauf: Fotowiderstand + Schwellwert-Poti + Komparator.

Eine bessere Lösung wäre allerdings ein Sensor, der dir direkt den 
digitalen Wert liefert, weil du dann den Schwellwert in Sofware 
verändern kannst.

z..b MAX44009 per I2C:
https://www.aliexpress.com/item/MAX44009-Ambient-Light-Sensor-Module-with-4P-Pin-Header/32761901963.html
Gast #5198387
Lesenswert?

Sind die Schaltschwellen eines 74HC14 Schmitt-Triggers nicht genau so 
schwammig definiert, wie die Schaltschwelle eines CMOS Eingangs ohne 
Schmitt-Trigger?

Genaueres Timing erreicht man IMO nicht, indem man einen einfachen CMOS 
Eingang durch einen CMOS Schmitt-Trigger ersetzt.

Das Einzige, was der Schmitt-Trigger sicherstellt, ist: Dass er nicht 
flattert, wenn die Spannung in der Mitte zwischen High und Low verweilt.

Dieses Flattern wäre zudem nicht weiter schlimm, das kann man per 
Software genau so gut heraus filtern, wie das Prellen eines Tasters. Ich 
halte es auch für unwahrscheinlich, denn die Spannung wird je nach 
Schaltung kontinuierlich steigen oder fallen, nicht verweilen.

Abgesehen davon ist "genaues Timing" gar nicht nötig. Blitze haben es 
nämlich an sich, sehr viel heller zu sein, als das Umgebungslicht. Feine 
Helligkeitsunterschiede muss man hier gar nicht erkennen können.
1
              100r          100nF
2
I/O Pin o-----[===]----+-----||------|
3
                       |
4
                       +---[===]-----|
5
                            LDR

1) Pin auf High setzen -> Kondensator wird geladen
2) ein bisschen warten -> Kondensator ist voll
3) Pin als Eingang konfigurieren -> Kondensator entlädt sich
4) Warten, bis der Eingang auf Low liegt

Die Zeit zwischen 3) und 4) gibt an, wie hell es ist.
#5198392
Lesenswert?

Stefan U. schrieb:
> Sind die Schaltschwellen eines 74HC14 Schmitt-Triggers nicht genau so
> schwammig definiert, wie die Schaltschwelle eines CMOS Eingangs ohne
> Schmitt-Trigger?

Gugst du Dabla.

Stefan U. schrieb:
> Dieses Flattern wäre aber nicht weiter schlimm, das kann man per
> Software genau so gut heraus filtern,

Aha, Analogen Mist am Digitaleingang, per SW Filtern.

Wenn bereits alles durchgekaut, wird's SO Mittags schräg. ;)
Gast #5198407
Lesenswert?

Patrick J. schrieb:
> Meine Idee, einen AVM davor zu setzen liefert einen analogen Wert,
> worauf ich im µC beliebig reagieren kann

Ich bestreite nicht das Deine Lösung universeller ist.

Aber das ist nicht das was der TO wollte. Er wollte eine einfache 
Ja/Nein bzw. Hell/Dunkel Aussage (s. Zitat)

Markus M. schrieb:
> Die Schaltung braucht nicht schnell zu sein und Zwischenwerte sind auch
> uninteressant. Die Schaltschwelle müsste nur einstellbar sein.

Genau für so etwas nimmt man einen Schmitt-Trigger oder Komperator. Um 
Deinen Vorschlag im Controller auszuwerten muß er halt noch einen Zähler 
aufsetzen und das Zählergebnis auswerten. Kann man sicher so machen und 
wenn's dem TO gefällt darf er das gern auch so machen, aber bei den 
gestellten Anforderungen halte ich dies Overkill.
Bei der "einfachen" Lösung bedarf es nur einer Abfrage ob der Eingang 1 
oder 0 ist.
Er kann ja sogar seine Schaltung weiter benutzen und muß nur zwischen 
LDR/Poti und µC Eingang ein Schmitt-Trigger  Gatter setzen, weil genau 
dieses das Flattern zwischen LOW und HIGH verhindert. Um möglichst 
steile Flanken zu erhalten kann er ja ein zweites Gatter nachschalten, 
da im 74HC14 genügend enthalten sind.
Gast #5198418
Lesenswert?

Stefan U. schrieb:
> Das Einzige, was der Schmitt-Trigger sicherstellt, ist: Dass er nicht
> flattert, wenn die Spannung in der Mitte zwischen High und Low verweilt.

Genau darum geht es doch.
ER muß sich halt nur entscheiden welche Schwelle für ihn wichtig ist, 
also Hell-->Dunkel oder umgekehrt. Entsprechend muß er die 
Schaltschwelle einstellen.

Das softwaremäßige Entprellen scheidet an dieser Stelle meines Erachtens 
aus, da die Hell/Dunkel Wechsel sehr langsam verlaufen können. Somit 
haben wir das Problem das die Spannung sehr lange zwischen 1 und 0 
verweilen kann und der Pegel, digital gesehen, somit unbestimmt ist.

Vielleicht schreibt der TO mal was er genau vor hat, dann könnte man 
gezielter helfen.
Gast #5198426
Lesenswert?

Flattert es denn?

Und wenn schon, warum soll man das jetzt nicht per Software filtern? 
Wann immer hier jemand Taster extern entprellt wird er hier übelst 
verhöhnt, aber jetzt soll es auf einmal nötig sein? Da kann ich nur den 
Kopf schütteln.

> Aha, Analogen Mist am Digitaleingang, per SW Filtern.

Ja, das meine ich 100% ernst.

> Gugst du Dabla.

Da steht: Bei 4,5V Versorgungsspannung ist die positive Schwelle 
zwischen 1,7 und 3,15V. Die negative Schwelle ist zwischen 0,9 und 2V.

Also alles andere als klar definiert. Da kann ich auch gleich auf den 
Schmitt Trigger verzichten. Kalibrieren muss ich ohnehin, da jeder LDR 
ein bisschen anders ist.
#5198621
Lesenswert?

Ich finde ja die Lösung von "Stefan Us" am charmantesten.
Beitrag "Re: Hell/Dunkel digital erkennen"

100R ist vielleicht ein bisschen wenig (fordert 33mA vom Pin), aber mit 
330R sollte das genauso gut funktionieren.

Die Vorteile liegen auf der Hand:
- die wenigen benötigten Standard-Bauteile hat jeder im Regal rumliegen
- man braucht kein Poti, die Schaltschwelle kann einfach in Software 
konfiguriert werden - also wenn gewünscht auch "von remote"

Den größten Vorteil sehe ich allerdings darin, dass diese Lösung sehr 
stromsparend ist, denn der Kondensator muss nur alle paar Sekunden für 
eine Messung einmal aufgeladen werden. Kann sein, dass das in diesem 
Fall keine Rolle spielt, ich werde mir diese Lösung aber für 
batteriebetriebene Geräte im Hinterkopf behalten.
Gast #5198627
Lesenswert?

Jobst Q. schrieb:
> Ein Schmitt-Trigger am Eingang ist auch für eine präzisere Messung über
> die Entladezeit sinnvoll.

Nein, ein Schmitt-Trigger hat zwei verschiedene Schaltschwellen, die 
einer präzisen Unterscheidung zweier Zustände genau entgegen wirken. Ein 
Schmitt-Trigger verhindert Flackerei nahe der Schaltschwelle, wenn es 
eben nicht so genau auf den Wert, sondern mehr auf stabilen 
Ausgangszustand an kommt.

Für eine präzise Entscheidung bräuchte man einen Komparator mit einer 
Schaltschwelle, die über Spannungsteiler aus der selben Spannung wie die 
Speisung vom LDR abgeleitet ist.
OP #5198654
Lesenswert?

Danke für das kontinuierliche an meiner Frage :)

Um die zu präzisieren: ich möchte wissen, ob im Keller das Licht brennt. 
Das ist entweder an oder aus, also interessieren mich Grauwerte nicht. 
Daher ist auch die Geschwindigkeit nicht wichtig.
Den ESP01 habe ich gewählt, weil er schon da ist. :)


Stefan U. schrieb:

>               100r          100nF
> I/O Pin o-----[===]----+-----||------|
>                        |
>                        +---[===]-----|
>                             LDR
>
> 1) Pin auf High setzen -> Kondensator wird geladen
> 2) ein bisschen warten -> Kondensator ist voll
> 3) Pin als Eingang konfigurieren -> Kondensator entlädt sich
> 4) Warten, bis der Eingang auf Low liegt
>
> Die Zeit zwischen 3) und 4) gibt an, wie hell es ist.

Wenn ich die Schaltung richtig verstehe entlädt sich der Kondensator in 
3) über den 100R Widerstand da der LDR meist im hohen kOhm Bereich ist. 
Dann wäre die gemessene Zeit unabhängig von der Helligkeit.
Wäre es da nicht sinnvoller, den LDR anstatt des 100R einzusetzen? Das 
Laden dauert dann zwar länger, aber das ist unerheblich.
Gast #5198664
Lesenswert?

Markus M. schrieb:
> Um die zu präzisieren: ich möchte wissen, ob im Keller das Licht brennt.

Aha. Nehmen wir an, dass der LDR das erkannt hat und das Signal geht auf 
einen Transistor (oder Schmitt-Trigger oder Komparator oder...). Wie 
bekommst du diese Info nach oben, in deine Wohnung?
Gast #5198700
Lesenswert?

Wenn du den LDR an die Position des 100 Ohm Widerstandes setzen würdest, 
müsstest du den I/O Pin als Ausgang mit LOW Pegel schalten, damit der 
Kondensator entladen wird. Und womit misst du dann die Spannung AM 
KONDENSATOR?
#5198733
Lesenswert?

Wolfgang schrieb:
> Jobst Q. schrieb:
>> Ein Schmitt-Trigger am Eingang ist auch für eine präzisere Messung über
>> die Entladezeit sinnvoll.
>
> Nein, ein Schmitt-Trigger hat zwei verschiedene Schaltschwellen, die
> einer präzisen Unterscheidung zweier Zustände genau entgegen wirken. Ein
> Schmitt-Trigger verhindert Flackerei nahe der Schaltschwelle, wenn es
> eben nicht so genau auf den Wert, sondern mehr auf stabilen
> Ausgangszustand an kommt.

Ein normaler Digitaleingang hat dagegen überhaupt keine richtige 
Schaltschwelle, ist ja auch nicht für sich langsam ändernde 
Eingangsspannungen gedacht. Ein Schmitt-Trigger Eingang dagegen schon. 
Er macht erst aus dem analogen ein digitales Signal.

>
> Für eine präzise Entscheidung bräuchte man einen Komparator mit einer
> Schaltschwelle, die über Spannungsteiler aus der selben Spannung wie die
> Speisung vom LDR abgeleitet ist.

Ich sag ja nicht, dass ein Schmitt-Trigger wie der MC74HC1G14 das 
präzisest mögliche ist, aber besser als ein gewöhnlicher Digitaleingang 
ist er allemal. Die Schwellen und die Hysterese sind übrigens fast 
linear von der Betriebsspannung abhängig. Ein Oszillator damit braucht 
nur den LDR und den Kondensator und ist für den Zweck mehr als 
ausreichend.
Gast #5198772
Lesenswert?

> besser als ein gewöhnlicher Digitaleingang ist er allemal.

Ich schlage dem TO vor, es einfach auszuprobieren. Das bringt mehr, als 
Klugscheißern (ich schließe mich da ein) beim Streiten zuzuhören.

> Die Schwellen und die Hysterese sind übrigens fast
> linear von der Betriebsspannung abhängig.

Das trifft auch auf andere CMOS Eingänge zu.

> Ein Oszillator

Gutes Stichwort. Die üblichen CMOS Oszillator Schaltungen nutzen 
Inverter, nicht Schmitt Trigger. Komisch, was?
Gast #5198808
Lesenswert?

Stefan U. schrieb:
> Wann immer hier jemand Taster extern entprellt wird er hier übelst
> verhöhnt, aber jetzt soll es auf einmal nötig sein? Da kann ich nur den
> Kopf schütteln.

Es geht hier nicht um das Entprellen eines Tasters!

Hier geht es um ein analoges Signal welches digital ausgewertet werden 
soll und zwar in der Art, daß ab einem bestimmten Pegel eine 1 bzw. 
unter diesem Pegel eine 0 kommen soll. Das Signal des LDR flattert 
(prellt) auch nicht sondern es bewegt sich zu langsam durch den Bereich 
zwischen 0 und 1 bzw. umgekehrt. Was flattert ist letzendlich die 
Auswertung des Signalpegels durch den µC da selbiger nicht weis was er 
mit einem Signal zwischen 0,8V und 2V an seinen Eingängen machen soll. 
In der TTL-Technik nannte man das den verbotenen Bereich der möglichst 
schnell durchlaufen werden soll, da sonst Instabilitäten auftreten 
konnten, weil eine Entscheidung 1 oder 0 in diesem Bereich nicht möglich 
ist.
Um dennoch saubere Schaltflanken zu bekommen wurde vor 83 Jahren von 
einem gewissen Herrn Schmitt der nach ihm benannte Trigger erfunden und 
seit dem auch für genau solche Zwecke angewandt.

Stefan U. schrieb:
> Da steht: Bei 4,5V Versorgungsspannung ist die positive Schwelle
> zwischen 1,7 und 3,15V. Die negative Schwelle ist zwischen 0,9 und 2V.
Die genau Schwelle spiel doch in diesem Zusammenhang überhaupt keine 
Rolle. Dafür ist ja in der Schaltung das Poti da damit man das 
einstellen kann wie man es wünscht. Die von Dir genannten Werte 
wiederspiegeln doch lediglich die Exemplarstreuungen der IC's. Da der TO 
den IC vermutlich nicht nach jedem Schaltvorgang austauschen wird, 
bleibt die Schwelle doch konstant und darauf kommt es an.

Wenn dem TO die Hysterese zu groß ist muß er halt einen Komperator mit 
OPV aufbauen, was ja keinen nennenswerten Mehraufwand darstellt. Dann 
gehts feinfühliger.

Auch wenn wir hier im µC Forum sind muß doch nicht jede Aufgabe mit 
einem µC erledigt werden. Die einfachen LÖsungen sind meist die besten 
und zuverlässigsten.
Gast #5198815
Lesenswert?

Wolfgang schrieb:
> Nein, ein Schmitt-Trigger hat zwei verschiedene Schaltschwellen, die
> einer präzisen Unterscheidung zweier Zustände genau entgegen wirken. Ein
> Schmitt-Trigger verhindert Flackerei nahe der Schaltschwelle, wenn es
> eben nicht so genau auf den Wert, sondern mehr auf stabilen
> Ausgangszustand an kommt.
>
> Für eine präzise Entscheidung bräuchte man einen Komparator mit einer
> Schaltschwelle, die über Spannungsteiler aus der selben Spannung wie die
> Speisung vom LDR abgeleitet ist.

Sag ich doch.

Wenn der TO mal schreiben würde was er genau will, dann wäre es 
einfacher zu entscheiden Schmitt-Trigger, Komperator oder doch lieber 
U/f-Wandler oder .....
Gast #5198817
Lesenswert?

Markus M. schrieb:
> Um die zu präzisieren: ich möchte wissen, ob im Keller das Licht brennt.
> Das ist entweder an oder aus, also interessieren mich Grauwerte nicht.
> Daher ist auch die Geschwindigkeit nicht wichtig.
> Den ESP01 habe ich gewählt, weil er schon da ist. :)

Ah Du hast es ja schon geschrieben. In dem Falle nimmt man einen 
Schmitt-Trigger, alles andere ist Overkill.
Gast #5198823
Lesenswert?

Captain Future schrieb:
> Aha. Nehmen wir an, dass der LDR das erkannt hat und das Signal geht auf
> einen Transistor (oder Schmitt-Trigger oder Komparator oder...). Wie
> bekommst du diese Info nach oben, in deine Wohnung?

Das ist doch erst mal wurscht.

@TO
Nimm Deinen LDR und schalte ein Poti dazu in Reihe, das ganze zwischen 
+3V und GND. Der Schleifer des Potis kommt an einen Eingang des 74HC14 
und dessen Ausgang an den µC - das wars. Aufwand 1LDR, 1Trimmpoti und 1 
74HC14 und programmtechnisch eine simple Portabfrage. Einfacher geht es 
nicht.
#5198842
Lesenswert?

Zeno schrieb:
> Nimm Deinen LDR und schalte ein Poti dazu in Reihe, das ganze zwischen
> +3V und GND. Der Schleifer des Potis kommt an einen Eingang des 74HC14
> und dessen Ausgang an den µC - das wars. Aufwand 1LDR, 1Trimmpoti und 1
> 74HC14 und programmtechnisch eine simple Portabfrage. Einfacher geht es
> nicht.

Na, 1x 330 Ohm in Richtung I/O und 1x 100nF parallel zum LDR scheint mir 
da dann doch deutlich einfacher... ;-)
Gast #5198866
Lesenswert?

Zeno schrieb:
> Nimm Deinen LDR und schiebe ein Poti dazu in Reihe, das ganze zwischen
> +3V und GND. Der Schleifer des Potis kommt an einen Eingang des 74HC14
> und dessen Ausgang an den µC - das wars.

Diese Schaltung ist doch genau richtig und läuft sogar bei 3V, warum 
baut der TO die denn jetzt nicht endlich mal auf, oder sagt uns 
wenigstens bescheid, dass er damit endlich zufrieden ist?
Gast #5198881
Lesenswert?

> warum baut der TO die denn jetzt nicht endlich mal auf, oder sagt
> uns wenigstens bescheid

Vielleicht, weil er diesen Kindergarten hier köstlich amüsant findet.

Wegen dem Flattern bzw den nicht sauberen digitalen Signalen: Die 
Messung endet, wenn das Programm beim Lesen des Eingangs einen LOW Pegel 
vorfindet. Damit ist die Messung beendet.

Selbst wenn es flatter, scheiß egal, denn die Messung endet mit der 
ersten fallenden Flanke.

Und ob das jetzt bei bei genau 1,4V oder 1,3V passiert, interessiert in 
dieser Anwendung nicht die Bohne.
Gast #5198886
Lesenswert?

batman schrieb:
> Jetzt muß noch einer erklären, warum man es schön macht, vor den
> CMOS-Schmitt-Trigger im MCU-Port noch einen externen in Reihe zu
> schalten.:)

Wenn es mit dem  "CMOS-Schmitt-Trigger im MCU-Port" gegangen wäre, hätte 
der TO den Thread nicht aufgemacht. Ich denke mal die MCU hat keine 
Schmitt-Trigger-Eingänge.


Stefan U. schrieb:
>> aber saubere Pegel sind auch was wert
>
> Ich kann Dir nicht folgen, was sind sie denn konkret wert?

Ich denke Du weist es ganz genau und demzufolge ist Deine Frage auch so 
überflüssig wie ein Kropf.


Teo D. schrieb:
> Zeno schrieb:
>> Wenn der TO mal schreiben würde was er genau will,
>
> Der war gut! :D
>
> Markus M. schrieb:
>> Die Schaltung braucht nicht schnell zu sein und Zwischenwerte sind auch
>> uninteressant. Die Schaltschwelle müsste nur einstellbar sein.
Mit "was er genau will" meinte ich den Zweck der Schaltung. Hat er aber 
inzwischen geschrieben und dementsprechend ist auch meine Antwort 
ausgefallen.
Gast #5198893
Lesenswert?

Zeno schrieb:
> batman schrieb:
>> Jetzt muß noch einer erklären, warum man es schön macht, vor den
>> CMOS-Schmitt-Trigger im MCU-Port noch einen externen in Reihe zu
>> schalten.:)
>
> Wenn es mit dem  "CMOS-Schmitt-Trigger im MCU-Port" gegangen wäre, hätte
> der TO den Thread nicht aufgemacht. Ich denke mal die MCU hat keine
> Schmitt-Trigger-Eingänge.

Ok, wenn du das ne Erklärung nennst, muß es wohl reichen.
Gast #5198903
Lesenswert?

> Ich denke mal die MCU hat keine Schmitt-Trigger-Eingänge.

So ist es auch. Dennoch ist es kein Problem, eine stetig steigende oder 
fallende analoge Spannung anzulegen und digital auszuwerten. Da flattert 
nichts.

Ich habe die Eigenschaften der I/O Pins des ESP8266 vor einigen Monaten 
erforscht, da das Datenblatt immer noch mehr Werbung als Information 
enthält. Ich weiß wovon ich schreibe.

Abgesehen davon, lass sie im Worst Case doch flattern - es spielt für 
diese Anwendung absolut keine Rolle!
#5198960
Lesenswert?

Markus M. schrieb:

> Um die zu präzisieren: ich möchte wissen, ob im Keller das Licht brennt.
> Das ist entweder an oder aus, also interessieren mich Grauwerte nicht.

Und warum gibts da Probleme mit Zwischenwerten zwischen Hell und
Dunkel? Da reicht doch ein LDR plus Widerstand am Eingang. Du
brauchst nur einmal den Hellwiderstand und den Dunkelwiderstand
zu messen und den Vorwiderstand so gross zu wählen, das er das
aritmetische Mittel zwischen beiden Werten hat.
Gast #5199003
Lesenswert?

Naja, schlimmstenfalls ist der Unterschied nicht groß genug, um High/Low 
Pegel zu liefern. Mit der Kondensator-Entlade Variante kann man 
Zwischenwerte erfassen und langsame Veränderungen (z.B. aufgrund der 
Tageszeit) herausrechnen.
Gast #5199038
Lesenswert?

Stefan U. schrieb:
> Naja, schlimmstenfalls ist der Unterschied nicht groß genug, um
> High/Low
> Pegel zu liefern. Mit der Kondensator-Entlade Variante kann man
> Zwischenwerte erfassen und langsame Veränderungen (z.B. aufgrund der
> Tageszeit) herausrechnen.

Da müßte er aber auch den Wetterbericht berücksichtigen, inkl. 
Sonnenstand u. Einstrahlungswinkel durchs Kellerfenster. Eigentlich ein 
schönes KI-Projekt.
#5199063
Lesenswert?

Hi

Wenn dann in zwei Wochen noch die Keller-Temperatur gemessen werden 
soll, eher ein KO-Projekt ;)

Wobei man die bewährte Schaltung mit dem einen freien Pin ja durchaus 
ein 2.tes Mal aufbauen kann, dieses Mal mit dem Temp-Fühler statt dem 
LDR.

MfG

Teo D. schrieb:
> sagt Ihm halt endlich, das seine Methode die beste ist.

Ok, ich sag Es Ihm: Deine Methode ist die Beste!! 1 Elf 1

MfG
Gast #5199472
Lesenswert?

Anbei ein eilig zusammen gesteckter Probeaufbau. Da ich keinen LDR 
vorrätig hatte, habe ich einen Phototransistor genommen.

1
#include <ESP8266WiFi.h>
2
#include "oled.h"
3

4
#define LDR 14
5

6
OLED display(4,5,16);
7

8
void setup()
9
{
10
    display.init();  
11
}
12

13
void loop()
14
{
15
    delay(1000);
16
    
17
    // Kondensator laden
18
    pinMode(LDR, OUTPUT);
19
    digitalWrite(LDR,HIGH);
20
    delay(100);
21

22
    // Kondensator entladen
23
    pinMode(LDR, INPUT);
24
    int i;
25
    for (i=0; digitalRead(LDR)==HIGH; i++)
26
    {
27
        if (i==1000)
28
        {
29
            break;
30
        }
31
        delay(1);
32
    }
33
    
34
    // Den Wert von i anzeigen
35
    char buf[12];
36
    itoa(i,buf,10);
37
    display.clear();
38
    display.draw_string(0,0,buf,OLED::DOUBLE_SIZE);
39
    display.display();
40
}

Aktuell misst das Programm 2ms. Wenn ich die Hand über den 
Phototransistor halte, geht es hoch bis etwa 50. Wenn ich ein schwarzes 
Tuch drauf lege, erhalte ich den Maximalwert 1000.

Die Messwerte sind wie erwartet ziemlich stabil. Solange sich niemand im 
Raum bewegt, ändert sich die angezeigte Zahl höchstens um +/- 1.

Da die Delay() Funktion sich bei WLAN Aktivität nicht exakt an die 
vorgegebene Zeit hält, empfehle ich für den realen Aufbau besser einen 
kleineren Kondensator in Kombination mit delayMicroseconds().

Die Warteschleife sollte dann spätestens nach 20ms abbrechen, sonst löst 
der Watchdog einen Reset aus.
Angehängte Dateien:
OP #5207700
Lesenswert?

Hallo,

hier ist nochmal der TO wie versprochen und auch rechtzeitig vor dem 
Tatort. :)

Vorweg 2 Dinge:
- wegen Sonneneinstrahlung muss ich mir keine Sorge machen, der Keller 
hat kein Fenster
- Temperatur und Feuchtigkeit werden schon gemessen. Deswegen ist ja nur 
noch ein pin frei, weil an dem anderen ein DHT22 hängt.


Ich hab das wie oben geschrieben aufgebaut und es klappt wunderbar. Die 
Messzeit schwankt um ca. +-5ms bei ca. 120ms Messzeit und um ca. +-15ms 
bei 2000ms. Das reicht als Wiederholgenauigkeit vollkommen aus.


@stefanus: danke für das Beispiel. Es geht aber auch ganz ohne delay 
(mit Differenzbildung & millis()...), dann gibt es auch keinen Stress 
mit WLAN o.ä.


Danke nochmal an alle, die geholfen haben und an die anderen, für den 
Unterhaltungswert! ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren