1舵机驱动
参考博客:Jetson nano驱动舵机(非常简单!)_Wilbur11的博客-CSDN博客
SCL接GPIO5
SDA接GPIO3
vcc接3.3v
v+接5v,v+也可以通过控制器外接电源,但外接的电源也是5v
接线图
此处TX2与nano的GPIO接口相同
2 环境配置
sudo pip3 install -U \ adafruit-circuitpython-busdevice==5.1.2 \ adafruit-circuitpython-motor==3.3.5 \ adafruit-circuitpython-pca9685==3.4.1 \ adafruit-circuitpython-register==1.9.8 \ adafruit-circuitpython-servokit==1.3.8 \ Adafruit-Blinka==6.11.1 \ Adafruit-GPIO==1.0.3 \ Adafruit-MotorHAT==1.4.0 \ Adafruit-PlatformDetect==3.19.6 \ Adafruit-PureIO==1.1.9 \ Adafruit-SSD1306==1.6.2
查看设备
sudo i2cdetect -y -r 1
出现下面内容,则匹配成功
测试代码
from adafruit_servokit import ServoKit #引入PCA9685库
kit = ServoKit(channels=16) #明确PCA9685的舵机控制数
kit.servo[0].angle = 90 #channel0上的舵机旋转90。
kit.servo[0].angle = 90 #channel0上的舵机旋转90。
疯狂摇头丸
import time
from adafruit_servokit import ServoKit
kit = ServoKit(channels=16)
while True:
for i in range(0,180,1):
kit.servo[0].angle =i
kit.servo[1].angle =i
time.sleep(0.01)
for i in range(180,0,-1):
kit.servo[0].angle =i
kit.servo[1].angle =i
time.sleep(0.01)
3舵机键盘控制
import time
import cv2
from adafruit_servokit import ServoKit
kit = ServoKit(channels=16)
angl = 90
tilt = 90
step = 4
kit.servo[0].angle =angl
kit.servo[1].angle =tilt
cam = cv2.VideoCapture('rtsp://admin:JGSYS123@192.168.31.123/Streaming/Channels/2')
width = cam.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cam.get(cv2.CAP_PROP_FRAME_HEIGHT)
fnt = cv2.FONT_HERSHEY_COMPLEX
while True:
ret, frame = cam.read()
keyCode = cv2.waitKey(0) & 0xFF
#水平旋转控制
if keyCode == ord('a'):
angl = angl - step
if angl < 0:
angl = 0
frame = cv2.putText(frame, "out of range",(int(width/3), int(height/2)), fnt, 1, [0, 0, 255],2)
kit.servo[0].angle = angl
kit.servo[0].angle = angl
elif keyCode == ord('d'):
angl = angl + step
if angl > 180:
angl = 180
frame = cv2.putText(frame, "out of range", (int(width/3), int(height/2)), fnt, 1, [0, 0, 255],2)
kit.servo[0].angle = angl
kit.servo[0].angle = angl
# 垂直旋转控制
elif keyCode == ord('w'):
tilt = tilt + step
if tilt > 180:
tilt = 180
frame = cv2.putText(frame, "out of range", (int(width/3), int(height/2)), fnt, 1, [0, 0, 255],2)
kit.servo[1].angle = tilt
kit.servo[1].angle = tilt
elif keyCode == ord('s'):
tilt = tilt - step
if tilt < 0:
tilt = 0
frame = cv2.putText(frame, "out of range", (int(width/3), int(height/2)), fnt, 1, [0, 0, 255],2)
kit.servo[1].angle = tilt
kit.servo[1].angle = tilt
elif keyCode == ord('q'):
break
# 显示视频流
cv2.imshow('cap1', frame)
cam.release()
cv2.destroyAllWindows()