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

 
timer chip DS1307 with Arduino

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 starting from 1.Jan. 2000. These calculations I have put into another library (Helios.h)