构建一个适用于极光的可视化场景
扫描二维码
随时随地手机看文章
这个项目始于对光的思考,融合了自然景观与实时数据的创意。在启动项目之初,我和搭档决定创作一个来自冰岛山脉的场景,那里极光十分醒目。
从计算机科学的角度来看,该项目需要从特定地理坐标获取极光可见性数据。这对于创建一个能够随该山地当前极光状态动态变化的灯光场景至关重要。
思考这个项目如何融入动态效果很困难。除了灯光亮度根据现场能见度自动调节外,我还希望灯光能像真实生活中那样缓慢地来回移动。
选择灯光 / 头脑风暴
灯光选择
在构思这个项目机械结构时,我面临的第一个挑战是如何让灯光像极光一样弯曲和移动。为此,我最初决定购买柔性Adafruit Neopixel LED灯带。下单后,尽管做了相关研究,但我发现这些灯带并没有按照我的预期方向弯曲。不过这个问题相对容易解决,于是我将灯带以45度角安装在天花板上,并调整其旋转角度,使亮面直接朝向前方,而不是向下,从而能够照亮整个场景。
轻柔的动作
我接下来在移动灯光方面遇到的难题是如何真正实现灯光的左右移动。在考虑使用线性导轨和齿轮系统后,我决定采用滑轮系统会更合适。
滑轮系统
为了使灯光来回闪烁,需要一个系统将步进电机的旋转运动转换为直线运动。为此,我用3D打印了两个线轴,并将其中一个连接到伺服电机上。两者之间穿过一根绳子,这根绳子通过项目天花板与中间的灯条相连。
为该项目寻找数据源的API非常简单,美国国家海洋和大气管理局(NOAA)有一个数据库,存储了在各个经纬度坐标点上极光可见度的数值。该API提供的数据格式如下:[经度, 纬度, 可见性概率(百分比,满分100%)]。
数据
为了提取山峰基尔库菲尔(Kirkjufell)的具体位置,我确定了其经纬度坐标:北纬64.9417°,西经23.3069°。使用这些数据,您可以找到距离该特定地点最近的点。由于数据库仅提供了整数坐标的统计数据,我取了该山峰周围四个点的平均值(将23转换为-23,表示在北东坐标系中为西边;然后加上360,将其转换为WGS84格式)。
第1点:337,64
第2点:337,65
第3点:336,64
第4点:336,65
查询参数
通过使用粒子集成 webhook 服务的查询参数,对从该 API 获取的海量数据进行筛选。为了确定要检索的具体行,需手动计算行号:将每个经度坐标的条目数量乘以第一个点的经度坐标,然后加上距离 -90 的纬度值的数量。例如,点 1 就是 90+64,再加上 181×337(数据集中包含零,因此使用的是 181 而不是 180)。从数据集中提取的具体行已在下方查询参数中注明:
该功能会从 API 的“coordinates”数组中筛选,并根据指定的线条获取对应的数组,存储在“selected”下。测试此事件时的输出如下:
代码
该程序会根据北极光在基尔库菲耶尔山上的可见度,改变灯光来回摆动的速度;同时,当灯光在山上的可见度越高时,LED波纹的亮度也会随之增强。
本文编译自hackster.io





