Pages: [1] 2   Go Down
Author Topic: Arduino & Continous Rotation Servos  (Read 1912 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
#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.

* Servo.fzz (4.63 KB - downloaded 14 times.)

* Servo_bb.png (119.99 KB, 512x438 - viewed 37 times.)
« Last Edit: January 09, 2013, 12:18:40 am by DCengineer » Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 221
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Montreal
Offline Offline
Faraday Member
**
Karma: 30
Posts: 2608
Per aspera ad astra.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Montreal
Offline Offline
Faraday Member
**
Karma: 30
Posts: 2608
Per aspera ad astra.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
t += 1000
 is equivalent to
t = t + 1000
  You need add, and save, so next run in cycle variable would progressively increasing.
« Last Edit: January 08, 2013, 01:23:23 am by Magician » Logged

Offline Offline
Faraday Member
**
Karma: 68
Posts: 2853
The last thing you did is where you should start looking.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

The way you have it in your schematic isn't the same as how you have it wired up! That goes for me too.

South Texas
Offline Offline
Edison Member
*
Karma: 8
Posts: 1025
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Is it possible that it is broken?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I found this library and it seems to work:
http://code.google.com/p/arduino-parallax-continuous-rotation-servo-library/
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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(){
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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);
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1] 2   Go Up
Jump to: