hello ,
plese help me for a program for contolling a rc servo with the help of potentiometer .
i have already viewed a example progam i.e. Knob from the arduino main site but servo does'nt work perfectly ..
hello ,
plese help me for a program for contolling a rc servo with the help of potentiometer .
i have already viewed a example progam i.e. Knob from the arduino main site but servo does'nt work perfectly ..
Provide as many details about your hardware as you can. Someone will help. Explain how circuit performance failed to meet expectations.
i have an arduino duamilanavo ,servos and potentiometers ....
problem is that when potentiometer gives anlaog values then servo react accordingly but analog value is vary according to time thats cause linearity of out put breaked
.
here is program
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
I have never used Arduino, but se the comment I found that says: "you must call the SoftwareServo::refresh() method at least once every 50ms or so to keep your servos updating"
And I have seen example codes like yours but with one more line inside the loop. This one: - SoftwareServo::refresh();
Maybe this unlinearity is because of not refreshing the servos, is it posible?
Other posibility is that you have to set the minimum and the maximum pulse. This settings may vary depending on the sevo.
Hope it helps.
Potentionmeters come in linear taper and audio taper models. That means there is an even increase of resistance as you turn the pot in linear taper, audio taper will increase the value logarithmically. You might want to add a serial print to see the values the potentiometer is putting out through the IDE serial monitor so that you know the analog input is being scaled evenly to what you expect.
Use the sample sweep and servo sketch that is in your IDE. Also, depending on the servo, if it is a continuous or just capable of 180 or fixed rotation, you may need to add logic to reset it or home it to zero, especially when it gets to it's end position and you have to reverse the direction for it to move. The movements may be relative to the last postion too.
Your program is the same as the official tutorial found at http://arduino.cc/en/Tutorial/Knob.
There are two issues that may be affecting your satisfaction of the servo performance.
1: The Input is an analog value going into the ADC of the uC via A0. It may be necessary to ground the other analog inputs thru resistors so they are not 'floating'.
2: The Output is driving a possibly high current drain servo motor that may need its own power supply in order not to overload the (correctly spelled) duemilanove's regulated power supply.
Please note that if the val (provided from the ADC when analogRead executes) is bouncing around more than +/- 5.7 (+/- 28 mV) then the 0 to 179 value is changing also and the servo will be instructed to move a 1 degree step. If the circuit cannot achieve that level of stability then I may suggest that you use val=2*map(val,0,1023,0,89); this will allow the random variations of ADC to swing +/- 11.4 (+/- 56 mV) before a 2 degree change in the servo position is generated. IMO this method is superior to sampling multiple times and taking an average. It trades granularity for stability.
If you live close to a commercial facility that is generating 1000 watts or more of rf energy it may be the cause of the instability of the value of the variable 'val'.
Don't forget to post complete feedback about what changes you made that improved the performance of your hardware.
Happy Trails.
I seem to recall we went through this previously...
Your dealy time is a little short (15mS) which is probably why you're getting strange reasons.
You can't possibly move the pot or expect the servo to reacte that quick, so try a delay(200) instead of the delay(15) to slow it down.
As you servo shifts, the motor current will have an influence on the supply (5v) and this will influence the analog reading, which influences the servo, which ....
As Billabott has pointed out, any small change will influence the result.
Your wiring can have some affect and the ground wire from the servo, and the ground wire from the pot should ideally be two seperate pieces of wire.
This stops the motor current travelling along the pot wire and influencing the reading.
You can also help by adding a 1000uF or larger across the 5v as close to the servo as possible.
This will help with the servo motor and the relatively large current drain at startup.
Mark