2011-04-10 5 views
3

Je travaille sur un appareil 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 vrai nord afin que je puisse toujours pointer un objet vers le soleil. Fondamentalement, je veux que l'appareil trouve toujours le vrai nord où que ce soit. Le GPS donnera une position, la boussole trouvera le nord magnétique. Je suppose que le vrai nord peut être obtenu au cours du mouvement de l'appareil et écrit dans la RAM puis récupéré pour une utilisation lorsque le dispositif est à l'arrêt.Déterminer le vrai nord

Mais comment?

+0

Le nord magnétique et le vrai nord semblent assez proches, non? – fingerman

+0

Une horloge et un GPS suffisent? C'est super, puisque le GPS et l'Arduino ont déjà une horloge. Y at-il un calcul dont j'ai besoin pour déterminer la position des soleils n'importe où avec seulement GPS + Horloge? En fait, dans une position stationnaire, comment déterminez-vous votre direction? à un degré ou plus? – user701052

+0

Sans boussole, votre appareil ne peut pas déterminer précisément le nord s'il tourne à gauche ou à droite sans avancer ou reculer. Vous pouvez voir l'effet si vous jetez un oeil à un logiciel de cartographie GPS sur un téléphone mobile ou un dispositif de navigation automobile sans boussole intégrée. Lorsque vous tournez à gauche ou à droite, votre direction est beaucoup retardée sur un écran, car le logiciel a besoin d'un mouvement important pour déterminer le changement de direction. – avra

Répondre

1

Essayez-vous d'obtenir le plus de soleil pour votre panneau solaire rotatif? Si c'est le cas, vous pouvez vous en sortir en réglant simplement la position entre l'Est et l'Ouest en fonction de votre horloge (vous pouvez améliorer cela en prenant la position long/lat dans le compte pour calculer les heures d'ensoleillement). Vous aurez besoin de beaucoup de calculs d'astronomie si vous voulez contrôler l'azimut et l'élévation avec précision. Arduino ne supporte pas le double, et avec single vous n'aurez pas de résultats très précis (ils suffiront pour le tracker du panneau solaire, mais pas assez si vous voulez que le télescope puisse suivre un objet du ciel). Mon conseil serait soit d'enquêter beaucoup sur le sujet, ou de jeter un coup d'œil sur un logiciel d'astronomie open source et d'extraire les calculs nécessaires de la source (si les termes de la licence le permettent). Juste pour vous donner une idée, voici un petit extrait de PilotLogic composant TMoon que vous pouvez obtenir dans CodeTyphon/Lazarus/FPC package d'installation trouvé 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; 

Si vous aviez un cas que votre appareil ne bouge pas après l'installation (ce qui n'est pas le cas après avoir relu votre question pour que vous puissiez ignorer le reste du message), votre longitude et votre latitude sont corrigées et vous les connaissez au moment de la compilation. est d'abord installé. De cette façon, le GPS n'est pas nécessaire. Vous pouvez également trouver Nord une fois au moment de l'installation, donc vous n'avez pas besoin de boussole non plus.

0

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

Questions connexes