牧夫天文论坛(中国最早的天文论坛,致力于天文和望远镜的科普交流平台)

 找回密码
 加入牧夫(注明天文爱好者)

QQ登录

只需一步,快速开始

蔡司光学大连望远镜
爱牧夫天文微店有新品牧夫纪录片牧夫20年历
牧夫文化衫
查看: 647|回复: 12

[自制DIY] 自制基于arduino due的经纬仪(DOB)电跟系统

[复制链接]
发表于 2019-6-26 17:52 | 显示全部楼层 |阅读模式
微信图片_20190626020809.jpg

先介绍一下这个经纬仪电跟的功能吧:
    它内建数据库,包含有全部梅西耶天体,部分容易观测的NGCIC目标,一些重点恒星一共443条数据,通过编码器旋钮可以很方便的选择目标进行跟踪,也可以输入自定义目标,观测位置通过GPS自动获得,时间还是需要手动输入的,不过输入一次即可,它通过计算目标在前后两个时间点的位置差,来驱动步进电机,带着经纬仪两轴实现跟踪功能。
     由于系统随时都在计算位置差,在切换目标的时候也是如此,所以这套系统其实自带了goto,只不过没有变速的话,这样goto起来非常耗时,所以我让它默认忽略掉了切换目标之后产生的位置差,等于把一个goto阉割成了电跟哈哈哈。。。
    然后再来看看外观,在这个光秃秃的面板上,左下角是信息显示屏,它上面那个圆球是自定义目标切换开关,右边那个旋钮是个编码器,可以转动也可以按下,作为一个开关使用。右侧有两个RJ11接口,链接高度角和方位角步进电机。盒子上方那面有个GPS天线和电源接口,左边那面有一个电源开关。
    在第一次开机之后,会搜寻卫星信号,可能要等几分钟,当GPS正常工作后,首先要长按编码器按钮,输入当前的年月日时间,这个只需要输入一次,系统默认是对M1进行跟踪,不需要任何操作跟踪就已经开始了,除非你双击编码器按钮,此时跟踪暂停,进入目标选择界面,这个时候你需要对照一个表格,输入你想要跟踪目标前面的序号,然后它就开始跟踪了,或者按一下屏幕上边的按钮,进入自定义目标输入界面,输入天球坐标,它就能跟踪任意你输入的目标了,这就保证了系统的自由度,不只局限于内存中的那几百个目标。所有的输入,在切换到最后一位之后即代表确认,单击编码器按钮可以切换输入的项目。
    显示界面方面,系统第一行显示当前日期和时间,第二行显示当前位置的经纬度,环境温度,第三行显示目标的高度角,方位角,方框里面,最左边是目标名称,中间是差值跟踪的次数,右边分别是高度角方位角电机每次差值后折合运行的步数。


微信图片_20190626153603.jpg

微信图片_20190626153628.jpg

微信图片_20190626153639.jpg

微信图片_20190626153620.jpg

   其实这套系统在5月我就已经做好了,进行了十多次精度测试,3次外出观测测试,配合之前做好的DSC,效果非常好,只是同步带和齿轮配合不太牢固,会有些误差。


微信图片_20190626020755.jpg

微信图片_20190626020811.jpg

微信图片_20190626153649.jpg

微信图片_20190626020758.jpg

微信图片_20190626020803.jpg

   白天用M101做测试,跟踪29分钟,经纬仪两轴误差分别为10'58.8"7'12",没有出uw6125倍下的视野。其实对于经纬仪低倍率目视来说,这样的误差还可以接受,只要目标不跑出视场就OK啦。
       最初没有外壳的时候,这些电子设备的光污染还是对观测有很大影响的,后来装进了3D打印的外壳,就好了很多。虽然依旧很丑吧,而且现在我的经纬仪被各种零件包裹,搬运的时候也要比之前小心得多。。。
   实际使用起来,是这样的:
1.摆好三脚架的腿,调整好高度
2.用水平泡调整脚架水平度
3.安装经纬仪上半部分
4.安装望远镜
5.装上激光目镜调整双筒两边光轴
6.换上目镜随便找个天区对焦,调合圆(合像)
7.连接两根电源和两根电机线
8.打开DSC,手机开启skysafari并连接,进行一星校准
9.打开电跟系统,搜星直到开始跟踪默认目标M1
10.在电跟系统里输入要观测的目标,开始跟踪
11.在skysafari里找到这个目标,并把望远镜指向它,锁紧经纬仪两轴

至此就可以正式开始观测了,变换目标之前也是先在电跟里切换目标,松开经纬仪两轴,然后再在手机里找到目标,把望远镜推过去,锁紧。。。

从到达观测地,到正式开始观测,一般需要15分钟来做前面这些准备工作,调脚架水平是最慢的,因为我那木头架子不是很好调节,要反复的试


    上上次观测,多亏了这套电跟,我在10分钟里,三次看到飞机穿越木星星系,看到飞机发动机热气流把木星和它的卫星扭曲的样子,特别壮观,而观测木星的几次间隙里,我还可以用小双筒巡天,而不用担心在牛双目镜里丢失木星。之后的观测,我要重拾画笔,继续练习天体手绘,电跟的作用就能发挥出来了,它可以解放我的双手,让我专心于绘画。

IMG_5534.jpg

IMG_5608.jpg

上次带老婆去看满月。。。月光把地面照得很亮,uw6自身的光衰减加上中灰滤镜,让观测满月舒服了很多,而且相当壮观



==================================================================================


   本项目源自我关于电子寻星的设想——push to
   最初我想做成类似于手机星图软件里,有个箭头引导去寻星的效果,但要求不依赖手机,想想有些复杂,后来就简化成了用电子陀螺仪显示望远镜的俯仰角,方向角,就如下图所示:


IMG_20180109_124320.jpg

   这样,我只要知道目标的方位角,高度角,推动望远镜到目标角度即可,这个数据在很多软件里是很容易查到的。
   但我做出成品之后,试用了几次,效果都不好,误差有时高达2度,而且校准起来也不容易,要先保证水平,再拿着外壳转几圈。。。我觉得这种精度,用在无人机上,还能接受,但对寻星来说,就是自找麻烦。



IMG_20180128_003125.jpg

IMG_20181201_170133.jpg

IMG_20181128_215208.jpg



   后来我们的牛双大佬,老张@zhangshihan 提出DSCdigital setting circles)方案,就是用编码器作为传感器,直连经纬仪或者赤道仪的两个轴,通过无线连接到手机软件(skysafari),在软件里可以把经纬仪或者赤道仪旋转的角度转换成准星的移动,因此,如果校准得当,准星在软件里指向的目标,就是目镜中心看到的目标。编码器把一个360度的圆周分成了8000多等分格,这样编码器每移动一格,就相当于转动了360(度)*60(分)*60(秒)÷8000=16.2角秒,这也是编码器的精度,我最高倍数的目镜是uw6,视场66度,对于小黑主镜,放大倍率是125倍,那么搭配起来后的实际视场就是66÷125=0.528度,相当于1928角秒,远高于编码器分辨率,所以在这种情况下,用DSC方案,理论上是没有问题的。
   好在我全都在arduino上编程,各种传感器,模块,都有案例可以学习,编码器的上手也很快,三下两下就搞定了,如下图:


IMG_20190118_220103.jpg

IMG_20190118_220116.jpg

IMG_20190305_020253.jpg


   其实DSC电路很简单,一个arduino一个蓝牙模块,两个编码器,一个开关。反而是安装方式需要费点心思,对于我这种经纬仪,不好把编码器装到里面去,就只能装在外面,用皮带带动经纬仪主体和编码器转盘,要计算一下这两个圆的直径比例,如果是DOB就简单多了。


IMG_20190305_020223.jpg

IMG_20190305_020239.jpg


IMG_20190308_013442.jpg


   经过几次观测的检验,证明这DSC还是非常好用滴!只要经纬仪足够水平,进行1星校准就成了,校准超级方便,但是怎么看经纬仪是不是水平呢?我买了个神器如下图:


微信图片_20190626002308.jpg


   这个水泡精度相当高,DSC在没有水平校准之前,距离校准星方位角90度以上的目标就会有误差,水平校准之后,可以保证距离校准星方位角180度内的目标可以准确的被找到,其实在观测中,我经常用较亮的星进行校准,可以保证目镜中心的目标与星图中的目标始终保持精准对应。
   本来我以为做到这样就可以了,没想到老张说,如果能加上电跟,那就更好了,所以我就又开始琢磨,这经纬仪的电跟要怎么做呀,肯定不像赤道仪那么简单吧,会有场旋,这就够让人头疼的,其实我买个手柄,可能也能解决这个问题,但谁让咱喜欢折腾呢,我开始构思软件功能,如果skysafari可以通过协议把所选择目标的高度角,方位角传输出来,就很简单了,也许goto模式能做到,但在pushto模式下,貌似没法实现这样的功能,于是我决定电跟系统与手机软件分离开来,在手机里选择目标之后,再去电跟系统里输入要跟踪的目标,于是就有了下面这个流程图:



微信图片_20190626004503.png


   这还是最初的设想,后来有了一些改动,就没有更新流程图了,但大体是这个意思,因为我也不知道厂制的经纬仪电跟用的是什么原理,于是我先假设了这种计算两个时间点前后位置差的方式来实现跟踪,一开始我也不知道效果会怎么样。
   同时,我还预想了这个系统里应该包含的硬件,如下图:

微信图片_20190626005022.jpg


   对于买零件我是很兴奋的,设想好之后就把东西给买了,其实后来我根本就没用到TF卡模块,系统内建的数据库非常的精炼,arduino我用的是国产的DUEramrom都很奢侈,于是就省去了TF卡。
   到此为止,我只是觉得可能高度角那个轴做差值跟踪,方位角用普通电跟就可以了,这是长期关注南天所产生的错觉,后来在验证天球坐标转换地平坐标的公式时,我才意识到,目标在不同天区,其高度角和方位角,都有着不一样的变化趋势。
   后来,我断断续续用了一个月的时间,寻找坐标转换公式,数据库里只会给出天球坐标,我需要把它转换成地平坐标,我搜了百度文库,有一篇pdf解释了这类公式的各种细节(https://wenku.baidu.com/view/fb26c2b4a1116c175f0e7cd184254b35effd1a64.html),但作者写得不够详细,有各种坑等着我去跳,其实不光是我,估计你们看到那堆公式也会头疼,变量还那么多,公式里面套公式是最烦的了,所以我很没耐心,拿来就去验证,结果却相差甚远,于是我给了他个差评,就去搜国外的网站:

http://www.stargazing.net/kepler/altaz.html#twig09
https://ww2.mathworks.cn/matlabcentral/fileexchange/27071-conversion-from-right-ascension-declination-to-altitude-azimuth-in-matlab
进去后点击“functions”

这两个网站上给出的计算公式,跟百度里的粗看下来有很大差别,我琢磨了好几天之后才能心平气和的看明白它们分别都是干嘛用的,国外网站公式中的参数单位与百度那个不一样,而且有些系数没有计算过程,直接给的结果,但是计算出来的结果还需要进一步的判断,而百度这篇文章里对结果的判断写得不是很明白。后面我会把傻瓜式的公式摆出来,避开各种大坑的那种哈哈。

   搞明白了坐标转换,我就开始着手准备软件方面的素材了,把硬件全部罗列出来有一个好处,就是你可以逐一攻破,即使整个系统看起来很复杂,但把它拆解成一个个独立模块后,还是很简单的。我根据这些周边硬件,设计了一系列的实验,如下图:

微信图片_20190626012148.png

   一开始我没设计这么多,比如实验2里,限定编码器滚动数字的范围,实验3,两个I2C模块共同运行的问题,实验9,实验10,都是在实践过程中出现了问题,或者有了新想法之后扩展出来的。完成一个实验,就把项目文件的名字写在后面,从110到最终完成,我又用了1个月的时间。

   编程方面,尤其是对字符串的编辑,我反复学习了老外的项目经验,很受启发,如下图:

6017701494051251113.jpg

   我的极简练的星表数据库也来自于这个项目,这位大牛人自制触屏无线goto,代码很复杂,我估计是没那个耐心做他这玩意儿。。。虽然他完全开源了

   给你们看看我学习时做的笔记:

微信截图_20190626015032.png

   我只挑对这个项目有用的部分学习,其它模块的案例也是这样,所以虽然我做了看似很复杂的一套系统,其实我并不完全掌握arduino编程,好在arduino很容易上手,它费半天劲把复杂的代码黑盒化,看似绕了一个大圈,却能让更多像我这样,懂一点编程,又不愿意从头到尾学一遍的人,开心的玩上arduino,这就是它最牛的地方。

微信图片_20190626153644.jpg

微信图片_20190626153610.jpg

微信图片_20190626020819.jpg

微信图片_20190626020813.jpg

============================================================================


   下面是天球坐标转换地平坐标的公式,我只对变量进行说明,整个公式或者专业名词的含义,还请查阅资料,推荐看看《球面天文学》这是我接下来要攻读的一本书。


公式1:
t=100/15+n*24/365.2422+T-(sj-j)/15-RA
t=天体的时角,单位为小时
n=当天在全年中的日序  闰年229天,平年228
T=观测时间  例如21.5h,就是2130
sj=观测地时区经度,北京是+120
j=观测地经度,我的是116.397
RA=目标的赤经(J2000),例如天狼星就是6.75225h(单位小时)
**15的项都是要把角度单位转换成小时单位,因为t的单位是小时
**t既然单位是小时,就要小于24,所以计算出来的t如果大于等于24,就要进行这样的计算t=t-24,一直减到t<24为止。


公式2:
ALT=asinsinLAT*sinDEC+cosLAT*cosDEC*cost*15))
ALT=目标高度角
LAT=观测地的维度,计算的时候要把分秒都换算成度数
DEC=目标赤纬
**单位都为度
**但是计算机的三角函数计算,用的都是弧度,所以在程序里,比如要计算正弦,你得这样写:sin(LAT*PI/180),把角度转换成弧度,当然你要事先定义一下PI是什么,在excel里就不用单独定义PI了。
**最后别忘了反正弦的计算要*180/PI,把弧度转换回角度。

公式3:
AZ=acos((sin(DEC) -sin(ALT)*sin(LAT)/cos(ALT)*cos(LAT)
AZ=目标方位角
**如果sint*15)是负数,AZ就是目标的方位角,如果是正数,目标的方位角为:AZ=360-AZ
**上面这些公式可以顺利的应用在北半球,东经区域内,南半球,西经,需要更改一些变量的符号。


评分

参与人数 1牧夫币 +20 威望 +1 收起 理由
最后的恐龙 + 20 + 1 很给力!

查看全部评分

发表于 2019-6-26 19:58 | 显示全部楼层
长文巨作,先顶后看
回复 支持 反对

使用道具 举报

发表于 2019-6-27 07:53 来自手机 | 显示全部楼层
厉害,我做了rduinoscope完全成功,

点评

牛啊!那个项目真是造福DIY和天文爱好者  详情 回复 发表于 2019-7-2 11:50
回复 支持 反对

使用道具 举报

发表于 2019-6-28 11:24 | 显示全部楼层
我以前做类似的东西的时候,直接用的维基百科上的公式。

点评

对诶,我都没想到维基百科  详情 回复 发表于 2019-7-2 11:56
回复 支持 反对

使用道具 举报

发表于 2019-7-2 01:17 | 显示全部楼层
又一个DIY牛人!果断收藏。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-2 11:50 | 显示全部楼层
fsclub 发表于 2019-6-27 07:53
厉害,我做了rduinoscope完全成功,

牛啊!那个项目真是造福DIY和天文爱好者
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-2 11:56 | 显示全部楼层
蝶梦 发表于 2019-6-28 11:24
我以前做类似的东西的时候,直接用的维基百科上的公式。

对诶,我都没想到维基百科
回复 支持 反对

使用道具 举报

发表于 2019-7-2 14:00 | 显示全部楼层
好赞的设计,最近也开始在琢磨 树莓派。

点评

树莓派出新版了,可以用来做导星电脑  详情 回复 发表于 2019-7-2 14:32
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-2 14:32 | 显示全部楼层
xiongyulei 发表于 2019-7-2 14:00
好赞的设计,最近也开始在琢磨 树莓派。

树莓派出新版了,可以用来做导星电脑

点评

你说的版本是?  详情 回复 发表于 2019-7-2 15:32
回复 支持 反对

使用道具 举报

发表于 2019-7-2 15:32 | 显示全部楼层
sysydf 发表于 2019-7-2 14:32
树莓派出新版了,可以用来做导星电脑

你说的版本是?

点评

是树莓派4  详情 回复 发表于 2019-7-2 22:14
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-2 22:14 | 显示全部楼层

是树莓派4
回复 支持 反对

使用道具 举报

发表于 2019-7-3 07:59 来自手机 | 显示全部楼层
顶大佬!现在真是很少出现这么有养分的文章了!实属不易!
回复 支持 反对

使用道具 举报

发表于 2019-7-4 08:43 | 显示全部楼层
看到了一只猫:铲屎的,又在瞎折腾了
回复 支持 反对

使用道具 举报

本版积分规则

QQ|论坛广告版面招租|简版|手机版|爱牧夫天文淘宝店|牧夫天文论坛 ( 辽ICP备18003274号 本站官方联系电话:+86-411-8424-1208,186-零零贰贰七七九九,联系QQ:224-27993 )

GMT+8, 2019-7-24 02:49 , Processed in 0.148591 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表