我正在构建一个Arduino设备。我买了一个GPS模块和一个带加速度计的倾斜感应比较器。
我希望确定真北,这样我就可以始终将物体指向太阳。基本上,我希望设备总是找到真正的北,无论它在哪里。全球定位系统会给出位置指南针会找到磁北。我猜真正的北可以在设备移动时获得,并写入RAM,然后在设备静止时检索以供使用。
但是怎么做呢?
发布于 2011-04-11 17:09:47
您是否正在尝试为您的旋转太阳能电池板获得最多的阳光?如果是这样,那么你可以根据你的时钟在东西方之间进行粗略的位置设置(你可以通过将长/后位置放入帐户来计算日出和日落时间来改善这一点)。如果你想精确地控制方位角和仰角,就需要进行大量的天文计算。Arduino不支持double,使用single你不会得到非常准确的结果(对于太阳能电池板跟踪器来说,它们就足够了,但如果你想让望远镜跟踪一些天空物体,它们就不够了)。我的建议是,要么对这个主题进行大量调查,要么看看一些开源的天文学软件,并从源代码中提取所需的计算(如果许可条款允许)。给你一点提示,这是从CodeTyphon/Lazarus/FPC installation package found 中获得的PilotLogic TMoon组件的一小段摘录
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了。您还可以在安装时查找一次North,因此您也不需要指南针。
发布于 2016-09-13 22:44:28
当指南针接近一些磁性材料时,它会变得乱七八糟,根本不实用。您可以计算太阳相对于您所在位置的方位角和高度。在您的系统中使用一些数字编码器并进行计算的增量移动更为实用。arduino上的校准按钮可用于使用标准工具对参数进行标准化。对于微调,可以提供手动按钮用于上下移动。
https://stackoverflow.com/questions/5613466
复制相似问题