Welcome to Synthiam!

The easiest way to program the most powerful robots. Use technologies by leading industry experts. ARC is a free-to-use robot programming software that makes servo automation, computer vision, autonomous navigation, and artificial intelligence easy.

Get Started
United Kingdom
Resolved Resolved by DJ Sures!

Servo Range Restricted With ESP32

Hi DJ and co...

Thanks for all the hard work with the recent ARC updates.
I've recently added an ESP32 to my InMoov to control some of the servos using Arc....
And I've noticed that the servos don't rotate the full 180 degrees when connected to the ESP32

Example..... Neck up/down servo on InMoov rotates full 180 degrees when connected to an EZ-Bv4/2....
Only rotates about 90 degrees when connected to ESP-32.

I'm sure this is my own knowledge gap again...but is there anything I need to change in ARC or in the ESP32 Firmware?

Related Hardware Esp32 DevKit v1


Upgrade to ARC Pro

Harnessing the power of ARC Pro, your robot can be more than just a simple automated machine.

#1   — Edited
When you go into the servo control by clicking the three dots "..." check to see if you have that servo's Min and Max set correctly.

That's all I can think of because I don't know anything about the ESP-32. Are there settings on that board or a script operating it you need to adjust?
United Kingdom
Min and Max all set correctly....

But....That's what I'm asking....I can't see anything....but maybe in the Arduino Code for the EZ-B/ESP32 firmware ??

Maybe DJ can help?
That's the fun of open source arduino. You never know if it'll work or not. Kind of like a kinder egg surprise.:) 

There's a file in the firmware download called ESP32_Servo.h. In there, is a section for the min and max pulse width of the servo. I don't know if it actually works or not, or how accurate it is. But modifying those values may produce some results. Give it a try...



#define ESP32_Servo_VERSION 1 // software version of this library

#define MIN_PULSE_WIDTH 500 // the shortest pulse sent to a servo
#define MAX_PULSE_WIDTH 2500 // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached
#define REFRESH_CPS 50
#define REFRESH_USEC 20000

#define MAX_SERVOS 16 // no. of PWM channels in ESP32
Oh - and it appears the ESP32Servo library supports that syntax
United Kingdom


#define DEFAULT_uS_LOW 650
#define DEFAULT_uS_HIGH 2350
So I googled the PWM ranges for my servos....the JX PDI 2060MG...
MAX PW: 650-2350
STD PW: 850-2150

Changed the code as above and now get 180degrees.

I have a mixture of servo makes/types coming from that ESP32, so will probably have to specify the ranges individually for the servo types...but that's definitely the source of the problem. Some fine tuning to go...but problem mostly resolved.

Thanks for the help.:)