ps2摇杆传感器控制舵机实验

ps2摇杆传感器控制舵机实验

    ps2摇杆传感器组合PCF8591数模转换模块,从而获取方向信息,然后通过PCA9685驱动板,驱动两个方向的舵机进行转动。
组合效果如图:
组装示例

如图所示,需要用到的模块有:

模块数量
ps2摇杆传感器1
PCF8591数模转换模块1
树莓派Zero1
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
摇杆VRXPCF8591的AIN0
摇杆VRYPCF8591的AIN1
摇杆SWPCF8591的AIN2
PCF8591的SDAPCA9685的SDA
PCF8591的SCLPCA9685的SCL
PCF8591的VCCPCA9685的VCC
PCF8591的GNDPCA9685的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

jiujiang

评论已关闭。