众所周知。。。我又块坏飞控,老哥拿去修了,然后老哥想做个这。发来个链接过来,我看完以后觉得很有搞头!完全可以卖给拍静物那帮人!
这里就对方案来个解析,等狗舔完了面山,鸡啄完了米山,蜡烛烧断了铁🔒,我就做。
我的头像真好看
https://www.bilibili.com/video/BV15T4y1g7gt?p=1&share_medium=iphone&share_plat=ios&share_source=GENERIC&share_tag=s_i×tamp=1640536319&unique_k=c1FRrKK
B站位置
电路,核心就是步进电机,赋予了不同的自由度,A4988是驱动芯片。
安装好的样子
夹着手机拍摄
运行一景
https://www.youtube.com/watch?v=qub5chyIQ0s
这个链接是YouTube的位置
使用了三个步进电机
芯片的调方向
以前做小打印机的时候老用
推荐的接线
使用时候的正反转
需要用到的轴承
记住名称然后去买
const int interruptA = 0; / / Interrupt 0 (pin 2)
const int interruptB = 1; / / Interrupt 1 (pin 3)
int CLK = 2; / / PIN2
int DAT = 3; / / PIN3
int BUTTON = 4; / / PIN4
int LED1 = 5; / / PIN5
int LED2 = 6; / / PIN6
int COUNT = 0;
void setup ()
{
attachInterrupt (interruptA, RoteStateChanged, FALLING);
/ / AttachInterrupt (interruptB, buttonState, FALLING);
pinMode (CLK, INPUT);
digitalWrite (2, HIGH); / / Pull High Restance
pinMode (DAT, INPUT);
digitalWrite (3, HIGH); / / Pull High Restance
pinMode (BUTTON, INPUT);
digitalWrite (4, HIGH); / / Pull High Restance
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
Serial.begin (9600);
}
void loop ()
{
if (! (digitalRead (BUTTON)))
{
COUNT = 0;
Serial.println ("STOP COUNT = 0");
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
delay (2000);
}
Serial.println (COUNT);
}
/ / -------------------------------------------
void RoteStateChanged () / / When CLK FALLING READ DAT
{
if (digitalRead (DAT)) / / When DAT = HIGH IS FORWARD
{
COUNT;
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
delay (20);
}
else / / When DAT = LOW IS BackRote
{
COUNT -;
digitalWrite (LED2, HIGH);
digitalWrite (LED1, LOW);
delay (20);
}
}
因为文章写的时间太久远了。。。我也不知道我这些代码是干嘛用的
大概是读取一个旋钮的值去控制啥
限位开关,就是机器到边缘的时候会触发这个,断电
这叫同步皮带轮组
这叫同步带
同步轮
线性导轨
这个叫什么机械装配图?
迷你球形云台
德林轮
读到这里的时候,专业的摄影制作人有了一些新的要求:
加入加速控制输入。
第三个电机的选项对于倾斜功能非常有用。
一个带有可选功能的菜单,可以在 A 点和 B 点之间连续跳动以循环拍摄
4. 作为升级,带有磁铁标记位置的 AS5600 编码器模块会很棒。手动定位摄像机始终是摄影师的更好选择。
5. 最后,还可以扩展相机镜头对焦电机的代码。
https://www.airspayce.com/mikem/arduino/AccelStepper/index.html
这里是项目使用的电机库,相对于以前的库,加入了很多的有趣功能。
一些功能
这个库中计算的是:每秒步数而不是每秒弧度(因为我们不知道电机的步距角)根据所需加速度计算第一步的初始步距间隔 在后续步长中,根据前一步计算更短的步距间隔步直到达到最大速度。
这个库里面有两个类,一个是控制带有加速功能的步进电机,一个是控制多个步进电机。
单一的加速步进电机
https://www.embedded.com/generate-stepper-motor-speed-profiles-in-real-time/
本文的步进电机控制算法其实不是随便得来的:
而是有一套完整的理论基础
因为比赛的原因,我需要使用使用步进电机,所以这块的源码要分析一下。
设置使用了4个引脚
其实使用的是5个脚
电机的接口类型
基本上对应
旋转方向
AccelStepper
(
uint8_t interface = AccelStepper::FULL4WIRE,
uint8_t pin1 = 2,
uint8_t pin2 = 3,
uint8_t pin3 = 4,
uint8_t pin4 = 5,
bool enable = true);
构造函数:可以同时拥有多个步进器,它们都以不同的速度和加速度移动,前提是您以足够频繁的间隔调用它们的run()函数。
就是这个run函数,注意!这个库是开环的控制器,所以哪个位置是大约的
http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html
这些就是对象的建立
相关的变量定义
功能切换
屏幕的启动,步进电机的启动,显示
home函数,这里就是起始的位置,代码简单
剩下逻辑简单,我就不写了,关键就是这个库的使用:
http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html
在我目前做的一个项目中也是有电机,不过也是开环的,我想为了这个控制的精准,应该使用闭环控制。
这是我们库中使用的算法。
联系客服