Un chercheur est très utile en spectroscopie : il se substitue au guideur pour le pointage lorsque la focale de l'instrument devient conséquente (> 2 m). Ce projet décrit la motorisation complète d'un chercheur Evoguide 50ED en utilisant des composants peu onéreux, que l'on trouve facilement sur les sites de commerce en ligne.
1. Introduction
En astrophotographie, la mise au point est l'un des réglages les plus délicats. Toucher la molette du porte-oculaire fait vibrer le tube, la température fait dériver le foyer au fil de la nuit, et les routines d'autofocus des logiciels d'acquisition ont besoin d'un moteur qu'elles peuvent piloter seules. Les focusers motorisés du commerce font très bien ce travail, mais leur prix dépasse souvent celui d'un bon oculaire.
Ce projet propose une alternative entièrement maison, construite autour de composants très répandus :
- un Arduino Mega 2560 (ici en version compacte « PRO Mini »), relié au PC par USB ;
- un moteur pas à pas 28BYJ-48 5 V et sa carte pilote ULN2003, vendus ensemble pour quelques euros ;
- un boîtier et un collier de fixation imprimés en 3D ;
- un driver ASCOM écrit en C#.
Cette résolution découle de la chaîne de transmission. Le moteur fait 4 076 demi-pas par tour ; son pignon (diamètre primitif de 23 à 26 mm) entraîne une couronne de 80,2 mm fixée sur la bague de mise au point, soit un rapport d'environ 3,3. Il faut donc près de 13 000 pas pour un tour de bague : avec un hélicoïde de 1 mm par tour, chaque pas déplace le foyer d'environ 0,07 µm, très en dessous de la zone de netteté de ±30 µm à f/4,8. Le détail du calcul figure dans la partie Arduino.
Le focuser est absolu : il connaît en permanence sa position, la mémorise en EEPROM et la retrouve après une coupure de courant. Il compense le jeu mécanique (backlash) et coupe l'alimentation des bobines à l'arrêt pour que le moteur ne chauffe pas. Il a été pensé pour passer l'outil de validation officiel ConformU.
Câblage
Le schéma est volontairement minimaliste : quatre fils de commande entre l'Arduino et l'ULN2003, une masse commune, et une alimentation 5 V pour le moteur issue de l'Arduino Mega.
| Arduino Mega | Carte ULN2003 |
|---|---|
| D12 | IN1 |
| D10 | IN2 |
| D8 | IN3 |
| D6 | IN4 |
| GND | − (et GND de l'alimentation 5 V) |
| 5V | + : alimentation 5 V, 500 mA minimum |
2. Les pièces imprimées en 3D (fichiers STL)
Les pièces sont fournies sous forme de fichiers STL, prêts à trancher. Leur géométrie a été validée par une série de contrôles automatiques : collisions, épaisseurs, orientation des cartes et passage des connecteurs.
Télécharger tous les fichiers STL (zip, 1,4 Mo)
Le carter électronique
Le boîtier principal regroupe la Mega 2560 PRO Mini et l'ULN2003 sur un seul niveau, angles arrondis R5.
| Fichier | Rôle |
|---|---|
Carter_Base.stl | Base |
Carter_Couvercle.stl | Couvercle |
- Encombrement : 110,7 × 56 × 24,6 mm, plus un berceau USB de 9 mm, soit 119,7 mm hors tout. Environ 26 g de PLA.
- Mega posée sur quatre bossages de 3 mm (deux vissés, deux simples appuis) qui dégagent les soudures. Les deux appuis supplémentaires empêchent la carte de basculer, ses deux trous de fixation étant du même côté.
- ULN2003 vissée sur quatre plots, avec 13 mm de dégagement pour enficher la nappe moteur et des Dupont coudés.
- Prise USB directe : le cordon traverse la paroi par une ouverture de 12 × 9 mm et se branche dans le micro-USB de la carte. Autour de l'ouverture, la paroi est amincie à 1,2 mm pour que la fiche atteigne le connecteur.
- Berceau extérieur en U : il soutient la fiche, et un serre-câble passé dans deux fentes bride le câble pour que rien ne tire sur le connecteur soudé.
- Sortie du câble moteur par une demi-lune de ⌀ 7 mm au plan de joint.
- Fixation par deux vis M3 dans le fond, entraxe 35 mm, têtes noyées.
Le boîtier ne prévoit pas encore d'entrée dédiée pour le 5 V moteur. Le plus simple est de faire passer les deux fils par la demi-lune du câble moteur ; on peut aussi percer un jack sur la paroi droite, qui est libre.
Une variante plus petite, le carter ULN2003 seul (52,2 × 49,5 × 29,6 mm), loge uniquement la carte pilote pour ceux qui gardent l'Arduino ailleurs. Elle utilise le même entraxe de fixation de 35 mm.
Le collier de fixation sur le chercheur
Le carter se fixe sur le tube du chercheur (⌀ 56,30 mm) à l'aide d'un collier en deux demi-coquilles cylindriques serrées par quatre vis M4.
| Fichier | Rôle |
|---|---|
Collier_Long_Haut.stl | Coquille haute, qui porte le plateau du carter |
Collier_Long_Bas.stl | Coquille basse |
- Encombrement : 80,4 × 46 × 82,9 mm, environ 42 g de matière.
- Carter dans l'axe du tube, posé sur un plateau de 46 × 46 mm.
- Embase surélevée de 22 mm au-dessus du tube, pour passer au-dessus des colliers de la lunette.
- Vis de serrage tête par dessus, accessibles même carter monté.
- Anneau cylindrique ⌀ 65,5 mm.
L'alésage fait 56,50 mm et il reste 1 mm de jeu par coquille au plan de joint : c'est ce jeu qui permet aux vis de réellement pincer le tube. Les écrous M4 sont captifs dans des logements hexagonaux, aucune clé n'est nécessaire de leur côté.
Le collier s'imprime sur le flanc, axe du tube vertical. Comme son profil est strictement constant sur toute la largeur, chaque couche est identique à la précédente : aucun porte-à-faux, et un anneau vraiment rond sans support. Les couches se retrouvent en outre perpendiculaires à l'effort de serrage, là où une pièce imprimée est la plus résistante.
La transmission
La bague de mise au point de l'Evoguide est entraînée par une couronne à denture en chevrons (55 dents, diamètre primitif 80,2 mm) serrée sur la bague, et par un petit pignon calé sur l'axe du 28BYJ-48. Le support moteur se serre sur le corps du chercheur ; ses deux fentes en arc permettent de faire pivoter le moteur pour régler l'engrènement et limiter le jeu. Ces pièces sont adaptées du modèle Belt-less, helical gear focuser publié sur Printables.
Paramètres d'impression
| Pièce | Réglages | Matière |
|---|---|---|
| Carters | couche 0,2 mm, 3 périmètres, remplissage 20 %, sans support | PLA, ou PETG si le matériel reste dehors la nuit |
| Colliers | couche 0,2 mm, 3 périmètres, remplissage 40 %, sans support | PETG conseillé : le PLA flue sous serrage permanent |
Les STL sont livrés déjà orientés pour l'impression : il ne faut pas les tourner dans le trancheur.
Visserie
| Qté | Vis | Usage |
|---|---|---|
| 2 | M3 × 6 | Mega sur ses bossages |
| 4 | M3 × 8 | ULN2003 sur ses plots |
| 4 | M3 × 12 | couvercle du carter |
| 2 | M3 × 10 | carter sur le collier |
| 4 + 4 | M4 × 20 CHC + écrous M4 | serrage du collier |
| 1 | serre-câble 3,6 mm | bridage du cordon USB |
Ordre de montage : visser d'abord le carter sur son collier, depuis l'intérieur, avant d'installer les cartes : les deux vis M3 se trouvent ensuite sous l'électronique et ne sont plus accessibles.
3. Le programme Arduino Mega
Le firmware FocuserMega.ino ne dépend d'aucune bibliothèque externe, seulement de EEPROM.h fournie avec l'IDE.
Installation
- Ouvrir
Arduino/FocuserMega/FocuserMega.inodans l'IDE Arduino. - Choisir la carte Arduino Mega or Mega 2560, processeur ATmega2560.
- Téléverser.
Au premier démarrage, le firmware écrit ses valeurs par défaut en EEPROM et se place à mi-course (32767 sur 65535). La position est sauvegardée automatiquement une seconde après chaque arrêt du moteur.
Fonctionnement
- Pilotage en demi-pas (séquence à 8 phases), soit 4 075,8 pas par tour de l'axe de sortie du 28BYJ-48 (rapport réel du réducteur 63,684:1, souvent arrondi à 4096).
- Mouvements non bloquants : la commande
MOVErend la main immédiatement et le moteur avance dans la boucle principale, ce qui permet d'interroger la position ou d'envoyerHALTà tout moment. - Compensation du backlash : le firmware dépasse systématiquement la cible puis revient, si bien que la position finale est toujours atteinte dans le même sens.
- Coupure des bobines à l'arrêt (désactivable) pour éviter l'échauffement.
- Vitesse réglable : 1500 µs par demi-pas par défaut, soit environ 660 pas/s. En dessous de 1100 µs, le moteur commence à décrocher.
Le protocole série
La liaison fonctionne à 57600 bauds, 8N1, avec une commande ASCII par ligne terminée par \n. Chaque réponse tient sur une ligne, et une erreur renvoie ERR:<code> (BADARG, RANGE, BUSY, UNKNOWN, OVERFLOW). On peut donc tout tester au moniteur série de l'IDE, fin de ligne réglée sur « Nouvelle ligne » :
PING → PONG:AFOC1
GETPOS → POS:32767
MOVE:33000 → OK
ISMOVING → MOV:1
STATUS → ST:32812,33000,1,65535,0
HALT → OK
| Commande | Réponse | Rôle |
|---|---|---|
PING | PONG:AFOC1 | Identification |
GETVER | VER:1.0.0 | Version du firmware |
STATUS | ST:pos,cible,moving,max,backlash | État complet en une requête |
GETPOS / GETTGT | POS:n / TGT:n | Position courante / cible |
ISMOVING | MOV:0|1 | Mouvement en cours |
MOVE:n | OK | Déplacement absolu |
HALT | OK | Arrêt immédiat |
SETPOS:n | OK | Recale la position sans bouger |
SETMAX:n | OK | Course totale |
SETDLY:n | OK | Durée d'un demi-pas (900 à 20000 µs) |
SETBL:n / SETBLDIR:0|1 | OK | Backlash (0 à 1000 pas) et sens d'approche |
SETREV:0|1 | OK | Inversion du sens |
SETHOLD:0|1 | OK | Maintien des bobines à l'arrêt |
SETSTEP:f | OK | Taille d'un pas en microns |
SAVE / RESET | OK | Écriture EEPROM / valeurs d'usine |
Chaque commande SET… a son pendant GET…. Un portage pour Arduino Nano (FocuserNano.ino, firmware 1.1.0) reprend exactement le même protocole et le même câblage ; il bascule les quatre bobines en une seule écriture du port B et occupe 33 % de la flash du Nano.
Résolution
Le moteur entraîne la bague de mise au point de l'Evoguide par un pignon et une couronne imprimés à denture en chevrons. La résolution se calcule à partir des diamètres primitifs :
résolution = pas de l'hélicoïde ÷ (4 075,8 × Dp couronne ÷ Dp pignon)
- couronne : Dp = 80,2 mm (55 dents) ;
- pignon : Dp ≈ 22,7 à 26,3 mm selon le réglage de l'entraxe (fentes du support moteur) ;
- rapport de 3,05 à 3,53, soit 12 400 à 14 400 pas moteur par tour de bague.
Pour un hélicoïde de 1 mm par tour, chaque pas déplace le foyer d'environ 0,07 µm (0,069 à 0,080 µm). À f/4,8, la zone de netteté de l'Evoguide fait environ ±30 µm : elle couvre près de 1 000 pas, la finesse de réglage est donc largement suffisante et c'est le jeu des engrenages qui limite la précision. Cette valeur est à renseigner dans le champ Taille d'un pas du driver, après avoir mesuré le pas réel de l'hélicoïde (avance du tube sur 5 tours de bague, divisée par 5).
Calibrage
- Course totale : partir de la butée basse, envoyer
SETPOS:0, puis remonter par paliers (MOVE:2000,MOVE:4000…) jusqu'à la butée haute. La dernière valeur, moins une petite marge, devient la course maximale. - Backlash : sur une étoile, avancer de 200 pas puis reculer de 200, et compter les pas nécessaires avant que l'image ne réagisse au changement de sens.
4. Le driver ASCOM
ASCOM est la norme qui permet aux logiciels d'astronomie sous Windows (N.I.N.A., MaxIm DL, SharpCap, APT…) de piloter le matériel de manière uniforme. Le projet fournit un driver ASCOM COM écrit en C# (.NET Framework 4.8, ASCOM Platform 6.6), qui pilote le focuser par la liaison USB du PC Windows.
Compilation et installation du driver COM
Il faut l'ASCOM Platform 6.6 et Visual Studio 2022 avec la charge de travail « Développement .NET desktop ». On ouvre src\ArduinoFocuser.sln et on génère en configuration Release.
Pour l'enregistrement, copier Install.bat à côté de ASCOM.ArduinoFocuser.Focuser.dll et l'exécuter en administrateur. Le driver apparaît alors dans le sélecteur ASCOM :
- ProgID :
ASCOM.ArduinoFocuser.Focuser - Nom affiché : Arduino 28BYJ-48 Focuser
Configuration
Le bouton Properties… du sélecteur ouvre la fenêtre de réglages : port COM (avec un bouton « Tester la connexion »), course totale, taille d'un pas en microns, durée d'un demi-pas, inversion du sens, maintien des bobines, jeu à rattraper et sens d'approche, journal de trace. Ces paramètres sont enregistrés dans le profil ASCOM et renvoyés à l'EEPROM de l'Arduino à chaque connexion, pour que les deux côtés restent toujours cohérents.
Conformité à la norme
Le driver implémente l'interface IFocuserV3 :
AbsolutevautTrue;Move()reçoit une position absolue et rend la main immédiatement,IsMovingpassant àTrue.MaxIncrementest égal àMaxStep: n'importe quelle position est accessible en un seul mouvement.- Le montage n'a pas de sonde :
TempCompAvailablevautFalseetTemperaturelèvePropertyNotImplementedException, comme l'exige la spécification.
La validation se fait avec ConformU, l'outil officiel de l'ASCOM Initiative :
conformu conformance ASCOM.ArduinoFocuser.Focuser --devicetype Focuser
Actions personnalisées
Via Action(nom, paramètre), le driver expose Sync, GetFirmwareVersion, GetBacklash, SetBacklash, GetStepDelay et SetStepDelay. Les méthodes CommandString, CommandBlind et CommandBool transmettent directement une commande du protocole série.
Dépannage
| Symptôme | Cause probable |
|---|---|
| Aucun focuser détecté | Mauvais port COM, firmware absent, ou moniteur série de l'IDE resté ouvert |
| Le moteur vibre sans tourner | Fils inversés, ou durée de demi-pas trop courte |
| Le moteur chauffe à l'arrêt | « Maintenir les bobines » est coché |
| Pas perdus en charge | Augmenter la durée du demi-pas (1800 à 2500 µs) |
| Position fausse après redémarrage | Alimentation coupée moins d'une seconde après un mouvement |
| Absent du sélecteur ASCOM | Install.bat non lancé en administrateur |