Forum: Mikrocontroller und Digitale Elektronik Hell/Dunkel digital erkennen


von Markus M. (poesel)


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

von Teo D. (teoderix)


Lesenswert?

LDR, Poti, Schmitt-Trigger. Mehr brauchts doch nich.
http://www.dieelektronikerseite.de/Circuits/Daemmerungsschalter.htm

von jz23 (Gast)


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.

von STK500-Besitzer (Gast)


Lesenswert?

Du brauchst einen Schmitt-Trigger bzw. einen Komparator mit Hysterese.
Im Prinzip müsste man dafür den NE555 benutzen können.

von HildeK (Gast)


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.

von Joe F. (easylife)


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.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


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

: Bearbeitet durch User
von Harald W. (wilhelms)


Lesenswert?

Patrick J. schrieb:

> Oder einen anderen µC vorschalten

Da wäre ein Vierkernprozessor mit mindestens 4 GHz
sicherlich noch besser geeignet.

von batman (Gast)


Lesenswert?

Markus M. schrieb:
> Meine Versuche mit LDR und Spannungsteiler haben dann auch nicht
> funktioniert, weil der Bereich dazwischen zum flackern des Signals
> führt.

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

von (prx) A. K. (prx)


Lesenswert?

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

Sowas gibts auch fertig von TAOS, z.B. TSL235R:
https://www.sparkfun.com/products/9768

> 1-wire wäre da möglich,

Auch da gibts wohl fertige Module.

von Joe F. (easylife)


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.

: Bearbeitet durch User
von batman (Gast)


Lesenswert?

Für einen "analogen" 8-Bit Grau-Wert kannste auch einfach den Port mit 
LDR dran 256mal oversampeln (addieren) und damit eine feinere Schwelle 
festlegen.

von Patrick J. (ho-bit-hun-ter)


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

: Bearbeitet durch User
von (prx) A. K. (prx)


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.

von Wolfgang (Gast)


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.

von Stefan F. (Gast)


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.

von Markus M. (poesel)


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!

von (prx) A. K. (prx)


Lesenswert?

Stefan U. schrieb:
> Du kannst einen Kondensator über einen LDR aufladen und messen wie lange
> das dauert.

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

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ich würde es einfach mal versuchen. Ich habe das früher schon mit TTL 
IC's gemacht ohne Schmitt Trigger.

von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von Wolfgang (Gast)


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.

von Wolfgang (Gast)


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.

von Joe F. (easylife)


Angehängte Dateien:

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).

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Diese Meßmethode mit Widerstand und Kpndensator wurde schon beim 
analogen Gameport vom PC und auch bei Commodore Heim-/Spiel-Computern 
angewendet.

von (prx) A. K. (prx)


Lesenswert?

Stefan U. schrieb:
> Diese Meßmethode mit Widerstand und Kpndensator wurde schon beim
> analogen Gameport vom PC

Yep. Aber da wars ein dafür gebauter NE558. Vereinfachter 555, vierfach.

von Vka (Gast)


Lesenswert?

MCP65R41

Das ist ein Komparator mit eingebauter Referenzspannungsquelle. Damit 
kannst du das problemlos aufbauen. Durch die Referenzquelle bleibt der 
Schaltpunkt präzise. Der Spannungsbereich sollte auch passen.

von Wolfgang (Gast)


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)

von c-hater (Gast)


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...

von Harald W. (wilhelms)


Lesenswert?

Patrick J. schrieb:

> Klar kann ich den µC oder den alternativ genannten 4-Kerner einsparen,

...wenn man, so wie es schon mehrfach vorgeschlagen wurde,
einfach einen Komparator nimmt.

von fast (Gast)


Lesenswert?

ich werfe den TSL235 in die Runde

3 Pins: Vcc (>2,7Vk, Gnd und
einen Ausgang der eine Rechteckspannung liefert,
deren Frequenz vom Licht abhängt

hab ich hier am Laufen

von Herr M. (herrmueller)


Lesenswert?

Warum muss es denn unbedingt ein ESP-01 und kein ESP-12 mit mehr i/o und 
Adc sein?

von Fritz (Gast)


Lesenswert?


von Fritz (Gast)


Lesenswert?


von Jobst Q. (joquis)


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.

von Zeno (Gast)


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.

von Zeno (Gast)


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.

Nimm einen 74HC14 der läuft ab 2V. Dieser IC hat 6 Inverter Gatter mit 
Schmitt-Trigger Eingängen.

von Patrick J. (ho-bit-hun-ter)


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

von TU Student 1. (student0)


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

von Stefan F. (Gast)


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.

von Teo D. (teoderix)


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. ;)

von Zeno (Gast)


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.

von Zeno (Gast)


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.

von Zeno (Gast)


Lesenswert?

Teo D. schrieb:
> Wenn bereits alles durchgekaut, wird's SO Mittags schräg. ;)

Ist hier halt manschmal so. Da wird ein Mörser geholt um den Entbraten 
auf den Teller zu bringen.

von Stefan F. (Gast)


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.

von Joe F. (easylife)


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.

: Bearbeitet durch User
von Wolfgang (Gast)


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.

von Markus M. (poesel)


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.

von Captain Future (Gast)


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?

von Dietrich L. (dietrichl)


Lesenswert?

Markus M. schrieb:
> 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.

Nein, in 3) entläd er sich über den LDR: als Eingang ist der Pin ja sehr 
hochohmig!.

von Stefan F. (Gast)


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?

von Markus M. (poesel)


Lesenswert?

> Wie
> bekommst du diese Info nach oben, in deine Wohnung?

Per WLAN mit MQTT in den ioBroker.

von Markus M. (poesel)


Lesenswert?

> Nein, in 3) entläd er sich über den LDR: als Eingang ist der Pin ja sehr
> hochohmig!.

Ah - danke für die Erklärung! Daran hatte ich nicht gedacht.

von Jobst Q. (joquis)


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.

von Stefan F. (Gast)


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?

von Joe F. (easylife)


Lesenswert?

Stefan U. schrieb:
>> Ein Oszillator
>
> Gutes Stichwort. Die üblichen CMOS Oszillator Schaltungen nutzen
> Inverter, nicht Schmitt Trigger.

Da schwingt aber auch der Quarz.
Bei einem einfachen RC Oszillator nützt einem die Hysterese, damit die 
Frequenz nicht unangenehm hoch wird.

von Zeno (Gast)


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.

von Zeno (Gast)


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 .....

von Zeno (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

Glaube mir, da wird nichts flattern. Der Schmitt Trigger ist unnötig.

von Zeno (Gast)


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.

von Zeno (Gast)


Lesenswert?

Stefan U. schrieb:
> Glaube mir, da wird nichts flattern. Der Schmitt Trigger ist unnötig.

Bei dem was der TO vorhand wahrscheinlich nicht, aber saubere Pegel sind 
auch was wert und da braucht man was zw. LDR und µC.

von Joe F. (easylife)


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... ;-)

: Bearbeitet durch User
von batman (Gast)


Lesenswert?

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.:)

von Teo D. (teoderix)


Lesenswert?

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.

von Captain Future (Gast)


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?

von Stefan F. (Gast)


Lesenswert?

> aber saubere Pegel sind auch was wert

Ich kann Dir nicht folgen, was sind sie denn konkret wert?

von Stefan F. (Gast)


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.

von Zeno (Gast)


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.

von Teo D. (teoderix)


Lesenswert?

Captain Future schrieb:
> warum
> baut der TO die denn jetzt nicht endlich mal auf, oder sagt uns
> wenigstens bescheid, dass er damit endlich zufrieden ist?

Ja, Hosen runter, Hosen runter, ... Wie 'du hast schon' und 'besseres zu 
tun'? ?-o

:D

von batman (Gast)


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.

von Teo D. (teoderix)


Lesenswert?

Zeno schrieb:
> meinte ich ...

Trotzdem war er gut. Selbst das Timing war perfekt. ;)

von Stefan F. (Gast)


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!

von Captain Future (Gast)


Lesenswert?

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

Er meint damit eine glasklare 0 bzw. 1, aber das hat er ja mit dem 
74HC14. Deswegen soll er dass endlich mal aufbauen! Er hat noch fast 
eine Stunde Zeit.

von batman (Gast)


Lesenswert?

Also rechnet der im Quartalsystem, mit 0, 1, glasklare 0, glasklare 1?

von Markus M. (poesel)


Lesenswert?

> Deswegen soll er dass endlich mal aufbauen! Er hat noch fast
> eine Stunde Zeit.

Ui - was passiert denn in einer Stunde? ;)

Also ich werde das aufbauen und dann hier berichten, wie es gelaufen 
ist. Heute wird das allerdings nix mehr.

von Harald W. (wilhelms)


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.

von batman (Gast)


Lesenswert?

Spielverderber! :(

von Harald W. (wilhelms)


Lesenswert?

batman schrieb:

> Spielverderber! :(

Tja, hier im Forum zählen nur die Beiträge, die einfache Probleme
so kompliziert wie möglich lösen wollen. Deshalb auch mein Vorschlag
weiter oben mit dem Gigahertzvierkernprozessor.

von Stefan F. (Gast)


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.

von Captain Future (Gast)


Lesenswert?

Markus M. schrieb:
> Ui - was passiert denn in einer Stunde?

Dann kommt die Tagesschau und danach Tatort. Deswegen muss ich mich um 
20:00 Uhr von euch verabschieden, aber ich bin morgen in gewohnter 
Frische wieder dabei. Und vielleicht gibt es dann schon die ersten 
Ergebnisse?

von Teo D. (teoderix)


Lesenswert?

Nu sagt Ihm halt endlich, das seine Methode die beste ist.
Da hört doch sonnst nie auf!

von Stefan F. (Gast)


Lesenswert?

Nicht nötig, ich weiß dass ich genial bin :-)

von batman (Gast)


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.

von Patrick J. (ho-bit-hun-ter)


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

von Teo D. (teoderix)


Lesenswert?

Stefan U. schrieb:
> Nicht nötig, ich weiß dass ich genial bin :-)

+1 :)

von batman (Gast)


Lesenswert?

Da im Unterschied zum Tageslicht fast alle Leuchtmittel irgendwie 
flimmern, sollte man den AC-Anteil des Signals zur Weiterverarbeitung 
abtrennen, verstärken, gleichgrichten,...

von Stefan F. (Gast)


Angehängte Dateien:

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.

von Markus M. (poesel)


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! ;)

von Stefan F. (Gast)


Lesenswert?

> Beispiel. Es geht aber auch ganz ohne delay mit Differenzbildung & millis()

Natürlich. Du hast einen entsprechend großen Kondensator verwendet, um 
immer im Bereich von vielen ms zu liegen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.