Aller au contenu

DrThrax

Membre
  • Compteur de contenus

    758
  • Inscription

  • Dernière visite

À propos de DrThrax

  • Date de naissance 01/30/1986

A propos

  • Résidence
    Terre
  • Intérêts
    Informatique, Astronomie
  • Occupation
    Chimiste
  • Matériel
    Lunette achromatique 60/700
    Newton 130/650 P
    Lunette achromatique 100/500
    Monture Altaz GOTO SW
    Renvoi coudé CaK Lunt
    Occulaire 25mm, 10mm SW
    Barlow 2x SW

Visiteurs récents du profil

1588 visualisations du profil

DrThrax's Achievements

  1. Bonjour à tous, Je vais vous présenter mon dernier bricolage mais avant une petite mise en contexte (pour ceux qui ne sont pas intéressé par mon blabla, allez directement aux photos, au plan et aux codes sources!). Pour ceux que ça intéresse... Contexte (beaucoup de blabla) J'ai posté il y a quelque temps, un soucis avec mon porte oculaire starway, oui je suis du genre à ne poster que mes soucis... Si vous me laissez pas finir on y arrivera pas. Bref. La démultipliée pour une obscure raison à lâché et après autopsie il s'est révélé que le petit axe qui passe à travers le réducteur planétaire est tordu... J'étais sur le point de saigner mon porte feuille pour acheter un nouveau porte oculaire quand je me suis souvenu que je possédais un moteur de mise au point orion, vous savez avec la petite manette. Et là j'ai eu une idée, je vais essayer de le fixer sur le porte oculaire et voir si je ne retrouve pas la précision de la démultipliée sans égorger mon porte feuille. (Mon compte en banque en a encore des sueurs froides). Grâce à Ebay, j'ai trouvé un adaptateur pour fixer proprement l'axe du moteur à l'axe de mise au point. Une belle pièce en alu, qui a couté environ 2€, les fonds de mes tiroirs m'a permis de trouver la quincaillerie nécessaire. Je vous laisse observer les photos pour voir comment j'ai assemblé tout cela, c'est relativement simple. Nickel, ça fonctionne, la précision est meilleur avec le moteur qu'avec la démultipliée mais... Oui il y a un mais. Le boitier Orion et son câble ne sont pas des plus pratique, on pouvait faire mieux, il fallait que je puisse contrôler la mise au point sans être déconcentré de l'image qui se forme sur mon écran (la mise au point en CaK c'est pénible). Bah, il me suffit de le contrôler avec le pc. Suffit de... Un mois de recherche sur le net, Orion vend bien un kit mais c'est plus de 100€.... C'est trop, il me fallait moins cher, alors j'ai trouvé Arduino avec un shield pour moteur. Me regardez pas ainsi, c'est pas ma faute. Alors Arduino c'est une carte avec un microcontroleur, c'est une technologie libre, et un shield c'est une carte à puce qu'on rajoute au dessus. Il y en a beaucoup pour d’innombrable usage. Bref, l'avantage des carte Arduino c'est que le langage est relativement simple, je ne dis pas que c'était facile mais par rapport à la programmation de PIC en assembleur, c'était un plaisir. (Vous captez rien, allez voir les images) J'achète tout sur le net, ça arrive à la maison tranquille. Je code, je code, je code et euréka après quelques week-end perdu là dessus ça fonctionne. Enfin en ligne de commande... Pas grave, une petite interface en Python, librairie PySerial, et Page pour faire l'interface conviviale et voilà. C'est fait... ça fonctionne nickel. Évidement, j'ai commencé tout celà en Mai après les RAS sans me rendre compte que d'autre l'avait déjà fait... Une autre version. Matériel: 1 Moteur 12V à courant continu (les bêtes moteurs) avec une démultipliée (On trouve l'équivalent du moteur Orion pour 7$ sur ebay...) 1 Accumulateur 12V à 4$ Sur ebay 1 Arduino + 1 Shield moteur +/- 25$ 1 Câble pour connecter l'Arduino au moteur (un câble de récupération ça fonctionne... moi j'ai utilisé un vieux câble de téléphone.) Une boite en plastique de récupération pour protéger l'Arduino (il existe des boites dédiées mais vu le prix... j'ai recyclé une boite de vis) Des Fiches mâles et femelles (le modèles que vous désirez), pour ne pas souder directement le câble reliant le moteur à l'Arduino (plus facile pour ranger) Un fer à Souder + la soudure qui va bien + une éponge humide ect... Un pistolet à colle Une pince coupante De la patience. Le montage Les codes sources Arduino /* Controle la vitesse et le sens de rotation d'un moteur DC brancgé en 1. Arduino lit le port com quand + il augmente la vitesse de 1 quand - il diminue la vitesse de 1 B avance dans le sens anti F avance dans le sens horlogé Une valeur numérique est convertie en vitesse */ #include <AFMotor.h> AF_DCMotor motor1(1, MOTOR12_64KHZ); char val; int vitesse = 125; int i = 0; int x = 0; void setup() { Serial.begin(9600); motor1.setSpeed(vitesse); } void loop() { if(Serial.available()) { if(Serial.available()>2) { x = Serial.available(); char vitread[x-2]; //Serial.println(x); for (i = 0; i <= x-2; i++) { vitread[i] = Serial.read(); } vitesse = atoi(vitread); Serial.println(vitesse); motor1.setSpeed(vitesse ); Serial.flush(); } else { val = Serial.read(); //Serial.print(val); } } switch (val){ case '+': if (vitesse < 255) { vitesse++; Serial.println(vitesse); motor1.setSpeed(vitesse); } break; case '-': if (vitesse > 0) { vitesse--; Serial.println(vitesse); motor1.setSpeed(vitesse); } break; case 'F': motor1.run(FORWARD); break; case 'B': motor1.run(BACKWARD); break; default: motor1.run(RELEASE); } delay(100); } Interface Graphique Python 2 #! /usr/bin/env python # -*- python -*- import sys import serial py2 = py30 = py31 = False version = sys.hexversion if version >= 0x020600F0 and version < 0x03000000 : py2 = True # Python 2.6 or 2.7 from Tkinter import * import ttk elif version >= 0x03000000 and version < 0x03010000 : py30 = True from tkinter import * import ttk elif version >= 0x03010000: py31 = True from tkinter import * import tkinter.ttk as ttk else: print (""" You do not have a version of python supporting ttk widgets.. You need a version >= 2.6 to execute PAGE modules. """) sys.exit() def vp_start_gui(): '''Starting point when module is the main routine.''' global val, w, root root = Tk() root.title('Motor_Focus') root.geometry('169x274+569+135') set_Tk_var() w = Motor_Focus (root) init() root.mainloop() w = None def create_Motor_Focus (root): '''Starting point when module is imported by another program.''' global w, w_win if w: # So we have only one instance of window. return w = Toplevel (root) w.title('Motor_Focus') w.geometry('169x274+569+135') set_Tk_var() w_win = Motor_Focus (w) init() return w_win def destroy_Motor_Focus (): global w w.destroy() w = None def set_Tk_var(): # These are Tk variables used passed to Tkinter and must be # defined before the widgets using them are created. global speed speed = DoubleVar() global true_speed true_speed = StringVar() global ser #ser = serial.Serial('/dev/ttyACM0', 9600, bytesize=8, parity='N', stopbits=1, timeout=None) ser = serial.Serial() ser.port= 0 ser.baudrate = 9600 ser.bytesize = 8 ser.parity = 'N' ser.stopbits = 1 ser.timeout = 200 def connect_click(p1) : print 'connect_click' ser.open() print ser.isOpen() def move_backward_click(p1) : ser.write("B") print 'move backward click' def move_forward_click(p1) : ser.write("F") print 'move click forward' #def move_unclik(p1) : def unconnect_click(p1) : print 'unconnect_click' ser.close() print ser.isOpen() def vitesse_change(p1) : print 'vitesse change' #print w.vitesse.get() ser.write(unicode(w.vitesse.get())) ser.write('\n') x = ser.readline() nblines(x) def nblines(x): str(x) print x print x[:-2] true_speed.set(x[:-2]) def init(): pass def move_unclick(p1): print 'stop' ser.write('\n') class Motor_Focus: def __init__(self, master=None): # Set background of toplevel window to match # current style style = ttk.Style() theme = style.theme_use() default = style.lookup(theme, 'background') master.configure(background=default) self.vitesse = Scale (master) self.vitesse.place(relx=0.06,rely=0.11,relheight=0.62,relwidth=0.27) self.vitesse.configure(activebackground="#f9f9f9") self.vitesse.configure(relief="groove") self.vitesse.configure(to="255.0") self.vitesse.configure(troughcolor="#c4c4c4") self.vitesse.configure(variable=speed) self.vitesse.bind('<ButtonRelease-1>',vitesse_change) self.Label1 = Label (master) self.Label1.place(relx=0.36,rely=0.04,height=19,width=98) self.Label1.configure(activebackground="#f9f9f9") self.Label1.configure(relief="groove") self.Label1.configure(text='''Move''') self.label_vitesse = Label (master) self.label_vitesse.place(relx=0.06,rely=0.04,height=19,width=48) self.label_vitesse.configure(activebackground="#f9f9f9") self.label_vitesse.configure(relief="groove") self.label_vitesse.configure(text='''Speed''') self.Move_forward = Button (master) self.Move_forward.place(relx=0.36,rely=0.15,height=41,width=91) self.Move_forward.configure(activebackground="#f9f9f9") self.Move_forward.configure(pady="0") self.Move_forward.configure(text='''Forward''') self.Move_forward.bind('<Button-1>',move_forward_click) self.Move_forward.bind('<ButtonRelease-1>',move_unclick) self.Label2 = Label (master) self.Label2.place(relx=0.06,rely=0.73,height=19,width=48) self.Label2.configure(activebackground="#f9f9f9") self.Label2.configure(relief="groove") self.Label2.configure(text=true_speed.get()) self.Label2.configure(textvariable=true_speed) self.Move_backward = Button (master) self.Move_backward.place(relx=0.36,rely=0.33,height=41,width=91) self.Move_backward.configure(activebackground="#f9f9f9") self.Move_backward.configure(pady="0") self.Move_backward.configure(text='''Backward''') self.Move_backward.bind('<Button-1>',move_backward_click) self.Move_backward.bind('<ButtonRelease-1>',move_unclick) self.Connect = Button (master) self.Connect.place(relx=0.06,rely=0.84,height=21,width=71) self.Connect.configure(activebackground="#f9f9f9") self.Connect.configure(pady="0") self.Connect.configure(text='''Connect''') self.Connect.bind('<Button-1>',connect_click) self.Unconnect = Button (master) self.Unconnect.place(relx=0.53,rely=0.84,height=21,width=71) self.Unconnect.configure(activebackground="#f9f9f9") self.Unconnect.configure(pady="0") self.Unconnect.configure(text='''Unconnect''') self.Unconnect.bind('<Button-1>',unconnect_click) if __name__ == '__main__': vp_start_gui()
×
×
  • 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.