La toute première version de la motorisation de la monture équatoriale allemande n'assure que le suivi stellaire avec la possibilité de corrections en alpha et en delta grâce à un joystick. Le plan de câblage est mentionné dans le dernier post. Le code Arduino est ci-dessous. Comme mentionné précédemment, l'ensemble fonctionne dans l'atelier mais n'a pas encore été testé sur le terrain pour un véritable suivi stellaire (j'attends une fenêtre de beau temps). Le calcul de la vitesse de rotation du moteur de l'axe alpha d'ascension droite avait été mentionné il y a maintenant longtemps pour la motorisation du star tracker. La version suivante qui comportera deux vitesses, l'une de suivi stellaire et l'autre de pointage, est quasiment terminée. Je la présenterai donc bientôt.
/*
* Motorisation d'une monture équatoriale astronomique
* Contrôlée par joystick
* threshold à 100 pour la détection de l'actionnement du joystick (sur 1024)
* Voir le blog "Astronomie par les trois bouts" :
* https://astronomiebbb.blogspot.com/
*/
//Inclusion des bibliothèques
#include <AccelStepper.h>
//Déclararion des broches d'Arduino
//(M0,M1 et M2 du DRV8825 sont connectées entre elles)
const int pinM012 = 6; //Contrôle du mode micropas
//Broches pour l'axeA
const int pinJA = A0; //Lecture AxeA du joystick
const int pinDirA = 2; //Contrôle la direction du moteur AxeA
const int pinStepA = 3; //Contrôle la vitesse du moteur AxeA
//Broches pour l'axeD
const int pinJD = A1; //Lecture AxeD du joystick
const int pinDirD = 4; //Contrôle la direction du moteur AxeD
const int pinStepD = 5; //Contrôle la vitesse du moteur AxeD
//Déclaration des variables
long speedA, valA, mapA; //variables de gestion des mouvements moteur AxeA
long speedD, valD, mapD; //variables de gestion des mouvements moteur AxeD
boolean micropas; //Contrôle du mode microstepping
boolean actionA, actionD; //Gestion de mise en oeuvre des corrections
//Paramètres d'AccelStepper
const int maxSpeed = 1000; //Définit la Vmax du moteur (indispensable)
const int threshold = 100; //Contre la faible fiabilité des potentiomètres
long thresholdUp, thresholdDown; //variables ancillaires à la précédente
//Déclaration des moteurs dans la bibliothèque AccelStepper
AccelStepper AxeA(AccelStepper::DRIVER, pinStepA, pinDirA);
AccelStepper AxeD(AccelStepper::DRIVER, pinStepD, pinDirD);
void setup() {
//Définition des modalités des broches
pinMode(pinM012, OUTPUT);
//Active le microstepping par défaut
micropas = true;
digitalWrite(pinM012, micropas);
//Calcule la plage du joystick devant être considérée comme "Centré"
thresholdDown = (1024 / 2) - threshold;
thresholdUp = (1024 / 2) + threshold;
//Configure les paramètres des moteurs
AxeA.setMaxSpeed(maxSpeed);
AxeD.setMaxSpeed(maxSpeed);
}
void loop() {
//Par défaut, pas d'action sur le joystick
actionA = false;
actionD = false;
//Lecture des potentiomètres du joystick
valA = analogRead(pinJA);
valD = analogRead(pinJD);
//Vérifie si le joystick est actionné en AxeA
//Si "oui", code la valeur du potentiomètre en pas/s
if (valA>thresholdUp || valA<thresholdDown)
{
mapA = map(valA, 0, 1023, 37, 57);
actionA = true;
}
//Vérifie si le joystick est actionné en AxeD
//Si "oui", code la valeur du potentiomètre en pas/s
if (valD>thresholdUp || valD<thresholdDown)
{
mapD = map(valD, 0, 1023, -10, 10);
actionD = true;
}
//Fait bouger les moteurs
if (actionA)
{
AxeA.setSpeed(mapA);
AxeA.runSpeed();
}
else
{
AxeA.setSpeed(46.924);
AxeA.runSpeed();
}
if (actionD)
{
AxeD.setSpeed(mapD);
AxeD.runSpeed();
}
else
{
AxeD.stop();
}
} // fin du programme
Aucun commentaire:
Enregistrer un commentaire