gspeed
05-08-2020, 00:49
Ecco come costruirsi una motorizzazione AR che ha pochi rivali in quanto a qualità dei componenti, per meno di 50euro (*). Questo è lo step iniziale per un progetto più ambizioso ma vista la semplicità ve lo espongo sperando possa essere utile a qualcuno.
Il progetto permette di muovere l'asse AR alla velocità corretta per inseguire le stelle (vedete sotto la spiegazione), premendo il pulsante avanza a 8x, ri-premendo indietreggia a -6x per poi tornare alla velocità siderale con una ulteriore pressione. Potevo metter due pulsanti ma di notte al buio una sola cosa da premere rende le cose più semplici... e poi avevo un solo pulsante in casa!
Ogni suggerimento o miglioramento è ben accetto!
____
(*) non inclusa una batteria 12v, alcuni componenti non si trovano singoli a buon prezzo, per cui se non li riciclate i costi sono leggermente maggiori, ad esempio il driver lo trovate in confezioni da 5 per una decina di euro, Arduino Nano per una quindicina ne avrete tre.
Lista della spesa
La mia montatura è una EQ5 Exos2 Bresser, ma penso non vi siano differenze per qualsiasi EQ5 Skywatcher, per altre montature controllate le distanze e spazio disponibile.
39587
Allo zenit sopra il Cigno il motore stepper Nema 17, ma non uno qualsiasi, per 2-3 euro in più ne prendete uno da 0.9°/step (400 step per giro), ha una precisione doppia rispetto a quelli standard (qui (https://www.omc-stepperonline.com/nema-17-stepper-motor/nema-17-bipolar-0-9deg-36ncm-51oz-in-0-9a-5-4v-42x42x40mm-4-wires.html?mfp=149-step-angle%5B0.9%5D))
Poco a sud circonda Volpetta e Sagitta la cinghia GT2 da 138mm denti, larga 6mm (qui (https://www.amazon.it/gp/product/B07D923VHB/ref=ox_sc_act_title_1?smid=A39KIAQT9XODN8&th=1)). Quanto lunga serve dipende da che pulegge scegliete e dalla distanza tra le stesse , per un calcolo preciso vedete questo belt calculator (https://www.bbman.com/belt-length-calculator/).
Copre l'Aquila la puleggia GT2 da 40 denti con foro passante (bore) da 6mm da inserire nel perno del movimento micrometrico (qui (https://www.ebay.it/itm/GT2-Pulley-Timing-Smooth-6mm-Tooth-Idler-12-15-16-20-30-36-40-60-80-100-all-Bore/303157636647?hash=item46959a6e27:g:bQ8AAOSwZGBc3yV Y)). 40 denti è per me la massima grandezza per evitare di dover montare la puleggia a sbalzo e non poter richiudere il coperchio nero della montatura. Nota: Trovarla con foro da 6mm non è semplice... lo standard sembra essere 6.3 o 5mm, al più comprate con foro da 5mm e allargatelo a 6mm con un trapano a colonna.
Abbassandosi sull'orizzonte, vicino a M2 c’è la puleggia GT2 da 16 denti con foro da 5mm, standard per i motori Nema (qui (https://www.ebay.it/itm/GT2-Pulley-Timing-Smooth-6mm-Tooth-Idler-12-15-16-20-30-36-40-60-80-100-all-Bore/303157636647?ssPageName=STRK%3AMEBIDX%3AIT&var=602102052815&_trksid=p2057872.m2749.l2649)).
Abbraccia M15 un condensatore da almeno 50µF che servirà per proteggere l'elettronica, mentre al centro del quadrato di Pegaso si trova un interruttore (instabile, i.e. rilasciandolo si disattiva). Non è strettamente necessario ma renderà l'inseguimento più comodo. Procuratevene uno migliore di quello che avevo in casa...
Tra Cassiopea e M31 il driver DRV8825 permetterà di pilotare il motore con microstep di ben 1/32 passi: tale rapporto risulta importante per aumentare la precisione ed evitare vibrazioni (qui (https://www.amazon.it/gp/product/B07K9ZB7M5/ref=ppx_yo_dt_b_asin_title_o02_s01?ie=UTF8&psc=1))
Al centro del campo il cuore del sistema, un microcontrollore Arduino Nano (5eur), quasi sprecato per pilotare un motorino ma servirà per sviluppi futuri...
Già tramontato (non presente in foto) un vecchio tagliere ikea, sacrificato per costruire la base su cui fissare il supporto per il motore (a nord di Cefeo) alla montatura. Occhio all'altezza del supporto se volete usare il coperchio nero (5cm per la mia montatura). Mi manca una stampante 3D, accidenti: vi sono schemi online per rendere le cose ancora più compatte e professionali.
Bassi sull'orizzonte cavetteria e connettori vari con cui ingegnarsi per compattare l'elettronica.
Ecco il risultato finale:
395883958939586
Schema Elettrico
39590
Notate come nel Driver i pin MS* sono tutti e tre collegati all'uscita 5v per abilitare il microstepping 1/32, insieme ai pin RST e SLP. Il driver va limitato in corrente (ca. 1A per il motore in questione) agendo sul mini-potenziometro sulla scheda, si trovano facilmente guide in rete (es. qui (https://www.makerguides.com/drv8825-stepper-motor-driver-arduino-tutorial/))
Facciamo i conti
Più riusciamo ad aumentare il rapporto tra velocità di rotazione del motore e di rotazione del telescopio più saliamo in precisione, diminuiamo eventuali errori e vibrazioni (già di per sé ridotte dalla distribuzione a cinghia) e permetteremo correzioni di fino (negli sviluppi futuri...).
La terra completa una rotazione in 23h 56m e 4 secondi, quindi 23*60*60+56*60+4 = 86164 secondi per fare 360°, vuol dire che impiega 86164/360=239.34 secondi per ruotare di un grado.
La vite senza fine della montatura EQ5 ha un rapporto di 1 su 144, i.e. occorrono 144 rotazioni della manopola micrometrica per fare 24h (360 gradi) - il numero lo potete verificare empiricamente e trovate vari riscontri online (EQ 3.2 è 130, HEQ5 135). Il rapporto scelto tra le pulegge è di 40/16=2.5.
Quindi? Comandiamo un motore a cui servono 32 microstep per fare uno dei 400 step (0.9°) necessari a compiere un giro completo che farà girare 1/2.5 volte la vite senza fine a cui servono 144 giri per far fare un giro completo in AR... insomma (400x32x2.5x144) / 360° = 12800 sono i microstep necessari al motore per far muovere di un grado il tubo.
Ma in quanto tempo? In esattamente i 239.34 secondi calcolati prima! Quindi 239.34/12800 = 0.018699 secondi per ogni microstep. Questa è la velocità con cui comandare l'impulso ai motori.
Arduino Nano va a 16MHz, 16 milioni di operazioni al secondo e quindi comandare un impulso ogni 18699 microsecondi (o milionesimi di secondo) gli lascia molto tempo (ad occhio, tre ordini di grandezza) per fare altro. E prima o poi glielo faremo fare.
Il codice
Comandare semplicemente gli impulsi del motore risulta facile, con un caveat: un impulso completo ha due fasi (HIGH seguita da LOW) per cui ogni fase avrà una durata di metà dei 18699 microsecondi sopra calcolati
const unsigned long STEP_DELAY = 18699;
// Define pin connections
const int dirPin = 4;
const int stepPin = 3;
void setup() {
// Declare pins as Outputs
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
// Set motor direction clockwise (HIGH)
// you may have to invert this depending
// on how you mount the motor
digitalWrite(dirPin, HIGH);
}
void loop() {
digitalWrite(stepPin, HIGH);
// STEP_DELAY/2 is the duration of each pulse
// must be > 16383 otherwise
// delayMicroseconds will not work properly
delayMicroseconds(STEP_DELAY/2);
digitalWrite(stepPin, LOW);
delayMicroseconds(STEP_DELAY/2);
}
La funzione delayMicroseconds ha il limite di 16383 microsecondi: occhio se usate rapporti diversi o driver diversi (tipo l’A4988), se allungate la durata dell’impulso il codice sopra potrebbe non funzionare.
Noi però vogliamo usare il pulsante, per poter avanzare o indietreggiare più velocemente e centrare l'oggetto da inseguire. Il codice si complica perché dobbiamo far fare ad Arduino dell'altro anziché bloccarsi sulla funzione delayMicroseconds mentre il tempo passa, ma comunque si dovranno comandare gli impulsi al motore perfettamente. La spiegazione del codice “non bloccante” è più complessa, anche se è tra gli aspetti più interessanti di quanto fatto fin'ora, se avete domande chiedete pure!
Ecco qui il codice finale (RAto.ino) (https://mappite.org/stars/RAto.ino).
Il progetto permette di muovere l'asse AR alla velocità corretta per inseguire le stelle (vedete sotto la spiegazione), premendo il pulsante avanza a 8x, ri-premendo indietreggia a -6x per poi tornare alla velocità siderale con una ulteriore pressione. Potevo metter due pulsanti ma di notte al buio una sola cosa da premere rende le cose più semplici... e poi avevo un solo pulsante in casa!
Ogni suggerimento o miglioramento è ben accetto!
____
(*) non inclusa una batteria 12v, alcuni componenti non si trovano singoli a buon prezzo, per cui se non li riciclate i costi sono leggermente maggiori, ad esempio il driver lo trovate in confezioni da 5 per una decina di euro, Arduino Nano per una quindicina ne avrete tre.
Lista della spesa
La mia montatura è una EQ5 Exos2 Bresser, ma penso non vi siano differenze per qualsiasi EQ5 Skywatcher, per altre montature controllate le distanze e spazio disponibile.
39587
Allo zenit sopra il Cigno il motore stepper Nema 17, ma non uno qualsiasi, per 2-3 euro in più ne prendete uno da 0.9°/step (400 step per giro), ha una precisione doppia rispetto a quelli standard (qui (https://www.omc-stepperonline.com/nema-17-stepper-motor/nema-17-bipolar-0-9deg-36ncm-51oz-in-0-9a-5-4v-42x42x40mm-4-wires.html?mfp=149-step-angle%5B0.9%5D))
Poco a sud circonda Volpetta e Sagitta la cinghia GT2 da 138mm denti, larga 6mm (qui (https://www.amazon.it/gp/product/B07D923VHB/ref=ox_sc_act_title_1?smid=A39KIAQT9XODN8&th=1)). Quanto lunga serve dipende da che pulegge scegliete e dalla distanza tra le stesse , per un calcolo preciso vedete questo belt calculator (https://www.bbman.com/belt-length-calculator/).
Copre l'Aquila la puleggia GT2 da 40 denti con foro passante (bore) da 6mm da inserire nel perno del movimento micrometrico (qui (https://www.ebay.it/itm/GT2-Pulley-Timing-Smooth-6mm-Tooth-Idler-12-15-16-20-30-36-40-60-80-100-all-Bore/303157636647?hash=item46959a6e27:g:bQ8AAOSwZGBc3yV Y)). 40 denti è per me la massima grandezza per evitare di dover montare la puleggia a sbalzo e non poter richiudere il coperchio nero della montatura. Nota: Trovarla con foro da 6mm non è semplice... lo standard sembra essere 6.3 o 5mm, al più comprate con foro da 5mm e allargatelo a 6mm con un trapano a colonna.
Abbassandosi sull'orizzonte, vicino a M2 c’è la puleggia GT2 da 16 denti con foro da 5mm, standard per i motori Nema (qui (https://www.ebay.it/itm/GT2-Pulley-Timing-Smooth-6mm-Tooth-Idler-12-15-16-20-30-36-40-60-80-100-all-Bore/303157636647?ssPageName=STRK%3AMEBIDX%3AIT&var=602102052815&_trksid=p2057872.m2749.l2649)).
Abbraccia M15 un condensatore da almeno 50µF che servirà per proteggere l'elettronica, mentre al centro del quadrato di Pegaso si trova un interruttore (instabile, i.e. rilasciandolo si disattiva). Non è strettamente necessario ma renderà l'inseguimento più comodo. Procuratevene uno migliore di quello che avevo in casa...
Tra Cassiopea e M31 il driver DRV8825 permetterà di pilotare il motore con microstep di ben 1/32 passi: tale rapporto risulta importante per aumentare la precisione ed evitare vibrazioni (qui (https://www.amazon.it/gp/product/B07K9ZB7M5/ref=ppx_yo_dt_b_asin_title_o02_s01?ie=UTF8&psc=1))
Al centro del campo il cuore del sistema, un microcontrollore Arduino Nano (5eur), quasi sprecato per pilotare un motorino ma servirà per sviluppi futuri...
Già tramontato (non presente in foto) un vecchio tagliere ikea, sacrificato per costruire la base su cui fissare il supporto per il motore (a nord di Cefeo) alla montatura. Occhio all'altezza del supporto se volete usare il coperchio nero (5cm per la mia montatura). Mi manca una stampante 3D, accidenti: vi sono schemi online per rendere le cose ancora più compatte e professionali.
Bassi sull'orizzonte cavetteria e connettori vari con cui ingegnarsi per compattare l'elettronica.
Ecco il risultato finale:
395883958939586
Schema Elettrico
39590
Notate come nel Driver i pin MS* sono tutti e tre collegati all'uscita 5v per abilitare il microstepping 1/32, insieme ai pin RST e SLP. Il driver va limitato in corrente (ca. 1A per il motore in questione) agendo sul mini-potenziometro sulla scheda, si trovano facilmente guide in rete (es. qui (https://www.makerguides.com/drv8825-stepper-motor-driver-arduino-tutorial/))
Facciamo i conti
Più riusciamo ad aumentare il rapporto tra velocità di rotazione del motore e di rotazione del telescopio più saliamo in precisione, diminuiamo eventuali errori e vibrazioni (già di per sé ridotte dalla distribuzione a cinghia) e permetteremo correzioni di fino (negli sviluppi futuri...).
La terra completa una rotazione in 23h 56m e 4 secondi, quindi 23*60*60+56*60+4 = 86164 secondi per fare 360°, vuol dire che impiega 86164/360=239.34 secondi per ruotare di un grado.
La vite senza fine della montatura EQ5 ha un rapporto di 1 su 144, i.e. occorrono 144 rotazioni della manopola micrometrica per fare 24h (360 gradi) - il numero lo potete verificare empiricamente e trovate vari riscontri online (EQ 3.2 è 130, HEQ5 135). Il rapporto scelto tra le pulegge è di 40/16=2.5.
Quindi? Comandiamo un motore a cui servono 32 microstep per fare uno dei 400 step (0.9°) necessari a compiere un giro completo che farà girare 1/2.5 volte la vite senza fine a cui servono 144 giri per far fare un giro completo in AR... insomma (400x32x2.5x144) / 360° = 12800 sono i microstep necessari al motore per far muovere di un grado il tubo.
Ma in quanto tempo? In esattamente i 239.34 secondi calcolati prima! Quindi 239.34/12800 = 0.018699 secondi per ogni microstep. Questa è la velocità con cui comandare l'impulso ai motori.
Arduino Nano va a 16MHz, 16 milioni di operazioni al secondo e quindi comandare un impulso ogni 18699 microsecondi (o milionesimi di secondo) gli lascia molto tempo (ad occhio, tre ordini di grandezza) per fare altro. E prima o poi glielo faremo fare.
Il codice
Comandare semplicemente gli impulsi del motore risulta facile, con un caveat: un impulso completo ha due fasi (HIGH seguita da LOW) per cui ogni fase avrà una durata di metà dei 18699 microsecondi sopra calcolati
const unsigned long STEP_DELAY = 18699;
// Define pin connections
const int dirPin = 4;
const int stepPin = 3;
void setup() {
// Declare pins as Outputs
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
// Set motor direction clockwise (HIGH)
// you may have to invert this depending
// on how you mount the motor
digitalWrite(dirPin, HIGH);
}
void loop() {
digitalWrite(stepPin, HIGH);
// STEP_DELAY/2 is the duration of each pulse
// must be > 16383 otherwise
// delayMicroseconds will not work properly
delayMicroseconds(STEP_DELAY/2);
digitalWrite(stepPin, LOW);
delayMicroseconds(STEP_DELAY/2);
}
La funzione delayMicroseconds ha il limite di 16383 microsecondi: occhio se usate rapporti diversi o driver diversi (tipo l’A4988), se allungate la durata dell’impulso il codice sopra potrebbe non funzionare.
Noi però vogliamo usare il pulsante, per poter avanzare o indietreggiare più velocemente e centrare l'oggetto da inseguire. Il codice si complica perché dobbiamo far fare ad Arduino dell'altro anziché bloccarsi sulla funzione delayMicroseconds mentre il tempo passa, ma comunque si dovranno comandare gli impulsi al motore perfettamente. La spiegazione del codice “non bloccante” è più complessa, anche se è tra gli aspetti più interessanti di quanto fatto fin'ora, se avete domande chiedete pure!
Ecco qui il codice finale (RAto.ino) (https://mappite.org/stars/RAto.ino).