資料介紹
描述
現在將所有硬件連接到相應的引腳后,我們開始集成軟件
1. 獲取 MPU 讀數(之前討論過)
2. 獲取 gps 讀數——使用之前討論的代碼行并使用 smartDelay() 進行更新,我還在引腳 46 處連接了一個開關以從正常模式更改為軌跡模式:
if (gps.location.isValid())
{ Lat = gps.location.lat();
Long = gps.location.lng();
}
else
{
Lat = 12.82; /*my location in case there is no gps readings*/
Long = 80.04;
}
yy = gps.date.year();
//yy=2016;
// Serial.println(yy);
mu = gps.date.month();
//mu=5;
// Serial.println(mu);
dd = gps.date.day();
// dd=4;
// Serial.println(dd);
if (digitalRead(46) == 1)
{
if(gps.time.isValid())
{
hh = gps.time.hour();
//Serial.println(hh);
mm = gps.time.minute();
}
else
{
hh=3;
mm=0;
}
}
else if((digitalRead(46) == 0))
{
int ss=trajec();
hh = gps.time.hour();
mm = gps.time.minute();
}
//smartDelay function
static void smartDelay(unsigned long ms)
{
//Serial.println(“C”);
unsigned long start = millis();
do
{
while (Serial2.available())
gps.encode(Serial2.read());
} while (millis() – start < ms);
//Serial.println(“D”);
}
3.方位角-高度的計算:這個已經討論過了,這里是合并的代碼片段(密切元素在下面單獨提到)
double ipart(double xx)
{
//Serial.println(“IPART”);
double sgn;
if (xx < 0) { sgn = -1.0; } else if (xx == 0) { sgn = 0.0; } else if (xx > 0)
{
sgn = 1.0;
}
double ret = sgn * ((int)fabs(xx));
return ret;
}
double FNdegmin(double xx)
{
//Serial.println(“DEGMIN”);
double a = ipart(xx) ;
double b = xx – a ;
double e = ipart(60 * b) ;
// deal with carry on minutes
if ( e >= 60 )
{
e = 0 ;
a = a + 1 ;
}
return (a + (e / 100) );
}
double dayno(int dx, int mx, int yx, double fx)
{
//Serial.println(“DAY NO”);
//dno=(367 * yx) – (int)(7*(yx + (int)((mx + 9) / 12)) / 4) + (int)(275 * mx / 9) + dx – 730531.5 + fx;
dno = 987 + dx + (fx / 24);
//Serial.print(“\ndays:”);
//Serial.println(dno);
return dno;
}
double frange(double x)
{
//Serial.println(“FRANGE”);
x = x / (2 * pi);
x = (2 * pi) * (x – ipart(x));
if (x < 0) x = x + (2 * pi); return x; } double fkep( double m, double ecc) { // Serial.println(m); Serial.println(ecc); //Serial.println(“FKEPA”); // Serial.println(m); Serial.println(ecc); double e = ecc; // do // { dyo = e – (ecc * sin(e)) – m; // e = e – (dyo / (1 – (ecc * cos(e)))); // delay(1); ////Serial.print(“fabs”);Serial.print((fabs(dyo)*pow(10, 6)+1),8);Serial.print(” “);Serial.print(“pow”);Serial.println((pow(10, -6)+1),8); // } while (fabs(dyo)>= pow(10, -12));
// //Serial.println(“fkepB”);
// double v = 2 * atan(sqrt((1 + ecc) / (1 – ecc)) * tan(e / 2));
double v = m + (2 * e – 0.25 *pow(e,3) + 5/96 * pow(e,5)) * sin(m) + (1.25 * pow(e,2) – 11/24 * pow(e,4)) * sin(2*m) + (13/12 * pow(e,3) – 43/64 * pow(e,5)) * sin(3*m) + 103/96 * pow(e,4) * sin(4*m) + 1097/960 * pow(e,5) * sin(5*m);
if (v < 0)
v = v + (2 * pi);
return v;
}
double fnatan(double x, double y)
{
//Serial.println(“ATAN”);
double a = atan(y / x);
if (x < 0)
a = a + pi;
if ((y < 0) && (x > 0))
a = a + (2 * pi);
return a;
}
void AltAzCalculate(double RA, double Dec, double Lat, double Long, double hrs, double minut, double dy)
{
//Serial.println(“G”);
// Day offset and Local Siderial Time
dy = dy + 4975.5;
double LST = (100.46 + 0.985647 * dy + Long + 15 * (hrs + minut / 60) + 360) – (((int)((100.46 + 0.985647 * dy + Long + 15 * (hrs + minut / 60) + 360) / 360)) * 360);
// Hour Angle
double HA = (LST – RA + 360) – ((int)((LST – RA + 360) / 360)) * 360 ;
// HA, DEC, Lat to Alt, AZ
double x = cos(HA * (pi / 180)) * cos(Dec * (pi / 180));
double y = sin(HA * (pi / 180)) * cos(Dec * (pi / 180));
double z = sin(Dec * (pi / 180));
double xhor = x * cos((90 – Lat) * (pi / 180)) – z * sin((90 – Lat) * (pi / 180));
double yhor = y;
double zhor = x * sin((90 – Lat) * (pi / 180)) + z * cos((90 – Lat) * (pi / 180));
Azimuth = atan2(yhor, xhor) * (180 / pi) + 180;
Elevation = asin(zhor) * (180 / pi);
}
void earth()
{
//Serial.println(“B”);
M[3] = ((n[3] * rads) * d) + (L[3] – p[3]) * rads;
M[3] = frange(M[3]);
v[3] = fkep(M[3], e[3]);
r[3] = a[3] * ((1 – (pow(e[3], 2))) / (1 + (e[3] * cos(v[3]))));
x[3] = r[3] * cos(v[3] + p[3] * rads);
y[3] = r[3] * sin(v[3] + p[3] * rads);
z[3] = 0;
}
void mainCalculations()
{
dfrac = hh + (mm / 60);
d = dayno(dd, mu, yy, dfrac);
//Serial.println(“E”);
earth();
//Serial.println(“F”);
//Serial.println(“E”);
int j;
for (j = 0; j <=9; j++)
{
if (j == 3)
continue;
if(j==9);
// Serial.println(“A”);
M[j] = ((n[j] * rads) * d) + (L[j] – p[j]) * rads;
if(j==9);
// Serial.println(“B”);
M[j] = frange(M[j]);
if(j==9);
// Serial.println(“C”);
v[j] = fkep(M[j], e[j]);
if(j==9);
// Serial.println(“D”);
r[j] = a[j] * ((1 – pow(e[j], 2)) / (1 + (e[j] * cos(v[j]))));
x[j] = r[j] * (cos(o[j] * rads) * cos(v[j] + p[j] * rads – o[j] * rads) – sin(o[j] * rads) * sin(v[j] + p[j] * rads – o[j] * rads) * cos(i[j] * rads));
y[j] = r[j] * (sin(o[j] * rads) * cos(v[j] + p[j] * rads – o[j] * rads) + cos(o[j] * rads) * sin(v[j] + p[j] * rads – o[j] * rads) * cos(i[j] * rads));
z[j] = r[j] * (sin(v[j] + p[j] * rads – o[j] * rads)) * sin(i[j] * rads);
Xi[j] = x[j] – x[3];
Yi[j] = y[j] – y[3];
Zi[j] = z[j];
Xq[j] = Xi[j];
Yq[j] = (Yi[j] * cos(ec)) – (Zi[j] * sin(ec));
Zq[j] = (Yi[j] * sin(ec)) + (Zi[j] * cos(ec));
ra[j] = fnatan(Xq[j], Yq[j]);
dec[j] = atan(Zq[j] / sqrt(pow(Xq[j], 2.0) + pow(Yq[j], 2.0)));
// Serial.println(j);
}
//Serial.println(“H”);
double alpha = FNdegmin((ra[pno] * degs) / 15);
double delta = FNdegmin(dec[pno] * degs);
//Serial.println(“G”);
AltAzCalculate((alpha * 15), delta, Lat, Long, hh, mm, d);
}
這是?2013 年 8 月 16 日的密切元素
double i[10] = {0.0, 7.0052, 3.3949, 0.0, 1.8496, 1.3033, 2.4869, 0.7728, 1.7692, 17.1695};
double o[10] = {0.0, 48.493, 76.804, 0.0, 49.668, 100.629, 113.732, 73.989, 131.946, 110.469};
double p[10] = {0.0, 77.669, 131.99, 103.147, 336.322, 14.556, 91.500, 169.602, 6.152, 223.486};
double a[10] = {0.0, 0.387098, 0.723327, 1.0000, 1.523762, 5.20245, 9.52450, 19.1882, 29.9987, 39.2766};
double n[10] = {0.0, 4.09235, 1.60215, 0.985611, 0.523998, 0.083099, 0.033551, 0.011733, 0.006002, 0.004006};
double e[10] = {0.0, 0.205645 , 0.006769, 0.016679, 0.093346, 0.048892, 0.055724, 0.047874, 0.009816, 0.246211};
double L[10] = {0.0, 93.8725, 233.5729, 324.5489, 82.9625, 87.9728, 216.6279, 11.9756, 335.0233, 258.8717};
4.伺服映射和伺服進給(之前討論過)
5. 行星選擇——我用一個小電位器來選擇不同的行星:
int planetInput(int potval)
{
if ((potval >= 0) && (potval <= 90)) { Serial.print(“Mercury”); return 1; } if ((potval >= 91) && (potval <= 191)) { Serial.print(“Venus”); return 2; } if ((potval >= 192) && (potval <= 292)) { Serial.print(“Mars”); return 4; } if ((potval >= 293) && (potval <= 393)) { Serial.print(“Jupiter”); return 5; } if ((potval >= 394) && (potval <= 494)) { Serial.print(“Saturn”); return 6; } if ((potval >= 495) && (potval <= 595)) { Serial.print(“Uranus”); return 7; } if ((potval >= 596) && (potval <= 696)) { Serial.print(“Neptune”); return 8; } if ((potval >= 697) && (potval <= 1023))
{
Serial.print(“Pluto”);
return 9;
}
}
6 . 軌跡預測——我用一個開關從正常模式切換到軌跡模式在這種模式下,伺服系統移動得有點快,給出了行星在一整天的未來位置。這是片段:
int trajec()
{
hh=0;
mm=0;
while(hh<24&& (digitalRead(46) == 0))
{
while(mm<60&& (digitalRead(46) == 0))
{
mainCalculations();
nyaw = 360 – yaw;
Azim = Azimuth – nyaw;
Azim -= 90;
while (Azim < 0)
Azim = 360.0 – abs(Azim);
Azi = map(Azim, 0, 360, 5, 29);
Az = (int)Azi;
Elev = map(Elevation, -90, 90, 2, 178);
El = (int)Elev;
myservoAz.write(Az);
myservoEl.write(El);
mm++;
Serial.print(hh); Serial.print(“:”); Serial.println(mm);
}
mm=0;
hh++;
while(hh==19)
hh=20;
Serial.println(“good”);
}
return 5;
}
如您所見,我剛剛使用循環手動快進時間,并計算出一天的軌跡在一? 分鐘內通過伺服傳遞,這使得它移動得更快,顯示出行星的軌跡。
這是最終的粗略(非格式化)工作代碼,其中包括所有內容:Github
- labview軸心軌跡模擬器軸心軌跡分析 33次下載
- 開源網絡協議分析器WireShark軟件下載 15次下載
- 基于灰色預測模型的GPS/WIFI室內定位方法 16次下載
- 社區中老年人空間行為軌跡異常分析及其實驗 12次下載
- 基于循環神經網絡的空間軌跡壓縮算法 5次下載
- 可預測眾包工人移動軌跡的任務預測模型 3次下載
- 船舶自動識別系統軌跡序列預測模型 0次下載
- 基于變分自編碼器的海面艦船軌跡預測算法 5次下載
- 基于優化局部抑制的軌跡隱私保護算法 4次下載
- 一種多模型集成的網絡論壇發帖量預測模型 16次下載
- 如何使用物聯網操作系統Zephyr實現“連續集成”開源軟件的詳細說明
- 如何使用注意力機制進行行人軌跡預測生成模型的詳細資料說明 14次下載
- 如何使用數據過采樣和集成學習進行軟件缺陷數目預測方法概述 10次下載
- 半監督集成跨項目軟件缺陷預測 0次下載
- 前綴投影技術的大規模軌跡預測模型 0次下載
- 一種基于自然語言的軌跡修正方法 328次閱讀
- 利用開源軟件的最佳實踐 464次閱讀
- Elasticsearch 8作為開源軟件正式發布 2302次閱讀
- 谷歌重新定義開源軟件漏洞治理框架 2657次閱讀
- 集成模型的原理及創建集成模型的方法 5196次閱讀
- 關于明年Linux的幾個預測 2424次閱讀
- 2020年開源的六大發展趨勢 4257次閱讀
- 開源過程中的5件注意事項 3548次閱讀
- 開源與云的一些爭論 3200次閱讀
- 一種城市交叉路口轉彎車輛軌跡預測方法 8002次閱讀
- NASA的開源軟件是什么?NASA的開源軟件的詳細分析 7186次閱讀
- 中國人工智能開源軟件前生今生到底如何? 5563次閱讀
- 從發布過程以及使用權限的角度入手,對各個常見開源協議進行解析 727次閱讀
- 開源存儲的六大優勢 3975次閱讀
- 精準定位!GPS定位及軌跡記錄器DIY教程 2.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多