延时摄影轨道的运动控制滑块

ChangeCode
转载
发布时间: 2025-06-10 18:15:35 | 阅读数 0收藏数 0评论数 0
封面
本指南将介绍如何使用由 Arduino 驱动的步进电机,实现延时摄影轨道的自动化。假设你已经有了想要实现自动化的轨道,我们将主要围绕驱动步进电机的运动控制器展开讲解。例如,在拆解一台机器时,我发现了两根可以改装成延时摄影轨道的滑轨。其中一根滑轨通过皮带驱动滑块,另一根则使用螺杆。
1

工作原理

进行延时摄影时,我使用一款名为 LRTimelapse Pro-Timer 的间隔拍摄器,它由 Gunther Wegner 设计。这是一款高质量的开源间隔拍摄器,适用于延时摄影、微距摄影和天文摄影爱好者,你也可以自己制作。感谢 Gunther 为延时摄影爱好者群体提供了这个出色的工具。(更多信息可查看 lrtimelapse-pro-timer-free)

我只是添加了一些代码来控制步进电机。

工作原理:延时摄影轨道采用从模式,这种方式非常可靠。这意味着我使用 LRTimelapse Pro-Timer 间隔拍摄器来设置拍摄张数和拍摄间隔。间隔拍摄器向相机发送信号以触发快门,拍摄完成后,相机会向运动控制器发送信号,按照 “移动 / 拍摄 / 移动” 的顺序移动轨道滑块。启动该顺序的信号来自相机的闪光灯热靴。相机的闪光灯设置为后帘同步,因此当相机快门帘关闭时,信号会发送回运动控制器。这意味着滑块仅在快门关闭时移动,因此无论曝光时间长短都能正常工作。

材料:运动控制器与相机之间需要两根线缆(具体取决于相机型号):1)一根带有 2.5 毫米插孔的相机快门释放线;2)一个热靴适配器,以及一根带有 3.5 毫米插孔的公头闪光灯 PC 同步线插头。

2

运动控制器板

硬件方面:滑块的移动通过与 NEMA 17 步进电机相连的螺杆实现。步进电机由 EasyDriver 驱动,并由 Arduino UNO 控制。为了能使用不同的移动电源(9V 至 30V),我添加了一个 LM2596 DC-DC 与 Arduino 兼容的电源模块来调节电压。具体可查看附件 “Arduino Wiring.PDF”。

相机快门释放线通过 2.5 毫米插孔插入控制器,该插孔按照附件 “Shutter release.PDF” 中的原理图进行接线。热靴适配器的线缆则通过 3.5 毫米插孔插入控制器。使用两种不同尺寸的插孔可避免插错线。

PDF
F6DBX2KJOSY0TYI.pdf
52.87KB
PDF
F3GLIN5JOSY0TYK.pdf
185.13KB
3

Arduino 代码

在编写代码之前,区分你想要实现的各种动作非常重要。Arduino 允许使用 “void”(函数),它是一段程序代码(代码行),可以在需要时随时调用。因此,将每个动作分别放在不同的 “void” 函数中,有助于使代码结构清晰,简化编程过程。

附件 “Sketch Logics.pdf” 展示了我想要实现的动作及其背后的逻辑。

PDF
F3XVTJEJSPAA81T.pdf
101.21KB
4

Arduino 代码 1 - 轨道归零位置

第一个 “void” 函数用于在启动控制器时将轨道移动到归零位置。

控制器有一个方向切换开关。启动时,滑块会朝着切换开关选择的方向移动,直到碰到轨道末端的限位开关,然后再按照用户定义的距离退回(该距离可以是 0,或者对应轨道另一端的值),此时滑块所在位置即为归零位置。

这个 “void” 函数使用附件 “BB_Stepper_Rail_ini.txt” 中的代码进行了测试。

TXT
BB_Stepper_Rail_ini.txt
1.86KB
5

Arduino 代码 2 - 双功能按钮

第二个 “void” 函数用于手动移动滑块,这在开始延时摄影序列前设置相机跨度时非常有用。

控制器上有一个双功能按钮:1)短按(不到一秒),滑块会按照用户定义的距离移动;2)长按(超过一秒),滑块会移动到轨道中间或末端。这两个功能都会使滑块朝着切换开关选择的方向移动。

这个 “void” 函数使用附件 “BB_Dual-function-push-button.txt” 中的代码进行了测试。

TXT
BB_Dual-function-push-button.txt
3.50KB
6

Arduino 代码 3 - 从模式

第三个 “void” 函数用于在每次拍摄后移动滑块一定距离。相机的闪光灯需要设置为 “后帘同步”。拍摄结束时,闪光灯热靴会向控制器发送一个闪光信号,启动移动序列并使滑块移动一定距离。每次移动的距离通过将轨道长度除以在 LRTimelapse Pro-Timer 中选择的拍摄张数来计算。不过,为了避免拍摄张数较少时滑块移动过快,可以设置最大移动距离。

这个 “void” 函数使用附件 “Slave mode.txt” 中的代码进行了测试。

TXT
Slave mode.txt
2.30KB
7

Arduino 代码 4 - 四次方渐变

第四个 “void” 函数是一种渐变选项,用于实现更平滑的加速和减速。这意味着每次移动的距离会逐渐增加,直至达到设定值,在轨道末端则以相同方式逐渐减小。因此,在最终的延时摄影序列中,相机会在轨道起点加速移动,在轨道末端减速移动。附件中的图片展示了典型的四次方加速曲线(加速和减速过程),渐变的距离可以自定义。

我在 Excel 中测试了该算法,并按照附件图片设置了加速和减速曲线。这个 “void” 函数使用附件 “BB_Stepper_Quad-Ramping-calculation.txt” 中的代码进行了测试。

注意:不要将这种四次方渐变与 “Bulb ramping”(曝光时间变化)或 “Interval ramping”(拍摄间隔变化)混淆。

TXT
BB_Stepper_Quad-Ramping-calculation.txt
2.32KB
8

Arduino 代码 5 - LRTimelapse Pro

LRTimelapse Pro-Timer 是 Gunther Wegner 为延时摄影爱好者群体提供的一款免费开源 DIY 间隔拍摄器,适用于延时摄影、微距摄影和天文摄影。我为自己的相机制作了一个后,发现它非常好用,于是开始思考如何用它来驱动我的轨道。

附件 “LRTimelapse Pro-Timer 091_Logics.pdf” 是一份简短的操作手册,展示了如何使用该程序。

附件 “BB_Timelapse_Arduino-code.pdf” 展示了 LRTimelapse Pro-Timer Free 0.91 的代码结构,其中绿色部分是我为控制滑块添加的代码。

如果你想尝试一下,“BB_LRTimelapse_091_VIS.zip” 中包含了 Arduino 代码。

附件 “BB_LRTimer_Modif-Only.txt” 列出了我对 Pro-Timer 所做的修改,便于在 Gunther 发布新版本 Pro-Timer 时进行集成。

TXT
新建 文本文档.txt
8.41KB
PDF
FHX7QR4JSPAA2VO.pdf
282.01KB
ZIP
FPNMKV3JSL38W21.zip
21.45KB
PDF
FKB6ZLYJSL38W04.pdf
109.55KB
9

Arduino 代码 6 - 变量和设置值

/*Berdine延时摄影轨道
1) Void Rail_ini根据切换开关方向将滑块置于归零位置
2) Void Inch _Man用于微调或使滑块移动到中间、末端或归零位置:按钮有两个功能:
a) 短按(不到一秒)= 小幅度移动 - 微调
b) 长按超过一秒,滑块移动到中间,再次长按则移动到末端
3) Void Ramp_Calc是在轨道起点和终点进行的四次方平滑渐变
4) 如果滑块碰到限位开关则停止。
*/
#include <AccelStepper.h>
Accelstepper stepper(1, A5, A4); // 1= Easy Driver, A5 STEP引脚, A4 DIR引脚
const int LIMIT = A1; // 限位开关连接到引脚A1
const int SHUT_PIN =3; // 快门线
const int SLAVE_PIN = 11; // 来自相机热靴的输入信号
const int TOGG =12; // 切换开关连接到引脚12
const int INCH = 13; // 微调按钮连接到引脚13
//*** 渐变变量 ***
int begining = 0; // 渐变开始时oneMove的值 = b
int oneMove; // 滑块单次移动的距离
int duration; // 渐变持续的帧数 = d
int y = 1; // 用于存储渐变最后20%的变量
float ratio =0.2; // 渐变持续时间的百分比 (0.2 = 20%)
const int maxLength = 100; // 设置滑块单次移动的最大长度
//*** inch_Man变量 **
int Steppinch = false; // 运行手动操作的逻辑条件
int TargetCal= false; // 计算目标位置的逻辑条件
long curPos; // 当前位置
long target; // 移动到的目标位置变量
long targetinch; // 为微调设置的新目标位置
//*** 根据轨道长度输入变量 **
long homePos = 0; // 归零位置
long midPos = 10500; // 中点位置:取决于轨道长度
long endPos = 21000; // 轨道末端位置:取决于轨道长度
int inchMoveval = 200; // 按钮短按时单次移动的值
// 设置初始方向的变量
long iniOver = inchMoveval+ 200;
long iniHunt =endPos +1000;
long iniHome;
// 双功能按钮变量
float pressLength_milř*

螺杆的螺距可能会有所不同,如果使用皮带,皮带的节距和滑轮的齿数也可能不同。此外,步进电机每转的步数和轨道长度也可能存在差异。因此,跨越轨道长度所需的步数会因轨道而异。

为了使控制器适用于不同的轨道,可以在程序中调整一些变量:

  1. 计算对应于限位开关之间轨道长度的步数,并将该值输入到变量 “long endPos” 中(例如,本指南中展示的螺杆驱动轨道,该值为 126000)。
  2. 若要在使用跨度效果时查看轨道起点、中点和终点的画面构图,可以使用按钮的长按选项。将对应于轨道中点的步数输入到变量 “long midPos” 中(例如,本指南中展示的螺杆驱动轨道,该值为 63000 )。
  3. 在 LRTimelapse Pro-Timer 中,你需要输入想要拍摄的照片数量。程序会将轨道长度除以该数量来计算滑块每次的移动距离。例如,如果你拍摄 400 张照片,轨道长度为 1 米,那么滑块每次移动距离为 1000÷400 = 2.5 毫米;如果拍摄 100 张照片,该值则为 10 毫米,单次移动距离可能过大。因此,你可以选择不使用轨道的全长,将允许的最大移动距离输入到变量 “const int maxLength” 中(例如,本指南中展示的螺杆驱动轨道,该值为 500)。
  4. 短按按钮时,滑块会移动一定距离,该距离可以在变量 “int inchMoveval” 中设置(例如,本指南中展示的螺杆驱动轨道,该值为 400)。
  5. 四次方渐变可实现平滑的加速和减速效果。你可以决定在轨道起点和终点渐变的持续距离,该值以轨道长度的百分比形式输入到变量 “float ratio” 中(例如,0.2 表示轨道长度的 20%)。
10

关于轨道的一些说明

轨道长 1 米,由一个重型线性轴承滑块通过螺栓固定在开槽铝挤压杆上制成。我从RS.com购买了铝挤压杆及配件(见附件图片 “rs items.jpg”)。该轨道有四条腿,也可以通过标准螺丝安装在三脚架上。

跨度调整:三脚架的球头(见附件图片)安装在滑块上,一个小连杆将球头与螺杆相连。如果你将螺杆从轨道一侧移开,螺杆和轨道之间就会形成一个角度。当滑块沿着轨道移动时,会使球头产生旋转。如果你不想进行跨度调整,保持螺杆与轨道平行即可。

控制器安装在滑块上,我选择这种安装方式,而不是将控制器安装在轨道一端,以避免多条线缆沿着轨道铺设。我的移动电源和控制器之间只连接了一根线缆,其他所有线缆,包括连接到步进电机、限位开关、相机的快门线以及相机的同步线,都随着控制器一起移动。

螺杆与皮带的比较:对于延时摄影而言,这两种设计都能很好地工作。与螺杆相比,皮带能实现更快的移动,如果你想将轨道改装成视频滑轨,这可能是一个优势。螺杆设计的一个优点是,当将轨道垂直放置或倾斜放置时,遇到停电,滑块会保持静止,不会掉落。但如果使用皮带驱动的轨道进行同样操作,我强烈建议你要格外小心,因为一旦停电或电量耗尽,相机可能会滑落到轨道底部,风险自负!

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载