pca9685学习资料在我的这篇BLOG:【学习笔记】——16路PWM舵机驱动板(PCA 9685) + Arduino:https://blog.csdn.net/qq_42807924/article/details/82229997
连接方式:
例程:main,py
# Servo Shield Example.
#
# This example demonstrates the servo shield. Please follow these steps:
#
# 1. Connect a servo to any PWM output.
# 2. Connect a 3.7v battery (or 5V source) to VIN and GND.
# 3. Copy pca9685.py and servo.py to OpenMV and reset it.
# 4. Connect and run this script in the IDE.
import time
from servo import Servos
from machine import I2C, Pin
i2c = I2C(sda=Pin('P5'), scl=Pin('P4'))
servo = Servos(i2c, address=0x40, freq=50, min_us=650, max_us=2800, degrees=180)
while True:
for i in range(0, 8):
servo.position(i, 0)
time.sleep(500)
for i in range(0, 8):
servo.position(i, 180)
time.sleep(500)
自己写代码:
#定义一个底座运行模块
def chassis_angle_analy():
print('进入底座运行')
x_chassis_ball = 30.0
y_chassis_ball = 200.0
chassised_angle=0
chassis_angle=0
while (1):
chassised_angle=math.atan(x_chassis_ball/y_chassis_ball) #得到相对弧度
chassised_angle=chassised_angle*180/3.14 #转换成角度
chassised_angle=90-chassised_angle/0.34 #0.34=50/17 转换成舵机绝对角度
print('底盘绝对角度是:')
print( chassised_angle)
if 0<=chassised_angle<=180:
while(chassis_angle<chassised_angle):
servo.position(0,chassis_angle)
chassis_angle+=1
time.sleep(30)
while(chassis_angle>chassised_angle):
servo.position(0,chassis_angle)
chassis_angle-=1
time.sleep(30)
else:
print('底座角度已经超出范围!')
break
#手爪收紧函数
def hand_hold():
pass
print('手爪收紧')
hand_angle=160
max_hand_angle=160#手爪初始状态
min_hand_angle=60
while(min_hand_angle<=hand_angle):
hand_angle+=1
servo.position(4,hand_angle)
time.sleep(30)
#抓到球三个电机回收的动作
def catchedback():
print('恢复位置')
while(elbow_angle!=max_elbow_angle or arm_angle!=max_arm_angle or chassis_angle!=90)
pass
i=3
while(i>=0):
#底座,手臂,肘,手爪,对应0,1,2,3
i=i-1
if i==2 and elbow_angle<=max_elbow_angle
servo.position(i,elbow_angle)
elbow_angle++
elif i==1 and arm_angle<=max_arm_angle
servo.