Aller au contenu

USB focus maison ?


Bottles74

Messages recommandés

Bonjour les denrées ;)

 

Voilà j'ai une question à vous soumettre.

J'ai en ma possession l'interface usb pierro astro pour contrôler des moteurs AD et DEC d'une neq5, ainsi qu'une raquette et des moteurs de rechange.

 

Je me demandais si il était possible de transformer tout ce petit monde en un Focuser USB. J'ai déjà fait une installation moteur->PO commandable via la raquette et il ne me reste plus que la partie commande depuis le PC.

 

Et là ou ça devient coton pour moi: est il possible de le rendre compatible avec un logiciel de map?

 

Merci de vos réponses

 

Jerem

Lien vers le commentaire
Partager sur d’autres sites

Regarde du coté de SGL observatory automation sur Les groupes Yahoo

Si tu es prêt à mettre les mains dedans ...

j'ai moi même un Focuser WO monté avec cette solution (arduino nano + easydriver + nema 8) compatible ASCOM sur une lunette

 

moteur pas à pas :

http://www.omc-stepperonline.com/gear-ratio-51-planetary-gearbox-with-nema-8-stepper-motor-8hs150604spg5-p-131.html

Easy stepper driver :

https://www.sparkfun.com/products/10267

Nano like ...:

http://www.fasttech.com/products/0/10000015/1001002-arduino-compatible-nano-v3-0-atmega328p-20au-board

 

Avec ici l'initiateur

http://photonjunkie.com/2011/08/07/sgl-motorfocus-project/

Modifié par Raphael_OD
Lien vers le commentaire
Partager sur d’autres sites

  • 3 années plus tard...
  • 2 semaines plus tard...
Le 28/04/2018 à 07:21, armelk a dit :

Bonjour,

j'en fait aussi : ICI

 

Amicalement.

Armel

 

Super Merci, 

Crois tu que je puisse faire tourner un arduino Uno et un motor shield avec un moteur pas a pas (48 pas ) c'est de la récup.
J'ai déjà un programme qui fonctionne avec une petite interface sur le PC
voici le code Arduino
 

/*tentative controle moteur pas à pas pour mise au point*/
/*28-02-2015 webastro*/

#define MOTOR_CLOCKWISE      0
#define MOTOR_ANTICLOCKWISE  1
/******Pins definitions*************/
#define MOTORSHIELD_IN1 8//8
#define MOTORSHIELD_IN2 11//11
#define MOTORSHIELD_IN3 12//12
#define MOTORSHIELD_IN4 13//13
#define CTRLPIN_A       9//9
#define CTRLPIN_B       10//10

const unsigned char stepper_ctrl[] = {0x27, 0x36, 0x1e, 0x0f};

struct MotorStruct
{
  int8_t speed;
  uint8_t direction;
};
MotorStruct stepperMotor;
unsigned int number_of_steps = 48;
char val;
int vitesse = 100;
int i = 0;
int x = 0;
int poszero = 0; //variable pour recevoir la position du PO au lancement de l'app
int posfinal = 100; //longueur du po en mm
int target = 0; //variable pour recevoir la position à atteindre
int facteur = 15; //16 pas par mm en sortie de réducteur!

void step(int steps)
{
  int steps_left = abs(steps) * 4;
  int step_number;
  int millis_delay = 60L * 1000L / number_of_steps / (stepperMotor.speed + 50);
  delay(millis_delay);


  if (steps > 0)
  {
    stepperMotor.direction = MOTOR_ANTICLOCKWISE;
    step_number = 0;
  }
  else if (steps < 0)
  {
    stepperMotor.direction = MOTOR_CLOCKWISE;
    step_number = number_of_steps;
  }
  else return;


  while (steps_left > 0)
  {

    if (step_number % 4 == 0) {
      digitalWrite(MOTORSHIELD_IN1, 1);
      digitalWrite(MOTORSHIELD_IN2, 0);
      digitalWrite(MOTORSHIELD_IN3, 0);
      digitalWrite(MOTORSHIELD_IN4, 0);
      digitalWrite(CTRLPIN_A, 1);
      digitalWrite(CTRLPIN_B, 0);
    }
    if (step_number % 4 == 1) {
      digitalWrite(MOTORSHIELD_IN1, 0);
      digitalWrite(MOTORSHIELD_IN2, 0);
      digitalWrite(MOTORSHIELD_IN3, 1);
      digitalWrite(MOTORSHIELD_IN4, 0);
      digitalWrite(CTRLPIN_A, 0);
      digitalWrite(CTRLPIN_B, 1);
    }
    if (step_number % 4 == 2) {
      digitalWrite(MOTORSHIELD_IN1, 0);
      digitalWrite(MOTORSHIELD_IN2, 1);
      digitalWrite(MOTORSHIELD_IN3, 0);
      digitalWrite(MOTORSHIELD_IN4, 0);
      digitalWrite(CTRLPIN_A, 1);
      digitalWrite(CTRLPIN_B, 0);
    }
    if (step_number % 4 == 3) {
      digitalWrite(MOTORSHIELD_IN1, 0);
      digitalWrite(MOTORSHIELD_IN2, 0);
      digitalWrite(MOTORSHIELD_IN3, 0);
      digitalWrite(MOTORSHIELD_IN4, 1);
      digitalWrite(CTRLPIN_A, 0);
      digitalWrite(CTRLPIN_B, 1);
    }

    //PORTB = stepper_ctrl[step_number%4];
    delay(millis_delay);
    if (stepperMotor.direction == MOTOR_ANTICLOCKWISE)
    {
      step_number++;
      if (step_number == number_of_steps)
        step_number = 0;
    }
    else
    {
      step_number--;
      if (step_number == 0)
        step_number = number_of_steps;
    }
    steps_left --;

  }
}
void initialize()
{
  pinMode(MOTORSHIELD_IN1, OUTPUT);
  pinMode(MOTORSHIELD_IN2, OUTPUT);
  pinMode(MOTORSHIELD_IN3, OUTPUT);
  pinMode(MOTORSHIELD_IN4, OUTPUT);
  pinMode(CTRLPIN_A, OUTPUT);
  pinMode(CTRLPIN_B, OUTPUT);
  stop();
  stepperMotor.speed = 1;
  stepperMotor.direction = MOTOR_CLOCKWISE;
}
/*******************************************/
void stop()
{
  /*Unenble the pin, to stop the motor. */
  digitalWrite(CTRLPIN_A, LOW);
  digitalWrite(CTRLPIN_B, LOW);
}


void setup() {
  // initialize serial:
  Serial.begin(9600);
  //initialisation moteur pas à pas
  initialize();
}

void loop() {
  int a;
  a = 0;
  //poszero = 0;
  // if there's any serial available, read it:
  while (Serial.available() > 0) {
    int index = Serial.read(); // lire un premier caractère
    // controle éventuel : décommenter pour voir ce qui arrive
    //Serial.print("index : "); Serial.println(index);
    // filtrer : il doit etre une lettre minuscule ou majuscule
    if (index >= 'A' && index <= 'z') {
      int valeur = Serial.parseInt();
      // controle eventuel de la valeur
      //Serial.print("valeur : "); Serial.println(valeur);
      // traitement
      switch (index) {
        //avancer dix fois nombres de pas envoyés en arrière
        case 'a':
          a = 10 * valeur * -1;
          step(a);
          break;
        //avancer une fois nombre de pas envoyés en arrière
        case 'b':
          step(valeur * -1);
          break;
        //avancer un pas en arrière
        case 'c':
          step(-1);
          break;
        //avancer dix fois nombres de pas envoyés en avant
        case 'd':
          a = 10 * valeur;
          step(a);
          break;
        //avancer une fois nombre de pas envoyés en avant
        case 'e':
          step(valeur);
          break;
        //avancer un pas en avant
        case 'f':
          step(1);
          break;
        //aller a la position
        case 'g':
          if (valeur <= posfinal)
          {
            a = valeur - poszero;
            a = a * facteur;
            Serial.print(poszero);
            step(a);
            poszero = valeur;
          }

          break;
        //definition poszero
        case 'h':
          poszero = valeur;
          break;
        case 'i':
          facteur = valeur;
          break;
        case 'v':
          vitesse = valeur;
          break;
      }

    }
  }
  delay(10); //pas la peine de tourner à plein régime
}

 

Merci à toi
Jérem

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • 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.