ich möchte gerne die Zeit erfassen, die eine LED leuchtet.
An meiner Heizung ist eine LED, die bei Warmwassererwärmung leuchtet. Ich möchte mit dem ESP8266, einem LDR+10kOhm Widerstand messen, wie lange die LED leuchtet. Sie geht wegen der Warmwassererwärmung mehmals am Tag an und aus. Den Aufbau habe ich soweit, der LDR hängt am A0 und liefert je nach Beleuchtung auch unterschiedliche Werte.
Allerdings habe ich keine Idee, wie der Code aussehen könnte. Ich habe dazu schon mit millis() herumprobiert, komme aber nicht wirklich weiter, wie ich dass programmieren muss. Der Schwellenwert bei LED ein ist 980, dann soll die Zeit in Sekunden weiter laufen, bei unter 980 stehen bleiben. Ist der Wert wieder über 980, dann soll die Zeit weiter laufen.
Mir reicht es, die Werte über den Serialmonitor zu erfassen.
Kann mir jemand beim Code helfen?
Aus Spass habe ich so meine 20 Jahre alte Waschmaschine "Smart" gemacht.
Einfach den Fotowiderstand auf die "Fertig-LED" geklebt, und permanent gemessen.
Sobald der Widerstand sich stark geändert hat, lösst er ein (Buzzer) BEEP aus, und ich weiß das die Waschmaschine fertig ist.
Beep reicht. Die Waschmaschine steht im Badezimmer. Das wäre aber auch via Handy möglich bei ein ESP32.
Die wichtigsten solltest Du aber auswendig kennen und die anderen nicht einfach ignorieren, sondern mit einer Suchmaschine mal suchen.
Ich fine es falsch, eine solche Konfiguration (LDR an LED) mittels analogRead auszulesen. Befestigt man den LDR halbwegs lichdicht gegen Umgebungslicht, so kann man den Spannungsteilerwiderstand so bemessen, daß die Spannungspegel auch für die Auswertung mittels eines digitalen Eingangs geeignet sind.
Dann HL und LH Übergang erkennen und mitt millis() die Zeitdifferenz berechnen .
Das Einlesen ist schneller: analogRead gegenüber digitalRead digitalRead() gegenüber analogRead().
Je nach Widerstandswert des LDR kann der Endwert der Messung erst nach mehreren Messungen erreicht werden ( wegen Strombedarf fürs
laden des Sample and Hold Kondensators im AD_Wandler des Controllers) , also kein sprunghafter Anstieg / Absenkung sondern in eine Richtung (je nach Beschaltung des LDR gegen GND oder Versorgungsspannung) ein abgefälschter Übergang über mehrere Messungen. In diesem Fall macht das die Zustandsänderung wegen der Trägheit des LDR aber nicht wesentlich langsamer.
Die Eingangsimpedanz eines Digitalen Eingangs ist sehr hoch: über 5MOhm (im Datenblatt: Leckstrom kleiner 1µA) gegenüber den analogen Eingängen mit ca 10kOhm. Der Spannungsteiler kann hochohmiger bemessen werden, ist aber wegen der Bedingung, daß die Spannungspegel für LED AN und LED AUS in den Spannungspegel für LOW bzw HIGH zu liegen kommen müssen, nicht so frei wählbar.
man erspart sich einen Vergleich mit einer 2 Byte Zahl
Man hat eine natürliche Hysterese, durch die Hardware des digitalen Eingangs. Bei einem analogen Meßwertes muß die Hysterese erst durch 2 verschiedene Grenzwerte oder durch Summieren und subtrahieren einer Tolleranz zum Schwellwert erreicht werden, also noch eine 2 Byte Rechenoperation oder zweite Variable mehr.
Andererseits sind Schaltpunkte und die Hysterese bei Analog-Erfassung frei wählbar und per Software einstellbar.
Dies ist jedoch nur erforderlich, wenn die mechanische Ausführung der LDR-Montage unzureichend und somit unzuverlässig ist (Puckis tesafilm).
Eine robuste Montage stellt meiner Meinung nach ebenso einen Eingriff in die bestehende Heizungsanlage dar wie z.B. den elektrischen Anschluss eines Optokopplers parallel zur LED.
Die Anforderungen an Rechenleistung und Geschwindigkeit erlauben ohne Weiteres die Behandlung als analoges Signal. Bei Verwendung eines ESP8266 als "Arduino" ist keine merkliche Rechenleistung für die Erfassung erforderlich. Allerdings hat dieser nur 1 Analog-Eingang, der eventuell sinnvoller genutzt werden könnte.
Mit einem ESP bietet sich an, nicht nur die Zeitdauer zu erfassen, sondern die Schaltzeiten an einen Webserver mit Datenbank zu übertragen und dort die Zeiten auszuwerten
Und was ist mit den Daten der Heizung selbst?
Nur aus einer Menge Gründen ist das oft nicht möglich. z.b. wenn die Heizungsanlage nicht mir gehört. Wenn ich an so eine Anlage ein Fotowiderstand mit ein bisschen Alu-Folie und einen Tesafilm befestige dann kann ich das Spurlos wider entfernen. Und auch die Versicherung dreht mir im Zweifelsfall kein Strick draus.
Was meine Waschmaschine angeht. Ich fummele ungern an 220 V (damals waren das noch 220 Volt als das Teil gebaut wurde ) herum. Weshalb ich diese Methode gewählt habe.