Unistellar Evscope : Aide à la collimation

L’aide à la mise au point est un modèle du genre, avec un masque de Bathinov intégré au capot et son utilisation ultra-simplifiée sur une étoile majeure du ciel.

Etoile “mise au point”… Avec “Aigrettes” dues aux branches de support de la caméra.

L’image doit cependant être aussi réglée via la “collimation”, ou le centrage des éléments optiques depuis le miroir au capteur.

La collimation de l’Evscope est aussi simplifiée, vu qu’il n’y a pas de miroir secondaire (comme dans un Newton classique) et que la “position” des éléments, fixée une fois pour toute, ne change pas.

C’est pour cela que Unistellar a publié une méthode très “intuitive” pour le réglage…

Méthode de collimation “visuelle”

On règle ainsi empiriquement la position du miroir pour que la “croix” se trouve “le plus possible” centrée.
Vu la focale, la méthode fonctionne assez bien… Mais une collimation imparfaite aura toujours une influence sur les images… Surtout les détails !

Comment améliorer la collimation ?

D’abord, la vérifier souvent ! Après un simple trajet en voiture, il y a de grandes chances qu’elle soit à refaire…

Ensuite, espérer qu’il y a un ciel pas trop perturbé… Collimater via cette méthode avec une “tache” ou une étoile qui “saute” sur un écran de smartphone, pas simple…

Choisir une étoile “lumineuse et stable” (vers le zénith), ce qui garantir mieux la stabilité, ne simplifie cependant pas l’opération à faire avec une clé “sous” le télescope…

Donc, il vaut mieux viser une étoile majeure (de préférence proche de mag 0) située à 45-55° d’inclinaison… Ensuite, effectuer le réglage comme indiqué…

Est-ce que l’on est optimal dans le réglage ?

C’est là qu’un petit outil développé rapidement peut aider…

Je présente ici la version 1.0 de l’outil sous deux formes (.net et Python)
et pour Windows, et “simplifiée” pour l’usage de l’Evscope.

Pourquoi ce choix ? Simple…
– tout d’abord, j’utilise très souvent la version de l’APP sous émulateur Android, ce qui me procure beaucoup d’avantages pratiques
– ensuite, la calibration sur un “tout petit” écran, pas trop terrible… Mieux vaut avoir un “grand” écran pour l’estimer.

L’outil est ultra simple à utiliser (inutile de faire compliqué), je me suis librement inspiré d’un outil que j’utilisais jadis : le “Al’s Collimation Aid (for imaging)” pour rapidement créer celui-ci…

Et une fois n’est pas coutume, j’ai aussi utilisé des fonctions .net pour le réaliser. PQ au sein d’un site dédié à Python ?
– En soi, rien de mieux pour gérer un Windows que Windows…
– Le code est de toute façon ultra court…
– il peut ainsi être distribué sous la forme d’un “setup” standard de Windows.

Mais ensuite, je fournirai aussi une version Python du même outil.

Version VB .net / Windows

Public Class Form1
    Dim xc, yc, ExternalRadius As Short
    Private Sub Label3_Click(sender As Object, e As EventArgs)
    End Sub
    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
    End Sub

    Private Sub OutCircle_ValueChanged(sender As Object, e As EventArgs) Handles OutCircle.ValueChanged
        ExternalRadius = Me.OutCircle.Value
        Me.Invalidate()
    End Sub

    Private Sub Transparency_ValueChanged(sender As Object, e As EventArgs) Handles Transparency.ValueChanged
        'Adjust the opacity of the form based on the "luminance" control value
        Me.Opacity = Transparency.Value / 100
    End Sub

    Dim COn, IOn, OOn As Boolean
    Dim varFont As Font = New Font("arial", 10)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Initialise Opacity
        Transparency.Value = 80
        'Initialise the radius of the outer circle
        ExternalRadius = 50
    End Sub

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        'Evaluate window's center & translate them as origin of drawing
        xc = (Me.Width - 8) / 2
        yc = (Me.Height - 26) / 2
        e.Graphics.TranslateTransform(xc, yc)
        'Define line color and width 
        Dim penRed As New Pen(Brushes.Red, 3)
        'Draw lines (x,y,width,height)
        e.Graphics.DrawLine(penRed, 0, 5, 0, ExternalRadius)
        e.Graphics.DrawLine(penRed, 0, -5, 0, -ExternalRadius)
        e.Graphics.DrawLine(penRed, 5, 0, ExternalRadius, 0)
        e.Graphics.DrawLine(penRed, -5, 0, -ExternalRadius, 0)
        'Draw external circle
        e.Graphics.DrawEllipse(penRed, -ExternalRadius, -ExternalRadius, 2 * ExternalRadius, 2 * ExternalRadius)
    End Sub
End Class

Avec une “form” définie comme ceci :

“Form1” design, avec deux champs “NumericUpDown” et deux labels

En pratique, il suffit ensuite :
– de régler l’opacité (bouton de gauche) pour permettre de voir à la fois l’image de l’Evscope et la croix dessinée
– déplacer le centre sur l’image…
– régler la taille du cercle pour faire “coller” les deux.

Ensuite :

Mal calibré…
Bien calibré…

Difficile de faire plus simple, et cela permettra de vérifier la bonne collimation de manière très objective…

Setup file (testé sous Win10) : EvscopeCollimTool_V1.0.zip

Version Python/TK / Windows

# -*- coding: utf-8 -*-
"""
Created on Monday 15-02-2022

@author: TtfOnWeb
"""
import tkinter as tk 

def close():
    global window
    window.destroy()

def OpacityPlus():
    v = int(LuminanceVar.get())
    if v < 100:
        v += 1
    LuminanceVar.set(v) 
    window.wm_attributes("-alpha", v/100)

def OpacityMinus():
    v = int(LuminanceVar.get())
    if v > 0:
        v -= 1
    LuminanceVar.set(v)
    window.wm_attributes("-alpha", v/100)

def RadiusPlus():
    v = int(ExternalRadiusVar.get())
    if v < 100:
        v += 1
    ExternalRadiusVar.set(v) 
    yc = int(cnv.winfo_reqheight()/2)
    xc = int(cnv.winfo_reqwidth()/2)
    v = int(ExternalRadiusVar.get())
    cnv.delete("all")
    cnv.create_oval(xc-v, yc-v, xc+v, yc+v,outline="red",width=3)
    cnv.create_line(xc-v,yc,xc+v,yc, fill="red",width=3)
    cnv.create_line(xc,yc-v,xc,yc+v, fill="red",width=3)
    cnv.pack

def RadiusMinus():
    v = int(ExternalRadiusVar.get())
    if v > 0:
        v -= 1
    ExternalRadiusVar.set(v)
    yc = int(cnv.winfo_reqheight()/2)
    xc = int(cnv.winfo_reqwidth()/2)
    v = int(ExternalRadiusVar.get())
    cnv.delete("all")
    cnv.create_oval(xc-v, yc-v, xc+v, yc+v,outline="red",width=3)
    cnv.create_line(xc-v,yc,xc+v,yc, fill="red",width=3)
    cnv.create_line(xc,yc-v,xc,yc+v, fill="red",width=3)
    cnv.pack

#define main screen window = tk.Tk()
window = tk.Tk()

window.geometry('500x300')
window.title('Collimation Tool V1.0')
window.protocol('WM_DELETE_WINDOW',close)

window.wm_attributes("-topmost", True)
#set initial window transparency to 80%
window.wm_attributes("-alpha", 0.8)

#Define storage input field
LuminanceVar = tk.IntVar(window, value=60)
ExternalRadiusVar=tk.IntVar(window,value=50)

#define 1 "grid area and 1 canva (graphic) area"
cnv = tk.Canvas(window)
frame = tk.Frame(window)

#Grid structure
#frame col 0, canvas : col 1
frame.grid(row=0,column=0, sticky="n")
cnv.grid(row=0,column=2)

#Frame contents
tk.Label(frame,text="Opacity").grid(row=0,column=0)
LuminanceVarInput = tk.Entry(frame, textvariable=LuminanceVar,width=3)
LuminanceVarInput.grid(row=1)
tk.Button(frame,text="+",command=OpacityPlus).grid(row=2,column=0)
tk.Button(frame,text="-",command=OpacityMinus).grid(row=2,column=1)

tk.Label(frame,text="Size").grid(row=3,column=0)
ExternalRadiusVarInput = tk.Entry(frame, textvariable=ExternalRadiusVar,width=3)
ExternalRadiusVarInput.grid(row=4)
tk.Button(frame,text="+",command=RadiusPlus).grid(row=5,column=0)
tk.Button(frame,text="-",command=RadiusMinus).grid(row=5,column=1)

yc = int(cnv.winfo_reqheight()/2)
xc = int(cnv.winfo_reqwidth()/2)
v = int(ExternalRadiusVar.get())
cnv.delete("all")
cnv.create_oval(xc-v, yc-v, xc+v, yc+v,outline="red",width=3)
cnv.create_line(xc-v,yc,xc+v,yc, fill="red",width=3)
cnv.create_line(xc,yc-v,xc,yc+v, fill="red",width=3)
cnv.pack

window.mainloop()

La “forme” générée est proche de la première (simplifiée pour ne pas y passer trop de temps)

Collimation Ok
Collimation NOK

L’exécution ici exploite les “caractéristiques” propres à Windows. Si on veut porter le code vers d’autres plateformes, il faudra peut-être revoir une ou deux paramètres.

Sur Smarphone et tablette

Il faudra essayer de porte le code ci-dessus pour tester si on peut lancer l’exécution sous Android ou IOS.

Sinon, jamais utilisé, mais cela existe déjà en partie :

Collimation Aid 
Pour Android
https://baixarapk.gratis/en/app/1059878623/collimation-aid
(mais je n’aime pas trop les apk, perso…)

Pour Mac OS
https://apps.apple.com/us/app/collimation-aid/id1059878623?mt=12µ

Application sur IOS