树莓派+望远镜:如何用 Wi-Fi 实现远程天文观测?
- 科技创新
- 2025-06-27
- 31477
我非常热爱天文学和天文摄影。我确信,和我一样,所有业余天文学家都希望拥有一个价格实惠的个人天文台,以便拍摄壮丽的宇宙景象。
天文摄影,尤其是深空摄影,对跟踪精度(以抵消地球自转)和调焦精度要求极高。一台像样的赤道仪加上导星器可以解决跟踪问题,而电动调焦器则能实现高精度的调焦。然而,这些设备都相当昂贵!对于好的赤道仪和导星器,确实没有可靠的替代品,但电动调焦器相对容易以极低的成本自制。
此外,能够远程控制赤道仪也会非常方便。我来自中国,目前在美国上大学。如果我的高中天文学老师能够远程访问我的望远镜,并向她的学生展示行星或星团的实时图像,那就太好了。虽然有一些远程控制望远镜的解决方案,但我并不满意。
因此,我启动了这个概念验证项目,允许用户通过网页远程控制赤道仪、望远镜的调焦以及相机。
简介:
你可以观看上面的演示视频,了解项目的工作原理。该项目由四个部分组成:
电动调焦控制
微控制器通过SynScan串行通信协议与赤道仪通信
微控制器通过自定义的串行JSON字符串协议与其他设备通信
一个网页作为控制赤道仪、调焦器和相机的界面
在本教程中,我将引导你完成制作调焦器的过程,并运行我的代码来控制望远镜。
第一步:所需材料
我根据自己拥有的设备制作了这个项目。如果你拥有与我相同的设备,可以按照我的确切步骤操作;但如果没有,你可能需要调整一些东西或编写自己的代码来使其工作。
工具:
一套内六角扳手
卡尺
手钻
访问3D打印机的权限
一款CAD软件(我使用了Fusion 360学生版)
你可能已经拥有的天文设备:
一台带有不错手动调焦器的望远镜(我使用的是Sharpstar CF90-II)
一台带有SynScan v3或v4的信达赤道仪(我使用的是EQ6-pro,带SynScan v4)
一台佳能单反相机(我使用的是6D,尼康相机不适用,因为gphoto2无法控制尼康相机的B门模式)
部件:
树莓派(用于远程单反相机控制,我使用的是rpi2)
树莓派的WiFi加密狗(除非你使用的是rpi3)
Teensy3.2(用于与赤道仪和其他设备通信)
长质量好的USB micro线缆*2(用于为rpi和Teensy供电)
长质量好的USB mini线缆(用于你的单反相机)
RJ-11插座和线缆(连接Teensy与SynScan)
Max232芯片(将SynScan的RS-232电平转换为Teensy的TTL电平)
10 uf电容*4(与Max232芯片配合使用)
1602a LCD屏幕
28YBJ-48步进电机
ULN2003步进电机驱动板
MXL 45齿同步带轮(替换调焦旋钮)
MXL 15齿同步带轮(连接到步进电机)
同步带
按钮*3(控制调焦器)
电位器*3(改变步进电机速度并调整LCD的亮度/对比度)
#6螺丝和螺母(安装3D打印的调焦器)
面包板*2
大量跳线
5V2A电源(用于rpi)和12V 2A电源(用于赤道仪)
注意:
如果你没有单反相机,可以跳过与之相关的部件,只制作赤道仪控制器。
Max232电容的值并不那么重要,我看到过几个使用不同值的电路图。只要不是太小,就没问题。如果你有开发板,那就更好了。
购买同步带轮时,请确保内径与你的调焦器和步进电机匹配。
不要购买长开口的同步带并尝试将其粘成环形。我试过这样做,但什么都不管用。我是从McMaster-Carr购买的。
一条质量好的USB线缆可以节省你数小时的调试时间。
我使用了Teensy3.2微控制器。它与Arduino兼容,但功能更强大。我的一些代码是Teensy特有的(例如IntervalTimer)。如果你想在Arduino上使用这段代码,需要进行一些修改。
第二步:设计电子调焦器
总体思路是制作一个设备,让电机代替手动旋转调焦旋钮。我选择使用步进电机,因为它非常精确,而且我的测试表明,通过同步带机构增加扭矩后,它足够强大,可以在使用单反相机时调整焦距。我使用同步带机构是因为它可以通过改变皮带的张力轻松地在手动调焦控制和电动调焦控制之间切换。在我的设计中,电子调焦器的主体由三部分组成。一部分连接到望远镜的调焦器(内部),一部分作为间隔件(中部),还有一部分用于固定步进电机(外部)。这三部分通过嵌入在外部部件中的四根长#6螺丝和螺母连接在一起。此外,还有另一个部件用于调整皮带的张力。这种分离使得3D打印更加容易,而且对于不同的望远镜,你只需要设计一个不同的内部部件。
我设计的步进电机支架是基于我的望远镜的。你的望远镜参数可能略有不同。因此,如果你能对整个部件进行CAD设计并在打印前验证其工作原理,那就更好了。
附件:
第三步:打印并组装电子调焦器
完成设计后,你可以3D打印部件并将其安装在望远镜上。安装过程很简单。只需按照图片和CAD设计(尝试爆炸视图)进行操作即可。第一张图片显示的是皮带紧绷时的情况,第二张图片显示的是皮带松动时的情况。
以下是一些可能对你有帮助的提示:
在大多数情况下,你可以使用内六角扳手取下调焦器上的手动旋钮。安装大型同步带轮时,请确保螺丝拧入轴上的小凸片中。
在实际钻孔前,总是先预钻定位孔。
你可以用橡皮筋包裹张力调整部件,使其自动缩回。
对于连接步进电机和外部部件,你可以预钻一个比螺丝稍小的孔,并将螺丝拧入以实现紧密连接。
第四步:驱动步进电机
步进电机连接到驱动板,驱动板再连接到Teensy微控制器。如果你对步进电机不熟悉,可以参考这个维基百科页面和这个链接。
我实现了两种驱动模式:两相全步进和半步进。两相全步进提供更大的扭矩但精度较低,而半步进提供两倍的精度但扭矩较小。以下数组包含四个步进电机引脚的状态。
conststaticbooleancycle[8][4] = {{true,false,false,false}, {true,true,false,false}, {false,true,false,false}, {false,true,true,false}, {false,false,true,false}, {false,false,true,true}, {false,false,false,true}, {true,false,false,true}};
在半步进模式下,四个引脚的状态会循环遍历数组中的所有八个组合;而在两相全步进模式下,四个引脚会循环遍历数组中索引为1、3、5、7的组合。两个按键通过循环遍历数组的不同方向来控制电机的旋转方向。
在使用特定驱动模式时,步进电机的速度取决于引脚状态变化之间的间隔。步进电机需要非常精确的定时来驱动,因此我使用了定时器中断来驱动电机。中断以固定间隔触发。每次中断触发时,代码都会将步进电机引脚设置为数组中的下一个组合。使用电位器可以改变中断的间隔,从而改变步进电机的速度。
请参考第五步进行接线,参考第六步查看代码。
旁注:使用树莓派来驱动步进电机是个坏主意。在短步进间隔下,电机可能会表现异常,因为树莓派运行的是操作系统,难以实现硬实时控制。
第五步:连接电路
根据上面的电路图连接电路板。对于电机控制模式线和显示设置线,你可以添加开关以方便使用。对于开关和电位器,如果你想要的话,还可以添加额外的电容来平滑输入信号。
为了使整个系统正常工作,你还需要将Teensy和单反相机连接到树莓派上,将SynScan手动控制器与RJ11插座连接,并使用2A电源为树莓派供电。
附件
第六步:Teensy代码
要编译此代码,你需要安装aJSON库。只需从这里下载zip文件:
https://github.com/interactive-matter/aJson
在Arduino IDE中,选择“草图”->“包含库”->“添加.ZIP库”来添加库。然后,转到~/Arduino/libraries/aJson-master,并用我附带的版本替换aJSON.cpp文件(见下文)。这解决了这个问题。
https://github.com/interactive-matter/aJson/pull/79
此代码控制步进电机,使用SynScan串行协议与SynScan手动控制器通信,并使用串行JSON字符串协议与其他设备通信。它有一个循环缓冲区,用于排队外部请求,并在固定时间间隔内执行缓冲区中的命令。虽然在这里我将Teensy连接到树莓派上,但你可以轻松修改我的代码,使其与WiFi模块或蓝牙模块通信,如果你不需要相机控制部分的话。
我实现的串行JSON字符串协议非常有趣。
https://www.json.org/json-en.html
该设备具有一个内部的类似JSON的树形结构,该结构为不同的属性提供了getter和setter方法。下面是一个示例:
{focuser : {mode :0,interval :3000},telescope : {EQ_Coord : {RA :50.5,DEC :85.6},tracking :2,in_goto :0,slew :"AU2"}}
这个JSON树形结构的任何子集都是一个有效的命令,其中空对象表示获取,非空值表示设置。例如,命令{telescope:{EQ_Coord:{}}}表示获取赤道仪当前的赤道坐标。Teensy将回复填充了子树信息的响应,例如:{telescope:{EQ_Coord:{RA: 50.5, DEC: 85.5}}}。要转到目标位置,你可以简单地发送{telescope:{EQ_Coord:{RA: 70.2, DEC: 40.8}}},Teensy会将其解释为转到该坐标。解析器是递归的,因此你可以发送{telescope:{}}来获取关于望远镜的所有状态信息,或者在一个命令中执行多个获取/设置操作。代码还会验证你设置命令中的输入值,并在出现错误时提示API错误。
除了这个项目外,如果你想要实现类似的功能,一定要看看我的代码。
第七步:树莓派代码
首先准备你的树莓派。配置树莓派连接到WiFi网络或将其配置为软接入点。
https://elinux.org/RPI-Wireless-Hotspot
此外,如果你已经在树莓派上配置了VNC,那么远程登录将会非常方便。请按照这个教程操作:
https://www.raspberrypi.com/documentation/computers/remote-access.html
在树莓派上运行的代码执行以下操作:
通过USB串行和JSON字符串协议与Teensy通信,以控制赤道仪和调焦器
使用gphoto2与单反相机通信
托管一个网页,该网页显示实时星空图,并提供控制赤道仪、调焦器和相机的界面
涉及的技术包括:
所有服务器端脚本均使用Node.js编写
网页使用Angular.JS和D3编写
使用node-static提供静态网页服务
使用socket.io进行客户端-服务器通信
使用node-serialport访问串行端口
星空图灵感来源于VirtualSky
使用的星表数据来自HYG数据库
我使用网页作为界面,因为它可以在所有智能设备上工作。理论上,任何支持HTML5的浏览器都应该能够访问该页面并控制所有功能。
设置树莓派:
install gphoto2:
wget https://raw.githubusercontent.com/gonzalo/gphoto2... &&chmod+x gphoto2-updater.sh && sudo ./gphoto2-updater.sh
install nodejs:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -sudo apt-getinstall -y nodejs
安装我的代码
cd~mkdirProjectscdProjectsgitclone https://github.com/yhzhao343/wifi_TeleCtrl.gitcd./wifi_TeleCtrl/mount_ctrlnpm installcdpublicmkdirimage
运行代码:
node ~/Projects/wifi_TeleCtrl/mount_ctrl/simple-server.js
你还可以配置树莓派在启动时自动运行它。
服务器运行后,你可以打开浏览器,并使用端口8080访问树莓派的本地IP地址。例如,在我的情况下,树莓派的本地IP地址是192.168.0.15。我可以通过在浏览器中输入192.168.0.15:8080来访问该页面。你可以登录到路由器或将鼠标悬停在树莓派的网络图标上来获取其本地IP地址。
第八步:开始使用
警告:目前代码尚未准备好投入生产,并且所有互联网连接均未加密。如果你计划在公共WiFi上使用它,请谨慎操作。
第九步:未来工作
该项目仍处于概念验证阶段,还有许多可以改进的地方。
以下是我未来希望开展的工作列表:
改进网页的用户界面(背景和红色)
在网页中提供更方便的gphoto2相机控制选项
使用WebGL重写星空图
在网页中添加QHY5视频流
在网页中集成导航器
基于图像分析的自动对焦
登录系统和加密连接
感谢阅读!希望这对你有所帮助。
原文地址:
https://www.instructables.com/Wifi-controlled-TelescopeDSLR-With-Motorized-Focus/