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
LDR, Poti, Schmitt-Trigger. Mehr brauchts doch nich. http://www.dieelektronikerseite.de/Circuits/Daemmerungsschalter.htm
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.
Du brauchst einen Schmitt-Trigger bzw. einen Komparator mit Hysterese. Im Prinzip müsste man dafür den NE555 benutzen können.
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.
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
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
Patrick J. schrieb: > Oder einen anderen µC vorschalten Da wäre ein Vierkernprozessor mit mindestens 4 GHz sicherlich noch besser geeignet.
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.
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.
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
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.
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
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.
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.
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.
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!
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
Ich würde es einfach mal versuchen. Ich habe das früher schon mit TTL IC's gemacht ohne Schmitt Trigger.
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
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.
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.
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
Diese Meßmethode mit Widerstand und Kpndensator wurde schon beim analogen Gameport vom PC und auch bei Commodore Heim-/Spiel-Computern angewendet.
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.
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.
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)
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...
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.
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
Warum muss es denn unbedingt ein ESP-01 und kein ESP-12 mit mehr i/o und Adc sein?
Einfach ein Sensor-Modul besorgen. Mit LDR aus China: https://www.ebay.de/itm/Photoresistor-Sensor-Module-Light-Detection-Light-fur-Arduino-Photoresistor/172340284849 aus Deutschland: http://www.ebay.de/itm/Lichtsensor-Foto-Diode-Fotowiderstand-Modul-Arduino-Dammerungsschalter-Pi/292199549902?hash=item4408734bce:g:yPgAAOSw5jpZfjBL Mit Photodiode aus China: https://www.ebay.de/itm/LM393-Sensitive-Control-3-Pin-Photosensitive-Diode-Light-Sensor-Module-DC-3-3-5V/232483338418 aus Deutschland: http://www.ebay.de/itm/Light-Photosensitive-Sensor-Module-Lichtsensor-fur-Arduino-inkl-Kabel/181780492630?hash=item2a52f63156:g:TlIAAOSwv95Z3yQ4
Der erste Link funktioniert leider nicht. Mit LDR aus China: https://www.ebay.de/itm/3-Pin-Light-Detect-Module-Photosensitive-Sensor-Digital-Light-Intensity-Sensor/172675572725
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.
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.
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.
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
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
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.
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. ;)
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.
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.
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.
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.
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
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.
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.
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?
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!.
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?
> Wie > bekommst du diese Info nach oben, in deine Wohnung? Per WLAN mit MQTT in den ioBroker.
> 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.
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.
> 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?
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.
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.
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 .....
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.
Glaube mir, da wird nichts flattern. Der Schmitt Trigger ist unnötig.
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.
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.
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
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.:)
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.
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?
> aber saubere Pegel sind auch was wert
Ich kann Dir nicht folgen, was sind sie denn konkret wert?
> 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.
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.
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
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.
> 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!
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.
Also rechnet der im Quartalsystem, mit 0, 1, glasklare 0, glasklare 1?
> 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.
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.
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.
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.
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?
Nu sagt Ihm halt endlich, das seine Methode die beste ist. Da hört doch sonnst nie auf!
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.
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
Da im Unterschied zum Tageslicht fast alle Leuchtmittel irgendwie flimmern, sollte man den AC-Anteil des Signals zur Weiterverarbeitung abtrennen, verstärken, gleichgrichten,...
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.
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! ;)
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.