J'avais présenté un test de faisabilité de la fonction Push & Go de la motorisation d'une monture de télescope avec un microcontrôleur Arduino. Le Push & Go est une fonction utilisée pour pointer des objets astronomiques peu lumineux. Cela consiste à pointer une étoile brillante du voisinage puis de déclencher le Push & Go qui actionnera la monture du télescope afin de décaler le pointage et le positionner sur l'objet peu lumineux. Voici ci-dessous le code Arduino de ce test. Ce code n'apporte pas grand-chose puisqu'il n'est pas fonctionnel, c'est un test. Cependant, il permet de comprendre la solution adoptée pour interrompre le suivi stellaire, effectuer un décalage du pointage à vitesse rapide avant de reprendre le suivi stellaire.
Note : le Push & Go est ici déclenché par la pression d'un bouton poussoir dont le circuit présente une résistance. Cette dernière n'est pas nécessaire si l'on utilise une résistance virtuelle de Arduino. Il convient alors de passer par les fonctions pullup comme dans le code Arduino de la motorisation d'une monture de télescope. Cette solution n'est pas adoptée ici car je ne la connaissais pas lors de la conception de la motorisation de la planchette équatoriale utilisée pour ce test aujourd'hui.
/*Routine Arduino pour Planchette équatoriale avec moteur pas à pas,
driver de moteur DRV 8825, microstepping à 32 µpas par pas désactivé,
utilisation de la bibliothèque de fonctions "accelstepper"
Test de la fonction Push & Go à partir de la planchette équatoriale
Voir le blog "Astronomie par les trois bouts" :
https://astronomiebbb.blogspot.com/ */
// Inclut la bibliothèque "AccelStepper" :
#include <AccelStepper.h>
// Définit les connections Arduino destinées au contrôle du moteur pas à pas :
#define dirPin 2
#define stepPin 3
// Définit l'utilisation d'un driver (attribution de 1 au type d'interface) :
#define motorInterfaceType 1
// Définit la connection Arduino destinée au microstepping :
#define M012 4
// Création du moteur dans le code Arduino :
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Déclare la pin 8 comme lecture du bouton poussoir
pinMode(8,INPUT);
// Fixe la vitesse maximale du moteur (indispensable) :
stepper.setMaxSpeed(1000);
}
void loop()
{
if(digitalRead(8) == 1)
{
// Inactive le microstepping :
pinMode (M012, OUTPUT);
digitalWrite (M012, LOW);
// Fixe la vitesse de rotation en nombres de pas par seconde :
stepper.setSpeed(10);
// Fait tourner le moteur à la vitesse définie par setSpeed():
stepper.runSpeed();
} // Si bouton poussoir activé
if(digitalRead(8) == 0)
{
// Inactive le microstepping :
pinMode (M012, OUTPUT);
digitalWrite (M012, LOW);
stepper.setAcceleration(30);
// Attribue 0 à la position actuelle
stepper.setCurrentPosition(0);
// Fait tourner le moteur en arrière de 400 pas à 200 pas/s
while(stepper.currentPosition() != -400)
{
stepper.setSpeed(-200);
stepper.runSpeed();
}
stepper.setAcceleration(0);
}
}
Aucun commentaire:
Enregistrer un commentaire