Sonnenstandsberechner (für sun tracker devices): Unterschied zwischen den Versionen

Aus Happylab
Zur Navigation springen Zur Suche springen
Zeile 18: Zeile 18:
  
 
==Berechnung von Azimut und Elevation==
 
==Berechnung von Azimut und Elevation==
 +
Zur exakten Berechnung von Azimut und Elevation braucht man
 +
relativ komplizierte Formeln, für praktische Zwecke
 +
wie sun tracking eines Heliostaten genügen aber
 +
auch einfachere.
 +
Für Solaranlagen hat sich der
 +
[http://dx.doi.org/10.1016/S0038-092X(00)00156-0 PSA-Algorithmus]
 +
vermutlich am besten bewährt. Er wird von der ''Plataforma Solar de Almeria'' (Spanien)
 +
[http://www.psa.es/sdg/sunpos.htm hier] als C++ Code zur Verfügung gestellt.
 +
Für Arduino sind allerdings Anpassungen notwendig. Insbesondere müssen die Formeln
 +
zur Berechnung des
 +
[http://de.wikipedia.org/wiki/Julianisches_Datum Julianischen Datums] modifiziert werden, sodass
 +
dieser Tag trotz ''Arduinopräzision'' richtig heraus kommt. 
 +
 +
==Alternative Sonnenstandsberechnungen==
 +
===Wikipedia Sonnenstand===
 +
Die Berechnung nach den Formeln im Wikipediaartikel [http://de.wikipedia.org/wiki/Sonnenstand Sonnenstand]
 +
scheint fehlerhaft zu sein. (Stand Februar 2011)
 +
Einige (Diskussions)Autoren haben kritische Anmerkungen hinterlassen, die zum Teil unbeantwortet und
 +
-bearbeitet geblieben sind.
 
[[Image:SonnenstandberechnerGUI.png|thumb|GUI zur Sonnenstandberechnung]]
 
[[Image:SonnenstandberechnerGUI.png|thumb|GUI zur Sonnenstandberechnung]]
Mit dem Programm Sonnenstandsberechner kann der jeweilige  
+
Ich habe das Programm Sonnenstandsberechner nach diesen Formeln entwickelt,
 +
es kann (theoretisch) der jeweilige  
 
Sonnenstand (Azimut und Höhe) aus aktuellem Datum, Zeit und
 
Sonnenstand (Azimut und Höhe) aus aktuellem Datum, Zeit und
 
[http://de.wikipedia.org/wiki/Geographische_Koordinaten geographischen Koordinaten] berechnet werden.  
 
[http://de.wikipedia.org/wiki/Geographische_Koordinaten geographischen Koordinaten] berechnet werden.  
Es befindet sich hier im wiki zum Download,
 
benötigt Java 6, und läuft unter Windows, Linux und Mac.
 
 
Nachträglich habe ich allerdings ein paar Zweifel an den Formeln
 
im Wiki bekommen und habe dort einen Diskussionspunkt angefangen. Bis zur endgültigen
 
Klärung sollte dieses Programm und die generierten Daten
 
als ''work in progess'' angesehen werden.
 
  
 +
Als ich aber die Ergebnisse mit den Daten auf
 +
[http://www.sunearthtools.com/dp/tools/pos_sun.php?lang=de sunearthtools]
 +
verglichen habe, kommt es ''nur für das eine Beispiel'' im Wikipediaartikel richtig raus.
 +
Zur Kontrolle belasse ich das Programm aber vorläufig online.
 
{{zip|Sonnenstandsberechner.zip|27KB|Version vom 06.02.2011}}
 
{{zip|Sonnenstandsberechner.zip|27KB|Version vom 06.02.2011}}
 
Sourcecode inkludiert, der wichtige Kern ist die Java-Klasse
 
Sourcecode inkludiert, der wichtige Kern ist die Java-Klasse
Zeile 46: Zeile 63:
 
nehme ich den Algorithmus aus http://en.wikipedia.org/wiki/Julian_day.
 
nehme ich den Algorithmus aus http://en.wikipedia.org/wiki/Julian_day.
  
Der Formelautor der Sonnenstand-Page weist darauf hin, dass es sich um
+
==SPA Algorithmus==
Näherungen handelt, die aber trotzdem fast immer eine Genauigkeit von
 
0.01° erreichen (für Zeitraum 1950 bis 2050); also für die meisten praktischen
 
Zwecke ausreichend. Der Autor referenziert auch auf genauere
 
(aber wesentlich kompliziertere) Berechnungen;
 
[http://de.wikipedia.org/wiki/VSOP87 Planetentheorie VSOP87].
 

Version vom 27. Februar 2011, 14:52 Uhr

Allgemeines

Für die Bestimmung des Sonnenstandes auf einem (ortsfesten) Microcontroller müssen vor allem zwei Probleme gelöst werden: Der Microcontroller muss die Zeit batteriegepuffert bestimmen können, und er muss mit einem hinreichend einfachen Algorithmus aus Datum, Zeit und Ort daraus den Sonnenstand berechnen können. Der Algorithmus muss ggf. noch auf die Einschränkungen des verwendeten Microcontrollers Rücksicht nehmen und entsprechend adaptiert werden. Bei Arduino gibt es beispielsweise das Problem, dass der Datentyp double in Wirklichkeit nur mit Präzision von float rechnet (also 23 Bit Mantisse).

Die Zeit

Zeitgeberbaustein DS1307

Die Zeit (Greenwich Time aka UT) bestimme ich mit den DS1307 Baustein. Nach der Beschreibung von http://www.glacialwanderer.com/hobbyrobotics/?p=12 hat das auf Anhieb funktioniert. Ich hatte keine 2.2K Widerstände, mit 4.7K war es auch kein Problem.

Berechnung von Azimut und Elevation

Zur exakten Berechnung von Azimut und Elevation braucht man relativ komplizierte Formeln, für praktische Zwecke wie sun tracking eines Heliostaten genügen aber auch einfachere. Für Solaranlagen hat sich der PSA-Algorithmus vermutlich am besten bewährt. Er wird von der Plataforma Solar de Almeria (Spanien) hier als C++ Code zur Verfügung gestellt. Für Arduino sind allerdings Anpassungen notwendig. Insbesondere müssen die Formeln zur Berechnung des Julianischen Datums modifiziert werden, sodass dieser Tag trotz Arduinopräzision richtig heraus kommt.

Alternative Sonnenstandsberechnungen

Wikipedia Sonnenstand

Die Berechnung nach den Formeln im Wikipediaartikel Sonnenstand scheint fehlerhaft zu sein. (Stand Februar 2011) Einige (Diskussions)Autoren haben kritische Anmerkungen hinterlassen, die zum Teil unbeantwortet und -bearbeitet geblieben sind.

GUI zur Sonnenstandberechnung

Ich habe das Programm Sonnenstandsberechner nach diesen Formeln entwickelt, es kann (theoretisch) der jeweilige Sonnenstand (Azimut und Höhe) aus aktuellem Datum, Zeit und geographischen Koordinaten berechnet werden.

Als ich aber die Ergebnisse mit den Daten auf sunearthtools verglichen habe, kommt es nur für das eine Beispiel im Wikipediaartikel richtig raus. Zur Kontrolle belasse ich das Programm aber vorläufig online.

Filezip.gif Sonnenstandsberechner.zip (27KB)
Version vom 06.02.2011

Sourcecode inkludiert, der wichtige Kern ist die Java-Klasse SunCalculations, nützlich als Library beziehungsweise zum Nachschlagen der Formeln, wenn man ein sun-tracker device bauen will (zum Beispiel einen Heliostat oder einen Fresnelreflektor) Der Sourcecode und Versionsgeschichte steht auch auf http://code.google.com/p/solar-position zur Verfügung.

Die Grundlage für die Algorithmen sind die Formeln aus http://de.wikipedia.org/wiki/Sonnenstand. Die (ebenfalls inkludierten) Junit-Tests sind mit den Beispieldaten ausgearbeitet die auf dieser Page angegeben sind, Gleitkomma-Berechnungen sind generell mit double implementiert. Für die Berechnung der Julianischen Tageszeit nehme ich den Algorithmus aus http://en.wikipedia.org/wiki/Julian_day.

SPA Algorithmus