3 votes

Déterminer le nord véritable

Je travaille sur un dispositif Arduino que je suis en train de construire. J'ai acheté un module GPS et un compas de détection d'inclinaison avec un accéléromètre.

Je souhaite déterminer le nord vrai afin de pouvoir toujours diriger un objet vers le soleil. En gros, je veux que l'appareil trouve toujours le nord vrai, où qu'il se trouve. Le GPS donnera une position, la boussole trouvera le nord magnétique. Je suppose que le nord vrai peut être obtenu pendant le mouvement de l'appareil et écrit dans la mémoire vive puis récupéré pour être utilisé lorsque l'appareil est stationnaire.

Mais comment ?

1voto

avra Points 2794

Essayez-vous d'obtenir le maximum de soleil pour votre panneau solaire rotatif ? Si c'est le cas, vous pouvez vous contenter d'un réglage approximatif de la position entre l'est et l'ouest en fonction de votre horloge (vous pouvez améliorer cela en prenant en compte la position longitude/platitude pour calculer les heures de lever et de coucher du soleil). Vous aurez besoin de beaucoup de calculs astronomiques si vous voulez contrôler l'azimut et l'élévation avec précision. Arduino ne supporte pas le double, et avec le simple vous n'aurez pas des résultats très précis (ils seront suffisants pour un tracker de panneau solaire, mais pas assez si vous voulez que le télescope suive un objet du ciel). Mon conseil serait soit de faire des recherches sur le sujet, soit de jeter un coup d'oeil à un logiciel d'astronomie open source et d'extraire les calculs nécessaires de la source (si les conditions de licence le permettent). Juste pour vous donner un indice, voici un petit extrait de PilotLogic TMoon que vous pouvez obtenir dans CodeTyphon/Lazarus/FPC paquet d'installation trouvé aquí :

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;

Si votre appareil ne bouge pas après l'installation (ce qui n'est pas le cas après avoir relu votre question, vous pouvez donc ignorer le reste du message), alors votre longitude et votre latitude sont fixes et vous les connaissez au moment de la compilation, ou vous pouvez les saisir manuellement lors de la première installation de l'appareil. De cette façon, le GPS n'est pas nécessaire. Vous pouvez également trouver le Nord une fois au moment de l'installation, donc vous n'avez pas besoin de boussole non plus.

0voto

seccpur Points 2443

La boussole se détraquera lorsqu'elle sera à proximité d'un matériau magnétique et ne sera pas du tout pratique. Vous pouvez calculer l'azimut et l'élévation du soleil par rapport à votre position. Il est plus pratique d'utiliser des encodeurs numériques avec votre système et d'effectuer des mouvements incrémentaux calculés. Un bouton de calibrage sur l'arduino pourrait être utilisé pour normaliser les paramètres en utilisant un outil standard. Pour un réglage fin, des boutons manuels pourraient être fournis pour les mouvements vers le haut et vers le bas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X