Introduction: Follow the Stars With Star Tracker
Hi there! here another project for summer photographers...
The star tracker derived from barn door star tracker.
MATERIAL:
2 x aluminium plate 40mm X 5mm X 250mm long
2 x aluminium L section 30x50 X 200mm long
2 x aluminum U section 10mm X 8mm 50mm long
2 x good steel hinges
20x m4 bolt
8 x m4 countersunk screw
12 x m4 screw
1x Stepper motor
1 x Arduino uno
1x multi rotation 10K ohm potentiometer
1 x stepper motor driver with ULN2003 chip driver
1 x M6 screw (for plate movement)
1 x M6 barrel nut (forniture use)
1x 1/4 whit worth screw (for join the photographic head on star tracker)
1 M4 to M6 CNC flexible coupling shaft (same as used for 3D printer)
TOOLS:
Drill
screw driver (plate and star shape)
set of wrench
1/4 MALE THREAD WHITWORTH (same thread used in photography)
Step 1: Join Together the Plates
Now is the moment to assemble these plates with screw and nuts and motor. All screw holes are 20 mm distanced. The barrel nut is keep inside the small "cage" made by U aluminum bar. In this way the higher plate can move up and down.
The hole for the motor screw is 10-12 mm ovale shape.
The tripod connection is made by 1/4 MALE THREAD WHITWORTH.
First model I've used one gear motor of 2rpm at 12VDC managed by RC model ESC and servo tester. (if interested ask me).
After I've used Arduino and 5 wires stepper motor obtained from air conditioner. I suppose the motor used in the kit is useful for this. The main important things is the motor have to run 1 rotation every 60 seconds.
I've installed the Arduino board and the stepper driver inside the plastic box.
Arduino sketch used:
______________________________________________________________________________________
// This Arduino example demonstrates bidirectional operation of a
// 28BYJ-48, which is readily available on eBay, using a ULN2003
// interface board to drive the stepper. The 28BYJ-48 motor is a 4-
// phase, 8-beat motor, geared down by a factor of 68. One bipolar
// winding is on motor pins 1 & 3 and the other on motor pins 2 & 4.
// Refer to the manufacturer's documentation of Changzhou Fulling
// Motor Co., Ltd., among others. The step angle is 5.625/64 and the
// operating Frequency is 100pps. Current draw is 92mA. In this
// example, the speed and direction of the stepper motor is determined
// by adjusting a 1k-ohm potentiometer connected to Arduino pin A2.
// When the potentiometer is rotated fully counterclockwise, the motor
// will rotate at full counterclockwise speed. As the potentiometer is
// rotated clockwise, the motor will continue to slow down until is
// reaches its minimum speed at the the potentiometer's midpoint value .
// Once the potentiometer crosses its midpoint, the motor will reverse
// direction. As the potentiometer is rotated further clockwise, the speed
// of the motor will increase until it reaches its full clockwise rotation
// speed when the potentiometer has been rotated fully clockwise.
///////////////////////////////////////////////
/declare variables for the motor pins
int motorPin1 = 8; // Blue - 28BYJ48 pin 1
int motorPin2 = 9; // Pink - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow - 28BYJ48 pin 3
int motorPin4 = 11; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
int motorSpeed = 0; //variable to set stepper speed
int potPin = 2; //potentiometer connected to A2
int potValue = 0; //variable to read A0 input
//////////////////////////////////////////////////////////////////////////////
void setup() {
//declare the motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}
//////////////////////////////////////////////////////////////////////////////
void loop(){
potValue = analogRead(potPin); // read the value of the potentiometer
Serial.println(potValue); // View full range from 0 - 1024 in Serial Monitor
if (potValue < 535){ // if potentiometer reads 0 to 535 do this
motorSpeed = (potValue/15 + 5); //scale potValue to be useful for motor
clockwise(); //go to the cw rotation function
}
else { //value of the potentiometer is 512 - 1024
motorSpeed = ((1024-potValue)/15 + 5); //scale potValue for motor speed
counterclockwise(); //go the the ccw rotation function
}
}
/////////////////////////////////////////////////////////////////////////////
/set pins to ULN2003 high in sequence from 1 to 4
//delay "motorSpeed" between each pin setting (to determine speed)
void counterclockwise (){
// 1
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 2
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay (motorSpeed);
// 3
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 4
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 5
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 6
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay (motorSpeed);
// 7
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(motorSpeed);
// 8
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(motorSpeed);
}
/////////////////////////////////////////////////////////////////////////////
/set pins to ULN2003 high in sequence from 4 to 1
//delay "motorSpeed" between each pin setting (to determine speed)
void clockwise(){
// 1
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 2
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay (motorSpeed);
// 3
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 4
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 5
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 6
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, HIGH);
delay (motorSpeed);
// 7
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay(motorSpeed);
// 8
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay(motorSpeed);
}
____________________________________________________________________________________
the sketch is very simple can run the stepper motor tuning the speed by potentiometer.
Attachments
Step 2: Orientation
You have to orientate the star tracker to the north star. Here in north Italy is 45° degree parallel, and find Polar Star inside the pipe (hinges can be used).
Step 3: The Result
Buy new Vixen Polarie is too much expansive! I use this tracker to take some pictures: this one is 136 seconds exposure.... I've to test this in one site far from the city lights pollution.
I've made this picture form my house...

Participated in the
Photography Tips and Tricks Contest
13 Comments
6 years ago
this follows Right ascension but not declination.
Stars and planets (appear to) rotate along the ecliptic which is not the celestial equator.
There are 2 motions involved in tracking stars!
Reply 2 years ago
Once you have polar aligned and pointed the camera at the target, you only need to track the rotation of the earth. This will do that - great project!
7 years ago on Introduction
BTW you make a super Instructable. Good work!
7 years ago on Introduction
If it is an error, I would have expected you to correct it.
Reply 7 years ago on Introduction
Hi I've corrected it. Thank you
7 years ago on Introduction
I'm only commenting that you called the function clockwise() and then followed with a comment //go to the ccw rotation function instead of //go to the cw rotation function.
Reply 7 years ago on Introduction
ok, thank you for your comment...
regards
7 years ago on Introduction
For example, you say:
clockwise(); //go to the ccw rotation function
???
Reply 7 years ago
I'm not a programmer but I know the motor have to run clockwise.
7 years ago on Introduction
In the void loop, you appear to have your clockwise/counter clockwise comments mismatched.
7 years ago
Is that last part arduino script
7 years ago
I have always wanted to do this but the cost is prohibitive... Not anymore!
Reply 7 years ago on Introduction
hi,
You have to buy the aluminum 5€, Arduino 20€, the stepper motor + driver 6€. and so other cheap stuffs.... of course you must have the right tools, but is not so difficult.