Skip to content

Astro-Tracker - Astroduino

Advertising
?
Creation quality: 5.0/5 (1 vote)
Evaluation of members on the printability, utility, level of detail, etc.

  • 2.4k views
  • 3 likes
  • 33 downloads

License
3D design format
Folder details Close
  • AstroTracker_support_moteur.STL
  • AstroTracker_support_rotule.STL
  • AstroTracker_support_roulements.STL
  • AstroTracker_support_tige_filetee.STL
  • Plateau_fixation_trepied.STL
  • bouton_support_viseur.STL
  • cale_compensation_petit_model.STL
  • corp_boitier.STL
  • couvercle.STL
  • fixation_tige.STL
  • pignon_moteur.STL
  • plaquette_support_moteur.STL
  • roue84d.STL
  • serrage_fixation_tige.STL
  • support_viseur_polaire.STL

Learn more about the formats

Publication date 2022-09-11 at 16:57
?
Published to Thingiverse on: 2016-08-14 at 17:11
Design number 841203

jamesdedij

3D printer file info

3D model description

Systeme de suivi equatorial type "planchette" pour l'astrophotographie pose longue , motorisé par un moteur pas a pas bi-polaire et un Arduino uno.
La tige filetée est démontable pour faciliter le transport.
Le moteur est dispo chez Go-tronic: http://www.gotronic.fr/art-moteur-24byj48-19028.htm
Les blocs sont assemblés a l'aide de tiges lisse en acier inox diametre 8mm et longueur 220mm(précis). Les tiges sont collées dans leur logement a l'aide de colle epoxy bi-composant.
La tige filetée courbée est du M8 (laiton).

Le code arduino gere le moteur en augmentant ou reduisant le nombre de MicroSecondes de delai entre chaque pas. Les touches du shield LCD permet d'incrementer ou de reduire la vitesse de 1Ms avec les touches haut/bas ou 10Ms avec les touches droite/gauche.
Un compteur de temps de poursuite est ajouté (le compte s'arrete lorsque le systeme est arrèté.

materiel necessaire:

MECANIQUE:
2 vis M3x16mm + 2ecrous M3 (platine moteur)
2 vis M6x65mm + 4 ecrous M6 (fixation tige courbée , boutons de serrage)
4 tiges acier inox diametre 8mm long.220mm
1 tige acier inox long. 155mm filetée aux 2 extremités sur 7mm + 2 ecrous M8(ou tige filetée M8 (axe charnière)
mais moins bon car diametre legerement plus petit et cause de jeu)
1 tige filetée M8 laiton courbée (rayon 285.7mm) + 3 ecrous M8 dont un borgne
3 vis chc M4x20mm + 3 ecrous M4 (cale de compensation - support rotule)
2 vis chc M5x30mm + 2 ecrous M5 (fixation rapide trepied photo)
3 vis chc M5x30mm + 3 ecrous M5 (support viseur polaire)
4 roulements type "roller" 8x22
1 roulement 12x32 (epaisseur 10)

ELECTRONIQUE:
1 arduino uno r3
1 shield LCD DFrobot
1 driver moteur Easydriver V4
interrupteur
batterie 6v 2 ou 4 Ah

Ajout du boitier pour l'electronique: ( l'arduino+lcd+easyDriver sont maintenus dans le boitier par des vis plastique et des ecrous M3 )

Les premiers tests m'ont permis de realiser la photo de la voie lactée jointe , 180 secondes de pose a 24mm f4.5 1200 iso.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//  ASTRODUINO - STARTRACKER
//  motorisation d'une "planchette equatoriale" a tige filetée courbée 
//  controle de vitesse du moteur PAP par gestion du delai "microseconde" entre les          fronts montants et descendants
//  compteur de temps de poursuite en utilisant un timer


  #include
 <TimerOne.h>               // librairie pour le timer d'horloge                
  #include
 <LiquidCrystal.h>          // librairie ecran LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // declaration des pins utilisées par l'ecran lcd


  #define
 motorPinStep  13   // commande de pas moteur sur pin 13
  #define
 motorPinDir  12    // commande de direction du moteur sur pin 12 


int adc_key_val[5] ={50, 200, 400, 600, 800 };  // valeurs analogiques des boutons
int NUM_KEYS = 5;                               // declaration du nombre de boutons
int adc_key_in;                                 // valeur analogique du bouton appuyé
int key=-1;                                     // 
int isRun;                                      // variable "en marche" ou "arret"


int DelaiPas = 458;        // delai en microsecondes entre chaque pas moteur
int minspeed = 8000;        // delai max pour vitesse minimum

char message[16] = "";      // taille d'une ligne de l'ecran pour affichage de l'horloge
int heures,minutes,secondes;  // variables pour horloge

volatile unsigned long blinkCount = 0; //iterations du timer

/////////////////////////////////////////////////////////////////////////////
void Horloge(void)     // fonction d'interruption timer pour affichage de l'horloge
{

    blinkCount = blinkCount + 1;  // incrementation du timer

// on commence par gérer le temps qui passe...
secondes++;
if(secondes == 60) // une minute est atteinte ?
{
    secondes = 0; // on recompte à partir de 0
    minutes++;
}
if(minutes == 60) // une heure est atteinte ?
{
    minutes = 0;
    heures++;
}
if(heures == 24) // une journée est atteinte ?
{
    heures = 0;
}

  sprintf(message,"%2d:%2d:%2d",heures,minutes,secondes); // formatage de l'horloge
  lcd.setCursor(8,0);           
  lcd.write(message);
}
//////////////////////////////////////////////////////////////////////

void motorrun()   // fonction moteur
{
digitalWrite( 13 , HIGH );
delayMicroseconds( DelaiPas );
digitalWrite( 13 , LOW );
delayMicroseconds( DelaiPas );

}



/////////////////////////////////////////////////////////////////////////////


void setup() {

pinMode( 12 , OUTPUT);  // declaration des broches en sorties
pinMode( 13 , OUTPUT);  //
digitalWrite( 12 , HIGH );  // on fixe le sens de rotation

heures = 0;       //
minutes = 0;      //  initialisation des variables de temps
secondes = 0;     //
Timer1.initialize(1000000);       // initialisation du timer (1000000 de microsecondes = 1        seconde)
Timer1.attachInterrupt(Horloge);  // affectation d'une fonction d'interruption ( quoi faire a chaque interruption du timer)
Timer1.stop();      // on stop le timer pour empecher le debut du compte

lcd.clear();       // efface l'ecran
lcd.begin(16, 2);  // initialise l'ecran
lcd.setCursor(0,0);   // place le curseur au premier caractere de la premiere ligne
lcd.print("***ASTRODUINO***");
lcd.setCursor(0,1);  
lcd.print("**STAR-TRACKER**");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stopped  0: 0: 0"); 
lcd.setCursor(0,1); 
lcd.print("Delay= "); 
lcd.print(DelaiPas);
lcd.print(" Msec");

isRun = 0;   

}



/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void loop() {

adc_key_in = analogRead(0);    // lire la valeur du capteur
key = get_key(adc_key_in);  // convertir en " qulle touche a ete appuyée"
if (key >= 0)   // si appui d'une touche detecté..
 {
    if (key == 1) {
                 DelaiPas += 1;
                 delay(150);
                }

  if (key == 2 && DelaiPas > 0) {
                                 DelaiPas -= 1;
                                 delay(150);
                                }

  if (key == 0) {
                 DelaiPas += 10;
                 delay(150);
                }

  if (key == 3) {
                 DelaiPas -= 10;
                 delay(150);
                }

  if (DelaiPas>minspeed) {
                          DelaiPas = minspeed;
                         }

  if (DelaiPas<-minspeed) {
                           DelaiPas = -minspeed;
                          }

  if (key == 4) {        // si touche " select " appuyée > "running" ou "stopped"
                 isRun = 1 - isRun;   // bascule logique > si "marche" alors "arret" et vice   versa
                 lcd.setCursor(0,0); 
                 if (isRun == 1) {
                                  lcd.print("Running");
                                 } else {
                                         lcd.print("Stopped");
                                         Timer1.stop();    // arret du timer (donc de l'horloge) quand  passage de running a stopped
                                        }
                 delay(150);
                }

  lcd.setCursor(0, 1);
  lcd.print("Delay= "); 
  lcd.print(DelaiPas);
  lcd.print(" Msec  ");
  delay(50);

}

if (isRun == 1) {     // si "running"...
               motorrun();         // ... fonction moteur...
               Timer1.resume();        //... reprise de l' horloge 
              }

}

// fonction destinée a savoir quelle touche a ete appuyée
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
  {
   if (input < adc_key_val[k])
        return k;
  }

if (k >= NUM_KEYS)
   k = -1;  // No valid key pressed
   return k;

}

3D printing settings

-

Advertising


Issue with this design? Report a problem.

Would you like to support Cults?

You like Cults and you want to help us continue the adventure independently? Please note that we are a small team of 3 people, therefore it is very simple to support us to maintain the activity and create future developments. Here are 4 solutions accessible to all:

  • ADVERTISING: Disable your banner blocker (AdBlock, …) and click on our banner ads.

  • AFFILIATION: Make your purchases online by clicking on our affiliate links here Amazon.

  • DONATE: If you want, you can make a donation via Ko-Fi 💜.

  • WORD OF MOUTH: Invite your friends to come, discover the platform and the magnificent 3D files shared by the community!


Sharing and downloading on Cults3D guarantees that designs remain in makers community hands! And not in the hands of the 3D printing or software giants who own the competing platforms and exploit the designs for their own commercial interests.

Cults3D is an independent, self-financed site that is not accountable to any investor or brand. Almost all of the site's revenues are paid back to the platform's makers. The content published on the site serves only the interests of its authors and not those of 3D printer brands who also wish to control the 3D modeling market.

100% secure payment by credit card, PayPal, Apple Pay, Google Pay, etc.
View all payment options.