# Solar Arduino tracker

German version Sonnenstandsberechner (für sun tracker devices)

# General considerations

To calculate the solar position with a microcontroller (on a fixed geographic place)
you have to solve two problems:
The controller needs a time device (typically a battery buffered chip like in a PC)
and it needs a reasonably simple algorithm to calculate solar azimuth and
elevation from date, time and geographic position (longitude and latitude).
An algorithm which works on a PC might have problems on a microcontroller.
For instance, on Arduino you must take into account that
*double* data type has the same precision as float (IEEE 23 bit mantissa)

## Get the Time

To get Greenwich Time (aka UT) I use a DS1307 chip. Following the description of http://www.glacialwanderer.com/hobbyrobotics/?p=12 it worked immediately. Did not find any 2.2K resistors, 4.7K ones are just as fine. I have taken the code from this site and tucked the complexity into an Arduino libary (DS1307.h)

## Calculate Azimuth and Elevation

To calculate the solar azimuth and elevation exactly
you need very involved formulas. However, for practical
purposes like sun tracking of a heliostat there are
simpler ones available.
Widely used formulas for solar tracking are the one from the so called
PSA-algorithm.
It has been made avaible from *Plataforma Solar de Almeria* (Spain)
and you can download it here as C++ code.
There are adaptions neccessary for Arduino, though.
The formulas for calculating the Juliand Day
are not working properly on Arduino due to reduced double precision.
(Therefore, I have adapted them (expecting only Julians dates from 1.Jan. 2000).
These calculations I have put into another library (Helios.h)