RaspFR :: Forum

Version complète : Pca 9685
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour
Je m'appele nicolas et je débute en matière de raspberry
Mon projet était de faire une voiture de vidéo surveillance.
J'ai réussi à l'aide de motion et de Webiopi.
J'aimerai y introduire un bras
Pour se faire, j'ai acheté une carte pca9685 qui permet de gérer 16 servomoteurs.
Dans la bibliothèque adafruit il y a un script exemple qui m'a permis de tester ma carte et donc constater qu'elle fonctionne.
Mon problème est que sortie de ce script je ne sais pas du tout comment faire.
Si quelqu'un sait comment faire...
Merciiiiii
?
hello,

Tu ne donnes pas beaucoup d'infos (pour moi) sur ce que tu veux faire.
Avec cette carte j'ai fait une caméra(pi) motorisée avec 2 moteurs et elle est pilotée par un Joystick branché sur un autre raspberry.

Je peux donner des infos si c'est un peu ton projet.

@+ Bon courage .F.B.
Bonjour,
@fbpy

Il m'intéresse ton code Smile
tout d'abord merci d'avoir pris le temps de me répondre.
j'ai une raspberry pi3 équipé d'une Picam
mon objectif était de faire un robot de vidéo surveillance qui serait pilotable depuis le web
pour le Streaming vidéo j'ai donc utilisé motion et pour le pilotage du robot j'ai utilisé webiopi
J'ai réussi a faire fonctionner le tout puis j'ai eu envie de faire fonctionner des servomoteurs.
En fouinant sur le web je suis tomber sur la carte pca9685 qui permet d'utiliser jusqu’à 16 servomoteurs.
Une fois l’installation effectuée j'ai fait un test avec le script exemple et j'ai pu constater le fonctionnement de la carte.
mais je ne sais pas du tout comment faire maintenant pour faire fonctionner les servomoteurs à la demande et par la suite avec webiopi.
le système du joystick est pas mal du tout mais l'objectif est de l'inclure sur webiopi afin que ça reste accessible de partout.
merci encore
Nico,

Sur le rasp, j'utilise les sockets

un bout de code
Citation :listen_address = ('0.0.0.0', 12345) # ecoute sur toutes les interface sur le port 12345
srv_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # protocole UDP
srv_socket.bind(listen_address)
#print "server enabled"

Là je positionne la cam vers la direction voulue.
Citation :pwm = PWM(0x40, debug=False) # initialisation de la carte controleur
pwm.setPWMFreq(60)
pos1=450 ## H/B
pos2=650 ## G/D
servo1=0
servo2=1
pwm.setPWM(int(servo1), 0, int(pos1))
pwm.setPWM(int(servo2), 0, int(pos2))

Après j'écoute ce qui arrive sur le port 12345 et j'envoie la commande "pwm.setPWM(int(servo1), 0, int(pos1))"

Sur l'autre Rasp j'envoie j'envoie sur le port 12345
"clt_socket.sendto("1_"+servo_pos, srv_address)"

Tu peux envoyer cette commande en bash, php, python et peut être "webiopi" je ne connais.

@+F.B.

Un lien webiopi et socket

http://pastebin.com/gN9RzjPB
Merci pour la réponse !!
Je vais étudier ça
Moi perso j'ai une carte adafruit pca9685 et je cherche comment faire fonctionner mes servomoteurs à l'aide de la carte.
Je suis un peu perdu du coup je sort les rames Smile
Je cherche sur internet ,sur YouTube. ...
Et pas moyen de trouver un exemple de ce que je veux faire.
Pout tester, tu crées un script test_servo.py"

Citation :#!/usr/bin/python

from Adafruit_PWM_Servo_Driver import PWM
import sys

pwm = PWM(0x40, debug=True)
pwm.setPWMFreq(60)

pwm.setPWM(int(sys.argv[1]), 0, int(sys.argv[2]))

chmod 777 test_servo.py

et la commande "./test_servo.py" 1 200"

Tu fais varier la valeur 200 à 300
le premier paramétre c'est 0 pour le 1ier moteur 1 pour le 2ieme
Voici le code d essaie fourni avec

# Simple demo of of the PCA9685 PWM servo/LED controller library.
# This will move channel 0 from min to max position repeatedly.
# Author: Tony DiCola
# License: Public Domain
from __future__ import division
import time

# Import the PCA9685 module.
import Adafruit_PCA9685


# Uncomment to enable debug output.
#import logging
#logging.basicConfig(level=logging.DEBUG)

# Initialise the PCA9685 using the default address (0x40).
pwm = Adafruit_PCA9685.PCA9685()

# Alternatively specify a different address and/or bus:
#pwm = Adafruit_PCA9685.PCA9685(address=0x41, busnum=2)

# Configure min and max servo pulse lengths
servo_min = 150 # Min pulse length out of 4096
servo_max = 600 # Max pulse length out of 4096

# Helper function to make setting a servo pulse width simpler.
def set_servo_pulse(channel, pulse):
pulse_length = 1000000 # 1,000,000 us per second
pulse_length //= 60 # 60 Hz
print('{0}us per period'.format(pulse_length))
pulse_length //= 4096 # 12 bits of resolution
print('{0}us per bit'.format(pulse_length))
pulse *= 1000
pulse //= pulse_length
pwm.set_pwm(channel, 0, pulse)

# Set frequency to 60hz, good for servos.
pwm.set_pwm_freq(60)

print('Moving servo on channel 0, press Ctrl-C to quit...')
while True:
# Move servo on channel O between extremes.
pwm.set_pwm(0, 0, servo_min)
time.sleep(1)
pwm.set_pwm(0, 0, servo_max)
time.sleep(1)

merciiii pour ton code!
Quand je rentre du travail j'essaierai le code que tu as posté
Bon ben c'est officiel après essaie du code ça ne fonctionne pas. ..