马铃鼠 发表于 2015-4-3 23:44

GOTO手柄之——电子天文“百年历”!

本帖最后由 马铃鼠 于 2015-4-3 23:54 编辑

发现毕设做goto是有点作的节奏。。。很多原来认为简单的模块,实际调试起来,各种小问题。。。

这个是goto手柄的一部分功能。显示屏为LCD12864,单片机采用了STC的12系列。

具体功能见图,主界面可以显示:日期,星期,时间,白天夜晚提示图标,农历,月相,温度,儒略日。

日期时间依靠DS1302芯片获取,这也是之所以成为“百年历”的原因之一,其实很多所谓的万年历,其核心算法也就百年。
星期采用了蔡勒公式计算,度娘百科里有源码参考,可惜有很多小错误。。。
农历参考了网上的一种方法,是查表推算的,具体方法比较麻烦,不再解释。
月相也是粗判断的,就是依靠农历来判断。。。
温度用的是烂大街的DS18B20,不再解释。。。

儒略日的算法参考了许剑伟老师译著的《天文算法》和其作品寿星天文历,让8位机算这个长串数据,只能曲线救国。。。不过最终还是做到了精度精确至1S!是用Stellarium验证的。



第二界面也就是goto功能下的界面之一。
显示参数:星体名称,赤道坐标(J2015),地平坐标,星体方位(SW那个。。。),双轴回转速度(128X),跟踪模式(n)。

这里的算法是折腾了最久的。。。让单片机根据时间和星体的赤道坐标来计算地平坐标。。。
算法参考了很多,验证了很多,发现《天文学手册》一书中的坐标变换的一个公式是错的。。。
恒星时的算法还是http://www.stargazing.net/kepler/altaz.html
这个网站提供的比较好用,《天文算法》一书中的恒星时计算方法总是有不小的误差,不知道为什么。。。
这个网站的坐标变换公式已经实际验证,比较好用。

最终的地平坐标显示精度要比实际计算出的低得多,主要是考虑到了单片机的执行能力和液晶屏的刷新速率,实际计算的依据J2015的赤道坐标的话,远离北天极的坐标精度非常高,角秒级别。
显示这个地平坐标的作用实际用途不太大,不过不显示就浪费了。。。

这里最关键的是坐标变换的中间量:时角HA,依据这个可以判定星体的方位,也就可以控制赤道仪的过中天翻转。
时角的计算前提还是恒星时,影响其精确度的还有儒略日。这里的算法推导验证了几个星期才过关。。。

目前单片机内存储的星体坐标很有限,考虑精度就得用Jnow的赤道坐标,但是Jnow的赤道坐标影响因素太多,实际算法太复杂。。。所以最终还是只打算存一些J2000的星体坐标。但是单片机ROM容量有限,还得扩展,想着用SD卡,不过最简单的还是依靠Stellarium这些上位机。。。




月相展示:
月相和白天夜晚的提示图标都是自己画的16X16像素的图标,不是太好看,但是还算清楚吧。。。
像素太低不是很好画,后面共享一下这些图标以及对应的12864的字模,方便可能需要的同好使用。



温度传感器检测,有未检测到报警功能。。。


马铃鼠 发表于 2015-4-3 23:48

这个是图标和字模,需要的下载。附带画的时候参考的原图,原图来自维基百科。

马铃鼠 发表于 2015-4-3 23:57

12864能直接显示的信息还是太少了,想着用画图配合字模让其显示8行字符,但还没有成功。。。。。。

xinghai 发表于 2015-4-4 00:10

厉害厉害,不顶不行。

linkage 发表于 2015-4-4 00:51

Now we have the RA, DEC and HA for the object, and the Latitude (LAT) of the observing site, the following formulas will give us the ALT and AZ of the object at the current LST.

sin(ALT) = sin(DEC)*sin(LAT)+cos(DEC)*cos(LAT)*cos(HA)

ALT = asin(ALT)

               sin(DEC) - sin(ALT)*sin(LAT)
cos(A)   =   ---------------------------------
                   cos(ALT)*cos(LAT)

A = acos(A)

If sin(HA) is negative, then AZ = A, otherwise
AZ = 360 - A

linkage 发表于 2015-4-4 00:56

http://upload.wikimedia.org/math/a/9/8/a984ffed25e734840873c700eecf5877.png
http://upload.wikimedia.org/math/8/9/8/8984741556243b07b8d052486a76118c.png

linkage 发表于 2015-4-4 01:01

1.确实应该保存J2000坐标,用的时候再转换为JNow坐标。
2.星体库可以不用太大,弄到5等星(大概300多个),深空目标可以只放入M天体。
3.手柄坐标不用实时刷新,可以相对慢一点,比如2s或者5s才刷一次。

马铃鼠 发表于 2015-4-4 01:21

linkage 发表于 2015-4-4 01:01
1.确实应该保存J2000坐标,用的时候再转换为JNow坐标。
2.星体库可以不用太大,弄到5等星(大概300多个),深 ...

嗯,之前是这么想的,但是看了Jnow的算法之后,放弃了……太复杂了影响因素太多,每颗恒星的自行都不同,还有最关键的是,上面的算法没有考虑大气蒙差,地角度的恒星高度角误差可能有几角分,这个差不多就是Jnow和J2000的差别了……
还有就是行星的位置计算,月球的位置计算,都是在变换坐标,还没来得及推算……

马铃鼠 发表于 2015-4-4 01:26

linkage 发表于 2015-4-4 00:56


儒略日没这么算,用了《天文算法》书中的公式,更适合计算机计算,不过都是等价的公式

马铃鼠 发表于 2015-4-4 01:29

linkage 发表于 2015-4-4 00:51
Now we have the RA, DEC and HA for the object, and the Latitude (LAT) of the observing site, the fol ...

这个算法就是球三角的边余弦公式的变形,很好理解,主要是结果区间的判定了,还有就是单片机的执行能力…

linkage 发表于 2015-4-4 01:34

本帖最后由 linkage 于 2015-4-4 01:39 编辑

马铃鼠 发表于 2015-4-4 01:21
嗯,之前是这么想的,但是看了Jnow的算法之后,放弃了……太复杂了影响因素太多,每颗恒星的自行都不同, ...
1.其实问题不大,alt和az仅供参考而已,并且也仅仅是显示。大不了精确到0.1度,误差不是那么容易看出来。
2.计算困难的话,只能用J2015啦,用几年再换吧{:2_187:}

linkage 发表于 2015-4-4 01:40

蒙差之类的,似乎也可以不用考虑吧?
毕设有这么多要求吗?

CXIA 发表于 2015-4-4 02:05

如果屏幕光改成红色的就更加完美了。

庄子逍遥游 发表于 2015-4-4 07:29

马铃鼠 发表于 2015-4-4 01:29
这个算法就是球三角的边余弦公式的变形,很好理解,主要是结果区间的判定了,还有就是单片机的执行能力… ...

哥你真是太厉害了!从第一次认识开始就第一次膜拜:(话说我现在改行计算机都没有那么好的编程思维和基本功),童哥加油!

msloo 发表于 2015-4-4 08:48

厉害,高材生。我等文科狗只够用你们做好的成品

天文之乐 发表于 2015-4-4 08:57

非常强大啊

马铃鼠 发表于 2015-4-4 10:28

CXIA 发表于 2015-4-4 02:05
如果屏幕光改成红色的就更加完美了。

红屏很贵,也卖的少,现在只是实验阶段,以后再换

马铃鼠 发表于 2015-4-4 10:30

linkage 发表于 2015-4-4 01:40
蒙差之类的,似乎也可以不用考虑吧?
毕设有这么多要求吗?

没,只是发现了这个误差的存在,不知道成品都是怎么处理的。

马铃鼠 发表于 2015-4-4 10:31

庄子逍遥游 发表于 2015-4-4 07:29
哥你真是太厉害了!从第一次认识开始就第一次膜拜:(话说我现在改行计算机都没有那么好的编程思维和基本 ...

我也只是现学现用的了,代码逻辑还在优化

马铃鼠 发表于 2015-4-4 10:33

linkage 发表于 2015-4-4 01:34
1.其实问题不大,alt和az仅供参考而已,并且也仅仅是显示。大不了精确到0.1度,误差不是那么容易看出来。
...

alt还有个作用就是筛选星表,不过可以允许一定的误差
页: [1] 2
查看完整版本: GOTO手柄之——电子天文“百年历”!