Progetto Tavoletta equatoriale motorizzata EQ-TTL

Discussioni e tutorial su autocostruzione e fai da te

Moderatore: FerZem

Rispondi
gennysdv
Principiante
Messaggi: 22
Iscritto il: 23/03/2011, 15:20
Di che regione sei?: Campania
Località: bacoli (na)
Contatta:

Progetto Tavoletta equatoriale motorizzata EQ-TTL

Messaggio da gennysdv » 28/04/2013, 16:54

PROGETTO EQ-TTL 1.0
Ciao a tutti gli amici del forum ! Come promesso ai moderatori nell’incontro g-astrofotografico del 13 Aprile 2013 , ho realizzato un tavoletta equatoriale per effettuare pose fotografiche a campo largo con obiettivi fotografici a focali fino a 150-200 mm. Inoltre aggiungerò il progetto elettronico realizzato con Arduino , un microcontrollore tutto italiano che è usato per la robotica , domotica e che tuttavia trova con facilità spazi anche in altri campi. Ho pensato che sarebbe sprecato utilizzare arduino solo come controllore della tavoletta e quindi ho inserito un sensore per il rilevamento della temperatura esterna , ed una modalità Time Lapse , ma passiamo alla pratica e dopo ci cimentiamo nella teoria e lo sviluppo del codice che sarà l’anima del progetto.
LISTA DEL MATERIALE
Per la tavoletta occorrono:
1. 2 tavolette di legno spesse 20 mm , larghe 15 cm e lunghe 24 cm
2. 3 cerniere lunghe 40 mm o 1 lunga 15 cm
3. Motore o stepper bipolare (io ho usato un nema 17 SM42BYG011-25)
4. Barra filettata di 5 mm con un passo di 0,80 mm (sarebbe lo spazio tra un filetto e l’altro) e lunga 12 cm
5. Una coppia di mozzi con foro da 5mm (in uno andrà l’albero motore dello stepper e nell’altro andra la barra filettata
6. Dado cieco da 5mm
7. 2 tubicini , di almeno 1 cm di diametro e lunghi almeno 14 cm ma non più di 15 cm
8. Due tasselli filettati all’interno per bulloni da 5mm
9. Viti per legno (vanno bene le 3x15)
10. Dado filettato ¼ “ con passo withworth (servirà per incastrarlo alla base della tavoletta per poi avvitarlo alla testa del treppiede fotografico.
11. Una testa fotografica che andrà fissata all’altra tavoletta
12. Una vite passo fotografico che andrà fissata nel legno per avvitare la testa fotografica.
Ecco le foto
tavoletta.jpg
1 e 2 sono le tavole;
3 e 4 i tubicini dove al centro verranno forati per inserire i tasselli nei quali passerà la barra filettata
5 sono i 2 mozzi
6 è la barra filettata
7 è il dado cieco
8 è lo stepper , ricordate che le due tavole vanno forate con una fresa un po’ più larga dello stepper in modo da farlo basculare con il tubicino altrimenti forza lungo le pareti e non compie il suo lavoro. Lo stepper è fissato al tubicino.
9 sono le cerniere , serviranno anche come riferimento per stazionare alla polare usando i perni centrali come mirino
10 staffe che tengono fermi i tubicini ma non tanto altrimenti non girano , in foto si vedono poco ma ci sono dei feltrini intorno ai tubicini in modo da attutire le vibrazioni date dallo stepper per ogni passo che compie.
11 è importante avere una distanza di 183 mm dal perno della cerniera al centro della barra filettata e albero motore :
183 è il raggio di un cerchio di circa 1150 mm di circonferenza che se diviso per 24 (le ore di una giornata) ci restituisce la cifra di circa 48 mm che diviso per 60 (i minuti in un ora) restituisce il valore di circa 0,80 che è il passo che compie ogni giro la nostra barra filettata , ci penserà lo stepper a girare in un minuto. Tuttavia se non si trova la barra filettata da 5mm e di 0,80 di passo e trovate invece una barra da 6mm sappiate che avrà il passo di 1 mm quindi il calcolo andrà rifatto da capo ( 1mm*60*24) / (π alla seconda) (circa 6,28) e ricaveremo un raggio di circa 229 mm , e così via . Comunque consiglio una barra di 5 mm sia per la stessa dimensione dell’albero motore dello stepper sia per il peso della tavoletta che incrementerà avendo una distanza maggiore dal perno della cerniera che è il centro del cerchio .
Se la distanza non è di 183 mm ma di 180 , 184, o cifre non proprio precise avremo modo di fare vari tentativi con arduino e la console di comando dove tramite il potenziometro possiamo variare la velocità dei passi in un minuto mutando una costante in variabile che gioca a nostro favore.

Per il comando occorrono :

1) Una scheda arduino (ho utilizzato la “uno” ma ci sono anche altri tipi più grandi o piu piccoli )
2) Un display lcd compatibile hitachi hd44780 da 16x2
3) 2 potenziometri da 47 kohm
4) Un interruttore
5) un pulsante,
6) 2 resistemze da 10kohm
7) Un trimmer
8) Un sensore lm35dz per rilevare la temperatura
9) Una breadboard di 8cm lunga o una basetta millefori (io ho usato la prima perché più comoda)
10) Un driver sn754410ne per pilotare lo stepper
11) Un jack femmina 12 v per alimentare il driver
12) Usb femmina
13) Jack stereo da 2,5mm femmina
14) Presa telefonica femmina (oppure anche un jack 3,5mm stereo femmina)
15) Un contenitore come quello delle vhs , e tanti fili .

Ho realizzato uno schema vi sarà di aiuto nella realizzazione del progetto . Per la funzionalità di arduino vi rimando al suo sito dove potrete trovare tutte le info a riguardo. Non vi spaventate se è la prima volta che incontrate arduino , è normale!! Ma tempo una settimana e capirete gran parte della sua funzionalità e se siete smanettoni (con coscienza) vi divertirete , se non lo siete potreste fare danni , quindi non esitate a chiedere aiuto o sul forum o a qualcuno che vi è vicino e che ha esperienza. Ecco lo schema:
Untitled Sketch temp_bb.jpg
È opportuno scaricare i datasheet da internet per studiare a fondo ogni elemento , se non lo si conosce, ed è importante attenersi ai colori dello stepper che sono blu,giallo,verde e rosso.
Di seguito vi mostrerò il box all’interno
boxinterno.jpg
Il display è diverso da quello dello schema ma i piedini sono gli stessi , è opportuno studiare il datasheet del display che si acquista . Sembra un groviglio di fili senza fine ma un po’ alla volta si fa tutto.
Questo è il box all’esterno
boxesterno.jpg
Si presentano sulla costa della custodia 2 potenziometri :quello di sopra vicino al display serve per regolare la pausa dei time lapse , quello centrale serve per regolare il tempo di rotazione dell albero motore . In mezzo ai 2 potenziometri vi è posto un interruttore che se switchato verso il basso farà funzionare solo lo stepper con temperatura , se switchato verso l’alto farà funzionare il time lapse con temperatura. In basso c’è un pulsante che in modalità stepper se tenuto premuto riavvolge la tavoletta velocemente. In modalità Timelapse se tenuto premuto permette di regolare il tempo di pausa tra uno scatto e l'altro a patto che lo si faccia prima che inizi il time lapse ma approfondiremo più avanti… In alto sono presenti una presa usb per il collegamento dello stepper ( ho ritenuto giusto utilizzare questo modo di collegamento perché i fili dello stepper son 4) , una presa telefonica adattate ai tre fili della sonda che è esterna e una presa stereo 2,5mm per il cavo optoisolato che si collega alla camera. In basso è presente una presa da 12v che porterà tensione al driver che pilota lo stepper, e le due uscite di arduino , una usb che serve per alimentare arduino e allo stesso tempo caricare i codici, ed una entrata per collegare in corrente massimo 12v (all’interno ha un regolatore di tensione tarato a 5v ).
Di seguito vi propongo lo sketch di Arduino da caricare nella scheda e far funzionare il tutto a patto che tutte le connessioni siano ok. Vi è una spiegazione per ogni riga in modo da rendere più facile la comprensione del codice. Copiate tutto ed inserite nel programma e dopo caricate:


[quote]
/* semplice sketch di time lapse utilizzando una scheda arduino , un cavo optoisolato di due fili uno ground e uno per lo scatto.
aggiunto il codice per il rilevamento della temperatura tramite sensore analogico. il codice è  contrassegnato con un * nei commenti delle righe
Infine ho aggiunto il codice per pilotare un motore passo passo bipolare montato su una tavoletta equatoriale, ogni giro dell'albero motore avviene in un tempo di un minuto (regolabile intorno i 60 secondi)     */


#include <Stepper.h> // include la libreria dello stepper
#include <LiquidCrystal.h>// include la libreria per il funzionamento dell lcd
LiquidCrystal lcd(12, 6, 5, 4, 3, 2);// definisce i pin di arduino collegati ai pin 4 6 11 12 13 14 del display
float tempC; // dichiarazione di variabile *
int tempPin = A5; // inizializzazione del pin analogico di arduino *
int shutterPin = 15; // definisce il pin 15 che sarebbe (A1) analogico dove va il positivo dello scatto remoto
int delayTime = 100; // definisce il tempo di scatto , 100 è il minimo poiché al di sotto non arriva il segnale alla reflex
int analogPin = A4; // definisce il pin analogico a cui è collegato il pin centrale del potenziometro del time lapse

long sensorValue = 0; // variabile che legge il sensore dall'inizio ( la funzione long è preferita a int poiché può immagazzinare numeri con cifre a nove zeri
int button2 = 16; // definisce il pin a2 analogico convertendolo in digitale (switch)
int button2State = 0;// definisce lo stato dello switch
int button1 = 7; //definisce il pin numero 7 di arduino (pulsante)
int buttonState = 0; //definisce lo stato del pulsante
int motorPin1 = 8; // definisce i pin di arduino ai quali sono collegati i fili
int motorPin2 = 9;// " "
int motorPin3 = 10;// " "
int motorPin4 = 11;// " "
int pinPot = A0; // definisce il pin analogico di arduino a cui è collegato il potenziometro dello stepper
const int stepsPerRevolution = 200; //definisce il motore di quanti step ha in un giro
Stepper myStepper(stepsPerRevolution, 8,9,10,11); // richiama la costante sopra e la definizione dei pin in questo caso serve per far fare il giro antiorario

void setup() {
  lcd.begin(16, 2); // definisce il tipo di display applicato
  Serial.begin(9600); // inizializza la porta seriale del pc
  pinMode(motorPin1, OUTPUT); // definisce i pin come output
  pinMode(motorPin2, OUTPUT);// " "
  pinMode(motorPin3, OUTPUT);// " "
  pinMode(motorPin4, OUTPUT);// " "
  pinMode(pinPot,INPUT); // definisce i pin come input per lo stepper( quelli analogici possono anche non essere scritti
  pinMode(button1, INPUT); // definisce il pin come input (il pulsante dello stepper)
  pinMode(button2,INPUT);
  pinMode(analogPin, INPUT);// il pin analogico del potenziometro del time lapse
  pinMode(shutterPin, OUTPUT); // definisce il pin 15 come uscita , importante è definire il num 15 e non il numero reale analogico a1
}

  void loop() {
   
    buttonState = digitalRead(button1); //richiama lo stato del pulsante
    button2State = digitalRead(button2);//// " "
 
 if (button2State == HIGH ) { // se lo switch è acceso...
  if (buttonState == LOW) { // definisce se lo stato del pulsante è uguale a off (low)
  lcd.clear();// pulisce lo schermo
  int readPin = analogRead(pinPot); // legge il pin del potenziometro
  float delayTime2=map(readPin,0,1023,280,320); // converte o mappa il segnale analogico in digitale espresso in questo caso in millisecondi di delay
  int sensorValue = analogRead(A5); // legge il valore del segnale in entrata
  //Serial.println(delayTime2); // scrive sulla porta seriale il valore digitale del delay
  delay(1); // una piccola pausa tra un aggiornamento e l'altro
  lcd.print("1 Giro in TEMP"); // scrive sulla prima riga del display
  lcd.setCursor(0, 1);// setta la seconda riga
  lcd.print((delayTime2)* 200 / 1000); // scrive il valore in delayTime2 moltiplicato per 200 diviso mille , il valore che uscirà saranno i secondi in un giro dell'albero motore
  lcd.print(""); // scrive ciò che è compreso tra le virgolette alla destra del valore dei secondi
   tempC = analogRead(tempPin); // lettura valore del sensore *
   tempC = (5.0 * tempC * 100)/1024.0; // conversione del dato analogico in temperatura *
   lcd.setCursor(10, 1); // setta il cursore sulla seconda riga al decimo carattere *
   lcd.print(tempC); // scrive la temperatura *
  digitalWrite(motorPin1, HIGH); // sequenza di segnali per far muovere il motore in senso orario
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime2); // delay variabile attraverso il potenziometro
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay((delayTime2) - 110); } // sono stati tolti 110 ms poiché c'è una pausa tra il quarto ed il successivo primo digitalwrite (dovuto sicuramente dalla lentezza di calcolo delle funzioni che precedono
  
  else { // se il pulsante è acceso (in questo caso)
  
  myStepper.setSpeed(100); // richiama la velocità di 100 giri al minuto
  myStepper.step(-1); } // gira al contrario aggiornandosi ogni step

  }
   
  
  if (button2State == LOW) { // se lo switch è spento
     lcd.clear(); // pulisce lo schermo
     lcd.print(" Pausa Temp "); // scrive sulla prima riga
   tempC = analogRead(tempPin); // lettura valore del sensore *
   tempC = (5.0 * tempC * 100)/1024.0; // conversione del dato analogico in temperatura *
   lcd.setCursor(10, 1); // setta il cursore sulla seconda riga al decimo carattere *
   lcd.print(tempC); // scrive la temperatura *
  
   lcd.setCursor(0, 1);// scrive sulla seconda riga
  sensorValue = analogRead(analogPin); // legge il valore dal pin del potenziometro
  sensorValue = map(analogRead(analogPin), 0, 1023, 0, 120); // conversione valori analogici in digitale le ultime 2 cifre (0 e 120) possono essere modificate se si vuole un tempo maggiore di pausa
  lcd.print(sensorValue); // scrive il valore
  lcd.print(" SEC "); } // parola sec a destra del valore
  if (buttonState == LOW) { // se il Pulsante è off... ( significa che se è tenuto premuto , in quel lasso di tempo potremo girare il potenziometro portando sul tempo
                             //preferito senza far partire il loop che partirà al rilascio del pulsante
  digitalWrite(shutterPin, HIGH); // emette il segnale attivo sul pin 15
  delay(delayTime);// richiama il delay nelle variabili e viene trasformato in questo caso come durata di scatto
  digitalWrite(shutterPin, LOW); // interrompe il contatto
  delay((sensorValue) * 1000); // il segnale sarà interrotto per il valore del potenziometro moltiplicato per 1000 in modo da tradurre in secondi il valore digitale rilasciato dal potenziometro
  }
}



spero di essere stato abbastanza chiaro , è la prima volta che scrivo un tutorial , se qualcosa non è chiaro chiede pure , tuttavia farò modifice ed aggiunte , e sicuramente qualche foto astrofotografica appena avrò tempo.
Ciao a tutti e cieli sereni

ganemeide
Astroimager Liv.4
Messaggi: 1856
Iscritto il: 27/09/2010, 20:45
Di che regione sei?: Campania
Contatta:

Re: Progetto Tavoletta equatoriale motorizzata EQ-TTL

Messaggio da ganemeide » 29/04/2013, 8:10

davvero un bel progetto. però rivedrei le due tavole di legno... all' interno è formato da truciolato che a contatto con l' umidità tende ad aumentare il suo volume con il conseguente sbriciolamento delle parti che lo compongono.... usa del multistrato grezzo o semplice legno di abete.. te lo dice un falegnane ;)
Skywatcher 200/1000 f5 (correttore di coma)
Skywatcher 70/500 (guida)
Skywatcher 80 ed
Neq6 pro
Asi 120mm mono
Canon 1100d mod. Baader

gennysdv
Principiante
Messaggi: 22
Iscritto il: 23/03/2011, 15:20
Di che regione sei?: Campania
Località: bacoli (na)
Contatta:

Re: Progetto Tavoletta equatoriale motorizzata EQ-TTL

Messaggio da gennysdv » 29/04/2013, 11:41

concordo pienamente , le tavole come parte del materiale sono state reperite tra scarti che avevo a casa ma sicuramente andrà perfezionato , proverò con l'abete o altro legno che attutisce più vibrazioni possibili , e l'utilizzo di cuscinetti sarà importante.

Avatar utente
Maurizio Russo
Astroimager Liv.2
Messaggi: 252
Iscritto il: 09/03/2010, 14:13
Di che regione sei?: Campania
Località: Salerno
Contatta:

Re: Progetto Tavoletta equatoriale motorizzata EQ-TTL

Messaggio da Maurizio Russo » 29/04/2013, 21:29

Ottimo progetto

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti