Ayer me llegaron a mis manos los 3 servos 9g que compré en DealExtreme (sitio web que ahora puedo recomendar con experiencia) a solo U$S 3.94 con envío incluido.
La idea original era crear un pequeño CNC Router como modelo para hacer uno mas grande con motores mayores. Pero de impaciente que soy me puse a probar y a intentar hacer un cabezal que gire horizontal y verticalmente.
Perdón por la calidad del video, si bien estudio diseño audiovisual las viedocamaras no son muy accesibles a mi bolsillo.
El cabezal es muy sencillo, simplemente puse un servo sobre el otro. De manera que el de abajo haga girar sobre el eje X al de arriba que a su vez hace girar a otro elemento sobre el eje Y.
El código de Arduino se emplea la librería Servo que hace muy pero muy simple todo, y mediante comunicación serial Processing pasa las coordenadas del mouse en pantalla.
Arduino:
#include
Servo servo1; Servo servo2;
void setup() {
servo1.attach(8); //Servo inferior X- Cable naranja a la conexión 8 del Arduino
servo2.attach(7); //Servo inferior Y - Cable naranja a la conexión 7 del Arduino
Serial.begin(19200);
Serial.println("Ready");
}
void loop() {
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';
break;
case 's':
servo1.write(v);
v = 0;
break;
case 'w':
servo2.write(v);
v = 0;
break;
case 'd':
servo2.detach();
break;
case 'a':
servo2.attach(10);
break;
}
}
}
Processing:
/**
* Servocontrol (derived from processing Mouse 1D example.)
*
* Updated 24 November 2007
*/
// Use the included processing code serial library
import processing.serial.*;
int gx = 15;
int gy = 35;
int spos=90;
int ypos=90;
float leftColor = 0.0;
float rightColor = 0.0;
Serial port; // The serial port
void setup()
{
size(720, 720);
colorMode(RGB, 1.0);
noStroke();
rectMode(CENTER);
frameRate(100);
println(Serial.list()); // List COM-ports
//select second com-port from the list
port = new Serial(this, Serial.list()[0], 19200);
}
void draw()
{
background(0.0);
updatex(mouseX);
updatey(mouseY);
fill(mouseX/4);
rect(150, 320, gx*2, gx*2);
fill(180 - (mouseX/4));
rect(450, 320, gy*2, gy*2);
}
void updatex(int x)
{
//Calculate servo postion from mouseX
spos= x/4;
//Output the servo position ( from 0 to 180)
port.write("w"+spos);
}
void updatey(int y)
{
//Calculate servo postion from mouseX
spos= y/4;
//Output the servo position ( from 0 to 180)
port.write("s"+spos);
}
Las conexiones de los servos es simple, el cable negro a gdn (masa), el rojo a 5V y el naranja al pin de Arduino que corresponda.
Mi próximo paso es reemplazar el mouse por interacción con la cámara, primero con Reactivision y luego con seguimiento de rostros en OpenCV.



sergio
diciembre 29, 2011
buenas soy sergio a mi no me funciona el programa creo k es fallo dl procesing k no lo he programado bien, como lo hace usted primero carga el programa y despues inicia el procesing ¿no? por q yo lo he echo asi. me intersa mucho tambien lo del control por cámara web pero claro primero tengo k hacer este. un saludo y gracias por tu ayuda
Regio
marzo 10, 2012
Hola, me gusta mucho tu proyecto, he tomado prestado tu programa para mis inicios con servos y arduino. Una preguta ¿no entiendo los case “d” y case “a” en en bucle switch, te pregunto esto porque quiero usar un tercer servo y no se muy bien como hacerlo, muchas gracias, un saludo.
Marcos
marzo 10, 2012
La verdad es que ya hace mucho que me desconecté del proyecto y de arduino en general. Me cuesta comprender a mi también los case “d” y “a”
Regio
marzo 14, 2012
Muchas gracias por contestarme amigo, un saludo