利用Arduino实现DIY伺服相机云台

这篇文章来源于DevicePlus.com英语网站的翻译稿。

目录

  1. 水平相机支架简介
  2. 设备规格
  3. 3D 打印安装部件
  4. 编写程序
  5. 测试!

 

diy camera gimbal

在上一篇文章中,我们构建了一个伺服控制的无线照明开关。今天,我们打算更上一层楼,尝试创建一个水平相机支架或云台。如果您还没有准备好,请随时查阅我们的第一个相机云台项目:第1部分第2部分

今天的电子食谱

预计完成时间:60分钟

所需部件:

 

1. 水平相机支架简介

水平相机支架,通常称为“稳定器”或“云台”,过去仅用于高预算生产环境。由于无人机行业的繁荣和新兴消费技术,现在利用配备云台的无人机拍摄高质量的视频已经非常普遍——用无人机或智能手机都可以。市面上易于操作的相关消费产品有很多种。其中一些产品采用无刷电机进行主观视角拍摄(噪音、速度等)。

diy camera gimbal

图1.稳定器

我一直想亲手制作一个这样的设备。上次,我挑战自己,构建了一个这种设备,具体内容请参见这篇文章,但是结果却并不理想……

该设备有其自身的魅力……但是如果无法作为稳定器使用,那么也毫无用处。我回顾了之前的项目,发现许多需要改进的地方。最大的问题就是我选择的伺服电机。之前的电机功率不够。其扭矩不足以操作智能手机。

出于这个原因,在继续其他工作之前我想先关注一下设备规格选型。

 

2. 设备规格

首先,我们来看一下伺服电机。虽然之前使用的伺服电机SG90价格便宜且易于使用,但是显然其扭矩不够。因此,这次我们使用MG996R伺服电机,其扭矩几乎是之前电机的5倍,可能动作会略微延迟/减慢。

diy camera gimbal

另外,其他部件基本就是Arduino和加速度计,所以设置几乎与上次相同。由于新伺服电机较大,我用适配器为其供电。电路接线也是相同的。

diy camera gimbal

diy camera gimbal

3. 3D 打印安装部件

对于支架的部件,您可以使用上次的木材和金属配件。但这一次,我想利用3D打印来制作各个部件。这次我准备的三脚架带有螺丝孔,即使伺服电机较大,也可以保持稳定。我设计的小三脚架具有方向性,而且可以单手操作。

diy camera gimbal

这是我3D打印的部件。组装后的样子如下所示:

diy camera gimbal

请注意,如果使用ABS树脂进行3D打印,那么材料固化时会发生收缩。我打印部件时发现了这个问题。我注意到部件产生轻微变形,组装时螺钉很难拧入。经过多次试验和错误后,我决定分别打印安装在伺服电机上的部件。您可以在这里下载适用于该支架的3D模型: https://github.com/DevicePlus/ServoGimbal

diy camera gimbal

三脚架组装如下所示:

diy camera gimbal

diy camera gimbal

至于外壳,这取决于您的相机类型等因素。此外,您还可以根据您的手机类型改进/更改部件的整体设计。

 

4. 编写程序

对于程序,我们有必要进行校准。首先将加速度传感器倾斜180度,并根据输出值调整伺服电机的倾斜度。所以我们稍微改进了第17个程序并进行了校准。让我们用比较容易理解的方式输出数字。

首先需要将加速度计倾斜180度,并根据输出值调整伺服电机的倾斜度来校准加速度计。让我们稍微修改一下 第1部分 中的程序,以易于理解的方式输出校准值。

int _maxX = 0;
int _minX = 1000;
int _maxY = 0;
int _minY = 1000;
int _maxZ = 0;
int _minZ = 1000;
 
//******************************************
//Program for acquiring accelerometer values //******************************************
void setup()
{
// initialize the serial monitor
Serial.begin(9600) ;
}
void loop()
{
long x , y , z ;
x = y = z = 0 ;
x = analogRead(1) ; // X axis
y = analogRead(2) ; // Y axis
z = analogRead(3) ; // Z axis
 
if(_maxX < x){ _maxX = x; }
if(_minX > x){ _minX = x; }
if(_maxY < y){ _maxY = y; }
if(_minY > y){ _minY = y; }
if(_maxZ < z){ _maxZ = z; }
if(_minZ > z){ _minZ = z; }
 
int centerX = (_maxX-_minX)/2+_minX;
int centerY = (_maxY-_minY)/2+_minY;
int centerZ = (_maxZ-_minZ)/2+_minZ;
 
float rotateX = ((float)_maxX-(float)_minX)/180;
float rotateY = ((float)_maxY-(float)_minY)/180;
float rotateZ = ((float)_maxZ-(float)_minZ)/180;
 
 
Serial.print("X:") ;
Serial.print(_minX) ;
Serial.print(" ") ;
Serial.print(centerX) ;
Serial.print(" ") ;
Serial.print(_maxX) ;
Serial.print(" ") ;
Serial.print(rotateX) ;
Serial.print(" Y:") ;
Serial.print(_minY) ;
Serial.print(" ") ;
Serial.print(centerY) ;
Serial.print(" ") ;
Serial.print(_maxY) ;
Serial.print(" ") ;
Serial.print(rotateY) ;
Serial.print(" Z:") ;
Serial.print(_minZ) ;
Serial.print(" ") ;
Serial.print(centerZ) ;
Serial.print(" ") ;
Serial.print(_maxZ) ;
Serial.print(" ") ;
Serial.println(rotateZ) ;
delay(50) ;
}

 

diy camera gimbal

diy camera gimbal

运行此程序后,启动串口监视器,然后将传感器分别在X和Y方向-90度到90度之间倾斜,并确认输出值。将输出值的最小值和最大值除以180度,获得的数值为加速度计倾斜值/度,这样可以与伺服电机的操作同步。

diy camera gimbal

串口监视器上的数值在激活伺服电机的程序中有所反应。

//********************************************
//Program 2 for acquiring accelerometer values
//********************************************
#include <Servo.h>
Servo myservoX;
Servo myservoY;
 
void setup()
{
// initialize the serial monitor
Serial.begin(9600) ;
myservoX.attach( 5 );
myservoY.attach( 6 );
}
 
void loop()
{
int i ;
long x , y;
// read each data 100 times and average
x = y = 0 ;
for (i=0 ; i < 100 ; i++) {
x = x + analogRead(1) ; // read x axis
y = y + analogRead(2) ; // read y axis
}
 
x = x / 100 ;
y = y / 100 ;
 
int rotateX = (x-493)/1.30; //obtain anble
myservoX.write( 90-rotateX );
Serial.print("X:") ;
Serial.print(x) ;
Serial.print(" ") ;
Serial.print(rotateX) ;
 
int rotateY = (y-488)/1.23;
myservoY.write( 90-rotateY );
Serial.print(" Y:") ;
Serial.print(y) ; // Y axis
Serial.print(" ") ;
Serial.println(rotateY) ; // Y axis
delay(10) ;
}

 


5. 测试!

这次我们有了足够的功率,但是支架的运动仍然很有趣……

在上面的视频中,用手握住设备时,加速度计可以捕获最轻微的摇动。即使传感器轴对齐,也会出现到一些不同角度的意外运动。解决这个问题对于平滑旋转和未来改进来说至关重要。

运动(或摇动)与相机(或智能手机)的重量成比例。如果物体小而轻,移动就相对轻微;但是如果放置像智能手机那样较重的物体,摇晃就会很严重。还应该改进该程序以提高性能并提高可靠性。

我们的最终目标是创建一个像下面的产品一样稳定的云台:

似乎很多人都尝试用无人机这样做。有些无人机可以保持稳定的姿态,所以该设备可能更适合无人机。

 

今天,我们重新制作了 第1部分第2部分构建的水平相机云台。我们对云台的机械设计进行了一些改进,但是随着项目的进一步推进,我们发现了更多的挑战。我们仍然无法顺利控制云台。现在,该设备只能说仍处于测试阶段,但是我们不会善罢甘休。我们一定会在不久的将来重新解决这个问题,并使其成为一个功能正常的设备。

DevicePlus 编辑团队
DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

使用MATLAB进行数字信号处理简介-第1部分

埃隆•马斯克的毁灭开关理论和机器人标准需求分析

相关文章

  1. how-to-make-eobot_02_19

    “魅力四射”的机器人制作【下篇】

  2. “魅力四射”的机器人制作【上篇】

  3. 用Arduino和TOF距离传感器制作甜甜圈播放器【后篇】

  4. 用Arduino和TOF距离传感器制作甜甜圈播放器【前篇】

  5. 1-1

    Arduino电子制作总结!基于微控制器的电子制作基础之基础篇

  6. 用Arduino制作的太阳能电池板供电数字养殖箱【前篇】

    用Arduino制作的太阳能电池板供电数字养殖箱【前篇】

  7. 使用D/A转换器灵活控制电压并使用Arduino输出模拟信号的方法

  8. 在最后一刻停下来!用Arduino和距离传感器制作小鸡赛车!(第3篇•最终篇)

Arduino入门指南

基础知识

EMC


TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南
  • Raspberry Pi初学者指南
  • 技术动态
PAGE TOP