我正在使用我正在構建的Arduino設備。 我買了一個GPS模塊和一個帶有加速度計的傾斜傳感器。確定真北
我想確定真正的北方,這樣我就可以隨時指向一個朝向太陽的物體。 基本上我希望設備在任何地方都能找到真正的北方。 GPS會給出一個位置,指南針會發現磁北。我想真正的北方可以在設備移動期間獲得並寫入RAM中,然後在設備靜止時取回使用。
但是如何?
我正在使用我正在構建的Arduino設備。 我買了一個GPS模塊和一個帶有加速度計的傾斜傳感器。確定真北
我想確定真正的北方,這樣我就可以隨時指向一個朝向太陽的物體。 基本上我希望設備在任何地方都能找到真正的北方。 GPS會給出一個位置,指南針會發現磁北。我想真正的北方可以在設備移動期間獲得並寫入RAM中,然後在設備靜止時取回使用。
但是如何?
您是否想要爲您的太陽能電池板獲得最多的陽光?如果是這樣,那麼您可以根據您的時鐘在東西方之間進行粗略的位置設置(您可以通過在賬戶中獲取長/經緯位置來計算日出和日落時間來改善此情況)。如果你想精確控制方位角和仰角,你將需要大量的天文計算。 Arduino不支持雙倍速度,而且單個你不會有非常準確的結果(它們對於太陽能電池板跟蹤器來說已經足夠了,但是如果你想望遠鏡跟蹤一些天空物體,這還不夠)。我的建議是對這個主題進行大量調查,或者查看一些開源天文軟件,並從源頭上提取所需的計算結果(如果許可條款允許)。只給你一個提示,這是來自PilotLogic TMoon分量小提取物,你可以在CodeTyphon /拉撒路/ FPC安裝包得到發現here:
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,所以你也不需要指南針。
當羅盤靠近一些磁性材料時,羅盤將會出現故障並且根本不會實用。您可以根據您的位置計算太陽的方位角和仰角。在您的系統中使用一些數字編碼器並計算增量運動更實用。使用標準工具可以使用arduino上的校準按鈕來標準化參數。對於微調,可以爲上下運動提供手動按鈕。
磁北和真北似乎夠接近,不是嗎? – fingerman 2011-04-10 17:31:56
時鐘和GPS足夠了嗎?這很棒,因爲GPS和arduino已經有了一個時鐘。是否有我需要用GPS +時鐘確定太陽位置的計算?事實上,當你處於一個固定的位置時,你如何確定你的方向?在一定程度左右? – user701052 2011-04-10 18:06:51
如果沒有指南針,如果它向左或向右轉而不向前或向後移動,您的設備無法準確判斷北。如果您查看手機上的GPS映射軟件或沒有嵌入式指南針的汽車導航儀設備,您可以看到效果。當你左轉或右轉時,你的方向在顯示器上被延遲很多,因爲軟件需要大量的移動來確定方向的改變。 – avra 2011-04-11 09:16:42