mittels DS3231 Uhrzeit vergleichen

Moin moin...
mir qualmt der Kopf und ich weiß dass ich wohl gleich was auf den Deckel bekomme, aber ist mir egal.
Bin jetzt seit ca 5 Stunden mit einem Sketch zugange, und bekomme es nicht hin.

Es geht um eine Lichtsteuerung, bei der hauptsächlich die Umgebungslichtstärke gemessen wird, dementsprechend wird das Licht eingeschaltet.

Jetzt brauch das Licht allerdings nicht die gesamte Nacht leuchten, sondern nur bei Bedarf, heißt per Bewegungsmelder.
So jetzt muss ich aber irgendwie im Sketch herausbekommen, WANN denn nun Nacht ist. Da der Raum nicht allzu hell ist, leuchtet das Licht teilweise auch tagsüber, da brauch ich aber keinen Bewegungsmelder.

mit dem folgenden Block erhalte ich (eine weniger oder mehr formatierte) Anzeige von den Daten des DS3231.

 Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());
  Serial.println(rtc.getTimeStr());
 Serial.print(rtc.getTemp());
  Serial.println(" C");

Ist glaub ich ein Teil es Beispielcodes aus der IDE.
Wie schaffe ich es nun, per if-Abfrage den String getTimeStr mit z.B. "> 00:30:00" zu vergleichen, dass bei allem was größer ist als 00:30:00 also auch 02:01:36, die ganze Sache bis zum Beispiel um 06:30:00 per Bewegungsmelder zu steuern, wobei die Ansteuerung über diesen nicht das Problem ist, das habe ich problemlos implementieren können.

Ich habe Sachen gelesen von wegen String in eine Ganzzahl und dann halt mit Minuten rechnen, was ja kein Problem wäre.
Die IDE hat sich bei meinen Experimenten auch beschwert, dass ich da so was nicht konvertieren kann bla bla
arduino cannot convert from type 'char* to type 'int' if

Vllt kann mir ja jemand auf die Sprünge helfen. :slight_smile:

Wünsche allen ein schön sonniges Wochenende!

Polorazr:
Vllt kann mir ja jemand auf die Sprünge helfen. :slight_smile:

Der von Dir gezeigte Codeausschnitt hat mit " Lichtsteuerung, bei der hauptsächlich die Umgebungslichtstärke gemessen wird" absolut nichts zu tun.

Vom Prinzip her hast Du zwei Möglichkeiten, Tag und Nacht zu unterscheiden:

Ohne RTC anhand einer Helligkeitsmessung, z.B.:

Lichtstärke > 25 Lux ==> Tag
Lichtstärke < 10 Lux ==> Nacht
Lichtszärke 11 bis 24 Lux ==> letzter Zustand bleibt erhalten
(oder wie auch immer Du die Lichtgrenzen setzen möchtest)

Mit RTC und astronomischen Sonnenberechnungen:
zwischen Sonnenaufgang und Sonnenuntergang ==> Tag
Zwischen Sonnenuntergang und Sonnenaufgang ==> Nacht
Die Berechnung von Sonnenauf- und -untergangszeiten ist allerdings nicht ganz trivial und braucht Platz und RAM im Controller.

Da du offensichtlich nicht in der Lage bist, einen lauffähigen Sketch zu erstellen, der deine gewünschte Funktion darstellt, sondern nur irgendwelche kopierte Zeilen aus Beispielen hier postest, solltest du dich unbedingt mal mit den Basics befassen. Ohne Grundlagen wirst du dein Vorhabe nicht umsetzen können.

Unsere Beispiele und Vorschläge kanst du so auch nicht verstehen.
Da wir das hier in unserer Freizeit machen, wirst du sicher auch keinen fertigen Sketch erhalten.

Du solltest versuchen, einen Sketch aufzbauen, der einer Uhr bzw. einer Schaltuhr entspricht. Den Sketch hier posten und wir versuchen dir dann auf die Sprünge zu helfen.

Dann den Vorschlag von Jurs umsetzen und die Helligkeit messen bzw. zur Auswertung bringen. Auch hier werden wir deinen fertigen Sketch begutachten können.

Aber bitte erst die Grundlagen lernen.

Polorazr:
Vllt kann mir ja jemand auf die Sprünge helfen. :slight_smile:

Bei festen Zeiten möglicherweise so (ungetestet):

if(hours==18 && minutes==0 && seconds==0) status=NACHT;
if(hours==6 && minutes==0 && seconds==0) status=TAG;

Sonnenauf- und -untergang kann man sicherlich im Stundenrhythmus bestimmen, dann ist der Arduino auch nicht überlastet. Für eine Beleuchtung sollte das genau genug sein.

Keine Ahnung welche Lib du benutzt, aber wenn das die DS3231-Lib von rinkydinkelectronics.com ist, schau dir mal den Sketch unter Beispiele>DS3231>DS3231_Serial_Hard an. Da sieht man wie man direkt an die Stunden, Minuten, Sekunden,... kommt.

Als Vergleich ähnlich wie agmue mit den Daten der Lib (ungetestet):

if (t.hour >= 0 && t.min >= 30 && !nachtModus) nachtModus = true;
if (t.hour >= 6 && t.min > 30 && nachtModus) nachtModus = false;

Hallo,

die Uhr brauchst du demnach nicht. Du brauchst Licht wenn es dir zu dunkel ist. Egal welche Uhrzeit es ist.
Auch am Tage kann es manchmal zu dunkel sein, besonders im Winter.
Vorschlag wie jurs.
Umgebungshelligkeit messen.
Wenn unter Schwellwert, dann Bewegungsmelder aktivieren mit Auschaltverzögerung.
Wenn über Schwellwert, Bewegungsmelder deaktivieren.
Das wars.

Doc_Arduino:
Du brauchst Licht wenn es dir zu dunkel ist.

Sehe ich auch so. Aber wenn der TO es anders möchte, kann er es doch anders machen. Manche Dinge muß man probieren. Die Berücksichtigung der Zeit weglassen kann man immer noch. :slight_smile:

Hallo,

ja klar kann er machen was er möchte. Nur ich bin ein Typ der immer versucht nach besten Wissen und Gewissen einen guten Vorschlag zu bringen. Manchmal vielleicht auch etwas kaotisch, okay, aber eine hoffentlich sinnvolle Idee zum Thema.

Ich kann mich hier nur wiederholen. Was nützt ihm ein zeitlich gesteuerter Bewegungsmelder wenn es zufällig in dem Moment außerhalb der festgelegten Zeit zu dunkel ist und er Licht bräuchte. Wenn er dabei stolpert weil er zu wenig sieht, schreit als erstes "verdammte Sch..."

Die käuflichen Bewegungsmelder haben auch einen Lichtsensor drin der bei genügend Helligkeit das Ding deaktiviert. Aber keine Uhr. Wozu auch.

Wenn der TO aber die Uhr möchte, dann nur zu. Bin tolerant. :slight_smile: Dann würde ich allerdings vorschlagen ohne RTC Lib. Es müssen nur paar Register ausgelesen werden. Spart ein haufen Code. Bsp. gibts genügend. Er braucht nur noch die Sommer/Winterzeitkorrektur mit einbauen. Die hat jurs schon veröffentlicht. Könnte er eigentlich selbst verlinken. :wink:

Doc_Arduino:
Er braucht nur noch die Sommer/Winterzeitkorrektur mit einbauen.

Besser nicht, da dann auch die Schaltzeiten angepaßt werden müssen. Einfacher immer bei MEZ bleiben.

Hallo,
"So jetzt muss ich aber irgendwie im Sketch herausbekommen, WANN denn nun Nacht ist."

Hier kannste es Dir mal durchlesen:

https://forum.arduino.cc/index.php?topic=218280.0

dann einfach mit C&P, läuft auf 2 Minuten "genau"

Hier gibs VergleichsZeiten:

Gruß und Spaß
Andreas

pimuc:
Keine Ahnung welche Lib du benutzt, aber wenn das die DS3231-Lib von rinkydinkelectronics.com ist, schau dir mal den Sketch unter Beispiele>DS3231>DS3231_Serial_Hard an. Da sieht man wie man direkt an die Stunden, Minuten, Sekunden,... kommt.

Als Vergleich ähnlich wie agmue mit den Daten der Lib (ungetestet):

if (t.hour >= 0 && t.min >= 30 && !nachtModus) nachtModus = true;

if (t.hour >= 6 && t.min > 30 && nachtModus) nachtModus = false;

so, im Endeffekt hat mir DAS jetzt geholfen und mich auf den richtigen Weg gebracht.

if (t.hour == 23) {
    Serial.println("So, gets isset 23 Uhr...");
  }

Damit kann ich nun wunderbar rausfinden, ob es zeitlich gesehen Nacht ist und ob die Schaltung nun nicht mehr via Licht- sondern per Bewegungssensor geschaltet wird.

Ich muss dazu sagen, dass ich an anderer Stelle des Objekts bereits seit einier Zeit erfolgreich so eine ähnliche Schaltung am laufen habe, diese läuft aber bisher nur auf Lichtmessung. Eine Implementierung eines Bewegungsmelders und das Dimmen per PWM sind aber geplant.

Natürlich habe ich hier und da noch Defizite, aber ich habe auch nicht 24 Stunden Zeit mich mit allem zu beschäftigen, sondern mache das eher so als Hobby nebenher. Und ich finde es gibt nichts besseres als Learning by doing. Sinnvolle Projekte mit Lernen verknüpfen und bisher konnte ich eigentlich immer alles selber lösen durch experimentieren und viel Lesen!

Ich danke allen, die geantwortet haben für Ihre Hilfe! :slight_smile:

SkobyMobil:
Hallo,
"So jetzt muss ich aber irgendwie im Sketch herausbekommen, WANN denn nun Nacht ist."

Hier kannste es Dir mal durchlesen:

Sonnen Auf- und Untergang mit dem Arduino berechnen - Deutsch - Arduino Forum

dann einfach mit C&P, läuft auf 2 Minuten "genau"

Hier gibs VergleichsZeiten:
galupki.de • Sonnenaufgang, Sonnenuntergang, Dämmerungszeiten, Blaue Stunde, Goldene Stunde, Mondphase, Mondaufgang, Monduntergang, Kalenderdaten Export/Download

Gruß und Spaß
Andreas

Auch ne idee um die Stunde der Zeitverschiebung zu fixen, aber da würde ich einfach nen schalter oder 2 jumperstifte setzen und Abfragen ob gesetzt oder nicht. Je nachdem dann halt die Zeit +1 oder nicht. Setzt voraus dass man dran denkt....
Hatte auch erst vor, nen ethernet shield drauf zu packen, halt für homematic, das passte aber nicht ins Hutschienengehäuse sonst hätte ich übers LAN die Zeit syncen können.

Polorazr:
Hatte auch erst vor, nen ethernet shield drauf zu packen, halt für homematic, das passte aber nicht ins Hutschienengehäuse sonst hätte ich übers LAN die Zeit syncen können.

Dann kein Shield sondern ein Modul. Nur mal so als Idee :slight_smile:

Ich nutze DS3231 ohne Bibliothek basierend auf diesen Ausführungen: Using DS1307 and DS3231 Real-time Clock Modules with Arduino. Zum Lernen finde ich das transparenter, Bibliotheken haben aber auch ihren Reiz.

Ja klar, Modul. Warum bin ich da nicht selbst drauf gekommen, das würde nämlich noch passen vielen Dank für den Hinweis!

Ja, und ohne lib ist tatsächlich besser zum verstehen der Thematik, obwohl es auch verwirrend sein kann für einen Neuanfänger. Aber um es zu verstehen, top!