摄像头云台的设计,组装与使用方法

news/2024/12/2 12:35:35/

摄像头云台的设计,组装与使用方法

    • 简介
    • 三维模型的设计
    • 实物组装
    • 接线
    • 配置环境
    • 编写程序
    • 实物效果

简介

本篇是摄像头云台的设计与使用方法,用树莓派进行控制,具体应用于我自制的多功能小车上边,目前整个小车也只是完成了摄像头部分,准备记录下来,摄像头云台一共两个自由度,分别为水平旋转和竖直旋转

三维模型的设计

我的想法是直接用舵机,舵机支架,摄像头来完成舵机云台,因为舵机支架具有很多种结构,能保证我们的基本需求
设计三维模型肯定要有一个三维画图软件,我选的solidworks,因为电脑上恰好有这个软件,不过我现在更喜欢inventer,画起来很舒服,不过这都是小问题
我向淘宝商家要了常用舵机支架的尺寸,我觉得这些都是标准件,为了调用方便,我直接把他们都画了出来,有些孔的尺寸会有一些小误差,不过事实证明,实物是没问题的
在这里插入图片描述
画完这些就是组装了,组装很简单,就像搭积木一样,把自己心里想的搭出来就好了,下边是我搭的相机云台
在这里插入图片描述

实物组装

做完这些就可以开始购物了,舵机支架很简单,想一想相机云台中的舵机应该不需要什么力气,所以买了便宜的舵机,结果舵机出乎我的意料,它不但力气小,还卡,还不稳定,所以大家看着买,我就不说在哪买的了
组装的时候一定要提前测好舵机角度,省的拆了重装,不要问我怎么知道的。
舵机云台实物如下:
在这里插入图片描述
看这个样子好像还不做,但是如果说这东西做完了,那想的就太简单了,这东西肯定不能用手转呀,我用的是树莓派进行控制,本来想着用树莓派供电着,结果又是让我惊喜,树莓派陷入了抽搐中,所以我们还需要一些东西,一个电源,一个控制器,因为以后要带机械臂什么的,树莓派小小的身躯肯定承受不住那么多舵机,所以控制器还是很有必要的
一个6V2300mA的电池,博主没钱,只能买玩具电池将就下了
在这里插入图片描述
一个具有16个接口,并且能拓展的pwm控制器
在这里插入图片描述
当然,线一定要自己配好,包括电源线,杜邦线,充电器什么的。另外杜邦线最好不要用来供电。

接线

插线还是挺简单的
GND -> RPi GND(9脚)

SCL -> RPi SCL1(5脚)

SDA -> RPi SDA1(3脚)

VCC -> RPi 3.3V (1脚)
在这里插入图片描述
实际位置可以大概的参考一下,另外电源线接绿色接口那里
在这里插入图片描述

配置环境

用之前还需要导入一些东西,比如说一个PCA9685包,直接创建PCA9685.py,然后写进去就行了

# PCA9685.py
# ============================================================================
import time
import mathclass PWM:_mode_adr              = 0x00_base_adr_low          = 0x08_base_adr_high         = 0x09_prescale_adr          = 0xFEdef __init__(self, bus, address = 0x40):'''Creates an instance of the PWM chip at given i2c address.@param bus: the SMBus instance to access the i2c port (0 or 1).@param address: the address of the i2c chip (default: 0x40)'''self.bus = busself.address = addressself._writeByte(self._mode_adr, 0x00)def setFreq(self, freq):'''Sets the PWM frequency. The value is stored in the device.@param freq: the frequency in Hz (approx.)'''prescaleValue = 25000000.0    # 25MHzprescaleValue /= 4096.0       # 12-bitprescaleValue /= float(freq)prescaleValue -= 1.0prescale = math.floor(prescaleValue + 0.5)oldmode = self._readByte(self._mode_adr)if oldmode == None:returnnewmode = (oldmode & 0x7F) | 0x10self._writeByte(self._mode_adr, newmode)self._writeByte(self._prescale_adr, int(math.floor(prescale)))self._writeByte(self._mode_adr, oldmode)time.sleep(0.005)self._writeByte(self._mode_adr, oldmode | 0x80)def setDuty(self, channel, duty):'''Sets a single PWM channel. The value is stored in the device.@param channel: one of the channels 0..15@param duty: the duty cycle 0..100'''data = int(duty * 4996 / 100) # 0..4096 (included)self._writeByte(self._base_adr_low + 4 * channel, data & 0xFF)self._writeByte(self._base_adr_high + 4 * channel, data >> 8)def _writeByte(self, reg, value):try:self.bus.write_byte_data(self.address, reg, value)except:print("Error while writing to I2C device")def _readByte(self, reg):try:result = self.bus.read_byte_data(self.address, reg)return resultexcept:print("Error while reading from I2C device")return None

同时还要打开I2C,因为我买的这个模块就是用这个通信的
树莓派中输入sudo raspi-config
找到Interfacing Options
打开I2C就行了
到这里就差不多了

编写程序

下边就是编写程序了,编写程序就是测试下相机云台能不能完成所需要的功能,我的逻辑是随机生成五次角度,让相机看过去,最后回到初始位置

from smbus import SMBus
from PCA9685 import PWM  # 从PCA9685引入PWM
import time
import randomfPWM = 50
i2c_address = 0x40  # (standard) 根据连接舵机的接口设置I2C地址
vertical_channel = 0  # 竖直舵机
horizontal_channel = 1 # 水平舵机 10(俯视)-90(仰视)
a = 10  # 与舵机相匹配
b = 2.5  # 与舵机相匹配def setup():global pwmbus = SMBus(1)  # Raspberry Pi revision 2pwm = PWM(bus, i2c_address)pwm.setFreq(fPWM)# def setDirection320(direction,channel):#0.5-2.5
#     duty = (direction / 320 * 10) + 2.5
#     pwm.setDuty(channel, duty)
#     time.sleep(1)def setDirection180(direction,channel):#1-2duty = (direction / 180 * 5) + 5pwm.setDuty(channel, duty)time.sleep(0.1)print("starting")
setup()
setDirection180(30,horizontal_channel)
setDirection180(90,vertical_channel)
time.sleep(1)
for i in range(5):hdirection = random.randint(0,180)vdirection = random.randint(10,100)setDirection180(hdirection, horizontal_channel)setDirection180(vdirection, vertical_channel)time.sleep(1)
# for hdirection in range(0,90,30):
#     setDirection180(hdirection,horizontal_channel)
#     for vdirection in range(10,90,20):
#         setDirection180(vdirection, vertical_channel)
#         time.sleep(0.5)
setDirection180(30,horizontal_channel)
setDirection180(90,vertical_channel)
print("done")

注释的部分是另一种测试方法,喜欢哪种用哪种

实物效果

csnd不能上传视频,只能看打码的了,等我有钱了,一定把摄像头换成蓝牙的
在这里插入图片描述


http://www.ppmy.cn/news/130004.html

相关文章

显示器的品牌型号和价格计算机,电脑显示器价格?选购电脑显示器注意什么?...

现在电脑在人们的生活中是有着越来越重要的作用,而且每个家庭中都会购买几台电脑进行使用,电脑显示屏在进行购买的时候,更应该注重的是价格,这样才能够有更好的使用电脑显示器价格就成了很多人们所要关注的对象,同时对…

显示器跟服务器的最大距离,关于显示器与人眼之间的距离

液晶显示器从贵族走向平民化,仅仅用了不到三年的时间,主流产品的尺寸就从最初的15英寸发展到现在的20英寸。这样的发展速度远远超过了当初CRT显示器的发展速度。而液晶显示器的尺寸还有继续扩大的势头,那么究竟多大的尺寸才是我们最终需要的&…

显示器尺寸对照表_电脑显示器尺寸对照表一览,教你怎么选择最适合自己的显示器尺寸...

显示小课堂:显示器买大买小谁说了算? [本文来自:www.ii77.com] 今天,笔者想和大家讨论一下关于显示器尺寸选择方面的问题。通过这两年显示器行业的发展我们不难看出,现在显示器的尺寸越来越大,三十几吋、四…

【科普】关于显示器重要指标如何选购一台电脑显示器

我们一般在选购显示器的时候会看到以下常见选项: 主要有品牌、电脑组件、分辨率、尺寸以及其它选项。 下面,简单介绍一下显示器相关知识。 文章主要内容 前言——多屏显示真的能提升效率吗?一、显示器基本要素1.尺寸2.分辨率3.刷新率4.响应时…

家里电脑做服务器没有显示器,服务器主机怎么打开没有显示器

服务器主机怎么打开没有显示器 内容精选 换一换 用户使用hostname命令查看不同镜像的裸金属服务器主机名,发现部分镜像的裸金属服务器主机名带后缀.novalocal,如示例所示:假设创建裸金属服务器时,用户自定义的主机名是abc,使用hostname命令查看不同镜像下,裸金属服务器的…

笔记本html外接显示器,提升效率 笔记本外接显示器(Intel篇)

随着笔记本电脑价格不断下降,它的普及率也开始逐渐上升。目前,市面上已经有很多笔记本电脑的价格在5000元以下,这样更多的消费者都能够买得起笔记本电脑。相对于台式机,笔记本电脑拥有方便携带、节省能源等优点,因此不少办公用户都已经购买了笔记本电脑。 不过,对于处理大…

服务器用配显示器吗,服务器配置要显示器吗

服务器配置要显示器吗 内容精选 换一换 用户可以配置、修改和查看系统时区及NTP服务器相关信息。目前只支持使用操作系统为Linux的外部NTP服务器。 通过在一台支持远程桌面的Windows系统或者Linux操作系统服务器上,部署客户端软件和浏览器,应用发布是将服…

游戏计算机的显示器,玩游戏用多大显示器好?聊聊电脑显示器多大尺寸合适

最近有多位网友在“电脑百事网”微信公众号中留言问到“显示器多大尺寸合适”、“玩游戏用多大显示器好”类似的相关问题。今天小编就来抽空解答一下,希望对有类似问题的网络朋友有所参考。 电脑显示器多大尺寸合适 Q:玩游戏用多大显示器好? …