树莓派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模块控制舵机(机械臂)附完整代码相关推荐

  1. 树莓派控制16路PWM输出的PCA9685模块

    树莓派控制16路PWM输出的PCA9685模块 1.PCA9685 1.1简介 采用I2C通信,内置了PWM驱动器和一个时钟,不需要不断发送信号占用单片机资源 支持16路PWM输出,每路12位分辨率( ...

  2. PCA9685:I2C转16路PWM,助力你的系统

    PCA9685:I2C转16路PWM,助力你的系统 1 基本介绍 1.1 该IC主要参数特征如下: I2C接口,支持高达16路PWM输出,每路12位分辨率(4096级) 内置25MHz晶振,可不连接外 ...

  3. STM32F103单片机生成16路PWM波

    单片机输出pwm波在项目中是恨常用的一个功能,今天就总结一下用STM32F103C8T6单片机输出16路 pwm波. 使用keil5软件,用标准库函数来实现. 首先看定时器初始化 void TIM1_ ...

  4. STM32F103 16路PWM 配置

    1. 前言 底层库:基于原子的标准库函数 适用芯片:STM32F103系列型号芯片,其他型号未测试(注:已测型号:C8T6.CBT6.RCT6.RET6.ZET6) 所用到的定时器:TIM1.TIM2 ...

  5. 【雕爷学编程】Arduino动手做(161)---16路PWM舵机驱动板PCA9685

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  6. 集成两路MAX1169的STC8G1K08模块,带有两路PWM输出

    ■ 设计背景 在 集成有MAX1169,MAX520的DAAC单片STC8G1K08机电路板 中设计了集成有MAX1169的ADDA模块,对于一些需要使用PWM驱动的实验,这款模块还无法进行集成实验. ...

  7. 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM

    01树莓派直接输出PWM波 -- 硬件PWM程序  (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...

  8. 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护

    1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...

  9. 12. GD32F103C8T6入门教程-定时器-3路pwm输出

    1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...

最新文章

  1. 填问卷赢280元SaaS峰会门票 与Salesforce、Zenefits现场交流!
  2. Android中实现Bitmap在自定义View中的放大与拖动
  3. Oracle私房菜之安装Oracle 11g
  4. 全球及中国蓝牙智能锁行业发展格局及投资经营效益分析报告2022-2027年
  5. foreach无法给外部变量赋值(Local variable decimal defined in an enclosing scope must be final or effectively )
  6. GO tcp server demo
  7. python数据分析报告主题_【原创】python主题LDA建模和t-SNE可视化数据分析报告论文(代码数据)...
  8. 【项目管理】项目进度管理的关键路径
  9. 三星GalaxyS21或取消附赠有线耳机:捆绑卖新款无线耳机
  10. deepin系统安装成功了之后重启电脑没有deepin启动选项的简单解决办法
  11. 网传快手大幅度裁员30%
  12. Android Spinner 设置setOnItemSelectedListener时,竟会默认触发一次事件!
  13. 使用springboot自带 MD5加密
  14. matlab图像的邻域操作,matlab图像的邻域操作与块操作 | 学步园
  15. [ZT]用CSC.exe来编译Visual C#的代码文件,解释CSC参数和开关的具体作用
  16. matlab两条曲线方程求交点_matlab中已知两曲线方程,怎样求两曲线交点并标注出?...
  17. 自用软件系列之:迅雷X ,无广告,纯净版
  18. python爬虫实践(三)——爬取煎蛋网图片
  19. 简单手机短信发送软件
  20. Tesseract学习(三)

热门文章

  1. Linux配置PHP环境
  2. Oracle索引概述
  3. filter(matlab2C)
  4. Midjourney API 接口对接历程
  5. 微信小程序用什么编写
  6. ios从打包到上架全过程
  7. 喜讯!双驰企业正式成为欧盟地平线2020 项目合作伙伴
  8. 插座质检报告办理第三方检测
  9. IEC61499开源项目FORTE部分源码分析
  10. 《半小时漫画中国哲学史》——读书笔记