Progetto Inseguitore Stellare

In questa pagina, viene fornita una guida passo-passo per la realizzazione di un inseguitore stellare con Arduino. Ci baseremo su uno dei telescopi che viene scelto sempre alle prime armi dagli astrofili: l' Astromaster 70eq. Anche se il telescopio risulta essere differente, vedremo che il concetto di base è univoco. Per verificare che l'Arduino funzioni correttamente ci serviremo di concetti fisici basilari.

Materials (No welding needed)

  • STEP MOTOR 5V DC 28BYJ-48 (2 pz)
  • UNO R3 Controller Board (1pz) o microcontrollore Arduino equivalente
  • 1.5V Duracell Alcaline Plus AAA Batteries (1pz)
  • DC 2.1 Power Jack Wire Lead 9V / Battery Holder Box Case (1pz)
  • ULN2003 Stepper Motor Driver Module (1pz)
  • Stepper Motor (1pz)
  • Female-to-Male Dupont Wire (4pz)
  • USB Cable (1pz)
  • Power Supply Module (1pz)
  • Servo Motor SG90 (1pz)
  • Wires (5pz)
  • 830 Tie-Points Breadboard (1pz)

1. Calcolatore Astronomico

Per realizzare un sistema intelligente che permette per “dato luogo sulla Terra, data/ora e astro” di calcolare la posizione dell’omonimo astro in tempo reale, ci serviamo di un’architettura MATLAB, al fine di trasferire al microcontrollore la posizione delle stelle, dei pianeti ecc..

STEP 1: Apriamo Matlab, clicchiamo New (+) nel menù Editor e apriamo un nuovo file denominato “Calcolo”. Prima di procedere al passo successivo, installiamo le librerie necessarie (Home>Add-Ons>Explore Add-Ons).

  • Simulink Support Package for Arduino Hardware
  • MATLAB Support Package for Arduino Hardware
  • Aerospace Toolbox

STEP 2: Alleghiamo le prime 20 righe di codice, in cui calcoliamo la distanza dell’osservatore dal centro di massa della Terra, sapendo a quanto corrisponde latitudine, la longitudine e la quota dal terreno ( dati riferiti ad un ipotetico osservatore posto a Trapani).

RIGA 1 e 2: Il comando clear serve per rimuovere le variabili e le funzioni dall’ambiente di lavoro (workspace) mentre clc serve a chiudere la finestra di comando che compare nella parte inferiore dell’interfaccia grafica (command window).

RIGA 3: Viene creato un oggetto datetime che rappresenta il 17 agosto 2026 alle ore 22:00, associandolo al fuso orario di Roma (Europe/Rome, che in quel periodo dell’anno è il CEST).

RIGA 4: Viene convertito quell’orario locale nel fuso orario standard UTC (portandolo all’ora solare di Greenwich). RIGA 5: Viene calcolata la data giuliana, ovvero un sistema di conteggio continuo dei giorni (molto usato in astronomia, navigazione e geodesia) che esprime il tempo come un numero decimale di giorni trascorsi da un’epoca di riferimento iniziale.

La latitudine misura l’angolo compreso tra l’equatore e la normale alla superficie terrestre passante per l’osservatore, la longitudine è la distanza angolare misurata verso est compresa tra il meridiano di riferimento (Greenwich) e il meridiano passante per l’osservatore. (h_obs è la quota)

I parametri indicati sopra (schiacciamento f, semiasse maggiore a) sono relativi ad un particolare sistema di riferimento, il sistema convenzionale WGS84. Poichè la Terra non è una sfera perfetta, si approssima il geoide nel suo complesso. Il centro dell’ellissoide di riferimento è coincidente con il centro di massa della Terra, il suo semiasse polare b (minore) è allineato con l’asse di rotazione della Terra mentre il suo semiasse equatoriale a (maggiore) è allineato con l’equatore.

RIGA 14 e 15: Viene misurato di quanto la sezione ellittica devia dal cerchio. Noto e2, posso calcolare il Prime Vertical Radius of Curvature (N). Esso è il raggio di curvatura di un ellissoide di riferimento sezionato da un piano perpendicolare al meridiano a una determinata latitudine geodetica (lat).

Infine viene calcolato r_obs_ecef ovvero un vettore riga composto da 3 elementi che rappresentano rispettivamente la distanza dell’osservatore dal centro di massa della Terra lungo l’asse x, y e z.

STEP 3: Successivamente, vi è la conversione dal sistema ECEF (Earth-Centered Earth-Fixed) al sistema ECI (Earth-Centered Inertial). In quest’ultimo riferimento, l’origine è ancora il centro della Terra, ma gli assi non ruotano con la Terra.

Qui si calcola il Greenwich Mean Sidereal Time (in gradi) usando la formula classica di Meeus / IAU 1982. T è il numero di secoli giuliani trascorsi dall’epoca J2000.0. Il GMST rappresenta l’angolo di rotazione della Terra rispetto all’equinozio medio.

Il tempo siderale medio si ottiene semplicemente sommando la longitudine geografica dell’osservatore (lon, positiva verso est) al GMST. Il risultato è l’angolo orario del punto vernale rispetto al meridiano locale.

RIGA 36 e 37: Il vettore riga è composto da 8 elementi che rappresentano le variabili da usare per il calcolo della latitudine e della longitudine dei pianeti.

RIGA 39 e 40: Per connettermi alla porta seriale di Arduino, devo inizializzarla come COM9 ad una velocità di 9600 bit/s. Questa porta verrà utilizzata per la trasmissione dei dati, al caricamento della scheda.

RIGA 43, 44 e 45: La funzione restituisce il vettore posizione del pianeta rispetto alla Terra nel sistema ECI (Earth-Centered Inertial), normalmente in unità astronomiche (AU) o in km a seconda della versione/impostazione della funzione. Successivamente esprimiamo il vettore posizione come vettore colonna ed esprimiamo le componenti in metri (m).

RIGA 47 e 48: Calcoliamo la distanza tra l’osservatore ed il pianeta k-esimo. RIGA 50, 51, 52: Scomponiamo il vettore rTopo nelle sue componenti.

Calcoliamo l’ascensione retta RA.

RIGA 60: Calcolo la declinazione σ cioè l’angolo compreso tra l’oggetto identificato dal punto P ed il piano equatoriale.

RIGA 61: Successivamente, calcolo la distanza r che sussiste tra l’oggetto P e l’origine del sistema di riferimento ECI.

RIGA 62: L’angolo orario misura la posizione di un astro rispetto al meridiano locale dell’osservatore.

RIGA 63: Questa riga normalizza H nell’intervallo [−180∘,+180∘][-180^\circ, +180^\circ].

RIGA 65: Calcola il seno dell’altezza (sinAlt) usando la formula standard di trasformazione delle coordinate:

sina=sinϕsinδ+cosϕcosδcosHsina=sinϕsinδ+cosϕcosδcosH

RIGA 68: Questa è la parte che lega la posizione equatoriale dell’astro alla sua altezza nel cielo locale. Calcola l’altezza (Alt) in gradi applicando l’arcoseno.
Il risultato è compreso tra −90∘-90^\circ−90∘ e +90∘+90^\circ+90∘.

Riga 70-73: Calcola l’azimut (Az) usando la funzione atan2d.

Riga 75: Normalizza l’azimut nell’intervallo [0∘,360∘)[0^\circ, 360^\circ). Serve perché atan2d può restituire valori negativi, e in astronomia l’azimut di solito si esprime da 0° a 360° (partendo dal Nord e andando verso Est).

Da Riga 85 a 90, configuriamo la connessione con Arduino e inviamo l’Azimuth e l’altitudine in memoria.

MATLAB – ARDUINO IDE