samedi 20 février 2021

Monture allemande : Code arduino, version 1

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

Newton T200 : Mise au point astrophoto déportée

P lusieurs limites étaient apparues lors du dernier essai d'astrophoto avec le T200 . L'une d'elles était la difficulté de mettr...