There is not a simple tutorial than this one and I have search the web looking for one with no result.
This one is simple and easy for everybody to follow. Enjoy! ;)
Dont forget to vote for me on the Arduino Challenge!!
Note: This tutorial is for those who are using the Arduino already. But If you haven't just yet with this tutorial you can.
Remove these ads by
Signing UpStep 1: Materials
Hardware
1. Arduino Board (my version is UNO).
2. 2 servos Parallax (Radio Shack).
3. Web Cam (optional) to see the movement.
4. 2 rubber bands to hold the Webcam in position.
5. Bread Board to make any connections easy.
6. 1 cable tie
7. Something to hold the servos in place.
8. A computer.
Software:
1. Arduino Software (to upload the code to move the 2 servos).
2. Process Software (to move the servos using the mouse)








































Visit Our Store »
Go Pro Today »




(I would want it to spin from degree 0 to 360 or close, but not all the way around. If this is not possible with the mouse control, is there a way to "convert" the 360 degree servo to a 180 degree servo?)
On forehand thank you!
The BIG plan is to make several servo pairs with lasers/high powered leds, and via FFT library construct light show :)
Big thanks to biomech75!
https://www.youtube.com/watch?feature=player_embedded&v=LyGXzYBQ3gg :)
I connected the two servos right on schedule. The Arduino software is playing up compile, and upload.
then the Arduino software closed.
Unfortunately I can not move the servo with the mouse.
I use it a Sony VAIO Laptop:
Maybe I can give a tip whoever.
Thank you
after you close the arduino you copy and paste the code to the process software and click run. Then you will see a grey box with the mouse pointer there, move that to start moving the servos
I would like to control 3 servo by mouse.
I don´t know how to do it.
//Arduino code:
#include
Servo yservo; Servo xservo; Servo zservo; // servos for x and y
//set initial values for x and y
int ypos = 0;
int xpos= 0;
int zpos= 0;
void setup(){
xservo.attach(14); //(analog pin 0) for the x servo
yservo.attach(15); //(analog pin 1) for the y server
zservo.attach(16);
Serial.begin(19200); // 19200 is the rate of communication
Serial.println("Rolling"); // some output for debug purposes.
}
void loop() {
static int v = 0; // value to be sent to the servo (0-180)
if ( Serial.available()) {
char ch = Serial.read(); // read in a character from the serial port and assign to ch
switch(ch) { // switch based on the value of ch
case '0'...'9': // if it's numeric
v = v * 10 + ch - '0';
/*
so if the chars sent are 45x (turn x servo to 45 degs)..
v is the value we want to send to the servo and it is currently 0
The first char (ch) is 4 so
0*10 = 0 + 4 - 0 = 4;
Second char is 4;
4*10 = 40 + 5 = 45 - 0 = 45;
Third char is not a number(0-9) so we drop through...
*/
break;
case 'x': // if it's x
/*
....and land here
where we send the value of v which is now 45 to the x servo
and then reset v to 0
*/
xservo.write(v);
v = 0;
break;
case 'y':
yservo.write(v);
v = 0;
zservo.write(v);
v = 0;
break;
}
}
}
//Processing code:
import processing.serial.*;
int xpos=90; // set x servo's value to mid point (0-180);
int ypos=90; // and the same here
int zpos=90;
Serial port; // The serial port we will be using
void setup()
{
size(360, 360);
frameRate(100);
println(Serial.list()); // List COM-ports
//select second com-port from the list (COM3 for my device)
// You will want to change the [1] to select the correct device
// Remember the list starts at [0] for the first option.
port = new Serial(this, Serial.list()[0], 19200);
}
void draw()
{
fill(175);
rect(0,0,360,360);
fill(255,0,0); //rgb value so RED
rect(180, 175, mouseX-180, 10); //xpos, ypos, width, height
fill(0,255,0); // and GREEN
rect(175, 180, 10, mouseY-180);
update(mouseX, mouseY );
}
void update(int x, int y)
{
//Calculate servo postion from mouseX
xpos= x/2;
ypos = y/2;
zpos = y/2;
//Output the servo position ( from 0 to 180)
port.write(xpos+"x");
port.write(ypos+"y");
port.write(zpos+"y");
}
thank for response.
CODE:
//Arduino code:
#include
Servo yservo; Servo xservo; Servo zservo; // servos for x and y
//set initial values for x and y
int ypos = 0;
int xpos= 0;
int zpos= 0;
void setup(){
xservo.attach(14); //(analog pin 0) for the x servo
yservo.attach(15); //(analog pin 1) for the y servo
zservo.attach(16); //(analog pin 2) for the z servo
Serial.begin(19200); // 19200 is the rate of communication
Serial.println("Rolling"); // some output for debug purposes.
}
void loop() {
static int v = 0; // value to be sent to the servo (0-180)
if ( Serial.available()) {
char ch = Serial.read(); // read in a character from the serial port and assign to ch
switch(ch) { // switch based on the value of ch
case '0'...'9': // if it's numeric
v = v * 10 + ch - '0';
/*
so if the chars sent are 45x (turn x servo to 45 degs)..
v is the value we want to send to the servo and it is currently 0
The first char (ch) is 4 so
0*10 = 0 + 4 - 0 = 4;
Second char is 4;
4*10 = 40 + 5 = 45 - 0 = 45;
Third char is not a number(0-9) so we drop through...
*/
break;
case 'x': // if it's x
/*
....and land here
where we send the value of v which is now 45 to the x servo
and then reset v to 0
*/
xservo.write(v);
v = 0;
break;
case 'y':
yservo.write(v);
v = 0;
break;
case 'z':
zservo.write(v);
v = 0;
break;
}
}
}
//Processing code:
import processing.serial.*;
int xpos=90; // set x servo's value to mid point (0-180);
int ypos=90; // and the same here
int zpos=90; // and the same here
Serial port; // The serial port we will be using
void setup()
{
size(360, 360);
frameRate(100);
println(Serial.list()); // List COM-ports
//select second com-port from the list (COM3 for my device)
// You will want to change the [1] to select the correct device
// Remember the list starts at [0] for the first option.
port = new Serial(this, Serial.list()[0], 19200);
}
void draw()
{
fill(175);
rect(0,0,360,360);
fill(255,0,0); //rgb value so RED
rect(180, 175, mouseX-180, 10); //xpos, ypos, width, height
fill(0,255,0); // and GREEN
rect(175, 180, 10, mouseY-180);
update(mouseX, mouseY );
}
void update(int x, int y)
{
//Calculate servo postion from mouseX
xpos= x/2;
ypos = y/2;
zpos = y/3;
//Output the servo position ( from 0 to 180)
port.write(xpos+"x");
port.write(ypos+"y");
port.write(zpos+"y");
}
Thank you for sharing.
from start to finish it took me about 5 min and everything works great!!!
Here's a link to the dc motor I'm using,
http://www.servocity.com/html/90_rpm_micro_gearmotorblocks.html
Thanks........Antonio
a dc motor
a transistor (NPN 2N2222) @ RadioShack
a resistor (1K Ohm) @ RadioShack
a diode @ RadioShack
Code:
int potpin = A0;
int val;
void setup() {}
void loop() {
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 225);
analogWrite(3, val);
delay(15);
}
What would I have to do to invert the axis? ie. make moving the mouse left turn the servo in the opposite direction of what it does now.
Thanks! :D
Had to change "xservo.write(v)" to "xservo.write(-1*v+180)", and the same for yservo.
By the way, nice tutorial!