[PYTHON] Ich habe versucht, mehrere Servomotoren MG996R mit dem Servotreiber PCA9685 zu steuern.

Hardware-Vorbereitung

Was vorzubereiten?

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

Schaltplan

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

servo_test.png

top.jpg

detail.jpg

Softwarevorbereitung

Bibliotheksinstallation

Wir werden verschiedene Bibliotheken installieren, indem wir auf [diese Site] verweisen (https://kokensha.xyz/jetson/jetson-nano-pca9685-i2c-error-resolution/).

Verbindungsbestätigung

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 -- -- -- -- -- -- --

Motorsteuerungsprogramm

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)

Bewegen Sie das Servo

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

Couldn't find video ...

Bonus

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. Couldn't find video ...

Referenz

  1. https://kokensha.xyz/jetson/jetson-nano-pca9685-i2c-error-resolution/

Recommended Posts

Ich habe versucht, mehrere Servomotoren MG996R mit dem Servotreiber PCA9685 zu steuern.
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
Ich habe versucht, mit "Syncthing" Dateien auf mehreren PCs zu synchronisieren
[TF] Ich habe versucht, das Lernergebnis mit Tensorboard zu visualisieren
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren (Re-Challenge)
Ich habe versucht, das Zugriffsprotokoll mit Node.js auf dem Server auszugeben
Ich wollte den Motor mit einer Raspeltorte laufen lassen, also habe ich versucht, das Motor Driver Board von Waveshare zu verwenden
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Ich wurde entsetzt, als ich versuchte, mithilfe von PCA und NMF die Anzahl der Merkmale eines animierten Gesichts zu ermitteln.
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich habe versucht, verschiedene Sätze mit der automatischen Zusammenfassungs-API "summpy" zusammenzufassen.
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, die Neujahrskarte selbst mit Python zu analysieren
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
vprof - Ich habe versucht, den Profiler für Python zu verwenden
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, WAV-Dateien mit Pydub zu synthetisieren.
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
Ich habe versucht, die multiple Regressionsanalyse anhand konkreter Beispiele so einfach wie möglich zu erklären.
Ich habe versucht, PyCaret mit der schnellsten Geschwindigkeit zu verwenden
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Qiita Job Ich habe versucht, den Job zu analysieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, den Sieg oder die Niederlage der Premier League mit dem Qore SDK vorherzusagen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren