“为了看星星,我自己做了一个行星观测器”
星空,永远是大家神往的地方。
这次给大家带来的项目,是外国小哥用树莓派和天文望远镜制作的一台智能行星观测器。
观测器从 NASA 获取已知行星的坐标数据,然后可以自动调整角度,聚焦这颗行星,让我们很方便地观测它们。
相信它能很好地带我们好好感受一下外太空世界。
材料清单
- 树莓派 3B ×1
- 16×2 LCD 屏幕 ×1
- 带驱动器的步进电机 (28-BYJ48) ×2
- 按钮 ×3
- 法兰联轴器 5mm ×2
- 按钮指南针 ×1
- M3 螺栓/螺母 ×8
- 3D 打印外壳 ×1
- 3D 打印望远镜 ×1
行星坐标数据
这里介绍两种定位行星的方法。
- 使用水平坐标系。它可以从北方(方位角)向上方倾斜一个角度和从地平线(高度)向上方倾斜一个角度,具体以我们的位置而定,角度会有所不同。这个方法以北方作为参考目标。参考资料:
https://en.wikipedia.org/wiki/Horizontal_coordinate_system
- 将树莓派连上 WiFi 后,直接连接到 NASA 获得数据。
访问行星数据
从 NASA 喷气推进实验室(JPL)获取数据:
https://ssd.jpl.nasa.gov/?horizons
访问数据前需要安装 AstroQuery 库,这个库是用于查询行星网络表单和数据库的工具。下载地址:
https://astroquery.readthedocs.io/en/latest/jplhorizons/jplhorizons.html
如果这是你的第一个树莓派项目,可以先参考下面的设置指南:
https://projects.raspberrypi.org/en/projects/raspberry-pi-getting-started
确保安装最新版本的 Raspbian(我使用的是3.7.3版)。打开终端运行命令:
sudo apt install python3-pip
然后使用 pip 安装 astroquery 的升级版本。
pip3 install --pre --upgrade astroquery
在继续完成项目前,可以使用简单的 Python 脚本访问该数据,确保所有依赖正确安装。
from astroquery.jplhorizons import Horizons
mars = Horizons(id=499, location='000', epochs=None, id_type='majorbody')
eph = mars.ephemerides()
print(eph)
不出意外,这串代码会显示火星的详细位置。我们可以查看火星定位是否正确:
https://theskylive.com/planetarium
为了方便查询,我会做简化处理。其中 id
表示是 JPL
数据中与火星的数据,epochs
表示获取数据的时间,id_type
表示询问太阳系主体。“000”在格林威治天文台的位置代码中表示英国的位置。其他位置可点击查看:
https://minorplanetcenter.net//iau/lists/ObsCodesF.html
故障排除:
如果出现报错:No module named ‘keyring.util.escape’
可以在终端中输入以下命令:
pip3 install --upgrade keyrings.alt
编程
为了找到精确的坐标数据,在getPlanetInfo
修改位置信息(使用上一步中天文台的列表修改这里的location
)
def getPlanetInfo(planet):
obj = Horizons(id=planet, location='000', epochs=None, id_type='majorbody')
eph = obj.ephemerides()
return eph
完整的 python 脚本下载方式,在文末告知。
连接硬件
在该步骤中,要连接面包板、跳线、两个步进电机、LCD 屏幕和三个按钮。在树莓派上找到引脚,在终端上输入
pinout
上图显示了 GPIO 编号和板子编号。
连接方式如下:
- 第一个进电机 – 7、11、13、15
- 第二个进电机 – 40、38、36、32
- 按钮 1 – 33
- 按钮 2 – 37
- 按钮 3 – 35
- 显示屏 – 26、24、22、18、16、12
当全部连接后,运行 python 脚本
python3 planetFinder.py
在屏幕上会显示设置文本信息,并且按钮可以启动步进电机。
3D 打印外壳
<<< 左右滑动见更多 >>>
所有打印 STL 文件,文末提供打包下载链接。
测试3D打印件
<<< 左右滑动见更多 >>>
部件都打印完成之后,在涂胶水之前,先确保它们都能紧密贴合。
将按钮安装到位,固定显示屏和步进电机,打磨一下外壳,确保所有组件都能正常使用。然后我们再进行下一步的操作。
安装步进电机
<<< 左右滑动见更多 >>>
步进电机将控制位于外壳上方的望远镜的仰角,所以需要延长电线方便旋转。安装方法可以参照上图。
接线完成后,可以运行一下 python 脚本,检查是否一切正常。
然后将电线放回管内,直到步进电机就位,再将步进电机固定在外壳上,把外壳粘合。
安装按钮和 LCD 屏幕
如图所示安装按钮,在焊接前使用螺母把它固定好。
使用M3螺栓和螺母固定LCD显示器。请将LCD其中一个引脚焊接到电位计上。
在将所有的组件粘合之前,再次测试代码,确保所有能够正常工作,因为该阶段更容易修复。
添加法兰联轴器
将3D打印的底座连接到步进电机。
我们把5mm的法兰联轴器安装在步进电机的顶部,并用螺钉固定到位。
将望远镜安装到旋转塔顶上的电机很简单,因为有足够的空间可以将小螺钉固定到位。
一个法兰器粘连在旋转塔架的底座上,另一个安装在望远镜上。再次测试,确保裸露的电线彼此不接触,用电工胶带缠住并修补可能引起问题的任何地方。
启动
因为想把它独立运行,而不是每次手动代码寻找行星,因此把观测器设置为在树莓派开启时运行代码。在终端中输入。
crontab -e
在打开的文件中,在文件末尾,另起一行输入。
@reboot python3 /home/pi/PlanetFinder/planetFinder.py &
代码保存在 PlanetFinder
文件夹中,因此文件位置为:/home/pi/PlanetFinder/planetFinder.py
。如果你保存在其他地方,请在此处更改。
说明:代码末尾的&
是允许代码在后台运行,因此它在启动时不会阻止其他进程。
完成组装
将小指南针添加到旋转底座的中间,最后,将所有的组件安装到位!
使用方法
1、当望远镜开始启动时,调整垂直轴。按下向上
和向下
按钮可以移动望远镜,调整好后按下 OK
按钮即可(位于底部)。
2、调整旋转角度,使用按钮
旋转望远镜,直到小指南针将望远镜指向北方,然后按下 OK
按钮即可。
现在,我们可以使用向上、向下按钮选择行星,确定好后按下OK
按钮即可。它将显示选定行星的高度和方位角,指向它几秒后再转向北。
到现在,项目就算全部完成了。
赶紧去找找你心中的那颗行星吧!
项目来源:https://www.instructables.com/id/Raspberry-Pi-Planet-Finder/
项目作者:snowbiscuit
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux shell中这7种运算命令值得掌握!
- 快速掌握shell脚本数组,看这篇
- 详解shell脚本的环境、普通、特殊变量
- 玩转zabbix之超详细的二进制安装
- 玩转zabbix之源码编译安装,添加主机监控
- 总结一篇shell调试技巧及常见的脚本错误
- 备战金九银十:当你裸辞遇到了面试难,你需要了解一下这些面试题
- 看完这7个测试常见问题总结,你的面试就成功了80%
- geant4入门讲解篇-2
- Geant4-怎样设置你的粒子源--精简注释+收藏版
- Geant4--一次编译,运行多个Run,极大提升模拟效率
- Geant4--是怎样使用的?--(1.信息抽取)
- ROOT-数据读取-直方图-Roofit拟合基本流程-(入门实用)
- 最简单的基于FFmpeg的直播系统开发移动端例子:IOS 视频解码器
- 哇塞哇塞--一行命令搞定视频截取和gif制作!