Sonnenstandsberechner (für sun tracker devices)

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

 
GUI zur Sonnenstandberechnung

Mit dem Programm Sonnenstandsberechner kann der jeweilige Sonnenstand (Azimut und Höhe) aus aktuellem Datum, Zeit und 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.

  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.

Der Formelautor der Sonnenstand-Page weist darauf hin, dass es sich um 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; Planetentheorie VSOP87.