jeudi 14 janvier 2021

Planchette équatoriale : Code Arduino

J'avais donc testé un code Arduino permettant de corriger la dérive attendue du suivi stellaire de la planchette équatoriale motorisée. C'était plutôt concluant... mais perfectible. Voici tout de même ce code Arduino. Il n'est pas très élégant car il comporte une série de tests conditionnels. J'ai déjà en tête une autre façon de faire, toujours via le code Arduino et avec des calculs qui devraient être dans les cordes d'Arduino et de ses performances limitées.

En attendant voici le code Arduino du dernier test :

 

/*Routine Arduino pour Planchette équatoriale avec moteur pas à pas, 
driver de moteur DRV 8825, microstepping à 32 µpas par pas, 
utilisation de la bibliothèque de fonctions "accelstepper" 
Rotation continue
Mais compensation de dérive
Rembobinage par bouton pressoir
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
// définit la variable rpm et lui attribue la valeur initiale 20
float Vmoteur=20;
// Définit la variable TempsRef et lui attribue le temps de la carte Arduino
long TempsRef = millis();


// 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)
  {
   // Ajustement Vmoteur
   if ((millis()-TempsRef)>86000) Vmoteur=20.001;
   if ((millis()-TempsRef)>162000) Vmoteur=20.002;
   if ((millis()-TempsRef)>212000) Vmoteur=20.003;
   if ((millis()-TempsRef)>253000) Vmoteur=20.004;
   if ((millis()-TempsRef)>288000) Vmoteur=20.005;
   if ((millis()-TempsRef)>319000) Vmoteur=20.006;
   if ((millis()-TempsRef)>347000) Vmoteur=20.007;
   if ((millis()-TempsRef)>373000) Vmoteur=20.008;
   if ((millis()-TempsRef)>398000) Vmoteur=20.009;
   if ((millis()-TempsRef)>421000) Vmoteur=20.01;
   if ((millis()-TempsRef)>604000) Vmoteur=20.02;
   if ((millis()-TempsRef)>744000) Vmoteur=20.03;
   if ((millis()-TempsRef)>861000) Vmoteur=20.04;
   if ((millis()-TempsRef)>964000) Vmoteur=20.05;
   if ((millis()-TempsRef)>1057000) Vmoteur=20.07;
   if ((millis()-TempsRef)>1222000) Vmoteur=20.08;
   if ((millis()-TempsRef)>1297000) Vmoteur=20.09;
   if ((millis()-TempsRef)>1367000) Vmoteur=20.1;
   if ((millis()-TempsRef)>1498000) Vmoteur=20.12;
   if ((millis()-TempsRef)>1619000) Vmoteur=20.14;
   if ((millis()-TempsRef)>1731000) Vmoteur=20.16;
   if ((millis()-TempsRef)>1836000) Vmoteur=20.18;
   if ((millis()-TempsRef)>1935000) Vmoteur=20.2;
   if ((millis()-TempsRef)>2030000) Vmoteur=20.22;
   if ((millis()-TempsRef)>2120000) Vmoteur=20.24;
   if ((millis()-TempsRef)>2207000) Vmoteur=20.26;
   if ((millis()-TempsRef)>2290000) Vmoteur=20.28;
   if ((millis()-TempsRef)>2370000) Vmoteur=20.3;
   if ((millis()-TempsRef)>2448000) Vmoteur=20.32;
   if ((millis()-TempsRef)>2523000) Vmoteur=20.34;
   if ((millis()-TempsRef)>2596000) Vmoteur=20.36;
   if ((millis()-TempsRef)>2667000) Vmoteur=20.38;
   if ((millis()-TempsRef)>2737000) Vmoteur=20.40;
   if ((millis()-TempsRef)>2804000) Vmoteur=20.42;
   if ((millis()-TempsRef)>2870000) Vmoteur=20.44;
   if ((millis()-TempsRef)>2934000) Vmoteur=20.46; 
   if ((millis()-TempsRef)>2997000) Vmoteur=20.48;
   if ((millis()-TempsRef)>3059000) Vmoteur=20.50;
   // Fixe le microstepping :
  pinMode (M012, OUTPUT);
  digitalWrite (M012, HIGH);
   // Fixe la vitesse de rotation en nombres de pas par seconde :
  stepper.setSpeed(Vmoteur);
  // Fait tourner le moteur à la vitesse définie par setSpeed():
  stepper.runSpeed();
  }
if(digitalRead(8) == 0)
  {
  // Inactive le microstepping :
  pinMode (M012, OUTPUT);
  digitalWrite (M012, LOW);
  // Fixe la vitesse de rotation en nombres de pas par seconde :
  stepper.setSpeed(-100);
  // Fait tourner le moteur à la vitesse définie par setSpeed():
  stepper.runSpeed();
  // Reset les valeurs pour un nouveau suivi
  Vmoteur=20;
  TempsRef=millis();
  }
}

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