PCA9685 Servo Controller

PCA9685 Servo Controller by Adafruit

Connection Type
USB
Number of servos
16
Audio Support
No
Camera Support
No

Do you want to make a cool Arduino robot with ARC? Maybe a hexapod walker or a piece of art with many moving parts. The PCA9685 servo breakout (also found in Adafruit's popular PWM/Servo pcb) that works with any Arduino that uses shields: Uno, Leo, Mega, or ADK. We recommend using the Uno because it is compact and, combined with this shield, provides a ton of I/O. However, there are several EZB firmwares on this page that you can use for your desired configuration.

The Arduino can be programmed with the EZB firmware for various capabilities when connected to ARC. The tutorial to program the EZB firmware can be found HERE.

Download Firmware Sourcecode


Tutorial

Now that you have the firmware, you can follow the tutorial to install it by clicking here.


ARC Pro

Upgrade to ARC Pro

Stay on the cutting edge of robotics with ARC Pro, guaranteeing that your robot is always ahead of the game.

PRO
USA
#33   — Edited

Great info on th this site https://learn.adafruit.com/16-channel-pwm-servo-driver?view=all

I read the connections on the PCA9685 module are duplicated on each end, making it easy to use multiple modules. By using right-angled DuPont male and female connectors you could daisy chain the modules. Just make sure to select a unique I2C address for each module.

Wow, 992 servo motors, like to see that project, lol

#34   — Edited

Thanks for your reply.  I just want to be clear if I I connect three of these boards together that ARC can address each boards ports.  Also what are the changes needed to the firmware to support more than one board?  Because looking at the firmware I don't see how this would work.

PRO
USA
#35   — Edited

on ARC, not sure, was using an Arduino.

I can test when I get back However, I would think it is one board on ARC

correct the firmware needs to be updated with each PCA 9685 you add

// Creat object to represent PCA9685 at default I2C address Adafruit_PWMServoDriver pca9685 = Adafruit_PWMServoDriver(0x40);

**(adding another PCA 9685 ) Adafruit_PWMServoDriver pca9685 = Adafruit_PWMServoDriver(0x41);

**(adding another PCA 9685 ) Adafruit_PWMServoDriver pca9685 = Adafruit_PWMServoDriver(0x42);

now you have 48 servos

and so on

PRO
Synthiam
#36   — Edited

I don't think you'd be able to do that very easily. You'd have to create a custom robot skill and extend the existing ezb protocol. The ezb protocol supports 25 servos - a legacy from the ezrobot days. There are two alternatives...

  1. Hard way. Have a robot skill servo driver, similar to Dynamixel, which uses a custom protocol that extends the servo count. Or use the servo Script: https://synthiam.com/Support/Skills/Scripting/Servo-Script?id=19068

  2. Easy way. Have 3 arduinos and 3 pca's. Connect each Arduino to a different physical port

If you decide to go the hard way, the servo Script can send a custom serial command for each servo and position. It isn't super difficult, but you'd have to make your own firmware.

#37  

DJ thank you for confirming the limitation. I thought this could not be done with this skill without a lot of changes.

PRO
Synthiam
#38  

the servo Script skill doesn't require any changes. Just send the servo id and position for each servo. Your arduino code merely has to listen on a loop to get the servo id and position

#40  

EzAng,   Thanks for posting this but I wanted a solution that works in ARC.