Asked
Resolved Resolved by Athena AI!

Servos Go Beyond Global Max/Min When Release Button Is Pressed

I am having a couple related problems. I set the initialization servo max/mins which are working correctly. However, sometimes (not every time though), when I click release, the servos go past the limits. Other times they release to the correct min position.

Second, I have noticed that the arduinos keep sending the position signal even after disconnecting the board. Even when I close ARC completely and reboot the arduino, and power on the robot, the servos are still sending a position signal that was last sent when ARC was still open. It seems that hitting the release button each time fixes this. Does this mean I need to program in release at the end of every servo position control? Once I do click release, I encounter the first problem I discussed above.


Related Hardware Arduino Due/Mega

ARC Pro

Upgrade to ARC Pro

ARC Pro is more than a tool; it's a creative playground for robot enthusiasts, where you can turn your wildest ideas into reality.

PRO
Synthiam
#1   — Edited

Your description is how servos work:). This is a great read: https://synthiam.com/Support/Advanced-Fundamentals/servo-motor

releasing a servo can be a weird one as well and it’s dependent on how the servo behaves. It stops sending a signal which allows the servo to move freely. That’s how a servo behaves when there’s no signal. Also, some lower quality servos may jump into weird positions when there’s power applied but no signal

give that article a thorough read and it’ll make sense:)

the alternative is to choose higher quality servos, such as robotis Dynamixel. Or, even some higher quality pwm hobby servos such as the ezrobot hdd ones.

#2  

Thank you. However, the MAX/MIN limits are not working. Sometimes it works, but other times it still lets me push the horizontal servo control past the limits specified in the init script. When I change the MIN position, and reboot ARC, the mins are shown correctly in the init script, however the horizontal control still allows me to go past. Is it possible there is some sort of 'cache' that is still being read from the previous max/min settings?

To be sure I am doing this correctly, I have this code under EZ script under the respective connection port #: SetServoMin( D11,140) SetServoMax( D11,160) However I am still able to push the servo under 140.

I notice other people's projects used an INIT script inside a module instead of in the main connection tab. Am I missing something?

#3   — Edited

Is it possible that you have the min/max setting reversed in the horizontal control it's self? I set min/max in my INT script and have accentually reversed the settings in a servo control. I got the same effect you are having.

#4  

Thanks Dave, but unfortunatley that isn't it. I actually made that same mistake previously as well!

Quick question though: When you say INIT script, do you mean in the main connection panel using EZ-Script? Or do you have another module that you inserted with the INIT script in it?

PRO
Belgium
#5   — Edited

elektrophunktronic

open an original jd ARC. there you see the init  . you can open that and see whats inside .

User-inserted image

#6  

Thanks Nomad. I set up the INIT inside a module instead of the connection area but it still overshoots the MIN for some of the Servos.

PRO
Synthiam
#7   — Edited

Sorry, I'm unable to reproduce this. Did you read the servo initialization manual here? https://synthiam.com/Support/Tips-to-Make-a-Robot/initialize-servos

I wonder if your Init script isn't being executed - or it's not being executed entirely and has an error missing the servo limit commands. You can run the script while editing it to preview if there are any errors.

Using the EZB emulator, this screenshot shows that the position never exceeds 20 or below 10. I specified the min and max positions to 10 and 20, respectively. This is the result of sliding the servo position from 30 to 1. You can see how the servo is never moved outside the specified limits.

User-inserted image

Here's the initialization code that specifies the servo min and max positions.


Servo.setMinPositionLimit(d0, 10);

Servo.setMaxPositionLimit(d0, 20);

I'm using a horizontal servo robot skill with the range set to min 1 and max 30. That means I can slide the position outside of the range. However, the servos will never move to a position outside of the specified limit range.

User-inserted image

PRO
Belgium
#8  

hi elektrophunktronic

here's were you put the init script . start klick on the tree dots left unbove .

User-inserted image

then you see this .klick connection 1 .then another page opens .

User-inserted image

and here you put your init script that you choose from the cheat sheet

choose this one . initstart .

User-inserted image

and save on your pc and in cloud .

ps : witch servo's  are using ?