I have 2 parallax continuous servos and i want to use an external power 4 AA batteries (= 6Volt). The problem is that i can't find a way to make it work with the arduino.
I read that i should connect the Gnd from batteries with the Gnd pin from arduino, but it doesn't work. Look my connections:
If i connect the servos this way, it only begin the one and with low speed(in my code i have both of them in full speed). If i connect only one servo it works, but with 2 NO.With 2 servos it has really strange behaviour, when i disconnect the signal wire from one also stops the other
Is it hardware problem (burned servo, connection)? Maybe software (my code is wrong? but if i connect only one each time works) ?
Thanks !!!
//simple code to rotate one servo right and one servo left in full speed
int servoPin1 = 6;
int servoPin2 = 7;
void setup()
{
pinMode(servoPin1,OUTPUT);
pinMode(servoPin2,OUTPUT);
}
void loop()
{
digitalWrite(servoPin1,HIGH);
delayMicroseconds(1200);
digitalWrite(servoPin1,LOW);
delay(20); // 20ms
digitalWrite(servoPin2,HIGH);
delayMicroseconds(1800);
digitalWrite(servoPin2,LOW);
delay(20); // 20ms
}
schematic ??
i just connect the servos to the breadboard in my first post
Your wiring setup looks correct to me. However your software is a problem. You really should be using a servo library for your code, that way you just program changes and the library handles the continous updating to the servo control signal.
So you have the effect of a 1.2mS high pulse and 41.8mS off for one, and 1.8mS pulse and 41.2mS off for the other.
Reading the datasheet, looks like you have an extra delay(20) in your code, at a minimum.
@retrolefty when i search i found that code for continuous rotation for arduino and so i used it. I knew about the servo library but i don't know how works. I will try again
@KE7GKP the max voltage for each servo is 6 Volt. My batteries are new and since i have seen many constructions with 4 AA batteries( 6 Volt) and 3 servos , i believe that it should work.
@retrolefty when i search i found that code for continuous rotation for arduino and so i used it. I knew about the servo library but i don't know how works. I will try again
The servo library will allow you just to only concern yourself with when you want to send a specific usec command value to each servo, the library will handle all the timing stuff for you.
Guys i believe that one servo is burned
I found a standard servo this time and i put on the breadboard both one continuous and one standard servo and i use servo library.
Both of them works. Then i put the second continuous servo in the continuous servo that it works and didn't begin.( i hear a sound for a second like it going to begin but it doesn't begin)
I would like to ask you also 1 more question.
i want to put 3 servo in my construction, how to power them safe ( i don't want to burn one more)?
first i like to thank you for your answers and sorry if I become tedious.
I read some things and i understand that maybe i need to calibrate my servo(so for this reason @retrolefty you gave me other numbers than the datasheet) ?. I use writeMicroseconds(1500) and the servo turns in a speed. I open my servo and i find a trimmer. I turn it still it stop. I find the center(1500 says the datasheet) for the servo , right ?
Now when i put 1800 and 1200 it works as it says in the datasheet.
But if i put for example 2300 it turns faster. Is this safe ? (since datasheet says to send pulses 1200 - 1800 only ) ? and since i calibrate my servo these values are not allowed?
Below is some code I've used for testing two continous rotation servos via the serial monitor.
// zoomkat 11-22-10 serial servo (2) test
// for writeMicroseconds, use a value like 1500
// for IDE 0019 and later
// Powering a servo from the arduino usually DOES NOT WORK.
// two servo setup with two servo commands
// send eight character string like 15001500 or 14501550
#include <Servo.h>
String readString, servo1, servo2;
Servo myservo1; // create servo object to control a servo
Servo myservo2;
void setup() {
Serial.begin(9600);
myservo1.attach(6); //the pin for the servo control
myservo2.attach(7);
Serial.println("servo-test-21"); // so I can keep track of what is loaded
}
void loop() {
while (Serial.available()) {
delay(1);
if (Serial.available() >0) {
char c = Serial.read(); //gets one byte from serial buffer
readString += c; //makes the string readString
}
}
if (readString.length() >0) {
Serial.println(readString); //see what was received
// expect a string like 07002100 containing the two servo positions
servo1 = readString.substring(0, 4); //get the first four characters
servo2 = readString.substring(4, 8); //get the next four characters
Serial.println(servo1); //print to serial monitor to see results
Serial.println(servo2);
int n1; //declare as number
int n2;
char carray1[6]; //magic needed to convert string to a number
servo1.toCharArray(carray1, sizeof(carray1));
n1 = atoi(carray1);
char carray2[6];
servo2.toCharArray(carray2, sizeof(carray2));
n2 = atoi(carray2);
myservo1.writeMicroseconds(n1); //set servo position
myservo2.writeMicroseconds(n2);
readString="";
}
}