主要材料

1、树莓派3 X1

2、摄像头模块 X1

3、9G 180°微型舵机 X2

4、迷你平移/倾斜照相机平台 防振照相机支架(2个舵机)

5、电阻1K欧姆 X2(可选)

6、金属部件

7、固定带等(用于构建云台平台)

你可以购买一个成品的云台平台舵机或自己制作。

PWM如何工作

树莓派不能直接输出模拟电信号,但我们可以使用PWM(脉宽调制)方法来模拟这一点。我们制作一个固定频率的数字信号,在那里我们将改变脉冲宽度,将“转换”改为“平均”输出电压的电平,如下图所示:

我们可以使用这个“平均”电压水平来控制LED亮度,例如:

请注意频率本身不是重点,而是“占空比”,即脉冲“高”的时间除以波周期之间的关系。例如,假设我们在树莓派的 GPIO上产生一个50Hz的脉冲频率。周期(p)将是频率的倒数或20ms(1 / f)。如果我们的LED达到“半”亮度,我们的占空比必须为50%,这意味着“脉冲”将是10ms的“高”。

这个原理对于我们来说非常重要,一旦使用“占空比”来定义舵机位置,如下所示,它用于控制舵机的位置。

安装部件

舵机将连接到外部5V电源,其数据引脚(我的项目中,黄色接线)连接到树莓派GPIO如下:GPIO 17 ==>仰角舵机

GPIO 27 ==>平移舵机

不要忘记将GND连接在一起 ==> 树莓派 - 舵机 - 外部电源你可以在树莓派的GPIO和服务器数据输入引脚之间串联一个1K欧姆的电阻。 如果发生舵机故障,这将保护你的树莓派。

舵机的校准

1、首先你要弄清楚你购买到的舵机的主要特点。在这个项目中,我使用的是Power Pro SG90。

以下是它的数据表,我们可以参考一下:范围:180°

电源:4.8V(外部可使用USB 5VDC电源)

工作频率:50Hz(周期:20 ms)

脉冲宽度:从1ms到2ms

2、理论上,舵机运转的位置初始位置(0°):1ms脉冲到数据终端。

中间位置(90°):1.5ms脉冲到数据终端。

最终位置(180°):2 ms脉冲到数据终端。

3、使用Python编写舵机位置,了解上述位置相应的“占空比”非常重要,我们来做一些计算:初始位置==>(0°)脉冲宽度==> 1ms ==>占空比= 1ms / 20ms ==> 2.0%

中间位置(90°)==> 1.5 ms的脉冲宽度==>占空比= 1.5ms / 20ms ==> 7.5%

最终位置(180°)==> 2 ms的脉冲宽度==>占空比= 2ms / 20ms ==> 10%

所以占空比应该在2%到10%的范围内变化。

4、单独测试舵机

打开树莓派终端并以“sudo”启动你的 Python 3 shell 编辑器(你可能是“超级用户”来处理GPIO):sudo python3

在Python Shell上导入RPI.GPIO模块并作为GPIO:import RPi.GPIO as GPIO

定义你自己想要使用引脚编号方案(BCM或BOARD)。我用BOARD做了这个测试,所以我使用的引脚为物理引脚(GPIO 17 =引脚11和GPIO 27引脚13)。对我来说,很容易识别它们,并且在测试过程中不会犯错误(在最终的程序中,我将使用BCM)。按照自己的喜好来选择:GPIO.setmode(GPIO.BOARD)

定义你要使用的舵机引脚:tiltPin=11

如果你已经使用了BCM方案,相反的,将最后2个命令应该替换为:GPIO.setmode(GPIO.BCM)

tiltPin=17

现在,我们必须指定这个引脚将为“输出”GPIO.setup(tiltPin, GPIO.OUT)

而且,这个引脚上产生的频率,对于我们的舵机来说应该是50Hz:tilt = GPIO.PWM(tiltPin, 50)

现在,让我们开始在引脚上设置一个初始占空比(我们将它保持为“0”)的PWM信号:tilt = start(0)

现在,你可以输入不同的占空比值,观察舵机的运动。让我们从2%开始,看看会发生什么(我们观察舵机从“零位”开始):tilt.ChangeDutyCycle(2)

我项目的情况是,当我将占空比改为3%时,舵机进入零位。我观察到舵机停留在同一位置,开始以大于3%的占空比移动。所以,3%是我的初始位置(o°)。同样的情况发生在10%,我的舵机超过这个数值,最终达到13%。所以对于这个舵机,最终结果是:

0°==>占空比3%

90°==>占空比8%

180°==>占空比13%

完成测试后,你必须停止PWM并清理GPIO:tilt= stop()

GPIO.cleanup()

上面终端将打印出屏幕显示的数据,我两个舵机的结果非常的相似。你的范围可以不同。

创建 Python 脚本

正如我们在上一步所看到的那样,发送到我们舵机的PWM命令要与“占空比”相对应。但通常情况下,我们必须以角度作为参数来控制舵机。因此,我们必须将“角度”转换为我们工作周期中比较常见的常量,要被Pi所理解的。

怎么做?很简单!我们知道占空比范围从3%到13%,这相当于从0到180度范围内的角度。另外,我们知道这些变化是线性的,所以我们可以构建一个如上所示的比例模式。所以,给定一个角度,我们可以有一个相应的工作周期:

dutycycle = angle/18 + 3

保存这个公式。 我们将在下一个代码中使用它。

我们来创建一个Python脚本来进行测试。 基本上,我们将重复我们之前在Python Shell上做的事情:from time import sleep

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

def setServoAngle(servo, angle):

pwm = GPIO.PWM(servo, 50)

pwm.start(8)

dutyCycle = angle / 18. + 3.

pwm.ChangeDutyCycle(dutyCycle)

sleep(0.3)

pwm.stop()

if __name__ == '__main__':

import sys

servo = int(sys.argv[1])

GPIO.setup(servo, GPIO.OUT)

setServoAngle(servo, int(sys.argv[2]))

GPIO.cleanup()

上述代码的核心是设置舵机和角度的函数。 该函数接收参数、舵机、 GPIO编号和舵机必须定位的角度值。 一旦这个函数的输入是“角度”,我们必须使用之前开发的公式将其转换为百分比的占空比。

脚本执行时,必须输入参数,舵机GPIO和角度。

例如:

sudo python3 angleServoCtrl.py 17 45

上述命令会将舵机连接到GPIO 17并且以“仰角”45度定位。 一个类似的命令可以用于平移伺服控制(在“方位角”中位置为45度):

sudo python angleServoCtrl.py 27 45

文件 angleServoCtrl.py 可以在我的 GitHub 下载。

平台移动机制

“平板”舵机将“水平”移动摄像机(“方位角”),而我们的“仰角”舵机将“垂直移动”(仰角)。

下图显示了云台机制的工作原理:

在项目进行过程中,我们不会走向“极端”,我们只能使用30到150度的云台机制。 这个范围足够用于相机。

平台机械结构

现在将两个舵机作为云台进行组装。 你可以在这里做两件事。 购买一个平台或根据您的需求构建自己的平台机制。

我做了一个样板出来,只是将两个舵机捆绑在一起,并用上图中所示的旧玩具的小金属件搭建起来。

组装电动云台组件

组装好云台机制后,请按照图片进行全面电气连接。

1、关闭你的Pi。

2、进行所有电气连接。

3、仔细检查它。

4、首先打开你的Pi。

5、如果一切正常,请给舵机供电。

本教程中我们不会将如何设置相机进行展开。

Python 脚本

让我们创建一个Python脚本来同时控制两个舵机:from time import sleep

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

pan = 27

tilt = 17

GPIO.setup(tilt, GPIO.OUT) # white => TILT

GPIO.setup(pan, GPIO.OUT) # gray ==> PAN

def setServoAngle(servo, angle):

assert angle >=30 and angle <= 150

pwm = GPIO.PWM(servo, 50)

pwm.start(8)

dutyCycle = angle / 18. + 3.

pwm.ChangeDutyCycle(dutyCycle)

sleep(0.3)

pwm.stop()

if __name__ == '__main__':

import sys

if len(sys.argv) == 1:

setServoAngle(pan, 90)

setServoAngle(tilt, 90)

else:

setServoAngle(pan, int(sys.argv[1])) # 30 ==> 90 (middle point) ==> 150

setServoAngle(tilt, int(sys.argv[2])) # 30 ==> 90 (middle point) ==> 150

GPIO.cleanup()

脚本执行时,必须输入参数,平移角度和倾斜角度。 例如:sudo python3 servoCtrl.py 45 120

上述命令将使“水平/倾斜”平台在“方位角”(水平角)和120度“仰角”(倾斜角)方向上定位为45°。 请注意,如果未输入任何参数,则默认平移和倾斜角度均为90°。

在下面你可以看到一些测试:

文件servoCtrl.py可以在我的GitHub下载。

服务器的环路测试

现在让我们创建一个Python脚本来自动测试所有的舵机:from time import sleep

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

pan = 27

tilt = 17

GPIO.setup(tilt, GPIO.OUT) # white => TILT

GPIO.setup(pan, GPIO.OUT) # gray ==> PAN

def setServoAngle(servo, angle):

assert angle >=30 and angle <= 150

pwm = GPIO.PWM(servo, 50)

pwm.start(8)

dutyCycle = angle / 18. + 3.

pwm.ChangeDutyCycle(dutyCycle)

sleep(0.3)

pwm.stop()

if __name__ == '__main__':

for i in range (30, 160, 15):

setServoAngle(pan, i)

setServoAngle(tilt, i)

for i in range (150, 30, -15):

setServoAngle(pan, i)

setServoAngle(tilt, i)

setServoAngle(pan, 100)

setServoAngle(tilt, 90)

GPIO.cleanup()

程序将自动从30°到150°两个角度进行循环。

结果如下:

我只连接了一台示波器来说明如前所述的PWM理论。

以上源代码 servoTest.py 可以在GitHub下载。

结语

一如既往,我希望这个项目能够帮助他人进入激动人心的电子世界!

有关详细信息和最终代码,请访问我的 GitHub 仓库:RPi-Pan-Tilt-Servo-Control

树莓派云台舵机怎么用_教程 - 由多个舵机控制的云台 - MAKE 趣无尽相关推荐

  1. 树莓派云台舵机怎么用_基于树莓派的多舵机控制的定位拍照云台

    在本教程中,我们将探讨如何在树莓派上使用Python控制多个舵机. 我们的目标是制作一个支持多自由度定位拍照的云台.在这里,你可以看到我们的成品是如何工作的. 主要材料 1.树莓派3 X1 2.摄像头 ...

  2. 树莓派输出pwm波c语言,树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制

    树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制 树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制 一:pigpio库简介 pigpio是一个用于树莓派的库 ...

  3. STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)

    01 前言 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口.SWD下载调试接口.航模遥控接口.USB5V输出接口以及方便与树莓派直接连接的40PIN接口等,板载资源丰富 ...

  4. 淘宝二手优必选舵机保姆级驱动教程,看不懂来打我(自行修改ID,有HAL库驱动函数)

    1.首先,先检查舵机的好坏. 本身优必选舵机的连接线属于稀缺物品,所以经本人实验,使用PH2.0 3P端子口也可以供电,但要剪掉端口背面的一小段塑料凸起. 另:24齿的舵机也已经测试过可以兼容淘宝有售 ...

  5. 树莓派摄像头c语言,树莓派图像处理之摄像头安装+配置教程

    树莓派图像处理之摄像头安装+配置教程 本文简单讲讲树莓派如何安装摄像头,以及一些配置和简单使用 树莓派的主板上有一个专门为摄像头模块预留的接口:CSI(Camera Serial Interface) ...

  6. Vue _ 教程版 02 指令

    目录 目标 一.模板语法 1.1.插值表达式 1.2.指令 1-2-1. v-text 指令 1-2-2. v-html 指令 二.常用指令 2.1.v-show 指令 2.2.v-if 指令 2.3 ...

  7. 【伺服电机/舵机与Arduino使用教程】

    伺服电机/舵机与Arduino使用教程 什么是伺服电机? 伺服电机的类型 模拟伺服电机 伺服系统如何工作? 连续旋转伺服电机 伺服电机控制信号 连续旋转伺服电机时序 速度 力矩 工作电压 伺服电机连接 ...

  8. 树莓派3B摄像头的详细使用教程(拍照+录像+监控)

    树莓派4B摄像头的详细使用教程(拍照+录像+监控) 本篇博文将介绍树莓派摄像头是如何在树莓派开发板上从安装到使用的,博主过程中参考了许多帖子,现将整理的比较全面的过程分享出来,供大家参考使用. 排线连 ...

  9. 树莓派4B摄像头的详细使用教程(拍照+录像+监控)

    树莓派4B摄像头的详细使用教程(拍照+录像+监控) 本篇博文将介绍树莓派摄像头是如何在树莓派开发板上从安装到使用的,博主过程中参考了许多帖子,现将整理的比较全面的过程分享出来,供大家参考使用. 排线连 ...

最新文章

  1. shell训练营Day18
  2. java源码阅读LinkedList
  3. ajax与微服务,微服务 - 如何解决跨域
  4. UTF-8 BOM
  5. 爱计算机辅助筛查肺结节,计算机辅助检测系统提高CT肺结节检出方式的研究
  6. Python Pandas –操作
  7. 七、配置ssh keys连通github跟ssh-agent
  8. 去哪网实习总结:JavaWeb配置404页面(JavaWeb)
  9. ubuntu下mysql无法启动_升级Ubuntu到10.04后MySQL无法启动
  10. 双十一大战收官:荣耀反超苹果,以新思维新模式傲视群雄
  11. python类的多态_8.python之面相对象part.6(python类中的多态与多态性)
  12. 深入浅出统计学读后感
  13. mysql max() grou by 的使用小记
  14. 《SPSS从入门到精通》笔记(1-4章)
  15. 平安夜 送自己一个小博客
  16. 揭开MySQL数据库的神秘面纱!
  17. 带你几分钟学会MarkDown基本语法
  18. 【设计相关】UML类图和时序图介绍
  19. 李宝财 PHP,【李宝财】姓名测试打分,起名字测试打分李宝财,李宝财名字打分测试,李宝财测名字打分,【李宝财】名字测分,姓名测试网...
  20. 原画师需要用到什么工具?绘画工具大全!

热门文章

  1. vue 仿网易云音乐项目
  2. Windows 2016 server NVIDIA cuda toolkit11.3 pytorch-gpu 踩坑教程
  3. 消失的网秦:创始人遭绑架 414 天,睡觉都戴手铐
  4. 【Selenium】Selenium的3种等待方式
  5. html 自动生产,HTML5 Three.js 3D人偶玩具自动化生产车间动画
  6. 【已解决】Latex如何打出△这个符号
  7. 通过javascript获取sharepoint数据,使用JS导出Excel
  8. 高考恋爱100天 完全攻略
  9. Matlab--优化工具箱
  10. 花洒水龙头加州节水认证CEC