0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

楼斌 来源:DevicePlus 作者:DevicePlus 2023-02-24 15:18 次阅读

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

目录

水平相机支架简介

设备规格

3D 打印安装部件

编写程序

测试!

poYBAGPzFnKAepoeAAHFe7FFJdA007.jpg

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

今天的电子食谱

预计完成时间:60分钟

所需部件:

Arduino UNO R3 或 Arduino Pro Mini

面包板

三轴加速度计 KXR94-2050

Towerpro MG996R 伺服电机

1. 水平相机支架简介

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

pYYBAGPzFnOANNYKAAEa2WZeXHo028.jpg

图1.稳定器

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

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

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

2. 设备规格

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

poYBAGPzFnWAEy4UAADikOfp1ZU049.jpg

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

poYBAGPzFneAZksCAAG7LONkd8M021.jpg

poYBAGPzFnmAI3i-AAGlhCOqORs997.jpg

3. 3D 打印安装部件

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

poYBAGPzFnuAMcLsAAF9_spGHUk597.jpg

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

poYBAGPzE6aAJ6EJAAFgvcBkgow166.jpg

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

pYYBAGPzFoCACUoYAAIDT6vGVcY901.jpg

三脚架组装如下所示:

poYBAGPzFoKAYO4pAAHWq6EzIYk185.jpg

pYYBAGPzFoSAMBIyAAFUBJnIUBg900.jpg

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

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) ;
}

poYBAGPzFoWAf2bZAAB1a6qdNP4573.jpg

pYYBAGPzFoeAGYSRAAE-oS_E-Y0054.jpg

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

pYYBAGPzFomAVvzjAAGHhTahw1I021.jpg

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

//********************************************
//Program 2 for acquiring accelerometer values
//********************************************
#include 
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部分构建的水平相机云台。我们对云台的机械设计进行了一些改进,但是随着项目的进一步推进,我们发现了更多的挑战。我们仍然无法顺利控制云台。现在,该设备只能说仍处于测试阶段,但是我们不会善罢甘休。我们一定会在不久的将来重新解决这个问题,并使其成为一个功能正常的设备。

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png

DevicePlus 编辑团队

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

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能手机
    +关注

    关注

    66

    文章

    18065

    浏览量

    177070
  • Arduino
    +关注

    关注

    184

    文章

    6428

    浏览量

    184848
收藏 人收藏

    评论

    相关推荐

    如何使用Arduino的蓝牙控制伺服电机

    使用伺服电机在机器人技术中很常见,以实现精确控制。在这里,在本教程中,我们将向您展示如何通过蓝牙连接将伺服电机与Arduino UNO和Android设备无线使用。我们已经使用
    发表于 11-16 16:19 2735次阅读
    如何使用<b class='flag-5'>Arduino</b>的蓝牙控制<b class='flag-5'>伺服</b>电机

    请教设计制作方案

    本人有一架多旋翼无人机,下面安装着一个三轴陀螺稳定台下面可以挂相机航拍。的作用是保持
    发表于 01-05 17:54

    DIY 相机稳定器,是省钱还是败家?

    上,这些需要慢慢的调试才行。 第七步:完成整个DIY的稳定器就完成了,其主要内核就是废弃的无人机利用,剩下其他的都没有什么技术含量,经过计算,整套稳定器制作下来,差不多成本在60
    发表于 11-04 16:04

    【转】人人都可以DIYArduino UNO智能灯(一)

    本文出自机智论坛,版权所有@bigfanofloT,转载请注明出处前言:本文使用arduino UNO板卡和esp8266无线WIFI模块实现了通过手机APP远程控制WS2812B型RGB LED
    发表于 06-15 14:48

    超声电机—的应用

    与外壳之间狭小空间安装微型超声电机伺服控制电路,作为运动控制部件,将微型高精度闭环控制系统安装在微型超声电机背部,
    发表于 09-30 11:11

    如何使用Arduino开发板控制多台伺服电机

    使用Arduino开发板控制一或两伺服电机非常容易实现,但是如果我们想要控制多台伺服电机时,
    发表于 06-28 08:01

    如何制作相机跟拍

    如何制作相机跟拍实现目标:当相机或拍摄对象向左或向右移动时,相机镜头也相应转动,始终对着
    发表于 12-05 09:05

    怎样用Arduino蓝牙控制伺服电机

    我在DIY Arduino&amp; amp;蓝牙机器人手臂,使用ESP8266的网络控制伺服Arduino操纵杆界面等等。实际上,伺服
    的头像 发表于 07-29 09:55 6789次阅读

    最简单DIY基于ESP32CAM的物联网相机系统⑤(用C#上位机实现串口图传)

    第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传)第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(
    发表于 11-30 15:51 22次下载
    最简单<b class='flag-5'>DIY</b>基于ESP32CAM的物联网<b class='flag-5'>相机</b>系统⑤(用C#上位机<b class='flag-5'>实现</b>串口图传)

    最简单DIY基于ESP32CAM的物联网相机系统④(用调试串口助手实现串口图传)

    第一篇:最简单DIY基于ESP32CAM的物联网相机系统①(用网页实现拍照图传)第二篇:最简单DIY基于ESP32CAM的物联网相机系统②(
    发表于 01-14 12:44 12次下载
    最简单<b class='flag-5'>DIY</b>基于ESP32CAM的物联网<b class='flag-5'>相机</b>系统④(用调试串口助手<b class='flag-5'>实现</b>串口图传)

    DIY ARDUINO UNO板

    电子发烧友网站提供《DIY ARDUINO UNO板.zip》资料免费下载
    发表于 08-19 09:28 7次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>ARDUINO</b> UNO板

    DIY Arduino角灯

    电子发烧友网站提供《DIY Arduino角灯.zip》资料免费下载
    发表于 11-02 10:46 1次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>Arduino</b>角灯

    DIY Arduino示波器

    电子发烧友网站提供《DIY Arduino示波器.zip》资料免费下载
    发表于 11-11 11:06 3次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>Arduino</b>示波器

    基于Arduino平台的DIY示波器

    电子发烧友网站提供《基于Arduino平台的DIY示波器.zip》资料免费下载
    发表于 11-30 14:23 6次下载
    基于<b class='flag-5'>Arduino</b>平台的<b class='flag-5'>DIY</b>示波器

    DIY Arduino电子沙漏

    电子发烧友网站提供《DIY Arduino电子沙漏.zip》资料免费下载
    发表于 02-06 11:09 9次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>Arduino</b>电子沙漏