Affichage des articles triés par pertinence pour la requête code arduino trois vitesses. Trier par date Afficher tous les articles
Affichage des articles triés par pertinence pour la requête code arduino trois vitesses. Trier par date Afficher tous les articles

mercredi 20 avril 2022

Motorisation : Code Arduino à trois vitesses

 J'avais évoqué le projet de faire évoluer le code Arduino de pilotage des moteurs pas à pas de la petite monture équatoriale à deux vitesses, suivi stellaire et pointage, vers une version incluant une troisième vitesse de centrage. Voilà qui est fait. Le code téléversé dans l'Arduino et son blindage fonctionne et pilote la monture dans l'atelier. Cependant je ne l'ai pas encore testé lors d'une véritable session astronomique. L'ensemble de l'instrument n'est pas encore finalisé mais un tel test devrait toutefois être possible. Attendons donc une nuit étoilée... tout en finalisant l'ensemble.

💫 Arduino 💫 Astrophotographie 💫 Blindage 💫 DRV8825 💫 Instrumentation astronomique 💫 Monture équatoriale motorisée 💫 Moteur pas à pas 💫 Suivi stellaire 💫  

Voici donc la version actuelle de ce code Arduino à trois vitesses bien qu'il soit encore susceptible de subir des corrections et améliorations : 
/*
 * Motorisation d'une monture équatoriale Contrôlée par joystick
 * Vitesse de suivi stellaire, de centrage et de pointage, bascule par le bouton poussoir du joystick
 * Voyant LED pour le mode pointage, 1/2 éclairé pour le mode centrage, éteint en suivi stellaire 
 * Seuil à 100 pour la détection de l'actionnement du joystick (sur 1024)
 * Délai à 100 ms contre l'incertitude du bouton poussoir
 * Motorisation via drivers de moteur pas à pas DRV8825
 * Broches Arduino organisées pour le blindage grand format Electrocookie
 * Utilise les bibliothèques Arduino AccelStepper et Bounce2
 * Voir le blog Astronomie par les trois bouts
 * astronomiebbb.blogspot.com/
 */ 

//Inclusion des bibliothèques
#include <AccelStepper.h> // Gestions moteur pas à pas
#include <Bounce2.h> // Gestion bouton poussoir

//Déclaration des broches d'Arduino
const int pinM012 = 4; //Contrôle du mode micropas
//(les broches M0, M1 et M2 des deux DRV8825 sont connectées entre elles)
const int pinLed = 3; // Broche de la LED
const int pinSwJoy = 2; //Broche du bouton du joystick

//Broches pour l'axeA
const int pinJA = A0; //Lecture AxeA du joystick
const int pinDirA = 6; //Contrôle la direction du moteur AxeA
const int pinStepA = 5; //Contrôle la vitesse du moteur AxeA

//Broches pour l'axeD
const int pinJD = A1; //Lecture AxeD du joystick
const int pinDirD = 8; //Contrôle la direction du moteur AxeD 
const int pinStepD = 7; //Contrôle la vitesse du moteur AxeD

//Déclaration des variables
long speedA, valA, mapA, bougeA; //variables de gestion des mouvements moteur AxeA
long speedD, valD, mapD, bougeD; //variables de gestion des mouvements moteur AxeD
boolean micropas; //Contrôle du mode microstepping

boolean actionA, actionD; //Gestion de mise en oeuvre des corrections

unsigned long debounceDelay = 100; //Délai contre l'incertitude du bouton poussoir
int mode; // mode de fonctionnement : suivi ou centrage ou pointage

//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);

//Déclaration du bouton poussoir du joystick
Bounce swJoy = Bounce();


void setup() {
  mode = 0; //Démarre en mode suivi stellaire
  
  //Définition des modalités des broches
  pinMode(pinM012, OUTPUT);
  pinMode(pinLed, OUTPUT);
  pinMode(pinSwJoy, INPUT_PULLUP);
  
  analogWrite(pinLed, 0); //LED- puisque mode suivi stellaire

  //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);

  //Configure le bouton poussoir du joystick
  swJoy.attach(pinSwJoy); // Bouton relié à la broche pinSwJoy
  swJoy.interval(debounceDelay); //Délai d'incertitude
}

void loop() {
  checkSwJoy(); // Lance la void ainsi nommée
  if (mode == 0) {
    analogWrite(pinLed,0); //mode suivi, éteind la LED  
  }
  if (mode == 1) {
    analogWrite(pinLed,10); //mode centrage, LED 1/2 allumée
  }
  if (mode == 2) {
    analogWrite(pinLed,255); //mode pointage, LED allumée
  }
  
  //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, -950, 950);
    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, -950, 950);
    actionD = true;
  }
   
 //Fait bouger les moteurs
  if (actionA) // Si le joystick est actionné en A
    {  
    if (mode == 0) // Si mode suivi stellaire
      {
        bougeA = (mapA/100)+46.924; // Vitesse de suivi stellaire +/- correction
        micropas = true; // Active le microspepping
      }
     if (mode == 1) // Si mode centrage
      {
        bougeA = (mapA);
        micropas = true; // Active le microspepping
      } 
     if (mode == 2) // Si mode pointage
        {
          bougeA = (mapA);
          micropas = false; // Désactive le microstepping
        }
    digitalWrite(pinM012, micropas);
    AxeA.setSpeed(bougeA);
    AxeA.runSpeed();
    mapA = 0;
    }
    else // Si pas d'action sur le joystick en A
      {
        micropas = true;
        digitalWrite(pinM012,micropas);
        AxeA.setSpeed(46.924);// Vitesse de suivi stellaire
        AxeA.runSpeed();
      }
  if (actionD) // Si le joystick est actionné en D
    {
    if (mode == 0) // Si mode suivi stellaire
      {
        bougeD = (mapD/100); // Vitesse proportionnelle à l'axe A 
        micropas = true; // Active le microstepping
      }
     if (mode == 1) // Si mode centrage
        {
          bougeD = (mapD);
          micropas = true; // Désactive le microstepping
        }
     if (mode == 2) // Si mode pointage
        {
          bougeD = (mapD);
          micropas = false; // Désactive le microstepping
          // Pas besoin de calculer la vitesse du moteur, on utilise mapD
        }
    digitalWrite(pinM012, micropas);    
    AxeD.setSpeed(bougeD);
    AxeD.runSpeed();
    }
    else // Si pas d'action sur le joystick en D
      {
        AxeD.stop(); // Moteur à l'arrêt
      }
}

void checkSwJoy() // Bouton poussoir joystick actionné ?
{
  swJoy.update(); // Mise à jour du bouton
  if (swJoy.fell()) // Actionné ?
  {
    ++mode; // incrémente le mode
    if (mode>2) // revient en mode suivi
    {
      mode = 0; // mode suivi
    }    
  }
}  

vendredi 7 mars 2025

Push & Go : Code Arduino

Le code Arduino du Push & Go est une simple évolution du code Arduino de suivi stellaire à trois vitesses (pointage, centrage, suivi). Le Push & Go nécessite l’ajout d’un poussoir entre la broche 10 de l’Arduino et une broche GND. Il n’y a pas besoin de résistance car le code utilise la résistance interne virtuelle de l’Arduino par la fonction PULLUP : pinMode(pinPuGo, INPUT_PULLUP). Je reviendrai sur le calcul du nombre de pas à indiquer dans le code afin d’obtenir le déplacement Push & Go souhaité.

/*
 * Motorisation d'une monture équatoriale Contrôlée par joystick avec fonction Push&Go
 * Vitesse de suivi stellaire, de centrage et de pointage, bascule par le bouton poussoir du joystick
 * Voyant LED pour le mode pointage, 1/2 éclairé pour le mode centrage, éteint en suivi stellaire
 * Push&Go par bonton poussoir 
 * Seuil à 100 pour la détection de l'actionnement du joystick (sur 1024)
 * Délai à 100 ms contre l'incertitude du bouton poussoir
 * Motorisation via driver de moteur pas à pas DRV8825
 * Broches Arduino organisées pour le blindage grand format Electrocookie
 * Utilise les bibliothèques Arduino AccelStepper et Bounce2
 * Voir le blog Astronomie par les trois bouts
 * astronomiebbb.blogspot.com/
 */ 

//Inclusion des bibliothèques
#include <AccelStepper.h> // Gestions moteur pas à pas
#include <Bounce2.h> // Gestion bouton poussoir

//Déclaration des broches d'Arduino
const int pinM012 = 4; //Contrôle du mode micropas
//(les broches M0, M1 et M2 des deux DRV8825 sont connectées entre elles)
const int pinLed = 3; // Broche de la LED
const int pinSwJoy = 2; //Broche du bouton du joystick
const int pinPuGo = 10; //Broche du bouton poussoir Push&Go

//Broches pour l'axeA
const int pinJA = A0; //Lecture AxeA du joystick
const int pinDirA = 6; //Contrôle la direction du moteur AxeA
const int pinStepA = 5; //Contrôle la vitesse du moteur AxeA

//Broches pour l'axeD
const int pinJD = A1; //Lecture AxeD du joystick
const int pinDirD = 8; //Contrôle la direction du moteur AxeD 
const int pinStepD = 7; //Contrôle la vitesse du moteur AxeD

//Déclaration des variables
long speedA, valA, mapA, bougeA; //variables de gestion des mouvements moteur AxeA
long speedD, valD, mapD, bougeD; //variables de gestion des mouvements moteur AxeD
boolean micropas; //Contrôle du mode microstepping

boolean actionA, actionD; //Gestion de mise en oeuvre des corrections

unsigned long debounceDelay = 100; //Délai contre l'incertitude du bouton poussoir
int mode; // mode de fonctionnement : suivi ou centrage ou pointage

//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);

//Déclaration du bouton poussoir du joystick
Bounce swJoy = Bounce();
//Déclaration du bonton poussoir Push&Go
Bounce PuGo = Bounce();

void setup() {
  mode = 0; //Démarre en mode suivi stellaire
  
  //Définition des modalités des broches
  pinMode(pinM012, OUTPUT);
  pinMode(pinLed, OUTPUT);
  pinMode(pinSwJoy, INPUT_PULLUP);
  pinMode(pinPuGo, INPUT_PULLUP);
  
  analogWrite(pinLed, 0); //LED- puisque mode suivi stellaire

  //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);

  //Configure le bouton poussoir du joystick
  swJoy.attach(pinSwJoy); // Bouton relié à la broche pinSwJoy
  swJoy.interval(debounceDelay); //Délai d'incertitude

  //Configure le bouton poussoir Push&Go
  PuGo.attach(pinPuGo); // Bonton relié à la broche pinPuGo
  PuGo.interval(debounceDelay); //Délai d'incertitude
}

void loop() {
  checkSwJoy(); // Lance la void ainsi nommée
  if (mode == 0) {
    analogWrite(pinLed,0); //mode suivi, éteind la LED  
  }
  if (mode == 1) {
    analogWrite(pinLed,10); //mode centrage, LED 1/2 allumée
  }
  if (mode == 2) {
    analogWrite(pinLed,255); //mode pointage, LED allumée
  }
  
  //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, -950, 950);
    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, -950, 950);
    actionD = true;
  }


   //Vérifie si le bouton poussoir Push&Go est actionné
   //Si "oui", autorise la mise en oeuvre du Push&Go
    PuGo.update(); // Mise à jour du bouton
  if (PuGo.fell()) // Actionné ?
    {
      micropas = false; // Désactive le microstepping
      digitalWrite (pinM012, micropas); // Désactive le microstepping
      // Mise en oeuvre du Push&Go sur le moteur alpha
      AxeA.setCurrentPosition(0); // Attribue 0 à la position actuelle
      AxeA.setSpeed(800); // Fixe la vitesse du Push&Go
      AxeA.setAcceleration(200); // Fixe l'accélération du Push&Go
      AxeA.moveTo(AxeA.currentPosition() + 2425);  // Push&Go alpha de 2425 pas vers l'avant (+)
      while(AxeA.distanceToGo() != 0) // Fait tourner le moteur du nombre de pas ci-dessus
        {
          AxeA.run(); // Mise en oeuvre du moteur Alpha
        }
        // Mise en oeuvre du Push&Go sur le moteur delta
      AxeD.setCurrentPosition(0); // Attribue 0 à la position actuelle
      AxeD.setSpeed(800); // Fixe la vitesse du Push&Go
      AxeD.setAcceleration(200); // Fixe l'accélération du Push&Go
      AxeD.moveTo(AxeD.currentPosition() - 817);  // Push&Go delta de 817 pas vers l'arrière (-)
      while(AxeD.distanceToGo() != 0) // Fait tourner le moteur du nombre de pas ci-dessus
        {
          AxeD.run(); // Mise en oeuvre du moteur Delta
        }
      // Reprendre en mode suivi stellaire
      mode = 0; 
      micropas = true;
      digitalWrite(pinM012,micropas);
      AxeA.setSpeed(46.924);// Vitesse alpha de suivi stellaire
      AxeA.runSpeed();
      AxeD.stop(); // Moteur delta à l'arrêt
    } 

 //Fait bouger les moteurs si action sur le joystick
  if (actionA) // Si le joystick est actionné en A
    {  
    if (mode == 0) // Si mode suivi stellaire
      {
        bougeA = (mapA/100)+46.924; // Vitesse de suivi stellaire +/- correction
        micropas = true; // Active le microspepping
      }
     if (mode == 1) // Si mode centrage
      {
        bougeA = (mapA);
        micropas = true; // Active le microspepping
      } 
     if (mode == 2) // Si mode pointage
        {
          bougeA = (mapA);
          micropas = false; // Désactive le microstepping
        }
       
    digitalWrite(pinM012, micropas);
    AxeA.setSpeed(bougeA);
    AxeA.runSpeed();
    mapA = 0;
    }
    else // Si pas d'action sur le joystick en A
      {
        micropas = true;
        digitalWrite(pinM012,micropas);
        AxeA.setSpeed(46.924);// Vitesse de suivi stellaire
        AxeA.runSpeed();
      }
  if (actionD) // Si le joystick est actionné en D
    {
    if (mode == 0) // Si mode suivi stellaire
      {
        bougeD = (mapD/100); // Vitesse proportionnelle à l'axe A 
        micropas = true; // Active le microstepping
      }
     if (mode == 1) // Si mode centrage
        {
          bougeD = (mapD);
          micropas = true; // Désactive le microstepping
        }
     if (mode == 2) // Si mode pointage
        {
          bougeD = (mapD);
          micropas = false; // Désactive le microstepping
          // Pas besoin de calculer la vitesse du moteur, on utilise mapD
        }
    digitalWrite(pinM012, micropas);    
    AxeD.setSpeed(bougeD);
    AxeD.runSpeed();
    }
    else // Si pas d'action sur le joystick en D
      {
        AxeD.stop(); // Moteur à l'arrêt
      }
}

void checkSwJoy() // Bouton poussoir joystick actionné ?
{
  swJoy.update(); // Mise à jour du bouton
  if (swJoy.fell()) // Actionné ?
  {
    ++mode; // incrémente le mode
    if (mode>2) // revient en mode suivi
    {
      mode = 0; // mode suivi
    }    
  }
  
}  

dimanche 7 mars 2021

Monture allemande : Code Arduino à deux vitesses

Le plan de câblage présenté dans le billet précédent permet non seulement le suivi stellaire mais aussi une vitesse rapide permettant le pointage. Lors du suivi stellaire, le joystick permet la correction des erreurs de suivi en ascension droite (axe alpha) et en déclinaison (axe delta). La pression du joystick bascule dans le mode pointage et allume la LED témoin de ce mode rapide. Le pointage peut alors être effectué avec le joystick. La pression du joystick permet de revenir en mode suivi stellaire.

Ce plan de câblage est prévu pour le code Arduino ci-dessous. Pour fonctionner, le code nécessite les bibliothèques de fonctions accelstepper et bounce2 qui doivent donc être installées sur le logiciel Arduino comme précédemment expliqué.

La vitesse de suivi stellaire est fixée ici à 46.924 µpas/s selon la démultiplication du mécanisme d'entraînement et d'après les calculs précédemment expliqués. Les corrections font varier cette vitesse de 9.5 µpas/s en plus ou en moins selon l'action sur le joystick. En mode pointage, la vitesse est alors de 950 pas/s (et plus µpas/s car le code Arduino désactive le mode micro-pas lors du pointage).

Il n'est pas impossible qu'en poursuivant les essais de ce système, je trouve que l'ajout d'une vitesse de centrage soit bien utile ? Nous verrons bien.

 

/*
 * Motorisation d'une monture équatoriale Contrôlée par joystick
 * Vitesse de suivi stellaire et de pointage, bascule par le bouton poussoir du joystick
 * Voyant LED pour le mode pointage
 * threshold à 100 pour la détection de l'actionnement du joystick (sur 1024)
 * délai à 100 ms contre l'incertitude du bouton poussoir
 * Motorisation via driver de moteur pas à pas DRV8825
 * Utilise les bibliothèques Arduino AccelStepper et Bounce2
 * Voir le blog Astronomie par les trois bouts
 * astronomiebbb.blogspot.com/
 */ 

//Inclusion des bibliothèques
#include <AccelStepper.h> // Gestions moteur pas à pas
#include <Bounce2.h> // Gestion bouton poussoir

//Déclararion des broches d'Arduino
const int pinM012 = 6; //Contrôle du mode micropas
//(les broches M0, M1 et M2 des deux DRV8825 sont connectées entre elles)
const int pinLed = 7; // Broche de la LED
const int pinSwJoy = 8; //Broche du bouton du joystick

//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

unsigned long debounceDelay = 100; //Délai contre l'incertitude du bouton poussoir
boolean pointage; //true si mode pointage et false pour suivi stellaire

//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);

//Déclaration du bouton poussoir du joystick
Bounce swJoy = Bounce();


void setup() {
  pointage = false; //Démarre en mode suivi stellaire
  
  //Définition des modalités des broches
  pinMode(pinM012, OUTPUT);
  pinMode(pinLed, OUTPUT);
  pinMode(pinSwJoy, INPUT_PULLUP);
  
  digitalWrite(pinLed, pointage); //LED- puisque mode suivi stellaire

  //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);

  //Configure le bouton poussoir du joystick
  swJoy.attach(pinSwJoy); // Bouton relié à la broche pinSwJoy
  swJoy.interval(debounceDelay); //Délai d'incertitude
}

void loop() {
  checkSwJoy(); // Lance la void ainsi nommée
  digitalWrite(pinLed,pointage); //Allume ou éteind la LED selon le mode
    
  //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, -950, 950);
    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, -950, 950);
    actionD = true;
  }
   
 //Fait bouger les moteurs
  if (actionA) // Si le joystick est actionné en A
    {  
    if (pointage == false) // Si mode suivi stellaire
      {
        mapA = (mapA/100)+46.924; // Vitesse de suivi stellaire +/- correction
        micropas = true; // Active le microspepping
      }
      else // Si mode pointage
        {
          micropas = false; // Désactive le microstepping
          // Pas besoin de calculer la vitesse moteur, on utilise mapA
        }
    digitalWrite(pinM012, micropas);
    AxeA.setSpeed(mapA);
    AxeA.runSpeed();
    }
    else // Si pas d'action sur le joystick en A
      {
        micropas = true;
        digitalWrite(pinM012, micropas);
        AxeA.setSpeed(46.924); // Vitesse de suivi stellaire de la monture
        AxeA.runSpeed();
      }
  if (actionD) // Si le joystick est actionné en D
    {
    if (pointage == false) // Si mode suivi stellaire
      {
        mapD = (mapD/100); // Vitesse proportionnelle à l'axe A 
        micropas = true; // Active le microstepping
      }
      else // Si mode pointage
        {
          micropas = false; // Désactive le microstepping
          // Pas besoin de calculer la vitesse du moteur, on utilise mapD
        }
    digitalWrite(pinM012, micropas);    
    AxeD.setSpeed(mapD);
    AxeD.runSpeed();
    }
    else // Si pas d'action sur le joystick en D
      {
        AxeD.stop(); // Moteur à l'arrêt
      }
}

void checkSwJoy() // Bouton poussoir joystick actionné ?
{
  swJoy.update(); // Mise à jour du bouton
  if (swJoy.fell()) // Actionné ?
  {
    pointage = !pointage; // change le mode 
  }
}  

dimanche 20 mars 2022

Motorisation : Boîtier électronique

 Voilà pourquoi je trouve la solution du blindage de prototypage grand format comme étant la plus élégante parmi celles essayées : une fois inséré dans le boîtier, l’ensemble est homogène. L’Arduino et le blindage forment un ensemble compact mais les composants demeurent suffisamment espacés pour une réalisation facilitée et une lisibilité pour l’astronome amateur qui n’est pas un expert en électronique. Il y a certes beaucoup de câbles mais on s’y retrouve grâce à l’utilisation de nappes. Voici donc une version finalisée du Télescopilote !

 


 L’électronique du Télescopilote installée dans son boîtier et câblée. On distingue l’Arduino dessous et le blindage de prototypage au-dessus où sont positionnés les deux drivers DRV8825 des moteurs de la monture équatoriale de télescope.

 Cette électronique fonctionne avec le code Arduino proposé dans un billet antérieur en attendant un code autorisant trois vitesses (suivi, centrage, pointage).

💫 Arduino 💫 Astrophotographie 💫 Blindage 💫 DRV8825 💫 Instrumentation astronomique 💫 Monture équatoriale motorisée 💫 Moteur pas à pas 💫 Suivi stellaire 💫

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...