ps2摇杆传感器控制舵机实验
ps2摇杆传感器组合PCF8591数模转换模块,从而获取方向信息,然后通过PCA9685驱动板,驱动两个方向的舵机进行转动。
组合效果如图:
如图所示,需要用到的模块有:
模块 | 数量 |
ps2摇杆传感器 | 1 |
PCF8591数模转换模块 | 1 |
树莓派Zero | 1 |
PCA9685舵机驱动板 | 1 |
MG966R舵机 | 3 |
电源(此处是充电宝) | 1 |
特别说明: 1、由于ps2摇杆和PCA9685都需要用到SCL和SDA引脚,所以需要提前焊接PCA9685舵机驱动板尾部串联引脚。(可参考文章:https://www.shumeijiang.com/2021/08/29/多个pca9685舵机驱动板一起执行实验(含地址修改).html)。 2、实验前需要手工打开树莓派I2c协议支持(可参考文章:https://www.shumeijiang.com/2019/12/08/基于命令行打开i2c协议支持.html)。
接线说明:
引脚 | 连接引脚 |
摇杆GND | 树莓派GND |
摇杆+5V | 树莓派5V |
摇杆VRX | PCF8591的AIN0 |
摇杆VRY | PCF8591的AIN1 |
摇杆SW | PCF8591的AIN2 |
PCF8591的SDA | PCA9685的SDA |
PCF8591的SCL | PCA9685的SCL |
PCF8591的VCC | PCA9685的VCC |
PCF8591的GND | PCA9685的GND |
PCA9685的SCL | 树莓派SCL |
PCA9685的SDA | 树莓派SDA |
PCA9685的VCC | 树莓派5V |
PCA9685的GND | 树莓派GND |
视频效果:
关键代码:
#coding:utf-8
'''
from JiuJiang
树莓酱的操作实例
https:://www.shumeijiang.com
'''
import time
from board import SCL, SDA
import busio
from PCF8591 import getDirection #引入读取ps2摇杆数据
from adafruit_pca9685 import PCA9685 #引入舵机控制
from adafruit_motor import servo
#引入i2c
i2c = busio.I2C(SCL, SDA)
#控制第一块板子
pca = PCA9685(i2c, address=0x40) #地址可以修改 默认0x40
pca.frequency = 50
#初始化两个舵机驱动
servo_x = servo.Servo(pca.channels[0])
servo_y = servo.Servo(pca.channels[1])
#设置脉冲宽度 500到2500是正常的 这个可以自己调整 不设置默认只到135度
servo_x.set_pulse_width_range(min_pulse=500, max_pulse=2500)
servo_y.set_pulse_width_range(min_pulse=500, max_pulse=2500)
#获取摇杆数据
try:
while True:
xN = getDirection('x')
yN = getDirection('y')
print(xN)
print(yN)
#control x
if xN == '向前':
servo_x.angle = 60
elif xN == '向后':
servo_x.angle = 140
else:
servo_x.angle = 100
#control y
if yN == '向左':
servo_y.angle = 40
elif yN == '向右':
servo_y.angle = 140
else:
servo_y.angle = 90
time.sleep(0.2)
except KeyboardInterrupt:
print('stop')
pca.deinit()
其他参考: 1、PCF8591数模转换实验参考文章:https://www.shumeijiang.com/2022/10/30/pcf8591-da数模转换实验.html