Aller au contenu

Calcul position planètes: code d'exemple C/C++ optimisé arduino


Messages recommandés

Posté

Bonjour,

 

Je suis en train d'essayer de programmer un petit controleur GOTO pour une EQ3...

Mais je voulais rajouter la position des planètes, ne trouvant pas de code C/C++ facile à utiliser sur internet, j'ai refait le truc...

Je voulais juste poster le lien ici pour ceux qui aurait le meme problème dans el futur!

 

http://brebisson.ddns.net/eq3-goto-controler/calculate-planet-positions-from-earth-code-in-cc

 

Cyrille

  • Merci / Quelle qualité! 3
Posté

Le VSOP ne rentrera jamais dans le peu de mémoire disponible dans un arduino !!!

 

(et je le préfère en bouteille d’ailleurs).

Posté
Le 22/09/2023 à 13:05, keymlinux a dit :

Pour un projet de push-to perso j'avais utilisé la librairie arduino "Ephemeris" de @Mala voir ici https://github.com/MarScaper/ephemeris

 

Cordialement


Mais c’est bien precisé :

 

Due to VSOP87 and ELP2000 implementation, code needs too much flash memory for classic Arduinos (Uno, etc).
Posté
Il y a 9 heures, Fred_76 a dit :

Mais c’est bien precisé :

 

 

Citation

Due to VSOP87 and ELP2000 implementation, code needs too much flash memory for classic Arduinos (Uno, etc).

 

Tout a fait, mais je n'ai pas prétendu le contraire 😇, et çà passe bien sur un Arduino Mega, que j'ai utilisé et pas seulement pour les contraintes mémoires de la librairie Ephemeris, pour plein d'autres raisons dont le nombre de ports série (pour les modules gps et bluetooth), le nombre de ports gérant les interruptions (pour les encodeurs), etc...

 

  • J'aime 1
Posté

sinon tu peux effectuer tes calculs via les éléments orbitaux qui consomment beaucoup moins de mémoire mais la précision sera moindre.. Après, pour un push-to sur une eq3 c'est peut être bien suffisant (c'est très bien expliqué dans le livre de Jean Meeus Astronomical Algorithms et tu trouveras plein de ressources sur le net pour l'implémentation).

Posté

Bonjour,

 

He, oui, comme vos messages le montre, il y a des ressources, mais, soit elles ne sont pas adaptées a un petit CPU, soit c'est des info "générales" sans code qui marche, ou avec du code dans des langages qui ne sont pas adaptés...

 

D'ou ma page avec du code C directement utilisable, et qui marche dans un arduino 🙂

 

Cyrille

  • J'aime 1
  • 3 semaines plus tard...
Posté

Bonjour,

Je suis d'accord, quelque soit la théorie planétaire utilisée (VSOP82, VSOP87, VSOP2000, VSOP2013, INPOP21...) les données sont trop lourdes.
Il est aussi dit dans "Introduction aux éphémérides et phénomènes astromomiques" : je cite "Par contre, les éléments moyens ne servent pas à calculer des éphémérides des planètes, même approchées" (Jean Meeus dit la même chose).
Du coup aucun VSOP ne sert à créer les éphémérides, c'est INPOP21 que sert à ça (Intégrations Numériques).

Par contre il est quand même dit que pour des applications restant relativement précises pour des astronomes amateurs VSOP87 doit suffir (VSOP2013 reste plus précis mais je ne sais pas m'en servir).

Je pense que deux solutions pourraient être testées :
1) placer les fichiers de données VSOP87 sur une carte SD et les lire pour effecteur les calculs avec l'arduino (Mais même là le code en lui-même risque d'être un peu gros)
2) utiliser les éphémérides les plus précisses possibles (INPOP21) déjà calculées (sur la période qui vous intéresse). Et faire des interpolations entre deux données connues. Ou encore mieux faire une Interpolation par la formule de Bessel (beaucoup plus précise) voir ici

 

Posté

Bonjour,

 

Je stoque les positions sur 3 bytes, 24 bits, 12 bits pour l'AD et 12 pour la dec, j'ai donc une precision de 360/4096=5 minutes sur le stockage (ce qui sufit grandement pour de l'astronomie amateur et pour trouver un objet).

note: ceci est la precision de stockage pour les objets, pas la précision de pointage.

 

les planetes bougent beaucoup. il faudrait donc au moins un point par semaine par planete donc 8*52*3=1248 bytes par an. Plus le code d'interpolation...

Ma dernière version de code de calcul (valable pour 100 ans) prend 1.5kb...

 

D'un autre coté, il sera plus lent que de faire un accès dans une table et une interpolation!

 

C'est donc, pour le moment, toujours la meilleur solution je pense (pour un arduino ou autre système a faible capacité).

Cyrille

Posté
Le 16/10/2023 à 17:39, Morgatte a dit :

Je pense que deux solutions pourraient être testées :
1) placer les fichiers de données VSOP87 sur une carte SD et les lire pour effecteur les calculs avec l'arduino (Mais même là le code en lui-même risque d'être un peu gros)
2) utiliser les éphémérides les plus précisses possibles (INPOP21) déjà calculées (sur la période qui vous intéresse). Et faire des interpolations entre deux données connues. Ou encore mieux faire une Interpolation par la formule de Bessel (beaucoup plus précise) voir ici

Aucun intérêt d'utiliser une carte SD:  coût, lenteur, câblage et lourdeur de codage supplémentaire. Pour une réalisation perso pas cher, le mieux est de partir sur un Arduino Mega pour les raisons déjà évoquées par @keymlinux.

De même VSOP87 est largement suffisant pour du pointage. Le problème n'est pas la précision de la méthode de calcul en soit, c'est plus l'optimisation de la précision des calculs pour processeur 8bits.

 

Perso, après divers tests, j'avais opté pour une carte d'imprimante 3D compatible Mega (Type MKS) à l'époque. Pour 40€, on a une carte avec drivers de moteur pas à pas intégré et accès à toutes les goodies du monde Arduino.

 

Après si on veut vraiment partir sur un Arduino de base c'est un choix. Encore faut-il s'assurer qu'il dispose d'un vrai quartz pour la précision du pilotage. Et là bien souvent ça part en cacahouète. Le supplice du sèche cheveux est infaillible si on a le moindre doute sur une chinoiserie...

https://www.em10-usd-arduino-takahashi.eliotis.com/blog/index_files/controler-la-frequence-d-un-arduino.html

Posté

Bonjour,

 

J'ai testé mes arduinos, et ils ont environ 0.07% de drift horaire. i.e: sur 1h de suivit, soit 37s d'angle sur 1h...

avec une pose de 1mn, c'est 0.6s d'angle...

 

J'ai donc ajouté un système de compensation qui me met le drift sous les 1/1000 de %...

 

Cyrille

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.