mardi 5 janvier 2016

Focuser Arduino : Interface et driver ASCOM

Maintenant que la mécanique est prête et que le firmware Arduino exécute les ordres sans broncher, il reste à pouvoir le contrôler depuis le PC...
Pour ce faire, il faut créer un driver ASCOM, ce qui permettra d'utiliser le focuser dans n'importe quel soft Astro sous Windows. C'est donc un élément essentiel du montage !

J'aurais pu aussi partir sur un driver INDI, pour la compatibilité Linux/MAC... J'y viendrais peut être un jour !

En théorie, un driver ASCOM seul permettrait de piloter le focuser depuis n'importe quel soft Astro... Mais avec plusieurs limitations:
  • Le focuser ne pourrait pas être utilisé à la fois par deux applications (chacune essayerait alors de discuter en même temps sur le même port série...). Donc par exemple pas possible pour une appli tiers d'enregistrer la position du focuser pendant les prises de vue...
  • J'ai dans la tête d'étendre le montage pour contrôler aussi une roue à filtre, ce qui reviendra à faire tourner deux drivers ASCOM, en retombant dans le premier problème...
  • Les fonctions qui ne rentrent pas dans le modèle ASCOM ne seraient pas accessibles à l'utilisateur... Pour l'instant je vois au moins: 
    • La supervision de la tension d'alimentation
    • Le contrôle du chauffage

J'ai donc choisi de construire un programme d'interface qui tienne aussi le rôle de HUB Ascom...

L'interface se présente sous la forme d'une fenêtre qui permet de gérer la connexion à l'Arduino, en trouvant automatiquement lequel des port série est un Arduino... (attention à avoir brancher le arduino avant...) Un fois connecté, il est possible de visualiser l'état du chauffage, du focuser, et de le contrôler...



Une fois l'interface connectée, on peut lancer le driver ASCOM dans son soft astro préféré (attention à bien respecter cet ordre, le driver ASCOM refusera de se connecter tant que l'interface ne sera pas elle même connectée).
Pour le driver en lui même, je suis reparti d'un driver ASCOM développé par mon inspirateur : http://stargazerslounge.com/topic/218975-arduino-ascom-focuser-mark2/, modifié pour communiquer avec l'interface plutôt que directement avec le hardware.

L'exécutable pour l'interface est ici : ArdFocuserUi-20160501.zip
Le driver ASCOM correspondant est par là : ArdFocuserAscom-20160105.zip

Et as usual, le code source est dispo sur github !

samedi 2 janvier 2016

Motorisation d'une roue à Filtre


Après avoir goutté à la joie du focuser automatisé (voir ici), il me reste encore une intervention manuelle dans mon mode-op de prise d'image : le changement de filtre. En effet, j'image avec une caméra CCD monochrome, et pour une prise de vue réussie, il faut à priori au moins trois couches (Rouge, Vert, Bleu), voir plutôt quatre (LRGB)...

Jusque là, pour limiter les contacts avec l'imageur, je regroupe les clichés en séries d'un même filtre, en planifiant à l'avance la durée sur chaque filtre, pour équilibrer le signal. Mais ça n'est pas souple du tout : Il faut d'une part aller au bout de la séquence pour avoir quelque chose d'exploitable (et la météo est rarement sûre...), et d'autre part ça implique au moins 3 interventions manuelles pendant la séquence (et le sommeil fractionné c'est pas top...).

L'idéal serait de pouvoir tourner les filtres plus fréquemment (par exemple tout les quarts d'heure), et de laisser éventuellement la météo décider de la fin de la séquence...

J'ai donc envisagé l'achat d'une roue à filtre motorisée, notamment la Xagyl (dont j'ai trouvé un bon test ici), mais sur le papier, j'y trouve plusieurs inconvénients:
  • une prise USB requise en plus (et les tracas habituels : sera-t-elle bien reconnue, sera-t-elle compatible avec un hub ? ...)
  • la différence de prix, qui a bien augmentée (on est au alentours de 300€)
  • et surtout, le manque de fun de cette solution!
Motorisation DIY !

Avec un Arduino déjà en place à quelques centimètres de là, l'occasion de démarrer un nouveau projet était trop belle ! 
Me voici donc lancé dans la motorisation de ma vénérable roue à filtre SkyWatcher 5 position en 31.75 (que l'on peut trouver vers 80€ sur le net).
 
La seule difficulté sera de trouver un système d’entraînement pas trop compliqué à fixer, pas trop lourd et suffisamment précis... Mais tout ça devrait être jouable en réutilisant le moteur de mon focuseur, avec pourquoi pas un capteur à effet hall pour la précision ! (que j'ai testé ici...)

Ce sera aussi l'occasion de fermer cette roue à filtre pour éviter la poussière et l'humidité: actuellement, j'utilise un morceau de papier d'aluminium et une ficelle...

Affaire à suivre, donc !

mercredi 9 décembre 2015

Précision du senseur à effet Hall US5881LUA

J'ai testé récemment la précision du capteur à effet Hall US5881LUA (décrit http://mchobby.be/wiki/index.php?title=Senseur_%C3%A0_Effet_Hall).

Il s'agit de valider que ce dispositif est utilisable pour calibrer mon système de motorisation de roue à filtre. Il faut pour cela que la position de bascule soit précise et stable.

J'ai utilisé un aimant en terre rare intégré dans un montage rapide en LEGO, controlé par un moteur pas à pas (toujours le BYJ48). Le moteur translate une crémaillère où l'aimant est fixé. Le capteur détecte alors le passage de l'aimant.



Le moteur est programmé pour avancé la crémaillère jusqu'à ce que le senseur le détecte. Il indique alors le nombre de pas parcourus puis recule d'autant et recommence. Si le système est précis, le nombre de pas sera sensiblement identique. Si le nombre de pas varie, c'est soit que le capteur n'est pas trés précis, soit que le montage n'est pas rigide (et en LEGO, c'est tout à fait possible)

Les résultats sont très bons !

D'abord le passage de l'aimant n'est jamais loupé...

Ensuite, la valeur obtenue oscille entre deux pas de moteur. En prenant en compte les ratio des des engrenages, cela indique une précision au moins aussi bonne que 0,01mm, et certainement mieux compte tenu du dispositif "mécanique" utilisé !

Ce petit capteur trouvera certainement une utilité sur ma future roue à filtre motorisée !

samedi 12 septembre 2015

Focuser Arduino : partie logiciel

Dans un billet précédent, je vous présentais le circuit électronique de mon Focuser Arduino.Maintenant que tout est branché, reste à lui donner vie, en commençant aujourd'hui par la programmation Arduino !

La programmation du Arduino Nano se fait en C/C++; on développe un programme qui est compilé puis uploadé sur la carte électronique: un firmware. Celui-ci s'exécute alors dès la mise sous tension de l'Arduino et dialogue avec le PC via un canal série. Petite complication : le programme est réinitialisé à chaque connexion sur l'usb.

Le Firmware doit être à l'écoute du PC, pour reconnaître des messages et envoyer des réponses en fonction... Je suis reparti du protocole déjà utilisé ici ici, mais ne le complétant pour les fonctions de chauffage et surveillance de la tension.

Les déplacements du moteur sont fait avec une accélération progressive et une décélération avant d'arriver à la cible. Cela permet d'avoir un couple plus important lors de ces phases. Pour se faire - comme le moteur que j'utilise est unipolaire - il suffit d'allumer séquentiellement ses quatre PIN pour déclencher la rotation. Le firmware compte donc les transitions et contrôle précisément le délai entre chaque pour imprimer la vitesse souhaitée. La position du moteur est enregistrée de temps à autre dans la mémoire CMOS pour qu'elle ne soit pas perdue d'une session à l'autre. Ainsi, tant que le focuser n'est pas démonté physiquement, la zone de mise au point se retrouvera sensiblement au même "pas moteur" au fil du temps.

Pour le chauffage, le Firmware lit toute les 20 secondes les deux capteurs, et décide d'une intensité de chauffage à appliquer en fonction de l'écart entre la température du téléscope et le point de rosée. Il vise un écart entre 4°C et 5°C. En deça de 4°C, le chauffage est à 100% et au delà de 5°C il reste coupé. L'intensité est produite par une technique dite de "PWM" (pulse width modulation) : la résistance est démarrée/arrêtée à une fréquence de quelques centaines de hertz, en fonction de l'intensité voulue. Le chauffage produit est donc promotionnel à la durée d'allumage effective de la résistance.

Enfin, à intervalle régulier, le Firmware va envoyer un message d'état récapitulant le status du moteur, les valeurs mesurées sur les différents capteur et la tension mesurée sur la batterie.

Le firmware est dispo ici: ArdFocuserFirmware-20160501.zip

Pour l'uploader sur le contrôleur Arduino, il vous faudra d'abord installer l'environnement de dev Arduino, puis utiliser la commande avrdude (en adaptant le chemin de avrdude, et le chemin du fichier ardfocuser.hex):

C:\Program Files\arduino-1.6.5-r5\hardware\tools\avr/bin/avrdude -CC:\Program Files\arduino-1.6.5-r5\hardware\tools\avr/etc/avrdude.conf -patmega328p -carduino -PCOM29 -b57600 -D -Uflash:w:C:\tmp\ardfocuser.hex:i 


Sinon, le code source du firmware est disponible sur github. Si vous voulez l'utiliser, sachez que le développement du firmware a été fait sous Eclipse, grace au fantastique plugin Arduino disponible ici. Il vous faudra donc donc d'abord installer la version d'Eclipse Arduino puis importer le projet présent sur github.


mercredi 2 septembre 2015

Une première photo avec le focuser motorisé

Je viens de terminer les traitements de ma première photo depuis un an... C'était l'occasion de tester la motorisation de mon focuser et la régulation du chauffage anti-buée.

Voici donc M27 (dumbbell), en 3h de pause LRVB.


Je suis très satisfait du résultat, même si il n'est pas parfait.
  • Il y a un problème de forme des étoiles sur les bord. Je pense que le réducteur n'est pas parfaitement dans l'axe optique (il y a un léger jeu au niveau du porte occulaire)
  • La mise au point n'est pas top, notamment parce qu'elle a bougé en cours de nuit... mais c'est déjà mieux que ce que j'obtenais péniblement à la main ! Et le gain de temps est ÉNORME.
Voici mon soft de mise au points auto à l'oeuvre:

dimanche 14 juin 2015

Focuser Arduino : circuit et bonus

La partie mécanique du focuser motorisé étant terminée (voir le précédent billet), il faut maintenant connecter le tout à un ordinateur.

Un module Arduino Nano semble tout désigné pour ça:
  • il est relativement petit, 
  • la connectivité USB, 
  • il possède de nombreuses possibilités en sortie,
  • les exemples sont très nombreux sur le Net (comme ici ou ),
  • on le trouve à 2€50 sur ebay...
Un Arduino Nano vu de dessus



Le moteur va être piloté par un module ULN2003A (souvent vendu avec). Ce module permet de transformer les signaux issus des pin du Arduino en tension applicable au moteur pas à pas.
Un moteur 28byj48 avec son module ULN2003A




Comme le Arduino a largement la capacité à faire autre chose, j'ai décidé d'ajouter également le pilotage d'une résistance chauffante. Le but est d'économiser l'électricité, et l'autonomie de mon setup complet.  Cette tache requiert de comparer la température du tube optique avec le point de rosé (la température à laquelle la rosée se forme). Ce dernier est déduit de la température et l'humidité extérieure.

Le contrôle du chauffage requiert donc quelques composants en plus:
  • Pour servir d'interrupteur on/off sur la résistance chauffante: un Moffset (transistor de puissance), avec une résistance et une diode. J'ai utilisé un transistor IRF540N et une diode 1n4007.
  • une sonde de température qui devra être contre le tube optique : DS18B20 (trouvée à 3€ toute montée sur ebay avec la recherche "DS18B20 Dallas 1-Wire Digital Thermometer Etanche (Waterproof)")
  • une sonde d'humidité qui devra être à l'air libre : DHT22 (5€ sur ebay)

Enfin, le Arduino est capable de mesurer une tension. C'est très pratique pour connaître l'état d'une batterie ! Comme le Arduino ne peut mesurer précisément que des température relativement faible (de l'ordre de 1,2V), il faut réduire la tension pour pouvoir la mesurer. Le montage est trés simple, il s'agit d'un pont de 3 résistances entre le gnd et l'entrée +12V. Il faut des résistances suffisamment grandes pour que la consommation soit négligeable. Le pin Arduino analogique est ensuite simplement connecté entre deux résistances. La valeur n'est pas très précise parce que la référence interne du Arduino Nano n'est pas calibrée. Par contre, elle est stable, ce qui donnera quand même une bonne indication de l'évolution de la tension, y compris d'une soirée à l'autre.


Au final, voici le circuit, présenté sur une carte de prototypage (attention, c'est vu du dessous !):







dimanche 31 mai 2015

Motorisation de mise au point sur le Mak Intes M500

Je me suis lancé dans la construction d'un focuser motorisé pour mon téléscope !

J'utilise essentiellement mon téléscope pour faire des photos du ciel profond, avec un caméra CCD spécialisée connectée à un ordinateur.

Normalement, la mise au point est faite en tournant manuellement une molette. La précision requise est de l'ordre du centième de tour (quelques degrés). La difficulté est qu'en astrophoto, on n'a pas un retour direct sur les manipulations et donc il faut beaucoup d'aller-retour avec l'ordinateur et une bonne intuition pour réussir une mise au point correcte en un temps raisonnable - tout ça de nuit bien-sur. Et la qualité de la mise au point est forcement cruciale pour le résulta final !

L'idée de ce montage est de motoriser la molette de mise au point pour qu'un logiciel sur l'ordinateur puisse tout contrôler : Le logiciel va déclencher les déplacements de la molette, les prises de vue et en rechercher la meilleure position en fonction de la netteté de chaque image.



Je suis parti d'un projet existant trouvé sur un forum : http://stargazerslounge.com/topic/218975-arduino-ascom-focuser-mark2/


Les idées du projet original sont:
  • utiliser un moteur pas à pas facilement controlé par un Arduino
  • coupler ce moteur à l'axe de la molette
  • développer un driver "ASCOM" pour faire l'interface entre l'arduino et les logiciel d'astrophoto capables de piloter le tout
Mon téléscope n'étant pas particulièrement accueillant pour un tel montage (c'est une INTES M500, construit comme un tank russe).... la première difficulté à été de trouver un moyen de couplage du dispositif avec l'axe de mise au point.

Il faut d'un coté trouver comment coupler le moteur à l'axe, et de l'autre fixer le dispositif pour qu'il ne soit pas du tout mobile, pour ne pas qu'il tourne autours de l'axe, et aussi pour qu'il ne soit pas source de vibration pendant les photos !

Voici comment se présente l'arrière de mon télescope (molette retirée) :

A la main, l'axe est un peu résistant, et je ne suis pas du tout confiant sur la capacité d'un petit moteur pas à pas à l'entrainer. La courroie semble une bonne option pour avoir de la liberté sur le positionnement du moteur, et permettre une réduction avec des roues de taille différente. J'ai opté pour une combinaison de roues et courroies MXL025, avec un moteur pas à pas BYJ48 en 12V. Ce dernier a déjà une réduction interne importante (4096 pas par tour !), encore réduit par le rapport de 5 entres les roues utilisées pour atteindre 20000 pas par tour (sous réserve d'un montage rigide !)

Pour le montage de la grande roue sur l'axe du focuser (d'un coté du diamètre 13, de l'autre du 6), j'ai improvisé un coupleur maison en bois :


Enfin, l'ensemble va utiliser le support de chercheur présent sur le tube, que je n'utilise pas.

Voici un premier "prototype" en polystyrène:

Et voici la version presque finale, essentiellement en alluminium (des corniches avec écrou et boulon) et un petit tasseau. Le Arduino va loger dans une plinthe en ABS blanc.


C'est tout pour la partie mécanique ! Je détaillerais dans un autre post le circuit électronique et les aspects logiciels!