[PYTHON] J'ai essayé de contrôler plusieurs servomoteurs MG996R en utilisant le servomoteur PCA9685.

Préparation du matériel

Que préparer

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

schéma

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

servo_test.png

top.jpg

detail.jpg

Préparation du logiciel

Installation de la bibliothèque

Nous installerons diverses bibliothèques en nous référant à ce site.

Confirmation de connexion

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

Programme de contrôle du moteur

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)

Déplacer le servo

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

Couldn't find video ...

prime

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

référence

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

Recommended Posts

J'ai essayé de contrôler plusieurs servomoteurs MG996R en utilisant le servomoteur PCA9685.
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
J'ai essayé d'utiliser "Syncthing" pour synchroniser des fichiers sur plusieurs PC
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
J'ai essayé d'approcher la fonction sin en utilisant chainer (re-challenge)
J'ai essayé de sortir le journal d'accès au serveur en utilisant Node.js
Je voulais faire fonctionner le moteur avec une tarte à la râpe, alors j'ai essayé d'utiliser la carte de commande du moteur de Waveshare
J'ai essayé de déplacer le ballon
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'estimer la section.
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
Je suis devenu horreur quand j'ai essayé de détecter la quantité de fonctionnalités d'un visage animé en utilisant PCA et NMF.
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé de résumer diverses phrases à l'aide de l'API de synthèse automatique "summpy"
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
En utilisant COTOHA, j'ai essayé de suivre le cours émotionnel de la course aux meros.
J'ai essayé d'analyser la carte du Nouvel An par moi-même en utilisant python
J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc
J'ai essayé de prédire la détérioration de la batterie lithium-ion en utilisant le SDK Qore
J'ai essayé de notifier la mise à jour de "Hameln" en utilisant "Beautiful Soup" et "IFTTT"
vprof - J'ai essayé d'utiliser le profileur pour Python
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé d'optimiser le séchage du linge
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de synthétiser des fichiers WAV en utilisant Pydub.
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
J'ai essayé d'expliquer l'analyse de régression multiple aussi facilement que possible à l'aide d'exemples concrets.
J'ai essayé d'utiliser PyCaret à la vitesse la plus rapide
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé d'utiliser le module Datetime de Python
Qiita Job J'ai essayé d'analyser le travail
J'ai essayé d'utiliser le filtre d'image d'OpenCV
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de prédire la victoire ou la défaite de la Premier League en utilisant le SDK Qore
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz