Upgrade to ARC Pro

Take control of your robot's destiny by subscribing to Synthiam ARC Pro, and watch it evolve into a versatile and responsive machine.


Currently, ARC does not have a specific robot skill dedicated solely to controlling an N20 motor with an encoder using the Arduino Uno running EZB firmware. However, you can still achieve control over the N20 motor with encoder by utilizing a combination of general-purpose skills and custom scripting within ARC.

Here’s a general approach you can take:

  1. Use a Motor Controller: Since the N20 motor is typically controlled via a motor driver, you can use the Brushless Motor Movement Panel or another suitable motor control skill depending on your motor driver's compatibility. This skill allows you to control the direction and speed of motors.

  2. Encoder Feedback: For handling the encoder feedback, you can use the Wheel Encoder Counter skill. This skill is designed to read encoder values, which can help in monitoring the position or speed of the N20 motor. You will need to ensure that the encoder output from the N20 motor is compatible and correctly connected to the Arduino Uno.

  3. Custom Scripting: To integrate motor control with encoder feedback, you might need to write custom scripts using JavaScript or Python within ARC. These scripts can read encoder values and adjust motor commands accordingly to achieve desired motor behavior (like position control or speed regulation).

  4. Arduino Uno Setup: Ensure your Arduino Uno is programmed with the EZB firmware, which allows it to interface effectively with ARC and utilize various robot skills. You can find the firmware and programming instructions on the Synthiam website.

  5. Experiment and Adjust: Since controlling an N20 motor with an encoder involves both motor control and feedback handling, you may need to experiment with the setup and adjust your scripts based on the specific characteristics of your motor and encoder.

If you need more specific control features or integration, consider developing a custom robot skill that directly supports the N20 motor with encoder. Synthiam provides resources on how to create custom robot skills, which might be a viable option if the existing skills do not meet your requirements.

For further guidance on scripting or setting up your project, you can refer to the detailed documentation and community forums on the Synthiam website.

I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.

Is there any plan to develop a skill that will allow DC motors with encoders to be controlled like servos like the Stepper servo skill?  These N20 motors can have many uses in a robot build and it would be really great to have a way to use them like servos where you could control them with the Auto Position Skill.

#3   — Edited

To expand on DJ_Sures' response, using DC motors with encoders in a manner similar to servos, especially for precise positioning and integration with skills like Auto Position, involves a few considerations and potential solutions.

Existing Solutions:

  1. Sabertooth Kangaroo: This is a combination of motor driver and position controller that can be used to control DC motors with encoders. The Kangaroo x2 adds encoder feedback capabilities to the Sabertooth motor controller, allowing for precise speed and positioning control. This setup can be interfaced with ARC using general motor control skills and does not necessarily require a dedicated robot skill for operation.

  2. RoboClaw Motor Controllers: These controllers also support position control with encoder feedback and can be used similarly to the Kangaroo. They can be integrated into ARC projects and controlled via scripts or custom skills if needed.

Using DC Motors as Servos:

To use DC motors with encoders like servos, you essentially need to implement a feedback loop that adjusts the motor's input based on the encoder's feedback to reach and maintain a desired position or speed. This is similar to how a servo operates internally.

Potential Development:

While there is no specific mention of a new ARC skill for DC motors with encoders being developed to function exactly like the Stepper servo skill, the flexibility of ARC allows for custom solutions:

  • Custom Robot Skills: You can develop a custom robot skill that interfaces a DC motor with an encoder to ARC, providing servo-like control. This would involve programming the feedback loop and control algorithm, likely using an Arduino or similar microcontroller to interface with the motor driver and encoder.
  • Scripting within ARC: For simpler implementations, you might use JavaScript or Python scripting within ARC to create a control loop that reads encoder values and sends appropriate commands to the motor driver, mimicking servo behavior.

Integration with Auto Position:

To integrate such motors with the Auto Position skill, your custom skill or script would need to interpret position commands from Auto Position and translate them into motor movements based on encoder feedback. This would allow you to use DC motors in applications typically reserved for servos, such as in robotic arms or moving parts of a robot.


While there isn't a direct out-of-the-box solution in ARC for DC motors with encoders to be used exactly like servos, the platform's flexibility and support for custom skills and scripting provide the tools necessary to develop such functionality. If there's enough demand or a specific project requirement, developing a dedicated skill could be a worthwhile endeavor. For detailed guidance on creating custom robot skills, you can refer to the Synthiam documentation on creating robot skills.

I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.

DJ, the idea was not to use servo parts and a H-Bridge.   I wanted to be able to use the DC N20 motor with an encoder on it and H-Bridge an Arduino Nano and do something like what was done for the stepper motors.  Is there a way to do that?  Because I have not seen anything?

#6   — Edited

You can do that using Athena’s response with additional hardware from some products. @athena can you provide more information again

remember, an encoder requires some sort of microcontroller with interrupts and firmware to count precision. A robot skill will never have the real-time performance to count encoder values because computers that run operating systems like Linux or windows aren’t real-time - and their gpio isn’t either. Another micro of some sort needs to count encoders and respond to instructions to move a output shaft based on encoder values

I'll explain further - that a computer which runs an operating system like windows or linux does not have realtime gpio with interrupts for counting the high precision of encoder values. An encoder can move hundreds or thousands of times per second - which takes too much CPU from the operating system. The OS would halt given that it's spending all it's time counting encoder values rather than running the operating system programs. That is why the expression "Closed loop" is used for things like microcontrollers, specifically when they are performing a task with high-precision counting of i/o interrupts. Athena will explain more


To achieve control over a DC motor with an encoder using an Arduino Nano, similar to how stepper motors are managed in ARC, you would need to create a setup that includes the Arduino Nano for handling the encoder feedback and motor control logic, and then interface this setup with ARC.

Step-by-Step Approach:

  1. Hardware Setup:

    • DC Motor with Encoder: Connect your N20 DC motor with an encoder to the Arduino Nano.
    • H-Bridge: Use an H-Bridge compatible with the motor to control the direction and speed based on commands from the Arduino Nano.
  2. Arduino Nano Programming:

    • Write a program for the Arduino Nano that reads the encoder signals to determine the motor's position and speed.
    • Implement a control algorithm (like PID) on the Arduino to adjust the motor inputs to reach and maintain the desired position or speed.
    • The Arduino should expose commands (over serial, for example) to set the desired position or speed, and possibly to report the current status back to a controlling device (like a PC running ARC).
  3. Integration with ARC:

    • Use a serial connection to communicate between the Arduino Nano and the PC running ARC.
    • In ARC, you can create a custom robot skill or use existing scripting capabilities to send commands to and receive data from the Arduino.
    • Commands might include setting a target position or speed, and data received could be the current position, allowing for feedback in your ARC scripts or skills.
  4. Creating a Custom Robot Skill (optional):

    • If you frequently use this setup, creating a custom robot skill in ARC that encapsulates the communication logic and provides a user-friendly interface could be beneficial.
    • This skill would handle sending movement commands to the Arduino and could also interpret encoder feedback to update the ARC interface or trigger other actions within ARC.
  5. Testing and Calibration:

    • Thoroughly test the motor control system to ensure it responds accurately to position and speed commands.
    • Calibrate the system as needed to ensure accuracy, especially if the motor and encoder characteristics require specific tuning of the control parameters.

Additional Considerations:

  • Real-Time Constraints: As mentioned, handling encoder data and motor control in real-time is critical for performance and accuracy. This is why the Arduino Nano is used to offload this task from the PC.
  • Safety Features: Implement safety checks both in the Arduino program and within ARC to prevent damage to the motor or other components. This includes limits on speed, checks for erratic encoder readings, and emergency stop capabilities.

By following these steps, you can effectively control a DC motor with an encoder in a manner similar to servo control, using an Arduino Nano for real-time tasks and ARC for higher-level control and integration into your robot project.

I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.

There are several open-source projects and resources that can help you turn a motor into a servo using Arduino and encoders. Here are a few options you might consider exploring:

  1. Arduino PID Library: This is a well-documented library that helps manage the control loop used in servos, utilizing feedback from encoders to maintain position or speed. It's quite flexible and can be adapted to various motor types with the addition of an encoder.

  2. Encoder Library for Arduino: This library helps read quadrature encoders, which are commonly used to provide feedback for motor positioning and speed. It can be used in conjunction with other libraries to control motors as servos.

  3. DIY servo Projects: There are numerous tutorials and projects shared by the maker community that detail how to create a servo from a DC motor, encoder, and Arduino. Websites like Instructables, Hackaday, and others often feature such projects. These tutorials typically provide step-by-step instructions and list the necessary components.

  4. GitHub Repositories: Searching GitHub for projects related to "Arduino servo encoder" can yield various repositories where hobbyists and professionals have shared their projects. These often include detailed schematics, code, and implementation advice.

I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.