Go Down

Topic: Arduino & Continous Rotation Servos (Read 2129 times) previous topic - next topic

DCengineer

Jan 07, 2013, 10:58 pm Last Edit: Jan 09, 2013, 06:18 am by DCengineer Reason: 1
I am trying to run a VEX servo motor (3-wire) with my Arduino. No matter what I try, I can only get it to run infinitely.
Here are two programs I created to try and get it to work...
Code: [Select]
#include "Servo.h"
Servo motor;
void setup() {
 motor.attach(9);
 for(int t=0;t<=3000;t+1000){
   motor.write(80);
 }
}
void loop(){
}

and...
Code: [Select]
#include "Servo.h"
Servo mtr;
void setup(){
 mtr.attach(9);
 mtr.write(80);
 delay(1000);
}
void loop(){
}


The circuit I am using is attached below.

jeffmorris

I think that the 9-volt battery is too weak to power VEX motors. You'll need 7.2V RC battery pack.

DCengineer

I don't see how a 9V would provide less power than a 7.2V, and the battery I had was brand new.

Magician

Not sure, if I understand your question, but I spot an error could cause
"hang-up":
Code: [Select]
void setup() {
  motor.attach(9);
  for(int t=0;t<=3000;t += 1000){   // <-  "=" sign is missing
    motor.write(80);
  }
}
void loop(){
}

DCengineer

I'm wanting to add 1000 to t, does += add a specific value?

Magician

#5
Jan 08, 2013, 07:21 am Last Edit: Jan 08, 2013, 07:23 am by Magician Reason: 1
Code: [Select]
t += 1000
is equivalent to
t = t + 1000
  You need add, and save, so next run in cycle variable would progressively increasing.

LarryD

Your motor may be continuous operating version.
http://www.robotc.net/wiki/Tutorials/Arduino_Projects/Mobile_Robotics/VEX/VEX_Motor_Intro
http://www.robotc.net/wiki/Tutorials/Arduino_Projects/Mobile_Robotics/VEX/VEX_Motor_Intro#What_is_a_Continuous_Rotation_Servo.3F
The way you have it in your schematic isn't the same as how you have it wired up!

kf2qd

Yep, the VEX servo is a continuous rotation servo. That is why they have the 2" diameter wheel with a black o-ring around the outside. As compared to a normal servo - 90 degrees is stop. and you have direction control as you move away from 90 degrees along with "some" speed control.

DCengineer

Mine is the one in the middle of the picture on the first link.

DCengineer

Is it possible that it is broken?


DCengineer

NEW QUESTION:
Now that I got the motor to run the way I want, how can I get 2 motors to run at the same time?

brian305

without seeing the code that you have working I can only guess based on what you posted before.

You have to initialize another servo:

Servo motor2;

Then initialize it to the pin of the second motor, something like this (assuming this code works for your first servo

void setup() {
 motor2.attach(XX); // where XX is the pin of the other servo.
 for(int t=0;t<=3000;t += 1000){  
   motor.write(80);
 }
}
void loop(){
}

DCengineer

Here is the code I got to work. The question I was asking was a little more general... it can be worded as "How can I run two lines of code at the same time?"
This is my current code to run one servo, based on a library I found online. I just want to run two servos at once, and thought I might be able to get two lines of code to execute AT THE SAME TIME.
Code: [Select]
#include <ContinuousRotationServo.h>

ContinuousRotationServo Servo;
int distance;

void setup()
{
  Servo.begin(2); // port 2, this library works without PWM
}

void loop()
{
  Servo.rotateLeft(50,100);
  Servo.noMovement(500);
  Servo.rotateRight(50,100);
  Servo.noMovement(500);
}

brian305

Not to my knowledge, the processor on the Arduino is only capable of handling one instruction at any given moment in time.  But that is a extremely small amount of time.  Unless there is a delay or sleep between the 2 calls to the servos will start at the same (human percevable) time.

Go Up