Aller au contenu

Messages recommandés

Posté (modifié)

oui tout testé j'ai réussis à faire tourner le moteur grâce à ce code ci

//  Demo function:The application method to drive the stepper motor.
//  Hareware:Stepper motor - 24BYJ48,Seeed's Motor Shield v2.0
//  Author:Frankie.Chu
//  Date:20 November, 2012
#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;
/**********************************************************************/
/*Function: Get the stepper motor rotate                               */
/*Parameter:-int steps,the total steps and the direction the motor rotates.*/
/*          if steps > 0,rotates anticlockwise,                         */
/*          if steps < 0,rotates clockwise.                             */
/*Return:   void                                                      */
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();//Initialization for the stepper motor.
}

void loop()
{
   step(48);//Stepper motors rotate anticlockwise 200 steps.
   delay(1000);
   step(-48);//Stepper motors rotate clockwise 200 steps.
   delay(1000);
}

Modifié par Bottles74
Posté
Si ça fonctionne...

 

Par contre, qu'est ce que c'est compliqué @_@

 

Bravo!

 

Tu peux facilement adapté ma source maintenant

 

Facilement ! nan mais c'est à moi que tu dis ça :D:D:D:D

 

Même le chinois je le comprends mieux que ça :p

Posté (modifié)

salut !

 

Je cherchais à tout hasard,un post concernant un moteur de MAP à fabriquer 'maison'...

Je crois bien que je suis tombé sur un sacré filon !

Merci DrThrax pour ces infos (et aux autres posteurs aussi).

 

voici mon pb :

Quel est le niveau requis (minimum) en eléctronique et en programmation, pour réussir ce genre de fabrication perso ?

 

Je n'ai pas encore consulté les liens fournis dans les divers posts, mais j'ai bien peur d'être largué rapidement...

Certes, je suis dans l'informatique (mais pas coté 'programmation', plutôt admin systèmes) et je n'ai quasi aucune connaissance en électronique pratique (à part un bouquin electronique pour les nuls qui doit prendre la poussière quelque part dans mes étagères, entre x disques durs HS et moults composants récuperés de matos HS (moteurs, engrenages...) que je stocke en me disant que ça me servira bien un jour...)

 

Mais à part ça, je me suis renseigné sur les sujets Arduino, Rasberry et autres aspects robotique/electronique amateur, et ça me tente bien de m'y mettre sérieusement !

 

Mon post est quel que peu Hors sujet, mais ce sujet est pile-poil dans le mille avec le 1er montage que je voudrais faire !

 

--> Réaliser un boitier motorisé de MAP (manuelle dans un 1er temps, avec boutons +/- et sens de rotation +/- aussi) pour ne plus avoir trop de flou avec mon Canon EOS 10 D au foyer de mon 200mm.

Et, SURTOUT, sans avoir les vibrations de 2-3 secondes avant stabilité dès que j'effleure la molette de mise au point de mon Crayford (qui au passage n'est pas démultiplié)...

 

Au final, si j'ai bien compris :

- le couple du moteur est important : comment savoir de quelle valeur de couple j'aurais besoin ? puis-je la mesurer d'une façon ou d'une autre avec mon crayford actuel ?

- pour l'alimentation, pas de pb je pense : j'observe en général avec une transfo secteur de 12V 2A (de récupération) utilisé pour ma motorisation de monture NEQ5 et ma syncscan.

 

- y-a-t-il d'autres aspects importants que j'aurais oubliés à part ceux-ci ?

Modifié par Manubis
Posté
Facilement ! nan mais c'est à moi que tu dis ça :D:D:D:D

 

Même le chinois je le comprends mieux que ça :p

 

 

Bonjour Bottles74,

 

Voilà j'ai fusionné ton code source avec le mien, normalement,je dis bien normalement ça devrait fonctionner.

 


/*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 = 10;
   int i = 0;
   int x = 0;
   int poszero = 0; //variable pour recevoir la position du PO au lancement de l'app
   int posfinal = 35; //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
 }

 

Je te conseille dans un premier temps de changer la variable posfinal (longueur de la course de ton PO en mm) puis charger le code dans ton Arduino.

 

Ensuite d'aller dans Outils -> Moniteur série (toujours du Logiciel Arduino).

De te connecter puis de taper a10. Si ton moteur bouge c'est bien!

 

La saisie de a10 est décomposée en deux parties par le soft "a" puis "10" va permettre au logiciel de savoir quoi faire via un switch case, dix va indiquer le paramètre. a10 signifie recule de 10 fois dix pas. Si on tu tapes a5, il va comprendre recule de 5 fois dix pas.

 

Voilà, si ça fonctionne avec le terminal série, aucune raison que ça ne fonctionne pas avec l'interface graphique que j'ai codée.

 

NB: Je ne sais pas (encore) comment régler la vitesse de déplacement du moteur:

 

NB: Pour la fonction goto, il te faut calculer le facteur qui est le nombre de pas nécéssaire pour déplacer le PO de 1mm ça se calcul ou ça se mesure...

Posté
salut !

 

Je cherchais à tout hasard,un post concernant un moteur de MAP à fabriquer 'maison'...

Je crois bien que je suis tombé sur un sacré filon !

Merci DrThrax pour ces infos (et aux autres posteurs aussi).

 

voici mon pb :

Quel est le niveau requis (minimum) en eléctronique et en programmation, pour réussir ce genre de fabrication perso ?

 

Je n'ai pas encore consulté les liens fournis dans les divers posts, mais j'ai bien peur d'être largué rapidement...

Certes, je suis dans l'informatique (mais pas coté 'programmation', plutôt admin systèmes) et je n'ai quasi aucune connaissance en électronique pratique (à part un bouquin electronique pour les nuls qui doit prendre la poussière quelque part dans mes étagères, entre x disques durs HS et moults composants récuperés de matos HS (moteurs, engrenages...) que je stocke en me disant que ça me servira bien un jour...)

 

Mais à part ça, je me suis renseigné sur les sujets Arduino, Rasberry et autres aspects robotique/electronique amateur, et ça me tente bien de m'y mettre sérieusement !

 

Mon post est quel que peu Hors sujet, mais ce sujet est pile-poil dans le mille avec le 1er montage que je voudrais faire !

 

--> Réaliser un boitier motorisé de MAP (manuelle dans un 1er temps, avec boutons +/- et sens de rotation +/- aussi) pour ne plus avoir trop de flou avec mon Canon EOS 10 D au foyer de mon 200mm.

Et, SURTOUT, sans avoir les vibrations de 2-3 secondes avant stabilité dès que j'effleure la molette de mise au point de mon Crayford (qui au passage n'est pas démultiplié)...

 

Au final, si j'ai bien compris :

- le couple du moteur est important : comment savoir de quelle valeur de couple j'aurais besoin ? puis-je la mesurer d'une façon ou d'une autre avec mon crayford actuel ?

- pour l'alimentation, pas de pb je pense : j'observe en général avec une transfo secteur de 12V 2A (de récupération) utilisé pour ma motorisation de monture NEQ5 et ma syncscan.

 

- y-a-t-il d'autres aspects importants que j'aurais oubliés à part ceux-ci ?

 

Bonjour,

 

Tout d'abord je te remercie et t'encourage vivement à te lancer. Niveau électronique je dirais presque nul vu que tous les composants sont déjà pré-assemblé sur l'Arduino et sur le "motorshield".

 

Personnelement, je te conseille de prendre un arduino + un motorshiel ladyada V1 disponible tous les deux pour moins de 22€. Pourquoi ceux là, parce que j'ai des actions... non, simplement parce que c'est cette interface qui te demandera le moins de connaissances en programmation. Mais rien ne t'empêche de commander le motorshield qui te plait.

 

J'ai il y a déjà presque trois ans posté un bricolage identique avec un moteur continu. Le code est encore plus simple et la précision est largement suffisante pour l'astro. C'est ce dont je me sers sur ma lunette, c'était un moteur Orion de mise au point que j'ai interfacé avec mon pc...

 

Pour le couple, c'est une très bonne question, je me suis souvent contenté de peser l'équipement devant être déplacé...Pas rigoureux du tout comme méthode mais c'est la plus simple, je pense.

Posté

Tu fais tourner une application python sur ton smartphone?

 

En tout cas, je suis très content d'avoir pu t'aider avec mes petits bricolages

Posté (modifié)

Non j'ai un petit soft qui s'appelle splashtop tu peux étendre ton PC sur ton smartphone gratuitement en wifi et pour je ne sais plus combien par mois le contrôler en 3g/4g

Extra pratique.

 

Merci bien de m'avoir aidé ;)

Modifié par Bottles74
Posté

Bonsoir.

 

Il y a beaucoup plus simple coté électronique si tu préfères: dans les magasins de modélismes tu trouvera de petits moto-réducteurs (moteur 6V + réducteur).

 

Tu trouves un boitier plastique, deux piles 1,5V, un inverseur 3 positions et c'est marre.

 

Il te restera la fixation au tube à faire bien sur.

 

A+

Fabien

 

salut !

 

Je cherchais à tout hasard,un post concernant un moteur de MAP à fabriquer 'maison'...

Je crois bien que je suis tombé sur un sacré filon !

Merci DrThrax pour ces infos (et aux autres posteurs aussi).

 

voici mon pb :

Quel est le niveau requis (minimum) en eléctronique et en programmation, pour réussir ce genre de fabrication perso ?

 

Je n'ai pas encore consulté les liens fournis dans les divers posts, mais j'ai bien peur d'être largué rapidement...

Certes, je suis dans l'informatique (mais pas coté 'programmation', plutôt admin systèmes) et je n'ai quasi aucune connaissance en électronique pratique (à part un bouquin electronique pour les nuls qui doit prendre la poussière quelque part dans mes étagères, entre x disques durs HS et moults composants récuperés de matos HS (moteurs, engrenages...) que je stocke en me disant que ça me servira bien un jour...)

 

Mais à part ça, je me suis renseigné sur les sujets Arduino, Rasberry et autres aspects robotique/electronique amateur, et ça me tente bien de m'y mettre sérieusement !

 

Mon post est quel que peu Hors sujet, mais ce sujet est pile-poil dans le mille avec le 1er montage que je voudrais faire !

 

--> Réaliser un boitier motorisé de MAP (manuelle dans un 1er temps, avec boutons +/- et sens de rotation +/- aussi) pour ne plus avoir trop de flou avec mon Canon EOS 10 D au foyer de mon 200mm.

Et, SURTOUT, sans avoir les vibrations de 2-3 secondes avant stabilité dès que j'effleure la molette de mise au point de mon Crayford (qui au passage n'est pas démultiplié)...

 

Au final, si j'ai bien compris :

- le couple du moteur est important : comment savoir de quelle valeur de couple j'aurais besoin ? puis-je la mesurer d'une façon ou d'une autre avec mon crayford actuel ?

- pour l'alimentation, pas de pb je pense : j'observe en général avec une transfo secteur de 12V 2A (de récupération) utilisé pour ma motorisation de monture NEQ5 et ma syncscan.

 

- y-a-t-il d'autres aspects importants que j'aurais oubliés à part ceux-ci ?

Posté

Fondamentalement, il ne faut aucune connaissance pour faire le montage, il suffit d'installer les logiciels requis (Pilote Arduino, Pytho, Pysérial) et copier coller la source dans l'arduino...

 

Mais effectivement, c'est aussi une solution...

  • 4 semaines plus tard...
Posté

Petit Up pour ce brico bien utile, je me suis permis de le mettre dans mon site perso avec les liens et les remerciements de vigueur :)

 

Merci encore ça marche tip top !

 

Jérem

Posté

Mais de rien, je suis flatté.

 

C'est un réel plaisir.

 

Si j'avais plus de temps et de budget, je commercialiserais bien des PO motorisé...

 

En attendant, je vais me mettre à bosser une MAP automatique

  • 6 mois plus tard...
Posté

Bonjour DrThrax pourrais-tu proposer un lien qui pointe sur la réalisation de la motorisation ?

Les liens initiaux pointent dans le vide.

Quelle est la liste du matériel qu'il faut réunit pour ce montage ?

 

Merci

  • 3 semaines plus tard...
Posté

Hello

Jolie ! Mais attention, le moteur n'est pas bien aligné. Je sais le cardan est là pour ça, mais j'ai tellement vu de cardans cassés à cause d'un mauvais alignement que je dis : attention !

Eric

Posté

Aucun soucis, c'est l'accouplement qui se déforme, il est fait pour ça fait 3 ans que j'utilise ça sur ma lulu...

 

Sinon c'est presque impossible d'aligner parfaitement l'axe du moteur à l'axe de la molette du PO

  • 3 mois plus tard...
  • 8 mois plus tard...

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.