PlotClock “小贱钟”彻底研究——角度计算

2021-11-03  本文已影响0人  coolwind

背景

硬件开源项目PlotClock,是一个很有趣的项目,通过控制两个舵机进行书写当前的时间。书写完成之后自行擦除,然后再书写,如此循环往复。


image.png

项目在github上有相关的资料下载,包含代码和3D打印件的图纸,需要使用arduino作为控制器件。

阅读了源码,并在网上查阅了相关的教程文章,感觉把这个项目说的很透彻。如果要自己修改设计,又不想等比例放大原设计的情况下,各个部件的尺寸应该是多少?舵机的间距如何决定?可书写的范围如何确定?这些问题都没有答案。因此决定,彻底的对PlotClock的原理进行分析,从而回答以上的问题。

分析

小贱中工作时,通过转动舵机改变摆臂的角度,从而达到控制画笔位置的目的。那么,首先要解决的问题是根据目标位置,反向计算出舵机摆动的角度。解决了这个问题之后,我们可以根据要书写的内容,确定画笔的坐标,然后得到舵机的角度。通过控制舵机搬动到指定的角度,从而控制画笔进行书写。

有了以上的分析我们就可以将问题简化为,根据画笔坐标点T(Xt,Yt),计算出两个舵机需要搬动的角度。

几何计算

为了方便后续的描述,首先为各摆臂部件命名,并为相关的数据进行命名。

直接连接舵机的摆臂,称为一级摆臂。连接左右舵机的一级摆臂长度相同,长度为L1。

连接在一级摆臂上的摆臂,称为二级摆臂。左右二级摆臂形状不同。左二级摆臂,由两部分组成,主摆臂以及延长的持笔夹。左二级摆臂的主摆臂与右二级摆臂长度相同,长度而L2。左二级摆臂延长的持笔夹长度为L3。


image.png

左二级摆臂的主摆臂与延长持笔夹的夹角,角度为135度。


image.png

定义好以上名称之后,我们就可以开始进行计算了。

我们以左侧舵机转轴为原点,构建直角坐标系。目标就是根据持笔夹的持笔位置坐标,计算出左右一级摆臂的角度。

假设笔的位置位于点T(Xt,Yt),连接点T与原点O,得到辅助线段TO。TO与X轴的夹角为α1,TO与左一级摆臂的夹角为α2,左一级摆臂与X轴的夹角为α。如下图:

image.png

这个α就是我们需要知道的角度。

在开始计算之前,先说明一下需要使用到的个公式,

公式1:勾股定理,在直角三角形中:

image.png

公式2,任意三角形边长关系

image.png

公式3,任意三角形中一直边长求角度的公式,有公式2推导,如果需要知道角A的角度可使用:

image.png

有了以上的准备我们就可以开始进行相关的计算了

可计算α1的值


image.png

可计算α2的值


image.png

其中TO可计算


image.png
最终求出角α的值
image.png

到这里我们得到了左侧舵机的角度α

下边我们开始计算右侧舵机的角度。在计算之前我们需要先求出,左二级摆臂的主摆臂末端K与原点的距离KO。如下图所示:连接KO,连接T与左一级摆臂末端。由于T与一级摆臂末端的距离是固定不变的,在实际项目中可以通过测量得到。所以直接使用这个长度L4。

image.png

为了求KO的距离我们,在一直L2、L1的情况下我们需要知道角β。通过分析,角β=β1-β2

可求β1为


image.png

可求β2为


image.png

获得β即可计算KO的值


image.png

获得KO的值之后,我们可以连接K点和右舵机的轴点C,KC作为辅助线。

image.png

已知L1、L2以及KO的情况下,可以计算角γ1。


image.png

通过α和γ1可以计算角γ
γ = 180 - α - γ1

通过KO、OC的值以及角γ可以计算KC的长度

image.png

通过KC、OC和KO可以获得θ1的角度

image.png

通过KC、L1以及L2可以计算θ2的角度

image.png

最终获得θ的角度

θ = 180 - θ1 - θ2

有了α和θ就可以确定舵机需要转动的角度。

最后梳理一下

摆臂相关的4个长度L1、L2、L3、L4,其中L1、L2、L3通过摆臂的规格参数可以获得。L4则需要通过测量获得。

两个舵机转动轴之间的距离OC,也需要通过测量获得。

由此,所有计算中所有需要使用到的输入参数都可以获得。

如果细心,可以发现左二级摆臂与持笔夹之间的夹角,并没有直接参与到计算过程中。实际上这个夹角会影响到L4的长度。

那么在实际制作的时候,L1、L2、L3、L4以及OC的数值取多少合适,他们的取值有什么约束以及影响呢?为什么PlotClock写的字都是歪歪扭扭的?这些问题,我们将在下一篇文章中进行讨论。

上一篇下一篇

猜你喜欢

热点阅读