树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码
树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码
文章目录
- 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码
- 一、 Servo Driver HAT拓展板介绍
- 二、2开启I2C
- 三、安装相关驱动
- 四、通过代码驱动舵机(机械臂)
- 4.1舵机的初始位置校准
- 4.2完整代码
内容参考微雪课堂
一、 Servo Driver HAT拓展板介绍
Servo Driver HAT是基于树莓派而设计的PWM/舵机扩展板,通过PCA9685芯片扩展16路舵机控制或者PWM输出,每个通道12位分辨率。通过I2C接口控制,无需占用额外的引脚。板载5V稳压芯片,可接电池供电,最大输出3A电流。适用于控制机械手臂,以及各种舵机机器人。
输入电压VIN:6V~12V
舵机电压:5V
逻辑电压:3.3V
板子可以从树莓派上取电不需要额外供电。
也可以通过右边绿色端子VIN接电池供电,输入电压范围6V~12V。经过板载的5V稳压芯片输出5V电源给舵机和树莓派供电,最大输出电流3A。
A0~A4可以设置PCA9685芯片的I2C设备地址,可以同时接多个Servo Driver HAT
最上面的排针是舵机接口,黑色排针是GND(大部分舵机对应的是褐色线),
红色排针是5V电源,黄色排针是PWM信号线,有0~15个通道,可以同时接16个舵机。注意舵机线不要接反,否则舵机不会转动。
注意:
如果接大功率的舵机可能会出现供电不足,因为整个板子是5V的供电,这个5V连接着树莓派和舵机供电,功率太大会拉低树莓派5V电源,导致欠压树莓派重启,把板载上的0R电阻去除,右侧绿色VIN端子接外部电源(6-12V)
我操作的是两个机械臂一共十个舵机所以我外接了一个12V电源
二、2开启I2C
在终端执行
sudo raspi-config
Interfacing Options-->I2C-->YES-->Finish
保险起见 重启树莓派 终端输入
sudo reboot
三、安装相关驱动
安装相关库文件
sudo apt-get updata
sudo apt-get install python-pip
sudo pip install RPi.GPIO
sudo apt-get install python-smbus
2021.11.20更正 第一句命令应该为
sudo apt-get update
下载示例程序,并解压到指定目录
sudo apt-get install p7zip-full
wget http://www.waveshare.net/w/upload/6/6c/Servo_Driver_HAT.7z
7zr x Servo_Driver_HAT.7z -r -o./Servo_Driver_HAT
sudo chmod 777 -R Servo_Driver_HAT
cd Servo_Driver_HAT/Raspberry\ Pi/
解压后可以看见有一个名为PCA9685.py的文件 我们可以在 home/pi 上新建个文件夹 并把PCA9685.py这个文件放进这个文件夹 只有代码和库文件在同一个目录下才能正确调用
四、通过代码驱动舵机(机械臂)
4.1舵机的初始位置校准
这里用到函数 pwm.setServoPulse(5,500)
这个函数需要两个参数 第一个是通道号 第二个是脉冲 舵机根据脉冲调整角度 默认500为最小值 2500为最大值 所以当第二个参数为1500时为竖直状态
调整过程:在上电状态 将每个舵机参数设置为1500pwm.setServoPulse(5,1500)
将每个舵机都拆下并重新组装即可 (按实际情况而定如此机械臂底盘舵机就可不用另外调试)
4.2完整代码
from PCA9685 import PCA9685#调用PCA9685库文件
import timepwm=PCA9685(0x40)#对地址初始化
pwm.setPWMFreq(50)#对频率初始化def smooth(road,before,after):#对动作的优化函数通过传递上一次参数而一脉冲一脉冲改变 显得更加流畅if before <=after:for i in range(before,after+1,1):pwm.setServoPulse(road,i)else:for i in range(before,after+1,-1):pwm.setServoPulse(road,i)def action1():#开爪 直立pwm.setServoPulse(0,500)pwm.setServoPulse(1,1500)pwm.setServoPulse(2,1500)pwm.setServoPulse(3,1500)pwm.setServoPulse(4,500)def action2():#低头抓取smooth(1,1500,2200)smooth(3,1500,1000)smooth(2,1500,2300)#smooth(3,1000,1000)#pwm.setServoPulse(4,500)smooth(4,500,1500)def action3():#转向传递东西 smooth(1,2200,1500)smooth(2,2300,1900)smooth(3,1000,2000)smooth(4,1500,2000)smooth(0,500,2500)def action3h():#开爪低头呈递东西smooth(4,2000,600)smooth(2,1900,1500)smooth(3,2000,1500)smooth(4,500,1500)#函数1233h操控一号机械臂
#函数4567操控二号机械臂def action4():#2号机械臂开爪直立pwm.setServoPulse(5,500)pwm.setServoPulse(6,1500)pwm.setServoPulse(7,1500)pwm.setServoPulse(8,1500)pwm.setServoPulse(9,500)def action5():#低头接过1号机械臂呈递的东西smooth(7,1500,1850)smooth(8,1500,1970)smooth(9,500,1650)def action6():#转向开爪将东西放下smooth(5,500,1400)smooth(8,1970,1200)smooth(6,1500,2200)smooth(7,1850,2200)smooth(9,1650,500)def action7():#恢复直立回到初始位置闭爪smooth(6,2200,1500)smooth(7,2200,1500)smooth(8,1200,1500)smooth(9,500,1650)smooth(5,1400,500)action1()
action4()
action2()
action3()
time.sleep(1)
action5()
action3h()
action6()
action7()smooth(0,2500,500)#一号机械臂回到初始位置
创作不易,如果文章对你有帮助请点个赞吧。
欢迎各位提问或者对内容进行补充。
树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码相关推荐
- 树莓派控制16路PWM输出的PCA9685模块
树莓派控制16路PWM输出的PCA9685模块 1.PCA9685 1.1简介 采用I2C通信,内置了PWM驱动器和一个时钟,不需要不断发送信号占用单片机资源 支持16路PWM输出,每路12位分辨率( ...
- PCA9685:I2C转16路PWM,助力你的系统
PCA9685:I2C转16路PWM,助力你的系统 1 基本介绍 1.1 该IC主要参数特征如下: I2C接口,支持高达16路PWM输出,每路12位分辨率(4096级) 内置25MHz晶振,可不连接外 ...
- STM32F103单片机生成16路PWM波
单片机输出pwm波在项目中是恨常用的一个功能,今天就总结一下用STM32F103C8T6单片机输出16路 pwm波. 使用keil5软件,用标准库函数来实现. 首先看定时器初始化 void TIM1_ ...
- STM32F103 16路PWM 配置
1. 前言 底层库:基于原子的标准库函数 适用芯片:STM32F103系列型号芯片,其他型号未测试(注:已测型号:C8T6.CBT6.RCT6.RET6.ZET6) 所用到的定时器:TIM1.TIM2 ...
- 【雕爷学编程】Arduino动手做(161)---16路PWM舵机驱动板PCA9685
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...
- 集成两路MAX1169的STC8G1K08模块,带有两路PWM输出
■ 设计背景 在 集成有MAX1169,MAX520的DAAC单片STC8G1K08机电路板 中设计了集成有MAX1169的ADDA模块,对于一些需要使用PWM驱动的实验,这款模块还无法进行集成实验. ...
- 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM
01树莓派直接输出PWM波 -- 硬件PWM程序 (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...
- 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护
1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...
- 12. GD32F103C8T6入门教程-定时器-3路pwm输出
1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...
最新文章
- 填问卷赢280元SaaS峰会门票 与Salesforce、Zenefits现场交流!
- Android中实现Bitmap在自定义View中的放大与拖动
- Oracle私房菜之安装Oracle 11g
- 全球及中国蓝牙智能锁行业发展格局及投资经营效益分析报告2022-2027年
- foreach无法给外部变量赋值(Local variable decimal defined in an enclosing scope must be final or effectively )
- GO tcp server demo
- python数据分析报告主题_【原创】python主题LDA建模和t-SNE可视化数据分析报告论文(代码数据)...
- 【项目管理】项目进度管理的关键路径
- 三星GalaxyS21或取消附赠有线耳机:捆绑卖新款无线耳机
- deepin系统安装成功了之后重启电脑没有deepin启动选项的简单解决办法
- 网传快手大幅度裁员30%
- Android Spinner 设置setOnItemSelectedListener时,竟会默认触发一次事件!
- 使用springboot自带 MD5加密
- matlab图像的邻域操作,matlab图像的邻域操作与块操作 | 学步园
- [ZT]用CSC.exe来编译Visual C#的代码文件,解释CSC参数和开关的具体作用
- matlab两条曲线方程求交点_matlab中已知两曲线方程,怎样求两曲线交点并标注出?...
- 自用软件系列之:迅雷X ,无广告,纯净版
- python爬虫实践(三)——爬取煎蛋网图片
- 简单手机短信发送软件
- Tesseract学习(三)