Вы пытаетесь получить максимум солнца для своей вращающейся солнечной панели?Если это так, то вы можете избежать грубых настроек положения между Востоком и Западом в соответствии с вашими часами (вы можете улучшить это, приняв в расчет позицию long / lat для расчета времени восхода и захода солнца).Вам понадобится много астрономических расчетов, если вы хотите точно контролировать азимут и высоту.Arduino не поддерживает двойной, а с одним у вас не будет очень точных результатов (их будет достаточно для трекера солнечных батарей, но недостаточно, если вы хотите, чтобы телескоп отслеживал какой-либо небесный объект).Я бы посоветовал либо много исследовать по этой теме, либо взглянуть на какое-то программное обеспечение для астрономии с открытым исходным кодом и извлечь необходимые вычисления из источника (если позволяют условия лицензии).Просто чтобы дать вам подсказку, это небольшая выдержка из компонента PilotLogic TMoon , которую вы можете получить в CodeTyphon / Lazarus / FPC найден установочный пакет здесь :
procedure Sun_Position_Horizontal(date:TdateTime; longitude,latitude: extended; var elevation,azimuth: extended);
var
pos1: T_Coord;
begin
pos1 := sun_coordinate(date);
calc_horizontal(pos1,date,longitude,latitude);
end;
function sun_coordinate(date:TDateTime):t_coord;
var
l,b,r: extended;
lambda,t: extended;
begin
earth_coord(date,l,b,r);
(* convert earth coordinate to sun coordinate *)
l := l+180;
b := -b;
(* conversion to FK5 *)
t := (julian_date(date)-2451545.0)/365250.0*10;
lambda:=l+(-1.397-0.00031*t)*t;
l := l-0.09033/3600;
b := b+0.03916/3600*(cos_d(lambda)-sin_d(lambda));
(* aberration *)
l := l-20.4898/3600/r;
(* correction of nutation - is done inside calc_geocentric *)
{ calc_epsilon_phi(date,delta_phi,epsilon); }
{ l := l+delta_phi; }
(* fill result and convert to geocentric *)
result.longitude := put_in_360(l);
result.latitude := b;
result.radius := r*AU;
calc_geocentric(result,date);
end;
procedure calc_horizontal(var coord:t_coord; date:TDateTime; longitude,latitude: extended);
var
h: extended;
begin
h := put_in_360(star_time(date)-coord.rektaszension-longitude);
coord.azimuth := arctan2_d(sin_d(h), cos_d(h)*sin_d(latitude)-
tan_d(coord.declination)*cos_d(latitude));
coord.elevation := arcsin_d(sin_d(latitude)*sin_d(coord.declination)+
cos_d(latitude)*cos_d(coord.declination)*cos_d(h));
end;
Если у вас был случай, когда ваше устройство не двигалось после установки (это не так после того, как я перечитал ваш вопрос, чтобы вы могли игнорировать остальную часть сообщения), тогдаваша долгота и широта фиксированы, и вы знаете их во время компиляции, или вы можете ввести их вручную, когда устройство впервые установлено.Таким образом, GPS не нужен.Вы также можете найти Север один раз во время установки, так что вам также не нужен компас.