Progetto telescopio automatico.

Ciao a tutti!
comincio subito con il dire che non ho ancora acquistato arduino(magari x natale.. :))!!
Sono un astrofilo e ho creato un programma in c che fa da convertitore di coordinate celesti, da assolute a locali: in poche parole
io gli do le coordinate che sono sui cataloghi stellari(che non cambiano mai) e lui le adatta OGNI SECONDO per il luogo in cui mi trovo e per la data/ora in cui osservo.
Poi ho pensato: perchè non usare questo programma per puntare la stella con il mio telescopietto?
Il telescopio si dovrebbe muovere con 2 motori(verticale per altezza e orizzontale per azimut). Il programma può printare i valori di azimut e altezza in gradi e frazioni decimali( es. 3,216 gradi ). Ripeto questa cosa avviene ogni secondo!!
Il risultato finale dovrebbe essere questo: faccio partire il programma sul mio portatile, inserisco i dati, premo invio, il programma invia i dati all'Arduino, l'Arduino fa
muovere i motori e punta il telescopio e corregge la posizione ogni secondo.
....dite che è fattibile?Quale Arduino mi consigliate?Che tipo di motori?Devo acquistare anche altre schede oltre l'Arduino?Come faccio per quanto riguarda tutto il
percorso che i dati devono seguire(dal programma iniziale fno ai servo??

Scusate se ho scritto così tanto!!Per chiarimenti chiedete pure :)!!!
Ciao!

sto facendo la stessa cosa per un inseguitore solare...
ma sono in fase assemblaggio hardwere
di dove sei?
allora io sono partito pensando a motori in corrente continua reversibili (avanti e indietro) .... si potrebbero usare anche servomotori e/o motori passo passo.
ovviamente i motori necessitano di un riduttore.... sia er problemi di velocità/angolo (i passo passo hanno angoli minimi intorno ai 5 gradi) ....
se partiamo da mio "progetto" ti servono ... 2 uscite digitali per motore, avanti e indietro a seconda della potenza e della tensione del motore ti servono eventualmente 4 relè per motore.
Poi ti servono quelli che vengono chiamati “encoder” ? i misuratori di angolo .. io sto usando dei semplici potenziometri da 5kohm ad un giro e quindi due ingressi analogici per leggere la lettura.
Poi se proprio vuoi .. ci sono dei fermo-corsa (4) che possono interagire solo con il motore?. o anche riportarli ad arduino .. nel secondo caso altre 4 ingressi digitali.

Per cui ti servono .. 4 uscite/ingressi digitali
Eventualmente altre 4 uscite/ingressi digitali
2 ingressi analogici

il tuo programma deve essere in grado di leggere e scrivere i dati da dseriale (o usb) e confrontare gli angoli attuati con quelli calcolati ed eventualmente correggerli, inviano inviando comanndi con lettere " E O N S" intuetivamente per il muovimento dei motori e " A B" per spegnere i motori ...

il codice poi .. è molto semplice.

void setup() {
  // initialize serial communication:
  Serial.begin(9600); 
  // initialize the LED pins:
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);
  pinMode(29, OUTPUT);
  
}

void loop() {
  // read the sensor:
  if (Serial.available() > 0) {
    int inByte = Serial.read();
    // do something different depending on the character received.  
    // The switch statement expects single number values for each case;
    // in this exmaple, though, you're using single quotes to tell
    // the controller to get the ASCII value for the character.  For 
    // example 'a' = 97, 'b' = 98, and so forth:

    switch (inByte) {
    case 'N':  

      if (digitalRead(24) ) {
        digitalWrite(24, LOW);
         digitalWrite(25, LOW);
      }  
      digitalWrite(22, HIGH); 
      digitalWrite(24, HIGH); 
    break;

    case 'S':   

      if (digitalRead(22) ) {
        digitalWrite(22, LOW);
        digitalWrite(23, LOW);
      } 
      digitalWrite(24, HIGH);
      digitalWrite(25, HIGH);
    
    break;  


   case 'E':   

      if (digitalRead(28) ) {
        digitalWrite(28, LOW);
        digitalWrite(29, LOW);
      } 
      digitalWrite(26, HIGH);
      digitalWrite(27, HIGH);
    
    break;  
    case 'W':   

      if (digitalRead(26) ) {
        digitalWrite(26, LOW);
        digitalWrite(27, LOW);
      } 
      digitalWrite(28, HIGH);
      digitalWrite(29, HIGH);
       break;  
    
 
   
     case 'A': 
     
      digitalWrite(22, LOW);
      digitalWrite(23, LOW);
      digitalWrite(24, LOW);
      digitalWrite(25, LOW);   
    break;  
    
  case 'B': 
     
      digitalWrite(26, LOW);
      digitalWrite(27, LOW);
      digitalWrite(28, LOW);
      digitalWrite(29, LOW);   
    break;    
   }
  }
  delay(100);
  Serial.print(analogRead(0), DEC);
  Serial.print(";");
  Serial.print(analogRead(1), DEC);
  Serial.print(";");
  Serial.println(analogRead(2), DEC);
  
}

:)))

Ops mi ero dimenticato di scrivere che di elettronica capisco ben poco!!!
Ho tirato fuori dal vecchio robot della deagostini due servomotori, e molto probabilmente userò
questi perchè (se non sbaglio) hanno già l'encoder, quindi è già un ostacolo di meno..sono della futaba, sono modificati(senza aletta) e hanno 3 cavetti!
Secondo te possono andare?
Poi, il codice che hai scritto è quello che andrebbe caricato sulla scheda Arduino?Se si mi metto giù intanto a studiare le varie funzioni per vedere cosa fanno!
Infine, non so come si scrive/legge da seriale o usb...perciò darò un occhiata anche a questo!
Morale: mi tocca studiare un pò!
Ps: Sono di Terni ma faccio l'università a Roma.

Il mio progetto sarebbe molto più semplice se avessi una montatura equatoriale...ma devo accontentarmi di questa altazimutale!

grazie!
ciao!

io preferisco ... l'azimutale.. ma sai ... filosofie... e scelte storiche...
beh il mio programma ... accende e spegne dei pin digitali, nel mio caso un arduino mega... ma perchè ne volevo accoppiare 2 inseguitori.... quindi raddoppiavano i il numero dei pin neccessari.
per il servo.... ci sono diverse dischiioni in corso .. dai un occhio ...
l'unica cosa dovresti calcolatre o presumere la coppia necessatia, essendo un telescopio.. beh l'azimutale dovrebbe essere molto bassa.. ma quella si elevazione.. dipende dda un sacco di fattori. altra cosa.. è la velocuità minima del servo...
nn lo so .. ma credo che le stelle si muovino come il sole 12° /h circa... quindi devi fare circa 12/3600 ° secondo ... per cui potrebbero essere necessari dei riduttori....
detto questo la tensione di lavoro dei motori?
insomma un po' c'è da fare...
comunicazione seriale se.... sai già programmare così bene... è molto banale e in rete trovi esempi in qualsiasi linguaggio...
cosa usi .. in c e vb posso passati cose...
boh .. che dire ancora... ???
a si .... ppurtroppo sono di milano .. se no ti avrei invitato al lavoro .. perchè lo stiamo realizzanfdo noi .. per scopi internoi .. fortunello a lavore su cose che piaciono.. e? :wink:
buon lavoro ...

Mi togliete una curiosità?
Come fate a far determinare all'inseguitore la posizione di partenza? Puntate manualmente una stella di riferimento e utilizzate quella per indicare al sistema che in quel momento si trova puntato in quella precisa direzione?

Si può fare anche puntando una stella di riferimento, come dici te, io invece siccome ho una montatura abbastanza semplice punto manualmente il telescopio verso sud, e con un filo a piombo verifico che il tubo ottico sia più o meno parallelo con il suolo!!
Da poco ho vinto uno SkyScout Celestron in un concorso dell'ESA, e questo gingillo mi permette di identificare le stelle con un gps integrato e altre diavolerie al suo interno..farebbe tutto dasolo...sarebbe carino sostituirlo con il pc ma non so proprio come potrei fare perciò ora mi concentro solo sull'idea iniziale!!E poi non è che sia precisissimo come dicono secondo me!

Comunque, ora sto dando un occhiata alla parte software, e appena dopo natale ordino la scheda Arduino così comincio subito a smanettare per vedere quello che si può fare!!Vi terrò aggiornati!!E vi sommergerò di domande tecniche!!!! ::slight_smile:

si .. il problema è sapersre dosi è ... e avere la rotta della stella... a seconda dela posizione giografica.. gli angoli cambiano ... (ovvio)
da li poi . con gli encoder ... "dovresti" sapere in che posizione è il telescopio e poi addattarsi...
i calcoli per deteminare gli angoli sono 4 /5 sono solo formule un po' lunghette... :slight_smile:
per il sole:
http://www.ingegneriadelsole.it/posizione_sole.htm

Carino il sito! Quindi l'inseguitore che devi fare te serve ad orientare pannelli fotovoltaici? Io avevo fatto un progettino una volta per seguire sole o luna tramite una webcam con filtro solare/lunare che faceva muovere i motori quando il disco solare/lunare stava per uscire dal campo di osservazione (molto stretto). Solo che non l'ho portato avanti a causa delle mie scarse conoscenze di elettronica :-[..

Comunque il programma che ho scritto fa tutti i calcoli di conversione ogni secondo (incluse le correzioni per l'atmosfera ecc ecc) e quindi il segnale aggiorna ogni secondo (dovrebbe) i motori... ho ritrovato i due servomotori che avevo della parallax...molto probabilmente non sono abbastanza potenti, ma per adesso mi vanno bene , anzichè usarli per muovere il telescopio li userò per muovere un puntatore laser che quando trova la stella si accende e la indica con il fascio luminoso.

Ora che più o meno ho le idee chiare faccio un riassunto: Il gingillo da costruire è in pratica una montatura altazimutale, con due motori: una che ruota su un piano orizzontale e uno che si muove su un piano verticale. Il mio software calcola ogni secondo la posizione della stella e manda il segnale alla scheda Arduino che ogni secondo aggiusta la posizione dei motori. I servomotori che ho sono della parallax modificati e sopra c'è scritto Parallax PM. Da questi motori escono tre cavetti(bianco, rosso, nero). La montatura all'inizio sarà orientata a mano(per semplicità). Nella fase iniziale sulla montatura ci metto un puntatore laser che a fine ricerca si accende puntando la stella. Qundo avrò motori più potenti ci metterò sopra il telescopio!

Quale scheda Arduino e quali pezzi aggiuntivi(se servono) mi consigliate di acquistare?

Vuoi complicarti la vita?
Non serve muovere tutto il puntatore, basta muovere... un paio di piccoli specchi :smiley:

Hai linux? Prova Stellarium, dovrebbe comprendere già il software per muovere una montatura :slight_smile:

I tre cavi del servomotore sono semplicemente
rosso +
nero -
bianco controllo :slight_smile:

Questo progetto è la base per poi poter creare una vera e propria montatura per il telescopio, perciò il lavoro deve essere fatto dai due servomotori! Ho stellarium e già l'ho utilizzato per puntare un telescopio (non mio) già provvisto di montatura bella tosta costosissima. Mi piacerebbe creare la montatura da zero, software incluso per poi implementarla come più mi piace, sono studente di astrofisica e vorrei che il progetto andasse avanti insieme alle mie conoscenze che pian piano aumentano!Infatti in seguito ci aggiungerò tutte le correzioni che ancora non ho studiato....in poche parole mentre progetto e costruisco studio, unendo l'utile a quello che mi piace....e intanto approfondisco anche altre cose!!
..e soprattutto capirò sempre meglio Arduino e la relativa programmazione, cosa fondamentale che voglio portare avanti con questa discussione!(infatti non vorrei andare fuori...è facile uscire dai binari con quest'argometo molto vasto!!)...

Allora, sul sito smart projects ci sono molti tipi di schede: arduino duemilanove con atmega 328/1280, serial pcb....,diecimila.....mi serve una mano per scegliere!!Aiuto :-?!!
Le cose che ci devo fare le sapete ormai...grazie ;)!!

Correggetemi se sbaglio

Bisogna capire come vengono controllati i motori.. quasi sicuramente (guardo dopo) in pwm.... quindi ti serve una scheda (tutte) ... con 2 uscite in pwm (controllo in frequenza per determinare la velocità).... la direzione... 4 uscite digitali... quasi sicuramente 8 transistor, mosfet o relè per tensioni o potente nn erogabili da arduino... 4 per motore (per cambiargli la direzione di marcia, cambiare il positivo con il negativo).
Poi .. indispensabili sono gli encoder se nn sono già inseriti nei servo?. Qe quindi 2 ingressi analogici. E al momento un uscita digitale per accendere il laser?
Quindi ti serve
2 uscite pwm
5 uscite digitali
2 ingressi analogici.
E 8 a seconda di come lo vuoi realizzare ? mosfet(rapidissimi), transistor (molto simili ai mosfet) o relè per il controllo dei motori.
quindi gai tu i conti ... le differenze in costo sono relativamente modeste .. vedi tu...
secondo me, per comodità, prendi con porta usb...
ciaooo .. buon lavoro....

riconosci il tuoi servo?
http://www.parallax.com/Store/Accessories/MotorServos/tabid/163/List/0/CategoryID/57/Level/a/Default.aspx?SortField=ProductName,ProductName

mm..no non lo riconosco..e poi ora non ce l'ho sotto mano perchè sono tornato a Roma per le lezioni/esami...
Comunque ho comprato arduino (starter kit) e ho cominciato a smanettarci su con vari tutorial che ho trovato! Mi sembra che il progetto sia fattibile, ho visto che posso farci girare qualsiasi servo tanto la scheda controllerebbe solo il cavetto del controllo (pwm giusto?) el'alimentazione è esterna....ora vedo un pò per la comunicazione pc/scheda!!!!

si si ... è giustissimo quello che dici ... lo starter kit ? che collegamento ha? seriale? usb?
beh comunque cou n qualsiasi .. "com monitor" lo puoi gestire....
se usi vb.. o vbscript. te loposso mandare anche io .. o anche basic.. old... altri linguaggi .. beh ci si può ragionare.. ma è la comunicazione più semplice.. :slight_smile:

solo per suggerire di provare ad estrarre gli encoder dai normali mouse per pc....

boh ... nn ci ho mai pensato ..