Forum: Projekte & Code Berechnuing der Sonnenaufgangs und Untergangszeiten


von Christian J. (elektroniker1968)


Angehängte Dateien:

Lesenswert?

Anbei mal ein Codeschnipsel, ist fast auf die Minute genau das ganze 
Jahr.
Compiler GCC, müste nur gering angepasst werden. Ergebnisse stehen im 
Sonnen_AUF_UNTER Struct als Ganzahlen und floats.

Voraussetzung: RTC schreibt laufend aktuelle Uhrzeit im Typ:
1
zeit_t Zeit;
2
3
typedef struct
4
{
5
  uint32_t  stunde,
6
        minute,
7
        sekunde,
8
        tag,
9
        monat,
10
        jahr,
11
        wtag,
12
        jahrtag;
13
} zeit_t;




Aufruf mit

tage = CalcDayOfYear(&Zeit);    // Tag des Jahres ausrechnen
CalcSonnenAufgang(&Zeit, &Sonnen_AUF_UNTER,tage);

von UBoot-Stocki (Gast)


Lesenswert?

Guten Abend,

lass mich raten - Du wohnst in Kaarst ;-)

Gruß

Andreas

von Christian J. (elektroniker1968)


Lesenswert?

Bingo, die Geokoordinaten verraten es :-)

Und da meine Frau und die Kinder auf "Malle" sind habe ich ganz viel 
Zeit fürs Hobby :-)

von Christian J. (elektroniker1968)


Angehängte Dateien:

Lesenswert?

Stimmt exakt.

von Uboot- S. (uboot-stocki)


Lesenswert?

Hi,

Ich verwende in meiner Rolladensteuerung einen ähnlichen Algorithmus 
(Kommt auf die selben Werte). Allerdings beobachte ich, dass es zum 
Zeitpunkt des errechneten Sonnenaufgangs schon hell, bzw. zum Zeitpunkt 
des Sonnenuntergangs es noch nicht dunkel ist.

Ich habe mit schon überlegt eine additive Konstante einzubauen. 
Allerdings frage ich mich wie das bei "professionellen" Geräten gelöst 
wird ?!

Gruß

Andreas

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Uboot- Stocki schrieb:
> Hi,
>
> Ich verwende in meiner Rolladensteuerung einen ähnlichen Algorithmus
> (Kommt auf die selben Werte). Allerdings beobachte ich, dass es zum
> Zeitpunkt des errechneten Sonnenaufgangs schon hell, bzw. zum Zeitpunkt
> des Sonnenuntergangs es noch nicht dunkel ist.
>
> Ich habe mit schon überlegt eine additive Konstante einzubauen.
> Allerdings frage ich mich wie das bei "professionellen" Geräten gelöst
> wird ?!

Hi, vielleicht interessiert folgendes kleines Projekt in Java?
   http://www.qcontinuum.org/compass/

Ich hab das auf meinem Händi, als Kompass.

Neben dem Sonnen- und Mondstand kann man auch anzeigen lassen, wann 
Mond- und Sonnenauf und -untergang sind, ausserdem die Zeiten für 
"Zivile Dämmerung", "Nautische Dämmerung" und "Astronomische Dämmerung".

Für dich wäre dann wohl die "Zivile Dämmerung" interessent.

Das Tool von Dana Peters ist nett. Zum Code und zum Algorithmus kann ich 
nichts sagen. Jedenfalls kommt's gut hin mit dem Dämmern.

Fehlt nur noch die Zeit für "Götterdämmerung" :-)

Johann

von Simon K. (simon) Benutzerseite


Lesenswert?

Christian J. schrieb:
> Stimmt exakt.

Ob der ARM mit den Berechnungen nicht überfordert ist? ;)

von Matthias L. (Gast)


Lesenswert?

>Allerdings beobachte ich, dass es zum
>Zeitpunkt des errechneten Sonnenaufgangs schon hell, bzw. zum Zeitpunkt
>des Sonnenuntergangs es noch nicht dunkel ist.

Kann es daran liegen, dass der Zeitpunkt "Sonnenuntergang" astronomisch 
betrachtet, der Zeitpunkt ist, wo der Mittelpunkt der Sonne den Horizont 
berührt?

Dann ist es selbstverständlich noch nicht dunkel bzw. schon hell.

von Uwe N. (ulegan)


Lesenswert?

hatte da mal ein Programm, das unterschied zwischen
offizieller -0° 50'
bürgerlicher oder ziviler -6°
nautischer -12° und zuletzt
astronomischer Dämmerung mit -18°.
Gemeint ist die Höhe der Sonnenmitte.

Im hier verwendeten Programm lässt sich das wohl mit der Zeile

    #define hoehe   -0.0145     // Sonnenhöhe in RAD

einstellen.

Rechnet man mit dem Wert für die Offizielle Dämmerung, erhält man die 
Werte, wie sie in der Zeitung oder im Himmelsjahr angegeben werden.
Nimmt man die Werte für die bürgerliche Dämmerung, erhält man die 
Zeiten, zu denen es gefühlsmässig hell bzw. dunkel wird.
Die Seefahrer sehen den erhellten Himmel früher, und für Astronomen muss 
es richtig finster sein...

Siehe auch:
http://de.wikipedia.org/wiki/B%C3%BCrgerliche_D%C3%A4mmerung

Uwe

von Christian J. (elektroniker68)


Lesenswert?

Hallo,

ich sehe da noch einen Fehler:

Da es ursprünglich für einen DS1306 geschrieben wurde, die die 
Jahreszahl zweistellig hat muss das zB für den Arm, der zb 2009 intern 
stehen hat angepasst werden, d.h. es müssen 2000 vom Jahr abgezogen 
werden, sonst zeigt der Zabellenzeiger ins Leere.
1
uint32_t IsSommerzeit(zeit_t *zeit)
2
{
3
    #define MONAT_SZ_BEGINN     3
4
    #define MONAT_SZ_ENDE       10
5
6
    // Sommerzeiten 2000 - 2019, Beginnend im März, endend im Oktober
7
    const uint8_t som_zeit_start[20] = {26,25,31,30,28,27,26,25,30,29,28,27,25,31,30,29,27,26,25,31};
8
    const uint8_t som_zeit_ende [20] = {29,28,27,26,28,30,29,28,26,25,31,30,28,27,26,25,30,29,28,37};
9
10
    // Alles > März und < Oktober ist Sommerzeit
11
    if ( (zeit->monat > MONAT_SZ_BEGINN) && (zeit->monat < MONAT_SZ_ENDE) )
12
        return (1);
13
14
    // März anschauen
15
    if ( (zeit->monat == MONAT_SZ_BEGINN) && (zeit->tag >= som_zeit_start[zeit->jahr]) )
16
        return 1;
17
18
    // Oktober anschauen
19
    if ( (zeit->monat == MONAT_SZ_ENDE) && (zeit->tag < som_zeit_ende[zeit->jahr]) )
20
        return 1;
21
22
    return 0;
23
}

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.