Änderungen

Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1: −
[[Image:SonnenstandberechnerGUI.png|thumb|GUI zur Sonnenstandberechnung]]
+
For the english version go to [[solar Arduino tracker]]
Mit dem Programm Sonnenstandsberechner kann der jeweilige
+
=Allgemeines=
Sonnenstand (Azimut und Höhe) aus aktuellem Datum, Zeit und
+
Für die Bestimmung des Sonnenstandes auf einem (ortsfesten) Microcontroller
[http://de.wikipedia.org/wiki/Geographische_Koordinaten geographischen Koordinaten] berechnet werden.  
+
müssen vor allem zwei Probleme gelöst werden:
Es befindet sich hier im wiki zum Download,
+
Der Microcontroller muss die Zeit batteriegepuffert bestimmen können,
benötigt Java 6, und läuft unter Windows, Linux und Mac.
+
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 float rechnet (also 23 Bit Mantisse).
    +
==Die Zeit==
 +
[[Image:Arduino_DS1307_FritzingExport.jpg|thumb|Zeitgeberbaustein DS1307 mit Arduino]]
 +
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
 +
[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, damit
 +
dieser Tag trotz ''Arduinopräzision'' richtig heraus kommt.
 +
 +
Für ältere Arduino IDE (0023 und früher) sollte folgendes Programm plus Libraries verwendet werden:
 +
{{zip|SolarTracker4Arduino.zip|14KB|Version from 09.03.2011}}
 +
 +
Für neuere Arduino IDE (1.0.1 und höher) dagegen folgendes Package:
 +
{{zip|SolarTracker4Arduino1.0.1.zip|17KB|Version from 16.01.2015}}
 +
 +
Sobald man das alles zum Laufen gebracht hat, sollte man verifizieren,
 +
dass die Berechnungen stimmen, zum Beispiel
 +
mit dem [http://www.sunearthtools.com/dp/tools/pos_sun.php solar position calculator] von
 +
sun earth tools. (Achtung: SolarTracker4Arduino berücksichtigt keine Sommerzeit, UT muss eingestellt
 +
sein (beim Einstellen des Timer chips), als ob es sie nicht gäbe. Anderseits kann bei sun earth tools Sommerzeit
 +
berücksichtigt werden (Option DST ist defaultmäßig ausgewählt).
 +
 +
==Alternative Sonnenstandsberechnungen==
 +
===SPA Algorithmus===
 +
Ein wesentlich genauerer aber auch entsprechend komplizierterer Algorithmus
 +
ist die Methode nach Reda, I.; Andreas, A. (2003):
 +
''Solar Position Algorithm for Solar Radiation Applications. NREL Report No. TP-560-34302,
 +
''Revised January 2008. The algorithm is supposed to work for the years -2000 to 6000,
 +
''with uncertainties of +/-0.0003 degrees.''
 +
Ich habe Referenzen und Code bei [http://klaus.e175.net/solarpositioning Klaus Brunner] gefunden.
 +
Dank dieser Sourcen bin ich auch auf PSA aufmerksam geworden.
 +
===Wikipedia Sonnenstand===
 +
Die Berechnung nach den Formeln im Wikipediaartikel [http://de.wikipedia.org/wiki/Sonnenstand Sonnenstand]
 +
konnte ich nicht verifizieren. (Stand Februar 2011).
 +
Ich habe die Formeln im hier vorliegenden Javaprogramm nachvollzogen, alle Zwischenergebnisse
 +
und auch das Endergebnis des Wikiartikels kommt richtig raus; allerdings eben nur für das eine
 +
angegebene Beispiel, bei anderem Datum, Tageszeit oder Ort kommen Werte raus, die
 +
nicht mehr mit [http://www.sunearthtools.com/dp/tools/pos_sun.php?lang=de sunearthtools]
 +
zusammen stimmen.
 +
 +
Zur Kontrolle belasse ich das Programm 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 Kern ist die Java-Klasse
SunCalculations, nützlich als Library beziehungsweise zum Nachschlagen
+
SunCalculations. Die (ebenfalls inkludierten) Junit-Tests sind mit den Beispieldaten
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
 
ausgearbeitet die auf dieser Page angegeben sind, Gleitkomma-Berechnungen
 
sind generell mit double implementiert.
 
sind generell mit double implementiert.
Zeile 22: Zeile 72:  
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 sagt, dass es sich teils um
+
[[Category:Projekte]]
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 weist auch auf genauere
  −
(aber wesentlich kompliziertere) Berechnungen hin und zwar
  −
mit [http://de.wikipedia.org/wiki/VSOP87 Planetentheorie VSOP87].
 
33

Bearbeitungen

Navigationsmenü