利用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 编辑团队

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

相关文章

  1. smart garden

    利用Arduino Create和ROHM传感器评估套件制作智能花园系统

  2. arduino

    使用Arduino进行USB音量控制

  3. gui in matlab

    数字信号处理第4部分—在MATLAB中创建GUI

  4. arduino robot

    利用Parallax激光传感器制作Arduino激光机器人—第1部分

  5. arduino communication

    Arduino通信协议教程

  6. ROHM传感器评估套件的3D外壳以及RohmMultiSensor库更新

  7. arduino sensors

    用ROHM Arduino传感器套件打造DIY万圣节僵尸面具

  8. arduino home security system

    采用ROHM传感器套件的DIY Arduino家庭安防系统 第1部分-机制

  9. camera sensor

    CMUcam5 Pixy视觉相机传感器简介

TECH INFO

  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • 热设计
  • 仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


PICK UP!

  1. 刘铭
  2. ROHM开发出业界先进的第4代低导通电阻
PAGE TOP