确定真北

时间:2011-04-10 17:24:45

标签: arduino windows-mobile-gps

我正在开发我正在构建的Arduino设备。 我买了一个GPS模块和一个带加速度计的倾斜感应比较器。

我希望确定真正的北方,以便我总能将物体指向太阳。 基本上我希望设备总能在任何地方找到真正的北方。 GPS会给出一个位置,指南针会找到磁北。我想真正的北方可以在设备移动过程中获得并写入RAM,然后在设备静止时检索使用。

但是怎么样?

2 个答案:

答案 0 :(得分:1)

您是否正在尝试为您的旋转太阳能电池板获得最大的阳光?如果是这样,那么你可以根据你的时钟在东西方之间进行粗略的位置设置(你可以通过将长/纬度位置放入账户以计算太阳升起和太阳落山时间来改善这一点)。如果要精确控制方位角和仰角,则需要进行大量的天文计算。 Arduino不支持双倍,单一你就不会得到非常准确的结果(它们足以用于太阳能电池板跟踪器,但如果你想让望远镜跟踪一些天空物体则不够)。我的建议是要么对该主题进行大量调查,要么查看一些开源天文软件并从源中提取所需的计算(如果许可条款允许)。只是为了给你一个提示,这是PilotLogic TMoon 组件的一个小摘录,您可以在 CodeTyphon / Lazarus / FPC 安装包中找到here:< / p>

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,因此您也不需要指南针。

答案 1 :(得分:0)

当指南针靠近某些磁性材料时会产生干扰,根本不可行。您可以根据您的位置计算太阳的方位角和仰角。在系统中使用一些数字编码器并进行计算增量运动更为实用。 arduino上的校准按钮可用于使用标准工具标准化参数。对于微调,可以提供手动按钮进行上下移动。