Préparez plusieurs servomoteurs que vous souhaitez déplacer. Ici, l'objectif est de déplacer 12 MG996R, mais je pense que la même chose s'applique aux autres servomoteurs et numéros. Le Jetson Nano seul ne peut contrôler que quelques servomoteurs au maximum. Par conséquent, le pilote d'asservissement PCA9685 est utilisé. Comme le PCA9685 dispose de 16 canaux, il peut contrôler jusqu'à 16 servomoteurs. Je veux faire tourner 12 servomoteurs ici, donc un seul suffit.
dispositif | Quantité | La description |
---|---|---|
Jetson Nano | 1 | |
PCA9685 | 1 | Pilote servo |
MG996R | 12 | Servomoteur |
Adaptateur secteur 5V-4A | 2 | Alimentation pour Jetson Nano et PCA9685 |
Fil de raccordement femelle femelle | 4 | Connectez Jetson Nano et PCA9685 |
La disposition des broches GPIO sur le Jetson Nano ressemble à ceci: Connectez comme suit. Les alimentations externes Jetson Nano et PCA9685 utilisent 5V 4A.
Numéro de broche Jetson Nano GPIO | <---> | PCA9685 |
---|---|---|
1 | <---> | VCC |
3 | <---> | SDA |
5 | <---> | SCL |
9 | <---> | GND |
Nous installerons diverses bibliothèques en nous référant à ce site.
Une fois l'installation terminée, vous pouvez vérifier la connexion avec la commande suivante.
$ sudo i2cdetect -y -r 1
S'il est correctement connecté, vous devriez voir quelque chose comme ceci:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
joint_control.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import Adafruit_PCA9685
import time
# Initialise the PCA9685 using desired address and/or bus:
pwm = Adafruit_PCA9685.PCA9685(address = 0x40, busnum = 1)
# Number of servo
servo_num = 12
# Configure min and max servo pulse lengths
servo_min = 150 # min. pulse length
servo_max = 600 # max. pulse length
servo_offset = 50
# Set frequency to 60[Hz]
pwm.set_pwm_freq(60)
while True:
# Move servo on each channel
for i in range(servo_num):
print('Moving servo on channel: ', i)
pwm.set_pwm(i, 0, servo_min + servo_offset)
time.sleep(1)
for i in range(servo_num):
print('Moving servo on channel: ', i)
pwm.set_pwm(i, 0, servo_max - servo_offset)
time.sleep(1)
# Move servo on all channel
for i in range(servo_num):
print('Moving servo on channel: ', i)
pwm.set_pwm(i, 0, servo_min + servo_offset)
time.sleep(1)
for i in range(servo_num):
print('Moving servo on channel: ', i)
pwm.set_pwm(i, 0, servo_max - servo_offset)
time.sleep(1)
Lorsque vous êtes prêt, passons à autre chose! Si vous donnez l'autorisation d'exécution et que vous l'exécutez, le servo devrait fonctionner.
$ chmod +x joint_control.py
$ python3 joint_control.py
Le fonctionnement lorsque 5V-2A est fourni au lieu de 5V-4A comme alimentation externe du PCA9685 et la tension de l'alimentation externe sont les suivants. Il suffit de bouger tout seul, mais si vous en déplacez plusieurs, le courant sera insuffisant et la tension chutera, donc cela ne fonctionnera pas bien. Faites attention au courant nominal.
Recommended Posts