Hello every one,
I am using continuous rotation servo motors to rotate springs of a vending machine. Let's say, I need to it to rotate 360 degree to dispense a product.
I am also using PCA9685 servo shield bc I want to run multiple servos simultaneously.
First, I've trying the function writeMicroseconds(servonum, microsec)
But I noticed that it doesn't always rotate 360 degree, it keep its same position at first rotation and time after time the position increased. It doesn't keep the same position and I need it to be kept.
Then, I remember that I read something says the output of the microseconds function is not precise so I thought the function is the problem.
After that, I just tried another function which is setPWM(servonum, on, off)
this function required to define a MIN and MAX value for the pulse at the beginning but I actually didn't understand this function correctly yet and how to find these value for a cont. rotation servo so I use the value I found on internet.
Servo works. It moves when I send 250 to it and it stops when I send 300 to it. But the same problem it doesn't keep the position.
Idk is my delay value wasn't right or the frequency? or there is another reason? How can I keep the same position forever every time the servo rotate
Also I am working with a team so my teammate test the first function after attaching the servo to a spring and the position difference was even large.
Continuous servos are misnamed. They are not servos, they are gearmotors that have their speed and direction controlled by a servo signal, only. Their positional feedback element is disconnected so they cannot know their position. They are no longer servos and cannot be set to a position. If you use timing to go to a position the timing for a certain position will change with motor supply voltage and/or load.
Get a real servo. Or add positional feedback to the motor (encoder). Or use a stepper. Steppers are great for precise positioning.
I think that you are going to struggle to get a continuous rotation servo to move to and hold a particular position because it has no positional feedback
Its position after rotating for a fixed time will not be precise and amongst other things will be influence by the load on the servo and its supply voltage, both of which may vary
If you need something that will rotate 360 degrees or more and then hold its position Google "winch servos". They will usually rotate at least 3 full turns and hold position. The only catch is they're usually fairly big.
You can use your "continuous roration" servos but only if each one has some kind of "home" switch. It can be a switch with a cam, an IR sensor with a hole in a disk or reflector on a dark background, or a Hall Effect switch and a magnet... Something to let the Arduino know when the 'spring' has reached the resting position.