1 / 5
DSLR Star tracker — image 1
1 / 5

DSLR Star tracker

Order a print of this model

We calculate the final price from your selected file. You review and accept it before payment.

Saved on this device.

Motorized star tracker for a DSLR camera.

Rating
0 / 5
Likes
15
Downloads
61
Makes
0
Views
892
Reviews
0

Updated at source:

Model information

License
Creative Commons — Attribution

DSLR Star tracker

I set out to create my own design for a basic star tracker. I decided against a barn door design, in favour of a more compact gear driven design. This is still a work in progress.

Here are the parts I printed. I printed them all using standard PLA at 0.2mm on an Ender 3, with exception for the worm gear. I ended up printing it with a resin printer, however I had previously printed it at 0.08mm and it worked okay too.

 

Parts print list

FilenameQuantity to print
Ball head mounting plate.stl1
Gearbox A.stl1
Gearbox B.stl1
Gearbox C.stl1
DIN RA adapter.stl4
Bearing base.stl1
Bearing cap.stl6
Worm gear.stl1
Worm wheel.stl1

 

Parts list

ComponentQuantity
M6 nut50
M6x10mm Button head15
M6x16mm Countersunk3
25x160mm Aluminum bar (1/8" thickness) (OPTIONAL, but reccomended)5
6003-2RSL bearing1
605ZZ bearing6
M3x20mm Raised cheese head12
M3x8mm Raised cheese head 4
NEMA17 42-34 stepper motor1
DRV8825 stepper driver (or equivalent, needs to have 1/32 microstepping)1
5mm LED3
Radial Electrolytic capacitor (min.100 μf)2
Raspberry pi pico, with header pins1
GT2 20T and 60T 200mm pulley combo2
5x60mm metal rod1
5x120mm metal rod1
Tripod ball head adapter1
Custom PCB for electronics* (see more below)1
M6x80mm coach bolt1
M6 penny washer3
3/8″ 16 pitch UNC bolt for tripod ball head1
JST XH 2 pin connectors male and female2
JST XH 4 pin connectors female1
LM7805CV 5V linear regulator1
Diode1
A tripod or wedge mount for equitorial tracking1
DIN Rail 300mm2

 

*Regarding the PCB, I have attached the ZIP file to upload to JLCPCB/similar to have my design made. As an alternative, you can use your own design for a PCB. The PCB design files can be found here: https://github.com/WaylonGao/picoStarTracker

The key thing is that the stepper motor makes a 1/32 microstep every 1/79.5872 seconds. 

 

Does it work?

Yes! I tested it recently, and it works!

Milky way without tracking:

Milky way with tracking:

I also captured a photo of Deneb and the surrounding area:

Raspberry pi pico code

https://github.com/WaylonGao/picoStarTracker

To upload the code, I used Thonny (https://thonny.org/). I am using Micropython on the Raspberry pi pico.

"""
Raspberry pi pico based DSLR star tracker
Waylon Gao 2024
https://github.com/WaylonGao/picoStarTracker
"""
import machine
from machine import Pin
import utime
#Define INPUT pins:
adjDown = Pin(0, Pin.IN, Pin.PULL_DOWN)
adjUp = Pin(1, machine.Pin.IN, Pin.PULL_DOWN)
reverseDir = Pin(2, machine.Pin.IN, Pin.PULL_DOWN)
enable = Pin(3, machine.Pin.IN, Pin.PULL_DOWN)
fault = machine.Pin(4, Pin.IN)
#Define OUTPUT LEDs:
pwrLed = machine.Pin(5, Pin.OUT)
stepLed = machine.Pin(6, Pin.OUT)
errorLed = machine.Pin(7, Pin.OUT)

Define the onboard LED

led = machine.Pin(25, Pin.OUT)

Define STEPPER DRIVER pins:

resetPin = machine.Pin(8, Pin.OUT) sleepPin = machine.Pin(9, Pin.OUT) stepPin = machine.Pin(11, Pin.OUT) enablePin = machine.Pin(10, Pin.OUT) dirPin = machine.Pin(12, Pin.OUT) m2 = machine.Pin(13, Pin.OUT) m1 = machine.Pin(14, Pin.OUT) m0 = machine.Pin(15, Pin.OUT) T = 1.0 / 79.5872 #rotate at sidereal rate on = 1 adjustment = 0.01 #adjustment to T for button presses

def setup(): for i in range(9): print("boop") led.toggle() pwrLed.toggle() stepLed.toggle() errorLed.toggle() utime.sleep_ms(50) pwrLed.toggle() stepLed.toggle() errorLed.toggle() utime.sleep_ms(50) pwrLed.value(1) print("Setup done") setup()
#turn on enable pin enablePin.value(0) dirPin.value(1) m0.value(1) m1.value(1) m2.value(1) #Max microstepping resolution (32 bit)

Main loop

resetPin.value(1) sleepPin.value(1) errorLed.value(0) pwrLed.value(1) led.value(0)

while True:
stepPin.value(1) stepLed.toggle()
utime.sleep(T/2) stepPin.value(0) utime.sleep(T/2)

 

This is still a work in progress! If you have any questions, criticisms or suggestions, please let me know! My email is [email protected]

 

 

 

 

Tags