Microduino 自动导星经纬仪/zh

来自Microduino Wikipedia
Radiumray9@gmail.com讨论 | 贡献2019年3月18日 (一) 10:20的版本 自制牛顿反射式天文望远镜
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索


概述

  • 项目名称:Microduino自动导星经纬仪
  • 目的:本教程将教大家如何使用Microduino通过连接stellarium软件获得天体数据控制经纬仪指向指定的天体。
  • 难度:中等
  • 耗时:12小时
  • 制作者:Microduino Studio-ray

材料清单

模块 数量 功能
Microduino-Core+/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-GPS/zh 1 获取经纬度,格林威治时间
Microduino-Cube-S1/zh 1 OLED扩展板
Microduino-OLED/zh 1 显示
Microduino-Robot/zh 1 控制步进电机
Microduino-Stepper/zh 2 步进电机驱动

由于使用的Core+作为核心板,所以Microduino-GPS模块需要改跳线,具体修改方法见:

Microduino-GPS/zh

改跳线

  • 其他硬件设备
USB数据连接线 1 数据传输
步进电机 2 调整高度,方位
面包板跳线 1 连接电路
指北针 1 确定经纬仪角度
步进电机手轮 2 位置固定

stellarium软件使用

简介:

Stellarium 是一款免费开源的GPL(自由软件基金会GNU通用公共许可证)软件,它使用openGL技术对星空进行实时渲染。软件可以真实地表现通过肉眼、双筒望远镜和小型天文望远镜所看到的天空。Stellarium还被应用于天象馆中。不同编译版本的 Stellarium 可以在不同的操作系统下运行,目前支持的操作系统包括:Linux/Unix、Windows 和 MacOS X。

总的来说Stellarium可以模拟天上的星星的运行轨迹,星表中 99% 的恒星数据来源于 NOMAD (美国海军天文台整理的天体测量数据集第一版)星表,而常见的较亮恒星的资料则来源于 Tycho2 和 Hipparcos(它也是0.8版中的主要数据来源)星表,它们包含有120000颗恒星,通过扩展星表甚至可以将显示星数提升到了2.1亿。可以用作学习夜空知识的教具,还可以作为天文爱好者星空观测的辅助工具,或者仅仅是满足一下好奇心。由于其高质量的画质,一些天象馆将 Stellarium 用在了实际的天象放映中。有些天文爱好者还使用 Stellarium 绘制他们文章中用到的星图。

打开Stellarium,会显示默认地址的星空,如果如果默认地址当地时间是白天,是看不到什么星星的,你可以选择去掉大气层。

选择星座连线或者星座标示,会看到星座连线和名称

如果你想看当前所在地平线一下的星空可以选择去掉地面

也可以选择夜视选项看看效果

天文常识概念

经纬度:

在地球上如果我们要确定一个位置,我们需要知道经纬度,这个GPS可以告诉我们一个大致的经纬度,然后如果我们要在宇宙中定位,我们就需要知道天球坐标系。

天球坐标系有五种:

  • 地平坐标系:由高度(h/Alt)和方位(A/Az)组成
  • 第一赤道坐标系(时角坐标系):由赤纬(DEC)和时角(HA)组成
  • 第二赤道坐标系:由赤纬(DEC)和赤经(RA)组成
  • 黄道坐标系:由黄纬和黄经组成
  • 银道坐标系:由银纬和银经组成

这些坐标系的详细说明网上可以找到,这里就不多说了,这有个参考地址:

[天文abc•天球与天球坐标(上)]

[天文abc•天球与天球坐标(下)]

实现步骤说明:

许多初级天文爱好者更偏向于使用经纬仪,而且Microduino控制两个步进电机,机械结构是一个垂直夹角相对赤道仪要容易一些。

所以,我们用Microduino控制步进电机实现的是一个经纬仪。

具体操作是一个天文爱好者用Stellarium观看星空,他发现一个恒星,比如天空中最亮的那颗 天狼星,用鼠标点了一下天狼星,此时屏幕左上角会出现天狼星的信息,如下图:

PointTianLangStarShowInfo.png

此时你按下Ctrl+1组合键,Stellarium会把天狼星的赤经(RA),赤纬(DEC)通过LX200协议发送给Microduino。

Microduino接收到RA,DEC数据后需要转换成地平线坐标系的方位(Alt),高度(Az),从而控制步进电机。(目前,Stellarium只能发送RA,DEC到Microduino,虽然屏幕左上角已经精确的显示了方位,高度值了:-))

从赤道坐标系(RA, DEC)转换为地平线坐标系(Alt, Az)是一项比较复杂的算法,下面会一步步的解释此算法,如果你有赤道仪就不用进行转换了,但是现在我们实现的是经纬仪,所以请看下面:

首先转换算法我是参照:[Converting RA and DEC to ALT and AZ] 来实现的

此算法不仅仅用来转换坐标系,还可以体验星空的过去和未来,因为天体的赤道坐标系是相对固定的,你如果知道了一个天体的赤道坐标系通过此算法可以知道什么时间,什么位置你头上的哪个方向是什么星星。

比如:天体M13的RA 和 DEC 是:

           RA  = 16 h 41.7 min
           DEC = 36 d 28   min

你就可以知道比如1998年8月10日23点10分6秒,和2020年4月18日9点20分54秒,天体M13在你头上的什么位置,是不是很有意思!

具体算法是这样的:

void convert_RA_DEC_to_AZ_Alt() {
  getCurrentGPS();
  getRADECDegree();
  getDaysBeforeJ2000();
  getLST();
  getHA();
  caculateAltAz();
}

代码里可以体现基本步骤:

  • getCurrentGPS();//首先通过Microduino GPS模块获取你所在经纬度。

北纬为正数,南纬为负数,东经为正数,西经为负数,北京的经纬度大概是东经116. 3”北纬39.9”,所以都是正的。

  • getRADECDegree();//把获取来的赤经,赤纬传换成角度的小数精确值。
void getRADECDegree() {
	//get RA Degrees which is hours *15, one hour=15 degrees
	RADegree=(atof(RAHH)+(atof(RAMM)/60)+(atof(RASS)/3600))*15;
	//getDEC Degree
	DECDegree=atof(DECDeg)+(atof(DECMM)/60)+(atof(DECSS)/3600);
	if(DECSign[0]=='-') {
	DECDegree=0-DECDegree;
	} 
}


  • getDaysBeforeJ2000();//计算此时此刻与儒略纪元的差值

J2000.0纪元在天文学上使用。前缀"J"代表这是一个儒略纪元法

首先计算此时的格林威治时间,并判断今年是否是闰年,然后通过下表来计算另外两个参数:

表A:计算当下月份的第一天与儒略纪元的天数差值

月份 非闰年 闰年
一月 0 0
二月 31 31
三月 59 60
四月 90 91
五月 120 121
六月 151 152
七月 181 182
八月 212 213
九月 243 244
十月 273 274
十一月 304 305
十二月 334 335

表B:计算当下年的第一天与儒略纪元的天数差值

天数 天数
1998 -731.5 2010 3651.5
1999 -366.5 2011 4016.5
2000 -1.5 2012 4381.5
2001 364.5 2013 4747.5
2002 729.5 2014 5112.5
2003 1094.5 2015 5477.5
2004 1459.5 2016 5842.5
2005 1825.5 2017 6208.5
2006 2190.5 2018 6573.5
2007 2555.5 2019 6938.5
2008 2920.5 2020 7303.5
2009 3286.5 2021 7669.5

d=UTHoursPercentage+tableADays+day+tableBDays;

最后得出需要的值,代码中用变量d表示。

  • getLST();得到当地的恒星时

LST(Local Siderial Time)

公式:LST = 100.46 + (0.985647 * d) + Longitude + (15*UT);//UT是格林威治时间

  • getHA();//计算时角

HA = LST - RADegree; //时角=当地恒星时-赤经度数

  • caculateAltAz();//计算方位和高度

最复杂的一部分需要用到咱们高中学的三角函数:

    • 令δ为赤纬,H 为时角.
    • 令φ为观察者所在的地理纬度.
    • 令Alt为高度角,Az为方位角.那么转换等式为:


代码如下:

 Alt=rad2deg(asin(sin(deg2rad(DECDegree))*sin(deg2rad(Latitude))+cos(deg2rad(DECDegree))*cos(deg2rad(Latitude))*cos(deg2rad(HA))));
 Az=rad2deg(acos((sin(deg2rad(DECDegree)) - (sin(deg2rad(Alt))*sin(deg2rad(Latitude))))/(cos(deg2rad(Alt)) * cos(deg2rad(Latitude)))));

最后:

 //if sin(HA) is positive, the angle AZ is 360 - AZ
 if (rad2deg(sin(deg2rad(HA))) > 0) {
   Az= 360 - Az;
 }

如果sin(HA)是正数,AZ=360-Az

最终算出了方位和高度值。

原理图


程序

[MicroduinoTelescope]

调试

步骤一:如何与Microduino建立通讯连接

首先Stellarium可以连接上你买的赤道仪,赤道仪通过Stellarium传过来的天体赤道坐标系坐标来沿着赤经和赤纬旋转指向你想要观测的天体,Stellarium和赤道仪可以通过像[LX2000]这样的通讯协议来通讯。

赤道仪一般都很贵的,如下图的样子:

Microduino也是可以通过LX200协议与Stellarium通讯的,以下是Stellarium与Microduino连接的配置步骤:

首先,鼠标移到左侧会显示功能选项:

先改一下你的所在地,右上角你可以选择任何国家的城市,左下角会显示经纬度信息,如果你想选的更加精确可以直接改经纬度,右下角给经纬度取个名字就成了。

StellariumMicroduinoSetup2.png

接下来连接你的Microduino,选择设定会出现下图对话框,选择望远镜控制->插件->勾选 启动时加载。重启Stellarium后进入同样的对话框就可以点击 配置 选项了。

StellariumMicroduinoSetup3.png

在接下来的对话框中选择添加,进入配置望远镜对话框,按照下图所示勾选:

StellariumMicroduinoSetup4.png

确定后会出现类似下图所示,此时用USB连接上你的Microduino,重启Stellarium

Microduino通过USB数据线连接电脑,如果显示已连接,说明连接成功:


步骤二:下载代码,打开Stellarium,等待几秒钟,microduino上的LED灯会闪烁,应该在星空图中能看到你的为microduino起的望眼镜名字,程序中默认指向天狼星。

如果你此时此刻是白天干这件事,可能会看不到microduino指向天狼星,是应为在中国白天,天狼星是在地球背面,你可以设置去掉地面和大气层,鼠标拖拽在整个天球宇宙中找找,应该能找到。

找到后,选择一个天体,按住组合键Ctrl+1,此时OLED上会显示此颗天体的赤道坐标和对应的地平线坐标。

OLEDShowAltAz0.jpg
OLEDShowAltAz1.jpg

步骤三:按照原理图连接两个步进电机,控制方位的步进电机初始位置指向北,可以用一个指北针来参照。

再找一颗地平线上的星星,按住Ctrl+1看看是否经纬仪指向了你要找的那颗星星。

可以从OLED中看到Alt,Az的值跟Stellarium的左上角显示的值基本一致(Stellarium其实已经有了转换功能,但是只能传送赤道坐标,很气人)

自制牛顿反射式天文望远镜

望远镜原理和分类:

  • 折射式
  • 反射式
  • 折返式

本例实现第二种,牛顿反射式天文望远镜:


物料清单:

首先确定你要做的望远镜的口径和反射焦距,此例中是114mm口径,反射焦距是500mm的牛反式天文望远镜。

如果你要定制更大口径的望远镜,有一款mynewton的软件可以帮你计算所需物料的尺寸。

物料 数量 功能
114500主镜+副镜 1 反射光线
114副镜座 1 支撑副镜
114副镜十字支架 1 支撑副镜
110口径PVC排水管 1 镜筒中间不封
110口径PVC伸缩节排水管 1 可改装成主镜座
110口径PVC排水管异径三通 1 副镜与目镜调焦座连接
PVC排水管胶水 1 固定各个组件
加长校准牛反目镜 1 调焦,校准
牛反式望远镜调焦座 1 目镜调焦
目镜 1 放大从副镜反射的光线

全部材料摆在一起:

TelscopeDIY1.jpg

首先把主镜固定在110口径PVC伸缩节排水管中,注意不要给主镜施加太大的压力

TelscopeDIY2.jpg

天文望远镜主镜对精密度要求很高,哪怕重力对主镜变形都会有影响

TelscopeDIY3.jpg

主镜和副镜

TelscopeDIY3 1.jpg

把110口径PVC排水管锯成合适长度的管子,使得主镜和副镜之间的距离在500mm。

安装上排水管异径三通,锯下来的排水管和目镜从镜筒里往里看是这个样子的

TelscopeDIY5.jpg

安装副镜和支架:

TelscopeDIY6.jpg

调焦:

关于如何星点校准光轴:这里有个网上参考资料[星点校准光轴]

调好焦距后,用胶水把PVC的各个部分固定牢靠。

为了避免镜筒壁内反光可以贴上植绒皮。

整体看起来像这样:

最后,本例唯一没有做的就是自动导星仪的骨架轮廓使其足够牢固可以支撑住牛反望远镜,那就留给大家发挥吧。

结果

Microduino可以通过Stellarium传来的星星赤道经纬坐标来控制步进电机实现自动导星功能。

注意问题

控制方位的步进电机原点指向北

经纬仪的机械结构要牢固

主镜和脆弱,尽量不要给主镜受力

视频