Add files via upload
This commit is contained in:
		
							parent
							
								
									17d876fccd
								
							
						
					
					
						commit
						c1e18afb35
					
				
							
								
								
									
										159
									
								
								master.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								master.ino
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,159 @@
 | 
			
		||||
/*
 | 
			
		||||
 This is the source code for the master-module of Star Track.
 | 
			
		||||
 Required Libraries:
 | 
			
		||||
 https://virtuabotix-virtuabotixllc.netdna-ssl.com/core/wp-content/uploads/2014/01/virtuabotixRTC.zip
 | 
			
		||||
 https://github.com/jrowberg/i2cdevlib/zipball/master 
 | 
			
		||||
 
 | 
			
		||||
 Created 20 July 2016 by Görkem Bozkurt
 | 
			
		||||
 */
 | 
			
		||||
#include <virtuabotixRTC.h>
 | 
			
		||||
#include <Wire.h>
 | 
			
		||||
#include <MPU6050.h>
 | 
			
		||||
MPU6050 mpu;
 | 
			
		||||
//define RTC.
 | 
			
		||||
virtuabotixRTC myRTC(A0, A1, A2);
 | 
			
		||||
double M,Y,D,MN,H,S;
 | 
			
		||||
double A,B;
 | 
			
		||||
double location =32.88;//your longtitude
 | 
			
		||||
double LST_degrees;//variable to store local side real time(LST) in degrees.
 | 
			
		||||
double LST_hours;//variable to store local side real time(LST) in decimal hours.
 | 
			
		||||
unsigned long timer = 0;
 | 
			
		||||
float timeStep = 0.01;
 | 
			
		||||
// Pitch and Yaw values
 | 
			
		||||
double pitch = 0;
 | 
			
		||||
double yaw = 0;
 | 
			
		||||
double val = 0;//variable to store the user input DEC
 | 
			
		||||
double val2 = 0;//variable to store the user input RA
 | 
			
		||||
double temp = val2;//temporary value to store val2
 | 
			
		||||
const int stahp=7,stahp2=10;
 | 
			
		||||
const int cw=8,cw2=11;
 | 
			
		||||
const int ccw=6,ccw2=9;
 | 
			
		||||
void setup() {
 | 
			
		||||
    //set date-time according to (seconds, minutes, hours, day of the week, day of the month, month, year) 
 | 
			
		||||
    myRTC.setDS1302Time(00, 38, 23, 5, 27, 7, 2016);
 | 
			
		||||
    Serial.begin(115200);
 | 
			
		||||
    pinMode(stahp,OUTPUT);
 | 
			
		||||
    pinMode(cw,OUTPUT);
 | 
			
		||||
    pinMode(ccw,OUTPUT);
 | 
			
		||||
    pinMode(stahp2,OUTPUT);
 | 
			
		||||
    pinMode(cw2,OUTPUT);
 | 
			
		||||
    pinMode(ccw2,OUTPUT);
 | 
			
		||||
    delay(5000);//wait before starting
 | 
			
		||||
    while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
    mpu.calibrateGyro();
 | 
			
		||||
    mpu.setThreshold(3);
 | 
			
		||||
}//--(end setup )---
 | 
			
		||||
void loop()
 | 
			
		||||
{
 | 
			
		||||
    //this will update the RA degrees with sidereal time 1degree at a time
 | 
			
		||||
    //this way the object or star on the sky is tracked.
 | 
			
		||||
    /*if( floor(LST_degrees)==LST_degrees ){ 
 | 
			
		||||
      if (LST_degrees>180){
 | 
			
		||||
        val2 = temp+(360-LST_degrees);
 | 
			
		||||
        }else{
 | 
			
		||||
        val2 = temp-LST_degrees;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
     */ 
 | 
			
		||||
    myRTC.updateTime();
 | 
			
		||||
    LST_time();
 | 
			
		||||
    recvdata();
 | 
			
		||||
    pitch_check();
 | 
			
		||||
    yaw_check();
 | 
			
		||||
    timer = millis();
 | 
			
		||||
    Vector norm = mpu.readNormalizeGyro();
 | 
			
		||||
    //I've put the sensor with a 90 degree angle on the setup due to
 | 
			
		||||
    //cable connection problems. Because of that the data values from the mpu6050 chip are
 | 
			
		||||
    //different in this case:
 | 
			
		||||
    //roll data(X-axis) is pitch.
 | 
			
		||||
    //pitch data(Y-axis) is yaw.
 | 
			
		||||
    yaw = yaw + norm.YAxis * timeStep;
 | 
			
		||||
    pitch = pitch + norm.XAxis * timeStep;
 | 
			
		||||
    Serial.print(" Yaw = ");
 | 
			
		||||
    Serial.print(213.91);
 | 
			
		||||
    Serial.print(" Pitch = ");
 | 
			
		||||
    Serial.print(19.18);
 | 
			
		||||
    Serial.print(" LST_d = ");
 | 
			
		||||
    Serial.print(LST_degrees);
 | 
			
		||||
    Serial.print(" LST_h = ");
 | 
			
		||||
    Serial.println(LST_hours);//local sidereal time in decimal hours.
 | 
			
		||||
    delay((timeStep*1000) - (millis() - timer));//timer for the gyro.
 | 
			
		||||
}
 | 
			
		||||
void recvdata(){
 | 
			
		||||
  //This function receives data from serial as (0.00,0.00)
 | 
			
		||||
  //splits it to strings by the comma ","
 | 
			
		||||
  //than converts them to doubles 
 | 
			
		||||
    if (Serial.available() > 0){
 | 
			
		||||
        String a= Serial.readString();
 | 
			
		||||
        String value1, value2;
 | 
			
		||||
        // For loop which will separate the String in parts
 | 
			
		||||
        // and assign them the the variables we declare
 | 
			
		||||
        for (int i = 0; i < a.length(); i++) {
 | 
			
		||||
            if (a.substring(i, i+1) == ",") {
 | 
			
		||||
                value2 = a.substring(0, i);
 | 
			
		||||
                value1= a.substring(i+1);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        val=90-value1.toFloat();
 | 
			
		||||
        val2=value2.toFloat();
 | 
			
		||||
        temp = val2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
void pitch_check(){
 | 
			
		||||
    //check if pitch is high, low or equal to the user input
 | 
			
		||||
    //send commands to slave-module to start and stop motors
 | 
			
		||||
    if(floor(pitch*100)/100==floor(val*100)/100){
 | 
			
		||||
        digitalWrite(stahp,HIGH);
 | 
			
		||||
        }else{
 | 
			
		||||
        digitalWrite(stahp,LOW);
 | 
			
		||||
    }
 | 
			
		||||
    if(floor(pitch*100)<floor(val*100)){
 | 
			
		||||
        digitalWrite(cw,HIGH);
 | 
			
		||||
        }else{
 | 
			
		||||
        digitalWrite(cw,LOW);
 | 
			
		||||
    }
 | 
			
		||||
    if(floor(pitch*100)>floor(val*100)){
 | 
			
		||||
        digitalWrite(ccw,HIGH);
 | 
			
		||||
        }else{
 | 
			
		||||
        digitalWrite(ccw,LOW);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
void yaw_check(){
 | 
			
		||||
    //check if yaw is high, low or equal to the user input
 | 
			
		||||
    //send commands to slave-module to start and stop motors
 | 
			
		||||
    if(floor(yaw*100)==floor(val2*100)){
 | 
			
		||||
        digitalWrite(stahp2,HIGH);
 | 
			
		||||
        }else{
 | 
			
		||||
        digitalWrite(stahp2,LOW);
 | 
			
		||||
    }
 | 
			
		||||
    if(floor(yaw*100)<floor(val2*100)){
 | 
			
		||||
        digitalWrite(cw2,HIGH);
 | 
			
		||||
        }else{
 | 
			
		||||
        digitalWrite(cw2,LOW);
 | 
			
		||||
    }
 | 
			
		||||
    if(floor(yaw*100)>floor(val2*100)){
 | 
			
		||||
        digitalWrite(ccw2,HIGH);
 | 
			
		||||
        }else{
 | 
			
		||||
        digitalWrite(ccw2,LOW);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
void LST_time(){
 | 
			
		||||
    //Calculates local sidereal time based on this calculation,
 | 
			
		||||
    //http://www.stargazing.net/kepler/altaz.html 
 | 
			
		||||
    M = (double) myRTC.month;
 | 
			
		||||
    Y = (double) myRTC.year;
 | 
			
		||||
    D = (double) myRTC.dayofmonth;
 | 
			
		||||
    MN = (double) myRTC.minutes;
 | 
			
		||||
    H = (double) myRTC.hours;
 | 
			
		||||
    S = (double) myRTC.seconds;
 | 
			
		||||
    A = (double)(Y-2000)*365.242199;
 | 
			
		||||
    B = (double)(M-1)*30.4368499;
 | 
			
		||||
    double JDN2000=A+B+(D-1)+myRTC.hours/24;
 | 
			
		||||
    double decimal_time = H+(MN/60)+(S/3600) ;
 | 
			
		||||
    double LST = 100.46 + 0.985647 * JDN2000 + location + 15*decimal_time;
 | 
			
		||||
    LST_degrees = (LST-(floor(LST/360)*360));
 | 
			
		||||
    LST_hours = LST_degrees/15;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										78
									
								
								slave.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								slave.ino
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,78 @@
 | 
			
		||||
/*
 | 
			
		||||
this is the source code for the slave module of Star Track
 | 
			
		||||
Required Libraries:
 | 
			
		||||
http://www.airspayce.com/mikem/arduino/AccelStepper/AccelStepper-1.51.zip
 | 
			
		||||
Created 20 July 2016 by Görkem Bozkurt
 | 
			
		||||
 */
 | 
			
		||||
#include <AccelStepper.h>
 | 
			
		||||
#define HALFSTEP 8
 | 
			
		||||
#include <Wire.h>
 | 
			
		||||
// Motor pin definitions
 | 
			
		||||
#define motorPin1  2     // IN1 on the ULN2003 driver 1
 | 
			
		||||
#define motorPin2  3     // IN2 on the ULN2003 driver 1
 | 
			
		||||
#define motorPin3  4     // IN3 on the ULN2003 driver 1
 | 
			
		||||
#define motorPin4  5     // IN4 on the ULN2003 driver 1
 | 
			
		||||
 | 
			
		||||
#define motorPin5  A0     // IN1 on the ULN2003 driver 1
 | 
			
		||||
#define motorPin6  A1     // IN2 on the ULN2003 driver 1
 | 
			
		||||
#define motorPin7  A2     // IN3 on the ULN2003 driver 1
 | 
			
		||||
#define motorPin8  A3     // IN4 on the ULN2003 driver 1
 | 
			
		||||
// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
 | 
			
		||||
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
 | 
			
		||||
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
 | 
			
		||||
 | 
			
		||||
int stahp = 7,stahp2=10;
 | 
			
		||||
int cw = 6,cw2 = 11;
 | 
			
		||||
int ccw = 8,ccw2=9;
 | 
			
		||||
 | 
			
		||||
boolean stopped = false;
 | 
			
		||||
boolean stopped2 = false;
 | 
			
		||||
void setup() {
 | 
			
		||||
    stepper1.setMaxSpeed(1000.0);
 | 
			
		||||
    stepper2.setMaxSpeed(1000.0);
 | 
			
		||||
    pinMode(stahp2,INPUT);
 | 
			
		||||
    pinMode(cw2,INPUT);
 | 
			
		||||
    pinMode(ccw2,INPUT);
 | 
			
		||||
    pinMode(stahp,INPUT);
 | 
			
		||||
    pinMode(cw,INPUT);
 | 
			
		||||
    pinMode(ccw,INPUT);
 | 
			
		||||
}//--(end setup )---
 | 
			
		||||
void loop()
 | 
			
		||||
{
 | 
			
		||||
    motor_pitch();
 | 
			
		||||
    motor_roll();
 | 
			
		||||
    
 | 
			
		||||
    if(stopped==false){
 | 
			
		||||
        stepper1.run();
 | 
			
		||||
    }
 | 
			
		||||
    if(stopped2==false){
 | 
			
		||||
        stepper2.run();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
void motor_roll(){
 | 
			
		||||
    if(digitalRead(stahp)==HIGH){
 | 
			
		||||
        stopped = true;
 | 
			
		||||
    }else{ if(digitalRead(cw)==HIGH){
 | 
			
		||||
            stepper1.setSpeed(100);
 | 
			
		||||
            stopped = false;
 | 
			
		||||
        }
 | 
			
		||||
        if(digitalRead(ccw)==HIGH){
 | 
			
		||||
            stepper1.setSpeed(-100);
 | 
			
		||||
            stopped = false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
void motor_pitch(){
 | 
			
		||||
    if(digitalRead(stahp2)==HIGH){
 | 
			
		||||
        stopped2 = true;
 | 
			
		||||
    }else{ if(digitalRead(cw2)==HIGH){
 | 
			
		||||
            stepper2.setSpeed(100);
 | 
			
		||||
            stopped2 = false;
 | 
			
		||||
        }
 | 
			
		||||
        if(digitalRead(ccw2)==HIGH){
 | 
			
		||||
            stepper2.setSpeed(-100);
 | 
			
		||||
            stopped2 = false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
   
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user