Reference: RBD-2389
Banner

The 16-Channel PWM Servo Controller Shield is a powerful and convenient expansion for Arduino, designed to control multiple servos or PWM-driven devices using minimal I/O resources. Based on the PCA9685 PWM driver IC, it provides 16 independent 12-bit PWM outputs controllable via the I2C interface, freeing the microcontroller from continuous servo refresh operations. The board supports a PWM frequency range of 24Hz–1.5kHz, making it suitable for both LED dimming and servo motor control. It can operate with 3.3V or 5V logic levels, while servo power (V+) is supplied separately through the onboard terminal block (typically 5V). The shield features address selection jumpers (A0–A5), allowing multiple shields to stack for up to 62×16 channels. With a built-in prototype area, labeled pins, and compatibility with standard Arduino form factors, this shield is ideal for robotic arms, animatronics, lighting, and automation projects. Featured By RoboticsBD.
Product Images are shown for illustrative purposes only and may differ from the actual product.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
16 PWM Channels: Individually controlled 12-bit PWM outputs (0–4096 steps).
PCA9685 Chipset: Handles timing independently, reducing MCU load.
I2C Interface: Uses only SDA/SCL pins for communication.
Wide Frequency Range: Adjustable from 24Hz to 1.5kHz for diverse applications.
Multi-Board Expansion: Address jumpers (A0–A5) allow up to 62 shields on one bus.
External Servo Power Supply: Supports 4.8–6VDC for powering high-current servos.
Integrated Prototype Area: 5×20 perfboard section for custom circuits.
Compatible with 3.3V/5V Systems: Works with Arduino, ESP32, STM32, and more.
Power Protection: Separate servo and logic power circuits reduce interference.
Compact & Durable: 69×54mm PCB with sturdy screw terminals and labeled headers.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
Robotics & Automation: Control up to 16 servos for robotic arms or humanoids.
RC Projects: Manage multiple actuators in drones, boats, or vehicles.
LED Lighting: Smooth LED dimming or color mixing for decorative lighting.
Home Automation: Operate relays, dampers, or actuators in smart systems.
Animatronics: Create complex motion for displays and robotic characters.
Educational Projects: Ideal for STEM labs and Arduino-based learning setups.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
| General Specifications | |
| PWM Controller IC | PCA9685 |
| Number of Channels | 16 PWM outputs |
| PWM Resolution | 12-bit (0–4096 steps) |
| PWM Frequency Range | 24Hz – 1.5kHz |
| Logic Voltage (VCC) | 3.3V or 5V |
| Servo Power Voltage (V+) | 4.8V – 6VDC (5V typical) |
| Idle Current | 6mA (typical) |
| Controller Current (Max) | 400mA |
| MCU Interface | I2C (SDA/SCL) |
| Default I2C Address | 0x40 (adjustable via A0–A5 jumpers) |
| Compatible Boards | Arduino Uno, Mega, Leonardo, ESP32, etc. |
| Prototyping Area | 5×20 perfboard section |
| PCB Dimensions | 69mm × 54mm (2.7" × 2.1") |
| Country of Origin | China |
| Shipment Weight | 0.04 kg |
| Shipment Dimensions | 7 × 6 × 2 cm |
Please allow 5% measuring deviation due to manual measurement.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
1×2 Terminal Block (Motor Power Input)
This is the main power input when using with servos and is used to power the motors. This input has reverse polarity protection which may be a diode or a MOSFET transistor.
5V is typically applied to this connector. There is a red LED lit when power is applied to V+. There is a 2nd red LED lit when Vcc is applied to the module. You need both LEDs lit for the shield to operate.
Do not connect V+ to the Arduino 5V as the motors will create electrical noise that will cause issues for the Arduino. Also keep in mind the current draw of the servo motors that you select which can be quite high. Most Servos will draw at least 100mA or more each. If you are using this shield to drive LEDs, that can usually be done using the Arduino 5V as long as you stay within the current limits of the Arduino but larger arrays will require external power.
There is a spot to add a large electrolytic cap to V+ near the terminal block if additional filtering is needed.
Female Headers (Logic Connections)
The male/female stackable headers bring up all the I/O from an Arduino UNO, Leonardo or similar Arduino. The shield itself only uses the I2C data lines SDA and SCL but these lines are also available for other I2C devices.
Note: For compatibility with older Arduinos that don’t have dedicated I2C lines, the SCL and SDA pins also connect to pins A4 and A5 which are used on the older boards for I2C. If you want to use A4 and A5 for other purposes with a newer R3 version Arduino, cut the traces to A4 and A5 on the back of the board to remove them from the I2C bus.
1×3 (x16) Male Headers (Servo Connections)
The output headers are numbered 0 thru 15 on the board. Each of these connections has the following pins.
Note: If using the module with LEDs:

RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
These servo controllers work well for controlling multiple servos and makes connections much easier. Once a servo is set to a particular position with a simple I2C command, the controller takes care of the overhead required to keep the motor updated which frees up the microcontroller to do other stuff.
The header pins that insert into the MCU are the flat sided blade type, so some straightening of the pins is usually required to install the shield onto an MCU.
Servos expect to see a pulse about every 20mSec and the width of the pulse tells the servo where it should position its shaft. Most standard servos have a position range of approximately 0-180 degrees. They typically detect a pulse width of about 1mSec to be 0 degrees and a pulse width of 2mSec to be 180 degrees. Any pulse widths in-between these values can be used to set the servo to an arbitrary position. For instance, a pulse width of 1.5mSec will set the shaft to 90 degrees, 1.75mSec will be 135 degrees, etc.
The exact range of the servo can vary quite a bit between different types of servos. Instead of 0-180 degrees, some may only go 20-160 while others may go farther than 180. Interpretation of the pulse width such as 1.5mSec being 90 degrees can also vary quite a bit between servos. Some experimentation is generally needed to characterize the servos that you are using. In general, you don’t want the servos to be driven past a position that they can get to as that causes high stall currents and may damage the gears in the servo overtime. In the program below, there are two constants MIN_VALUE and MAX_VALUE that set the limits for the motor. These can be adjusted to suit the servos that you are working with.
To use this controller, you must initially set the PWM frequency which will remain constant. To generate a pulse every 20mSec as the servo expects requires a 50-60Hz PWM frequency to be set.
You then need to set the pulse width to move the servo to the position that you want it to be in. The PWM outputs are 12-bit which means their setting (pulse width) can range from 0-4096 which covers the range of 0 – 20mSec. If you have a 20mSec pulse width / 4096, the output has a resolution of about 4.88uSec, so if you want a 1.5mSec pulse width, that would be a setting of about 1.5mSec / .00488mSec = 307.
The program below uses the Adafruit_PWMServo library, so be sure to load it to use this program. It can be downloaded via the Arduino IDE.
The program simply exercises a single servo on channel 0 to verify the shield is basically working, but this can be changed to any channel by modifying this statement int servonum = 0;
Simply plug the shield into an Uno or compatible board and hook up 5V/Gnd to the screw terminal connections. Plug a servo into the channel 0 header. Ensure the PWM wire which is usually orange in color is plugged into the PWM pin. Both LEDs on the shield should be lit indicating both the board and servo have power. Once the program is downloaded, the servo should start cycling.

RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
/* Exercise the PCA9685 Servo motor controller Rotates a single servo on channel 0 back and forth to test basic operation Uses Adafruit_PWMServoDriver.h library */ #include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); #define SERVOMIN 100 // this is the 'minimum' pulse length count (out of 4096) #define SERVOMAX 440 // this is the 'maximum' pulse length count (out of 4096) // Set for servo channel to test int servonum = 0; //=============================================================================== // Initialization //=============================================================================== void setup() { Serial.begin(9600); Serial.println("Channel 0 Servo test"); pwm.begin(); pwm.setPWMFreq(60); delay(10); } //=============================================================================== // Main //=============================================================================== void loop() { // Drive servo forward then back. for (int pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) { pwm.setPWM(servonum, 0, pulselen); } delay(500); for (int pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) { pwm.setPWM(servonum, 0, pulselen); } delay(1000); }
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
1 x 16-Channel PWM Servo Controller Shield
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
Specific References
Your review appreciation cannot be sent
Report comment
Report sent
Your report cannot be sent
Write your review
Review sent
Your review cannot be sent
Reference: RBD-2389
Reference: RBD-0306
Reference: RBD-3472
Reference: RBD-3275
Reference: RBD-2209
Reference: RBD-3514
Reference: RBD-4120
Reference: RBD-0557
Reference: RBD-2419
Reference: RBD-2511
Reference: RBD-0376
Reference: RBD-0289
Reference: RBD-0267
We'll slide into your inbox when the product is back in stock.
Reference: RBD-2390
Reference: RBD-2145
Reference: RBD-0662
Reference: RBD-1775
Reference: RBD-0015
Reference: RBD-0120
Reference: RBD-0133
Reference: RBD-0280
Reference: RBD-0296
Reference: RBD-0305
Reference: RBD-0314
Reference: RBD-0289
Reference: RBD-3457
Reference: RBD-2209
check_circle
check_circle