Bereiten Sie mehrere Servomotoren vor, die Sie bewegen möchten. Hier ist das Ziel, 12 MG996R zu bewegen, aber ich denke, dasselbe gilt für andere Servomotoren und -nummern. Der Jetson Nano allein kann höchstens wenige Servomotoren steuern. Daher wird der Servotreiber PCA9685 verwendet. Da der PCA9685 16 Kanäle hat, kann er bis zu 16 Servomotoren steuern. Ich möchte hier 12 Servomotoren betreiben, einer ist also genug.
Gerät | Menge | Erläuterung |
---|---|---|
Jetson Nano | 1 | |
PCA9685 | 1 | Servotreiber |
MG996R | 12 | Servomotor |
Netzteil 5V-4A | 2 | Stromversorgung für Jetson Nano und PCA9685 |
Überbrückungsdraht Buchse weiblich | 4 | Verbinden Sie Jetson Nano und PCA9685 |
Das Layout der GPIO-Pins des Jetson Nano sieht folgendermaßen aus: Verbinden Sie sich wie folgt. Sowohl die externen Netzteile Jetson Nano als auch PCA9685 verwenden 5 V 4 A.
Jetson Nano GPIO Pin-Nummer | <---> | PCA9685 |
---|---|---|
1 | <---> | VCC |
3 | <---> | SDA |
5 | <---> | SCL |
9 | <---> | GND |
Wir werden verschiedene Bibliotheken installieren, indem wir auf [diese Site] verweisen (https://kokensha.xyz/jetson/jetson-nano-pca9685-i2c-error-resolution/).
Nach Abschluss der Installation können Sie die Verbindung mit dem folgenden Befehl überprüfen.
$ sudo i2cdetect -y -r 1
Bei korrekter Verbindung sollte Folgendes angezeigt werden:
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)
Wenn Sie bereit sind, gehen wir weiter! Wenn Sie die Ausführungsberechtigung erteilen und dann ausführen, sollte das Servo funktionieren.
$ chmod +x joint_control.py
$ python3 joint_control.py
Der Betrieb, wenn 5V-2A anstelle von 5V-4A als externe Stromversorgung von PCA9685 und die Spannung der externen Stromversorgung geliefert werden, ist wie folgt. Es reicht aus, sich von selbst zu bewegen, aber wenn Sie mehr als eine bewegen, ist der Strom nicht ausreichend und die Spannung fällt ab, sodass es nicht gut funktioniert. Achten Sie auf den Nennstrom.
Recommended Posts