Control up to 99 servos over serial with Vx virtual ports using custom firmware on Arduino or microcontroller controllers.
How to add the Custom Servo Controller robot skill
- Load the most recent release of ARC (Get ARC).
- Press the Project tab from the top menu bar in ARC.
- Press Add Robot Skill from the button ribbon bar in ARC.
- Choose the Servo category tab.
- Press the Custom Servo Controller icon to add the robot skill to your project.
Don't have a robot yet?
Follow the Getting Started Guide to build a robot and use the Custom Servo Controller robot skill.
How to use the Custom Servo Controller robot skill
Use Vx virtual servo ports to control up to 99 servos on a custom servo controller via a serial protocol, such as Arduino Mega, with custom firmware. The Vx virtual servo ports allow you to control up to 99 servos on a custom servo controller via a serial protocol, such as an Arduino Mega, equipped with custom firmware. This custom firmware can be loaded onto an Arduino or a custom microcontroller, transforming it into a specialized servo controller. The robot skill will establish a connection to ARC through a serial port.
This setup is particularly useful if you need to manage more than 24 servos, as the EZB protocol is limited to handling only 24. You can effectively control up to 100 servos by using Vx virtual servo ports.
Firmware
This is an example of the Arduino firmware you can use to connect this robot skill to: Custom_Servo_Controller (Oct 2 2026).zipConfiguration
The configuration screen allows specifying several parameters to make the robot skill work.- Port: This is the UART/Serial port for the connected controller
- DTR Enabled: Does Data Terminal Ready need to be enabled? Some Arduinos require this
- Baudrate: The baudrate for the specified device
- Ports: Select each Vx virtual servo port that will be connected to the attached custom servo controller.
How To Use
- Load the Firmware
- Configure the Robot Skill
- Press the configuration button in the robot skill.
- Select the Port and Baudrate corresponding to your connected custom servo microcontroller.
- Choose the Vx (virtual servo ports) that match the servos defined in the custom servo firmware on the controller. For example, V0 will represent the first servo on your servo controller.
- Connect to the servo Microcontroller
- Press the CONNECT button on the robot skill to establish a connection with the custom servo microcontroller.
- Operate the Servos
- Use any servo robot skill to control your selected Vx servos. This allows you to move the servos as needed, leveraging the virtual ports to manage a larger array of servos than typically possible with standard protocols.
This setup provides a flexible and scalable solution for controlling many servos, suitable for complex robotic projects requiring extensive servo management.
Reasons for Using This Robot Skill
- Extended servo Control Capacity:
- The EZB protocol limits servo control to 24 servos, which can be restrictive for complex robotic projects. By utilizing Vx virtual servo ports, this robot skill allows you to control up to 99 servos, significantly expanding your control capacity.
- Customizable Firmware:
- The ability to load or create custom firmware on an Arduino or custom microcontroller offers flexibility. You can tailor the firmware to meet the specific needs of your project, defining the maximum number of servos and their corresponding pins.
- Integration with ARC:
- This robot skill connects to ARC (Advanced Robotics Control) via a serial port, providing a seamless integration with your existing robotic systems. ARC's user-friendly interface simplifies the configuration and control process.
- Versatility in Applications:
- Whether you're building a humanoid robot, an animatronic display, or a multi-functional robotic arm, the increased servo control offered by this skill is versatile and can adapt to a wide range of applications.
Benefits of Using This Robot Skill
- Scalability:
- Easily scale your robotic projects without being constrained by the servo limit of traditional protocols. This allows for more complex and sophisticated designs.
- Enhanced Precision:
- With the ability to control up to 99 servos, you can achieve more precise and detailed movements in your robotic creations, enhancing their performance and realism.
- Cost-Effective Solution:
- Using an Arduino or custom microcontroller with custom firmware is a cost-effective solution compared to purchasing specialized servo controllers. This makes it accessible for hobbyists and professionals alike.
- Simplified Configuration:
- The configuration process is straightforward, allowing you to quickly set up and start controlling your servos. This reduces the time and effort required to get your project up and running.
- Flexibility in Design:
- The ability to define each servo ID as a pin in the firmware provides flexibility in your design. You can easily reconfigure your setup as your project evolves.
- Robust Performance:
- Custom firmware can be optimized for your specific application, ensuring robust and reliable performance. This reduces the likelihood of errors and enhances the overall stability of your robotic system.
By leveraging this robot skill, you can overcome the limitations of traditional servo control protocols, enhance the capabilities of your robotic projects, and achieve greater flexibility and precision in your designs.
Control Commands for the Custom Servo Controller robot skill
There are Control Commands available for this robot skill which allows the skill to be controlled programmatically from scripts or other robot skills. These commands enable you to automate actions, respond to sensor inputs, and integrate the robot skill with other systems or custom interfaces. If you're new to the concept of Control Commands, we have a comprehensive manual available here that explains how to use them, provides examples to get you started and make the most of this powerful feature.
Control Command ManualConnect
Open the configured COM port to the servo controller
Example:
controlCommand("Custom servo Controller", "Connect")
Disconnect
Close the COM port to the servo controller
Example:
controlCommand("Custom servo Controller", "Disconnect")
IsConnected
Returns true if the COM port to the servo controller is open
Example:
controlCommand("Custom servo Controller", "IsConnected")
Ping
Ping the servo controller, write the result to the log and return the firmware version (0 if unresponsive)
Example:
controlCommand("Custom servo Controller", "Ping")
SyncPositions
Send ARC's current position and speed of every enabled virtual servo to the controller (i.e. after the controller was reset)
Example:
controlCommand("Custom servo Controller", "SyncPositions")



Excellent! Thanks for this.
The Skill is no longer listed under servo - is this Custom Skill still supported? Sorry found it!
v2 has been updated to include support for multiple EZB indexes, control commands, a few fixes, and a new firmware.
v3 Updated to allow multiple instances of the robot skill