Monture téléscope

 1   02

PROJET MONTURE TELESCOPE

 

MESSAOUDI Muhammed-Anis

GAECHTER Hugo

DREYER Loann

 

Sommaire

 

Introduction

Présentation du sujet

Cahier des Charges

Développement

Passer d’un Push-to à un Go-to

Perspectives d’évolution du projet

Gestion de projet

Bilan

Définitions à connaitre

Webographie

Remerciements

 


Introduction

 

NOMS

 

Nous sommes un groupe de 3 étudiants qui avons choisi en tant que projet de 2ème année DUT GEII de réaliser un programme capable d’assister un utilisateur de télescope dans le positionnement de sa monture. Nous avons travaillé pendant 2 semaines sur ce projet, de façon libre tout en aillant accès à l’aide de Mr. HAEBERLE si besoin.

 

⇑Sommaire

 


Présentation du Sujet

 

L’utilisateur devra choisir via un clavier l’étoile qu’il cherche à observer, puis la date, l’heure et le lieu dans lequel il se trouve pour permettre au programme d’afficher via un écran LCD les instructions nécessaires au réglages du télescope, à savoir les degrés d’inclinaisons sur le plan vertical et horizontal. Nous équipons la monture de verniers afin de pouvoir placer ces 2 axes aux bonnes valeurs, manuellement.

Dans un second temps, nous pourront transformer ce système appelé « push-to » (c’est à dire que le système nous fournit les coordonnées mais nous devons déplacer manuellement la monture du télescope) en un système dit « go-to », en ajoutant sur la monture des moteurs commandés par le programme. Ainsi, l’utilisateur n’aura plus qu’à choisir l’étoile qu’il souhaite observer. La date, l’heure et le lieu seront récupérés via un module GPS, et la monture s’orientera d’elle même via les moteurs pour pointer l’étoile.

⇑Sommaire

 


Cahier des Charges

 

Cadre du projet :

 

Besoins :

  • Connaissances techniques à acquérir dans l’astronomie et Mplab
  • Une monture télescope sur laquelle travailler.

But :

  • Le but du projet est de rendre le pointage d’une étoile choisie plus simple pour l’utilisateur de notre monture télescope.
⇑Sommaire

 


Contraintes :

 

De connaissances :

Afin de réaliser le programme de notre projet, il est nécessaire d’avoir des notions de base en astronomie sans lesquelles nous ne pouvons pas comprendre le sens des calculs à effectuer.

 

Mouvements permanent des astres et de la Terre.

Les astres tout comme la Terre sont en permanence en train de se déplacer. Ainsi, aucun des repères des calculs n’est fixe et donc il faut savoir s’adapter.

 

⇑Sommaire

 


Réponses à ces contraintes:

 

Les contraintes de connaissance :

Nous nous sommes appuyés sur le rapport de stage final réalisé il y a plusieurs années (du 6 Mai au 10 Juin 2009) par un ancien étudiant GEII : BIEHLER Stéphane.

Son projet était le même que le notre, à la seule différence qu’il était seul pour le réaliser, mais l’a fait en plus d’un mois.

Ce rapport nous a aidés à comprendre les notions de base d’astronomie : la compréhension de la position et du déplacement d’un objet (une étoile, un astre) par rapport à la Terre et plus particulièrement par rapport à l’endroit où l’on se situe. Un objet est repéré par son ascension droite et sa déclinaison, qui se mesurent respectivement en Heure Minute Seconde, et en Degré Minute Seconde.

La contrainte de mouvements :

La Terre ne tourne pas sur elle-même en 24h exactement mais en 23h 56m 4.09s, ainsi une différence se creuse entre la position d’une étoile entre 2 journées pour une même heure. Pour cette raison, il nous faut passer sur un autre calendrier, le calendrier Julien. Le programme effectue la conversion, suite à quoi on pourra calculer le temps sidéral, car si on connait le temps sidéral et la position de l’observateur, ainsi que les coordonnées de référence de l’étoile à observer, on peut en ressortir l’azimut et l’altitude via les équations de Taki. Ce sont les 2 paramètres finaux que l’on cherche à avoir puisque avec ceux-là, on est capable d’orienter notre monture facilement dans la bonne direction.

⇑Sommaire

 


Objectifs :

 

L’objectif premier du projet est de créer un programme embarqué capable de donner à l’utilisateur des instructions simple (angle horizontal et vertical de sa monture) à mettre en place afin d’observer l’étoile souhaitée.

Il sera ensuite envisageable de réduire au maximum le rôle de l’observateur dans la mise en position de la monture de son télescope, tout d’abord en rajoutant un module GPS capable de récupérer le lieu, la date et l’heure. Ainsi, l’utilisateur n’a plus à rentrer ces paramètres, il n’a plus qu’à choisir l’étoile et ajuster manuellement sa monture.

La plus grande progression possible serait ensuite de transformer ce système push-to en un go-to, en ajoutant des moteurs sur la monture du télescope et des encodeurs sur les axes verticaux et horizontaux, afin que le système se rende automatiquement aux coordonnées d’azimut et d’altitude. Sur un tel système, l’utilisateur n’a plus qu’à sélectionner l’étoile qu’il désire observer. La monture dirigera d’elle même le télescope tel qu’on voit cette étoile en tout lieu, toute heure.

⇑Sommaire

 


Développement

 

Matériel utilisé :

Plaquette

Nous avons programmé sur ce type de plaquette (PIC18F4520). La lecture des coordonnées d’instructions pour orienter correctement la monture se liront sur l’écran LCD, et les informations saisies par l’utilisateur (Date, heure, choix de l’étoile) se feront via un clavier matriciel de ce type raccordé à la plaquette :

 

Clavier matriciel

⇑Sommaire

 


Explications du programme :

 

1.1 L’initialisation

Tout d’abord, il faut définir :

    • La date
    • L’heure
    • L’étoile qu’on souhaite pointer :

Exemple : Coordonnées de Polar

Déclinaison : 89° 16' 0''
Ascension : 2 heures 31 minutes 48 secondes
    • L’endroit où on se situe avec la latitude et la longitude en degré minute d’arc(‘) seconde d’arc( »), qui sont des sous unité du degré :

Exemple : Mulhouse

Latitude : 47° 44' 58''
Longitude : 7° 20' 24''

1.2 Conversion grégorien julien

Notations :

J : jour du mois

M : Mois (janvier M=1, fevrier M=2…)

A : Année

Ent[] : Partie entière de l’expression entre crochets.

Si M=1 ou M=2, on remplace A par A-1 et M par M+12 car janvier et février sont en fait les mois 13 et 14 de l’année précédente.

On calcule :

C=Ent[A/100]

B=2-C+Ent[C/4]

Car la date est une date de calendrier grégorien.

Ensuite on calcule la fraction du jour :

On sait que dans 1 jour il y a 24h , qu’il y a 60 minutes dans 1 heure donc 60*24=1440 puis 60 secondes dans 1 min donc 60*60*24=86400

T=(Heure/24)+(minutes/1440)+(secondes/86400)

Puis avec les calculs qu’on a fait précédemment on peut calculer le jour julien qui est donné par la relation suivante :

JJ = Ent[365,25*(A+4716)] + Ent[30,6001*(M+1)] + J + T + B -1524,5 ;

Remarque : Lorsqu’on passera pour l’affichage des écran LCD on séparera la partie entière et la partie décimal.

Après avoir réussi à calculer le calendrier julien , on va pouvoir passer au temps sidéral.

 

1.3 Temps sidéral

Le temps sidéral sert à éviter un décalage dans le temps car la terre tourne autour du soleil pas en 24h mais en 23h56m4,09s.

Notation :

JJ=Jour julien.

Il faudra calculer le TSMH (temps sidéral) qui sera donné en heure dans cette formule :

TSMH = 18.697374558+(24.06570982441908*((JJ-2451545))

On fait le jour julien -2451545 car le jour julien débute le 01/01/2000 à 12h ce qui correspond à la valeur 2451545.

Lorsqu’on aura calculer le temps sidéral en heure, il faudra ensuite convertir ce résultat en heures minutes secondes.

 

Pour avoir les heures :

heure=(TSMH/24)

floor : correspond à la partie entière de l’heure

TSMH=heure-floor (heure)

TSMH=TSMH*24;

sidereal.h=floor(TSMH);

car 24 heures dans 1 jour.

 

Pour avoir les minutes :

TSMH=TSMH-floor(TSMH)

TSMH=TSMH*60

sidereal.h=floor(TSMH);

car 60 minutes dans 1 heure.

 

Pour avoir les secondes :

TSMH=TSMH-floor(TSMH)

TSMH=TSMH*60

sidereal.h=floor(TSMH);

car 60 secondes dans 1 minute.

 

1.4 Angle horaire

On va passer des coordonnées équatoriales (julien/temps sidéral) en coordonnées horaires (déclinaison /angle horaire).

L’angle horaire permettra par la suite d’avoir l’azimut et l’altitude.

Ce calcul est simplement la soustraction au temps sidéral à Greenwich de la longitude de l’observateur et de l’ascension droite de l’objet à pointer.

Angle horaire= Temps sidéral – Longitude – Ascension droite

 

Angle horaire

 

Rappel : On ne peut pas faire directement la soustraction, car degré minutes secondes différents d’heure minutes seconde.

Difficulté : Le plus dur dans cette étape est de réussir à convertir des heures minutes secondes, que sont l’ascension droite et le temps sidéral, en radians, et des degrés minutes secondes (longitude) en radians.

Pour réaliser cela on a fait appel à des fonctions pour convertir des degrés minutes secondes en radians, fonctions qu’on aura récupérées du programme de Biehler Stéphane.

 

1.5 Azimut et altitude.

Le passage de coordonnées horaire (déclinaison angle horaire) au coordonnées céleste (azimut altitude) se font par les équations de Taki.

Dans la première équation, Le, Me et Ne représentent des coordonnées intermédiaires.

H représente l’angle horaire préalablement calculé et δ représente la déclinaison de l’objet à pointer.

1

On multiplie ensuite la matrice obtenue par une matrice de cosinus et sinus pour obtenir de nouvelles coordonnées Lh, Mh, Nh qui vont servir au calcul de l’azimut et l’altitude.

2

Enfin, on utilise les coordonnées calculées précédemment pour obtenir l’azimut et l’altitude.

3

Une fois qu’on a l’altitude et l’azimut , on a juste à déplacer la monture de façon à bien placer la monture pour pouvoir par la suite regarder l’étoile que l’on souhaite.

 

Sur le PIC18f4520 :

 

1. Initialisation

4

Il faut réaliser les calculs sur le PIC18f4520, pour cela il faut mettre les stacks à 256 car on a des variables doubles (float) et réaliser des calculs si conséquents demande beaucoup de mémoire.

 

2. Conversion grégorien julien

Lorsqu’on a réalisé dans la première partie la conversion grégorien julien, il faut séparer pour la valeur final les entiers et les décimaux.

Voici les lignes de codes à modifier:

5

 

3. Utilisation de l’affichage LCD

Pour l’afficheur LCD, il faut utiliser la bibliothèque printlcd.

On y retrouve une fonction permettant d’écrire le contenu :

ECRIT_CHAINE_d( » A vaut : %d !! « , a) ;

Et une autre qui permet de l’afficher :

AFFICHE_TEXTE(1)

Avec cet exemple, on écrit sur la première ligne avec une seule variable.

Si on veut écrire sur la deuxième ligne avec deux variables :

ECRIT_CHAINE_2d(A : %d et B : %d « , a, b) ;

AFFICHE_TEXTE(2) ;

Pour l’instant, Ecrit_CHAINE ne prend en compte qu’une valeur de 3 chiffres maximum.

⇑Sommaire

 


Réalisation des disques gradués sur la monture :

 

Disque azimutale avec son pointeur :

Pour obtenir des disques gradués de bonne dimensions, nous avons choisi de les dessiner nous-même via le logiciel CorelDraw afin de les réaliser via la découpeuse laser.

Nous avons commencé par dessiner le disque à placer sur l’axe azimutal, d’un diamètre de 32cm. Pour prendre en main le logiciel, nous avons d’abord copié une image de disque gradué existant que nous avons simplement étirée aux bonnes dimensions. Nous avons ensuite du améliorer ce disque en le perçant non plus juste au centre, mais aussi à des endroits bien précis pour laisser passer des vis (4 vis en tout, des trous de 1cm de diamètre). Une fois ces trous bien placés, le disque aux bonnes dimensions, nous nous sommes rendus compte que la précision des traits de l’image n’était pas satisfaisante. Ayant acquis une certaine expérience sur le logiciel, nous sommes maintenant capables de dessiner complètement le disque, en partant du centre pour tracer tout les traits de graduations des degrés (à partir d’une droite verticale, que l’on copie/colle en l’orientant à chaque fois d’un degré de plus que la précédente), ce que nous avons fait pour finalement imprimer la version finale.
Voici le disque gradué pour l’axe azimutal que nous avons réalisé:

Disque 1

Associé à ce disque, nous devons dessiner un pointeur afin de rendre le pointage plus précis. Pour se faire, nous avons du réfléchir à comment intégrer le pointeur sur la monture. Une fois la solution trouvée, nous l’avons dessiner puis imprimer au laser, comme pour le disque. Pour le pointeur nous avons dû palier au 2,5 cm de hauteur entre la base et le disque gradué. Nous avons coller entre elles 5 plaques de bois qui ont chacune 5 mm d’épaisseur qui épousait le disque tournant pour éviter que ça frotte lorsqu’on tourne le disque tournant.

Voici le pointeur que nous avons réalisé:

Rapport Monture

Rapporteur vertical avec son pointeur :

Même principe pour le disque de l’axe vertical, seulement c’est un demi-disque (90°), qui doit laisser passer des vis au niveau de son axe horizontal. Nous avons donc rajouter de la matière en bas à la manière d’un rapporteur, puis imprimer le disque au laser. Celui-ci étant plus petit, la solution de copier une image existante apporte une précision satisfaisante, il n’est pas nécessaire de redessiner complètement chaque trait pour chaque degré nous même.

oihzo
Pour le pointeur de l’axe vertical, il y a eu un obstacle : le support qui permet de mettre une deuxième lunette.
Pour palier ce problème nous avons du tout d’abord faire deux disque plus petit car sinon ça touche le support puis nous avons fais un troisième disque qui est un peu plus haut pour être à la taille du rapporteur puis pour être pile au même endroit que le rapporteur.
Pour cela, nous avons coller entre elles 4 plaques de bois qui ont chacune 5 mm d’épaisseur. Le pointeur épouse la forme du rapporteur pour éviter tout frottement entre elle et le rapporteur.
Le troisième disque, et le pointeur pour l’axe vertical :

pfojpzejfopzofjpezjfopz

 


Passer d’un Push-to à un Go-to

 

Pour passez du mode push-to au mode go-to, nous devons utiliser un moteur pas à pas.

Pour utiliser un moteur pas à pas il faut utiliser un driver pour permettre de piloter le moteur. On pourra choisir ensuite par le biais du driver sa vitesse de rotation et le nombre de pas que l’on souhaite.

AAAAA

Enable: Logique Inversée, permet d’activer ou désactivé le moteur. Etat Haut=High=Moteur actif… et axe bloqué entre les pas. Etat bas=Low=Axe totalement libre

  • M0, M1, M2: Permet de sélectionner la configuration Step/MicroStep. Ces broches disposent de résistances Pull-Down ramenant le potentiel à 0v lorsque rien n’est connecté sur ces broches.
  • Reset: Logique inversée. Permet de faire une réinitialisation du module. Généralement connecté sur la broche « sleep »,
  • Sleep: Logique inversée. Généralement connecté sur la broche « Reset » du module.
  • Step: Envoyer un signal d’horloge (Niveau Haut puis Niveau bas, High puis Low) pour avancer le moteur d’un pas.
  • DIR: Permet d’indiquer la direction de rotation du moteur. Etat Haut=High pour tourner dans un sens, Etat bas=Low pour tourner dans l’autre sens.
  • VMot: Tension d’alimentation. On a utiliser pour cela une alimentation de 12 volts et un courant de 1 A car une bobine fait 500mA et il y a deux bobines donc 1 A
  • GND: Sous « VMOT », masse pour l’alimentation du moteur.
  • A1 A2: Première bobine du moteur pas à pas bipolaire
  • B1 B2: Deuxième bobine du moteur pas à pas bipolaire (voir exemple ci-dessous)

 

Tous les câbles que vous allez brancher sur Step,DIR,M0,M1,M2 vont allez sur le port C ce qui va permettre ensuite de contrôler le driver.

Lorsque vous allez alimenter le PIC il faut utiliser une capacité de 46 µF pour protéger le driver et un radiateur pour éviter qu’il ne chauffe trop rapidement.

 

Pour les moteurs pas à pas, nous avons branché tout ce qui contrôlait le driver sur le port C.

Pour faire fonctionner le moteur pas à pas il faut juste faire un front montant sur le RC0 qui est le step dans les branchements.

PORTCbits.RC0 =PORTCbits.RC0 ^ 1;

Ensuite si vous voulez changer la résolution du moteur pas à pas et passez de 1/1 à 1/32.

Il faut modifier la valeur avec laquelle vous avez branchés le M0,M1,M2 dans la phase d’initialisation.

Résolution de 1 pas :

Vous devez mettre les ports M0,M1,M2 à 0

PORTCbits.RC3= 0;

PORTCbits.RC4= 0;

PORTCbits.RC5= 0;

Résolution de 1/36 pas :

Vous devez mettre les ports M0,M1,M2 à 1

PORTCbits.RC3= 1;

PORTCbits.RC4= 1;

Nous avons réussi à faire un moteur qui va d’une position x a y en fonction du pas et du sens
Pour cela nous avons tout d’abord initialiser :
Azi = 0; Position que l’on souhaite atteindre
PosAct = 270; Position initiale du pointeur
pas = 360.0/200.0; Pas de 1
Tout d’abord nous avons regarder si la valeur de Azi étais supérieure ou inférieure à la valeur que l’on souhaite pointer.

Puis en fonction de cela nous avons choisi soit de tourner dans le sens trigonométrique soit dans le sens inverse.

Par exemple avec cette phase d’initialisation :

if (PosAct > Azi)

{

if ( (PosAct – Azi) >=180.0 )

{

PORTCbits.RC1 = 1; // sens +

x=2*(360-(PosAct-Azi))/pas;

for (j=0; j < floor(x) ; j++ )

{

WaitEvent(ALARM_EVENT0);

ClearEvent(ALARM_EVENT0);

PORTCbits.RC0 = PORTCbits.RC0 ^ 1;//inversion RC0

if (PORTCbits.RC0==1)

{

i++;

if (PosAct ==360.0) /* !!! */

{

PosAct = 0.0;

}

PosAct = PosAct + pas;

}

}

}

Donc nous allons tourner dans le sens trigonométrique car c’est plus rapide d’allez de 270° a 0° en allant du sens trigonométrique car il ne faut que 90° pour qu’il atteigne cette position, contre 270° dans le sens des aiguilles d’une montre, ce qui est très conséquent pour le driver et le moteur pas à pas car il chauffe assez rapidement, pour ensuite le faire en fonction des calculs que nous avons réalisés auparavant avec l’altitude et l’azimut qui permet de pointer la monture là où on le souhaite.

Nous prenons la partie entière du calcul soit pour l’azimut soit pour l’altitude et nous la remplaçons par Azi qui est la position que l’on souhaite atteindre et cela va permettre de faire bouger le moteur du nombre de pas que l’on souhaite


Perspectives d’évolution du projet

 

Tout d’abord, nous avons envisagé pour la partie calcul et l’affichage du menu de réaliser un bus I2C entre 2 microcontrôleurs dont 1 partie s’occupera de la partie calcul et une s’occupera de la partie menu car lorsque nous essayons de fusionner les 2 programmes , le microcontrôleur n’a pas la capacité de mémoire suffisante pour réaliser ces deux tâches.
Puis nous pourrons utiliser un module GPS qui permettra d’avoir directement l’heure et la date au lieu de laisser l’utilisateur les rentrer.
Maintenant qu’on a le programme pour faire tourner le moteur comme on veut en fonction des calculs, nous devons trouver une solution pour implémenter les moteurs sur la monture, c’est à dire trouver à quel endroit et comment les placer sur la monture.
Il faudra ensuite faire en sorte de rajouter des roues de bonnes dimensions pour entrainer les axes avec la rotation du moteur pour obtenir le bon degré de rotation.
Une fois toutes ces perspectives d’évolutions mises en place, nous aurons un vrai système go-to qui sera donc capable de pointer une étoile avec pour seul intervention de l’utilisateur le choix de cette étoile depuis un menu.


Bilan

 

Dans l’ensemble, la direction à donner au projet était claire, nous savions quoi faire et comment le faire. La grosse difficulté de ce projet était de se familiariser avec l’astronomie, un domaine complètement inconnu pour les 3 membres de notre groupe. Ensuite, le succès de notre projet résidait dans la programmation, de ce fait nous avons passer beaucoup de temps à bien comprendre et implémenter les différents calculs, puis la mise en place d’un clavier et de l’écran LCD pour afficher les résultats.

 

Ce projet nous a fait prendre conscience de la difficulté d’aborder un sujet complètement nouveau, malgré le fait que tout les calculs sont déjà faits, expliqués et publiés partout sur internet, on se rend compte que programmer un calcul sans le comprendre n’aboutit jamais.

⇑Sommaire

 


Définitions à connaitre

 

Ascension droite :

Un des deux termes associés au système de coordonnées équatoriales avec la
déclinaison. Elle est l’équivalent sur la sphère céleste de la longitude terrestre. Tout comme la
longitude d’un lieu mesure l’angle entre le méridien de ce lieu et un méridien de référence appelé
aussi méridien principal, l’ascension droite d’un astre mesure l’angle entre le cercle horaire de cet
astre et un cercle horaire de référence. Le point vernal correspond au point de référence où l’angle
vaut zéro. (Exemple Nébuleuse du crabe M1 du catalogue de Messier: asc=5h 34m 31,97s) S’exprime
en radian. (1s d’ascension droite vaut 1/240 degrés et vaut 15s d’arc).

ascension droite

Déclinaison :

Un des deux termes associés au système de coordonnées équatoriales avec l’ascension
droite. C’est l’angle mesuré sur un cercle horaire entre un point de la sphère céleste et l’équateur
céleste. Elle est exprimé en degrés, minutes et secondes d’arc. (Exemple Nébuleuse du crabe M1 du
catalogue de Messier: D= +22° 00’52,1″ où les primes représentent respectivement les minutes et
les secondes d’arc) S’exprime en radian.

 

Calendrier Julien :

Il compte le nombre
de jour depuis la date de sa création il est donc très facile de connaître un intervalle de temps il
suffit simplement de soustraire ses date, alors qu’en calendrier Grégorien il faudrait faire attention
aux années bissextiles etc…

 

Temps sidéral :

Somme de l’ascension droite d’un astre et de sa déclinaison. Il mesure le déplacement de
la voûte céleste en un lieu donné par rapport au méridien local.

 

Azimut :

Axe horizontal autour duquel on tournera la monture du télescope.

 

Altitude :

Axe vertical autour duquel on tournera la monture du télescope.

⇑Sommaire

 


Webographie

 

Voici les liens des sites qui nous ont aider à réaliser notre projet :

Comprendre les unités angulaires
Compréhension des repères
Vérifier si les calculs du programme nous donnent le bon résultat
Aide au calcul pour temps sidéral à Greenwich

⇑Sommaire

 


Remerciements

Nous tenons à remercier notre enseignant Mr HAEBERLE de nous avoir accompagnés et conseillés durant ce projet, et pour nous avoir fourni les documents nécessaires à la réalisation du projet.

⇑Sommaire