United Kingdom
Asked — Edited

Servo Release Not Working Using (D#,0)

@DJ and Jeremie.

I've been setting up some servos, and I've noticed that the servo release using (for example), Servo(D5,0), the zero is now being treated as a servo holding position as it was before the introduction of zero being a servo release.

I am using the latest ARC version, (2015.09.00), and it was working a few weeks back. I also tried it on a new project with just a single script control, using different ports and EZ-Robot HD servos... same thing.

Any ideas and has anyone else noticed this?


Upgrade to ARC Pro

With Synthiam ARC Pro, you're not just programming a robot; you're shaping the future of automation, one innovative idea at a time.



The command to release a servo port is:

Example: Release(D14)

Not what you show above or am I mis-understanding you?

Also, If your using two boards (or did at one time and removed one) make sure your command is pointing to the EZB that the servo you're trying to release is attached to.

Does the "ReleaseAll ( [boardIndex] )" command work for you?

United Kingdom


Thanks for responding.

A few months back, DJ made a change to the servo commands and made zero a servo release and 1 being minimum servo position using what I posted above. I'll see if I can find the thread. This is just using one board on a new project.

United Kingdom

Here's the link for the release notes...


DJ said zero is release for auto position, but Servo(D#,0) worked as well from this release, and I've been using exactly this command since then in other projects.

It also Kinda says this in the script manual, where it refers to Servo(Port, Position) as servo positions are between 1 and 180.


Oh, sorry, I forgot that one. I've been spending all my time this past year building and not programing. Thanks for the reminder.

Have you tried the the commands I mentioned anyway just to see if the release does work?

United Kingdom

No worries. I know you've been VERY busy indeed with your build. (Nice progress BTW).

To answer, no I haven't tried the other commands yet, I just thought I'd post this for the simple fact that it used to work, and now it doesn't, so thought I'd better flag it up to let DJ know. I'll give your advice a go though for now.


United Kingdom

I just tried the servo release commands and they are working okay, so I will use them for now but I don't really want to rewrite all of my script commands in all of my projects yet in case there is a fix for the original issue.


Any ideas why servo commands for position zero (outlined in post #1) is no longer working?


Sorry Steve, there has never been the ability to specify a 0 to release the servo from the EZ-Script Servo() command. The EZ-B's servo module has a distinct condition that has been there forever which prevents the Servo() command from allowing specified servo positions outside of the ez-b's range. I quickly picked a random code check-in from April 11, 2012 and this code was still there...

    /// <summary>
    ///  The maximum value for a servo (100)
    /// </summary>
    public static int SERVO_MAX = 180;

    /// <summary>
    ///  The minimum value of a servo (1)
    /// </summary>
    public static int SERVO_MIN = 1;

        if (tmpPosition > SERVO_MAX)
          tmpPosition = SERVO_MAX;
        else if (tmpPosition < SERVO_MIN)
          tmpPosition = SERVO_MIN;

United Kingdom

Thanks for responding DJ.

That's a bit embarrassing but weird though, I know I've used 0 in Auto Position to release servos, but I could have swore that I had used the script command before and it worked. Oh well, thanks for clearing it up anyway. Good to know it's not a bug or anything.


Lol, looks like you were right after all. Maybe it was the auto positioned I was using after all. Can't check as I deleted the project I thought I was using it on.

United Kingdom

That must have been what I was using. Thanks again DJ, and sorry for reporting it as a bug report. My bad. eyeroll

On a slightly unrelated note, would it be possible to add a reset servo speed command in to the EZ-Script menu or a Cheat Sheet command?


@SteveG Yes, that's what it was. It was the problem you helped me to solve. I was using Autopositioner to do some movements and hitting zero did indeed cause a servo release. I didn't really realize it at the time since the robot was sitting and there was no weight on the servo in question. Worse yet, when the position went above 0 again, even just to one, it caused a violent jerk to some (I guess) random position. And that was the real problem. Too bad though. Being able to release some servos when applicable could be a good power saving technique. But the re-powering is murder.

Nonetheless, it's interesting to know that only happens when using Autopositioner. Still, I think I'll continue to stay away from ever going down to zero, period. Seems like the the most prudent route.


To expand on what @wbs is talking about, it's important to know this fact. Servos draw equally the same power holding a position as they do released - if there is no need to hold a position.

I'll be more specific. If a servo was released and it moved under the weight of the robot, that is because it needs the power to hold the position. If you were asking to release a servo to save power, it would therefor move.

Now, if a servo was released and it didn't move under the weight of the robot, then it means it's using the same power as if it was released. Again, a servo ONLY uses power when it needs to hold a position under weight. And holding a position with no weight will not use any power.

So asking to release a servo to save power is counter intuitive because if the robot can holds its position without the servo released, then it's not using any more power with the servo held in position.

The only disadvantage to releasing a servo to save power is losing its position - because a servo doesn't use power of it doesn't need too. It only uses power to hold a position.

United Kingdom


Yeah, I remember that Auto Position issue you had. But I was using servo release on another project for quite a while before that in a project, but recently deleted it as I no longer use it as the robot has since been dismantled (or should I say gutted) for my latest project. Anyway thanks for the reminder though.:)


Thanks for the explanation... very interesting and good to know. The main reason I use servo release, is if a servo is not holding any real weight and moves something else such as a retrable sliding arm with a linkage for example, I release it when it is not needed to stop the sometimes irritating and sometimes loud buzzing servos can make, especially when a servo is only occasionally used. My belief was that if these were buzzing then power is being applied and releasing the servo would save on that power which is not needed, and prolong the life of the servo over time. That was my thought on it anyway.

That's why I like the idea of servo release and why I think that having a script command to reset the servo for when it need to move would be a great idea. This would also be good for the example @WBS outlined. I know someone else asked about this a while back but there was no response. Would it be possible to add a servo reset command, DJ?


If the servo is buzzing, then it's using power because it's holding weight. If you release a servo, it may stop buzzing but it is also not holding the exact position that was requested. If the small difference isn't a big deal to you, then there's no need to worry to use servorelease. And if the weight of the attachment isn't moving the servo, also no need to worry to use servorelease.

What would a servo reset command do?

United Kingdom


Thanks for getting back to me. Yeah, using my current project as an example, I have servos sliding horizontal retractable arms. One of them is bigger that the others and when it retracts to its resting position its buzzes a little due to the length of the linkage. Adjusting the values either does not fully retract or goes a bit to far but always buzzes. At this point it's not holding anything important so exact servo position is not a problem and that's where the release comes in. It kills the buzzing and though it would save a little on power when not in use.

In regards to the reset servo command, it would do the same as the reset servo tab in the ARC ribbon menu, resetting the servo (or chosen servos) after a release. Having it as a script command, it could be added in to a script without having to press the servo reset tab in the menu (basically, a Cheat Sheet command to the reset servo tab). I know Richard R mentioned this thread post #9 a while ago in this thread for his Inmoov projects.

At least that's the idea.


I absolutely hate the sound of buzzing servos and feel your pain. There's a few other things you can do. Switch over to analog servos. They usually are much quieter. Switch over to DC motors with hbridge and pot for feedback. They are very quiet and strong. Get rid of the curcuit board in the servo and use a ultrasonic switching motor controller instead. I've used all three of these methods in my B9 with great and quiet results.

United Kingdom


Thanks for the fantastic info you offered up. I won't be changing anything on my current project, but you have given me food for thought for future projects though.

Thank you.:)