Satellite tracking for the mbed platform(s). Note: This software is beerware.

Dependencies:   GPS mbed

Satellite Tracking with mbed!

This is a quick example of tracking satellites with the mbed platform. Ensure you have the latest TLE information and map it correctly. I have commented in the original TLEs used for the example to help you do this.

This code is not restricted to geostationary/geosynchronous satellites, you can track any satellite for which you can get a TLE. (Which is almost all non military satellites).

See http://www.celestrak.com/NORAD/elements/ http://en.wikipedia.org/wiki/Two-line_element_set

If you use this code, please send me a beer (see main.cpp header). Enjoy!

Committer:
SamClarke
Date:
Mon Jan 20 21:25:27 2014 +0000
Revision:
5:8af1b8452986
Parent:
0:78d4704bd4e7
tidy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SamClarke 0:78d4704bd4e7 1 #ifndef plan13_h
SamClarke 0:78d4704bd4e7 2 #define plan13_h
SamClarke 0:78d4704bd4e7 3 #include "mbed.h"
SamClarke 0:78d4704bd4e7 4
SamClarke 0:78d4704bd4e7 5 #ifndef M_PI
SamClarke 0:78d4704bd4e7 6 #define M_PI 3.14159265358979323846
SamClarke 0:78d4704bd4e7 7 #endif
SamClarke 0:78d4704bd4e7 8
SamClarke 0:78d4704bd4e7 9 class Plan13 {
SamClarke 0:78d4704bd4e7 10
SamClarke 0:78d4704bd4e7 11 public:
SamClarke 0:78d4704bd4e7 12 double rad(double deg);
SamClarke 0:78d4704bd4e7 13 double deg(double rad);
SamClarke 0:78d4704bd4e7 14 double FNatn(double y, double x);
SamClarke 0:78d4704bd4e7 15 double FNday(int year, int month, int day);
SamClarke 0:78d4704bd4e7 16 double myFNday(int year, int month, int day, int uh, int um, int us);
SamClarke 0:78d4704bd4e7 17 double getElement(char *gstr, int gstart, int gstop);
SamClarke 0:78d4704bd4e7 18 void readElements(char *satellite);
SamClarke 0:78d4704bd4e7 19 void initSat(void);
SamClarke 0:78d4704bd4e7 20 void satvec();
SamClarke 0:78d4704bd4e7 21 void rangevec(void);
SamClarke 0:78d4704bd4e7 22 void sunvec(void);
SamClarke 0:78d4704bd4e7 23 void calculate(void);
SamClarke 0:78d4704bd4e7 24 float *footprintOctagon(float slat, float slon);
SamClarke 0:78d4704bd4e7 25 void printdata(void);
SamClarke 0:78d4704bd4e7 26 void setFrequency(unsigned long rx_frequency, unsigned long tx_frequency);
SamClarke 0:78d4704bd4e7 27 void setLocation(double lon, double lat, int height);
SamClarke 0:78d4704bd4e7 28 void setTime(int yearIn, int monthIn, int mDayIn, int hourIn, int minIn, int secIn);
SamClarke 0:78d4704bd4e7 29 void setElements(double YE_in, double TE_in, double IN_in, double
SamClarke 0:78d4704bd4e7 30 RA_in, double EC_in, double WP_in, double MA_in, double MM_in,
SamClarke 0:78d4704bd4e7 31 double M2_in, double RV_in, double ALON_in );
SamClarke 0:78d4704bd4e7 32 int getDoppler(unsigned long freq);
SamClarke 0:78d4704bd4e7 33 int getDoppler64(unsigned long freq);
SamClarke 0:78d4704bd4e7 34
SamClarke 0:78d4704bd4e7 35 double rx;
SamClarke 0:78d4704bd4e7 36 double tx;
SamClarke 0:78d4704bd4e7 37 double observer_lon;
SamClarke 0:78d4704bd4e7 38 double observer_lat;
SamClarke 0:78d4704bd4e7 39 int observer_height;
SamClarke 0:78d4704bd4e7 40 unsigned long rxOutLong;
SamClarke 0:78d4704bd4e7 41 unsigned long txOutLong;
SamClarke 0:78d4704bd4e7 42 unsigned long rxFrequencyLong;
SamClarke 0:78d4704bd4e7 43 unsigned long txFrequencyLong;
SamClarke 0:78d4704bd4e7 44 float dopplerFactor;
SamClarke 0:78d4704bd4e7 45 const static double YM = 365.25; /* Days in a year */
SamClarke 0:78d4704bd4e7 46 double EL; /* Elevation */
SamClarke 0:78d4704bd4e7 47 double TN; /* */
SamClarke 0:78d4704bd4e7 48
SamClarke 0:78d4704bd4e7 49 double E;
SamClarke 0:78d4704bd4e7 50 double N;
SamClarke 0:78d4704bd4e7 51 double AZ;
SamClarke 0:78d4704bd4e7 52 double SLON;
SamClarke 0:78d4704bd4e7 53 double SLAT;
SamClarke 0:78d4704bd4e7 54 double RR;
SamClarke 0:78d4704bd4e7 55
SamClarke 0:78d4704bd4e7 56 double CL;
SamClarke 0:78d4704bd4e7 57 double CS;
SamClarke 0:78d4704bd4e7 58 double SL;
SamClarke 0:78d4704bd4e7 59 double CO;
SamClarke 0:78d4704bd4e7 60 double SO;
SamClarke 0:78d4704bd4e7 61 double RE;
SamClarke 0:78d4704bd4e7 62 double FL;
SamClarke 0:78d4704bd4e7 63 double RP;
SamClarke 0:78d4704bd4e7 64 double XX;
SamClarke 0:78d4704bd4e7 65 double ZZ;
SamClarke 0:78d4704bd4e7 66 double D;
SamClarke 0:78d4704bd4e7 67 double R;
SamClarke 0:78d4704bd4e7 68 double Rx;
SamClarke 0:78d4704bd4e7 69 double Ry;
SamClarke 0:78d4704bd4e7 70 double Rz;
SamClarke 0:78d4704bd4e7 71 double Ex;
SamClarke 0:78d4704bd4e7 72 double Ey;
SamClarke 0:78d4704bd4e7 73 double Ez;
SamClarke 0:78d4704bd4e7 74 double Ny;
SamClarke 0:78d4704bd4e7 75 double Nx;
SamClarke 0:78d4704bd4e7 76 double Nz;
SamClarke 0:78d4704bd4e7 77 double Ox;
SamClarke 0:78d4704bd4e7 78 double Oy;
SamClarke 0:78d4704bd4e7 79 double Oz;
SamClarke 0:78d4704bd4e7 80 double U;
SamClarke 0:78d4704bd4e7 81 double Ux;
SamClarke 0:78d4704bd4e7 82 double Uy;
SamClarke 0:78d4704bd4e7 83 double Uz;
SamClarke 0:78d4704bd4e7 84 const static double YT = 365.2421970;
SamClarke 0:78d4704bd4e7 85 double WW;
SamClarke 0:78d4704bd4e7 86 double WE;
SamClarke 0:78d4704bd4e7 87 double W0;
SamClarke 0:78d4704bd4e7 88 double VOx;
SamClarke 0:78d4704bd4e7 89 double VOy;
SamClarke 0:78d4704bd4e7 90 double VOz;
SamClarke 0:78d4704bd4e7 91 double DE;
SamClarke 0:78d4704bd4e7 92 double GM;
SamClarke 0:78d4704bd4e7 93 double J2;
SamClarke 0:78d4704bd4e7 94 double N0;
SamClarke 0:78d4704bd4e7 95 double AU;
SamClarke 0:78d4704bd4e7 96 double b0;
SamClarke 0:78d4704bd4e7 97 double SI;
SamClarke 0:78d4704bd4e7 98 double CI;
SamClarke 0:78d4704bd4e7 99 double PC;
SamClarke 0:78d4704bd4e7 100 double QD;
SamClarke 0:78d4704bd4e7 101 double WD;
SamClarke 0:78d4704bd4e7 102 double DC;
SamClarke 0:78d4704bd4e7 103 double YG;
SamClarke 0:78d4704bd4e7 104 double G0;
SamClarke 0:78d4704bd4e7 105 double MAS0;
SamClarke 0:78d4704bd4e7 106 double MASD;
SamClarke 0:78d4704bd4e7 107 double INS;
SamClarke 0:78d4704bd4e7 108 double CNS;
SamClarke 0:78d4704bd4e7 109 double SNS;
SamClarke 0:78d4704bd4e7 110 double EQC1;
SamClarke 0:78d4704bd4e7 111 double EQC2;
SamClarke 0:78d4704bd4e7 112 double TEG;
SamClarke 0:78d4704bd4e7 113 double GHAE;
SamClarke 0:78d4704bd4e7 114 double MRSE;
SamClarke 0:78d4704bd4e7 115 double MASE;
SamClarke 0:78d4704bd4e7 116 double ax;
SamClarke 0:78d4704bd4e7 117 double ay;
SamClarke 0:78d4704bd4e7 118 double az;
SamClarke 0:78d4704bd4e7 119 int OLDRN;
SamClarke 0:78d4704bd4e7 120 double T;
SamClarke 0:78d4704bd4e7 121 double DT;
SamClarke 0:78d4704bd4e7 122 double KD;
SamClarke 0:78d4704bd4e7 123 double KDP;
SamClarke 0:78d4704bd4e7 124 double M;
SamClarke 0:78d4704bd4e7 125 int DR;
SamClarke 0:78d4704bd4e7 126 long RN;
SamClarke 0:78d4704bd4e7 127 double EA;
SamClarke 0:78d4704bd4e7 128 double C;
SamClarke 0:78d4704bd4e7 129 double S;
SamClarke 0:78d4704bd4e7 130 double DNOM;
SamClarke 0:78d4704bd4e7 131 double A;
SamClarke 0:78d4704bd4e7 132 double B;
SamClarke 0:78d4704bd4e7 133 double RS;
SamClarke 0:78d4704bd4e7 134 double Sx;
SamClarke 0:78d4704bd4e7 135 double Sy;
SamClarke 0:78d4704bd4e7 136 //double Sz;
SamClarke 0:78d4704bd4e7 137 double Vx;
SamClarke 0:78d4704bd4e7 138 double Vy;
SamClarke 0:78d4704bd4e7 139 double Vz;
SamClarke 0:78d4704bd4e7 140 double AP;
SamClarke 0:78d4704bd4e7 141 double CW;
SamClarke 0:78d4704bd4e7 142 double SW;
SamClarke 0:78d4704bd4e7 143 double RAAN;
SamClarke 0:78d4704bd4e7 144 double CQ;
SamClarke 0:78d4704bd4e7 145 double SQ;
SamClarke 0:78d4704bd4e7 146 double CXx;
SamClarke 0:78d4704bd4e7 147 double CXy;
SamClarke 0:78d4704bd4e7 148 double CXz;
SamClarke 0:78d4704bd4e7 149 double CYx;
SamClarke 0:78d4704bd4e7 150 double CYy;
SamClarke 0:78d4704bd4e7 151 double CYz;
SamClarke 0:78d4704bd4e7 152 double CZx;
SamClarke 0:78d4704bd4e7 153 double CZy;
SamClarke 0:78d4704bd4e7 154 double CZz;
SamClarke 0:78d4704bd4e7 155 double SATx;
SamClarke 0:78d4704bd4e7 156 double SATy;
SamClarke 0:78d4704bd4e7 157 double SATz;
SamClarke 0:78d4704bd4e7 158 double ANTx;
SamClarke 0:78d4704bd4e7 159 double ANTy;
SamClarke 0:78d4704bd4e7 160 double ANTz;
SamClarke 0:78d4704bd4e7 161 double VELx;
SamClarke 0:78d4704bd4e7 162 double VELy;
SamClarke 0:78d4704bd4e7 163 double VELz;
SamClarke 0:78d4704bd4e7 164 double Ax;
SamClarke 0:78d4704bd4e7 165 double Ay;
SamClarke 0:78d4704bd4e7 166 double Az;
SamClarke 0:78d4704bd4e7 167 double Sz;
SamClarke 0:78d4704bd4e7 168 //double Vz;
SamClarke 0:78d4704bd4e7 169 double GHAA;
SamClarke 0:78d4704bd4e7 170
SamClarke 0:78d4704bd4e7 171 double DS;
SamClarke 0:78d4704bd4e7 172 double DF;
SamClarke 0:78d4704bd4e7 173
SamClarke 0:78d4704bd4e7 174 /* keplerians */
SamClarke 0:78d4704bd4e7 175
SamClarke 0:78d4704bd4e7 176 char SAT[20];
SamClarke 0:78d4704bd4e7 177 long SATNO;
SamClarke 0:78d4704bd4e7 178 double YE;
SamClarke 0:78d4704bd4e7 179 double TE;
SamClarke 0:78d4704bd4e7 180 double IN;
SamClarke 0:78d4704bd4e7 181 double RA;
SamClarke 0:78d4704bd4e7 182 double EC;
SamClarke 0:78d4704bd4e7 183 double WP;
SamClarke 0:78d4704bd4e7 184 double MA;
SamClarke 0:78d4704bd4e7 185 double MM;
SamClarke 0:78d4704bd4e7 186 double M2;
SamClarke 0:78d4704bd4e7 187 long RV;
SamClarke 0:78d4704bd4e7 188 double ALON;
SamClarke 0:78d4704bd4e7 189 double ALAT;
SamClarke 0:78d4704bd4e7 190 double rxOut;
SamClarke 0:78d4704bd4e7 191 double txOut;
SamClarke 0:78d4704bd4e7 192
SamClarke 0:78d4704bd4e7 193 /* location */
SamClarke 0:78d4704bd4e7 194 char LOC[20];
SamClarke 0:78d4704bd4e7 195 double LA;
SamClarke 0:78d4704bd4e7 196 double LO;
SamClarke 0:78d4704bd4e7 197 double HT;
SamClarke 0:78d4704bd4e7 198
SamClarke 0:78d4704bd4e7 199 double HR; /* Hours */
SamClarke 0:78d4704bd4e7 200 double DN;
SamClarke 0:78d4704bd4e7 201 private:
SamClarke 0:78d4704bd4e7 202 void foo();
SamClarke 0:78d4704bd4e7 203 };
SamClarke 0:78d4704bd4e7 204 #endif