Hace unos años descubrí la pagina de Iearobotics, donde se hablaba de robots ápodos a base de módulos. Yo quise emularlo (lo del diseño modular) para construir un brazo robótico. Pero esta vez he querido ir hasta el concepto original.
Por eso he programado esta especie de gusano, al cual he añadido dos paquetes de pañuelos a modo de almohadillas para que no resbalara por la mesa, y mi viejo Nokia a modo de contrapeso para que pudiese levantar un poco la estructura.
El programa, en el que intento programar una media onda sinusoidal es el siguiente:
#include
Servo myservo; // crea un objeto tipo servo para controlar el servo
Servo myservo2; // crea un objeto tipo servo para controlar el servo
int pos = 0; // variable para almacenar la posición del servo
int pos2 = 0; // variable para almacenar la posición del servo
void setup()
{
myservo.attach(9); // liga el servo conectado en el pin 9 al objeto servo
myservo2.attach(6); // liga el servo conectado en el pin 6 al objeto servo
}
void loop()
{
pos2=180/2;
for(pos = 0; pos < 180; pos += 1) // va de 0 a 180 grados
{ // en pasos de 1 grado
myservo.write(pos);
pos2 -= 1;
myservo2.write(pos2/2); // dice al servo que se posicione en la posición indicada por la variable ‘pos’
delay(15); // espera 15 ms para dar tiempo al servo a llegar a la nueva posición
}
pos2=0;
for(pos = 180; pos>=1; pos-=1) // va de 180 a 0 grados
{
myservo.write(pos);
pos2 += 1;
myservo2.write(pos2/2); // dice al servo que se posicione en la posición indicada por la variable ‘pos’
delay(15); // espera 15 ms para dar tiempo al servo a llegar a la nueva posición
}
}
Y aquí dejo los vídeos, tanto desde fuera como con la cámara montada en el gusano:
Cámara robotizada 2
He mejorado el programa que interpretaba los ángulos, ya que ahora no los lee directamente, sino que los selecciona a través de unos ifs consecutivos. Os dejo los programas tanto el de interpretación de arduino como el de control en Processing.
Processing
import processing.serial.*;
Serial port;
int i;
void setup() {
size(256, 150);
println(«Available serial ports:»);
println(Serial.list());
port = new Serial(this, Serial.list()[1], 9600);
}
//CUIDADO CON LAS MAYUSCULAS
void draw() {
byte prueba;
if (key == ‘s’) {
fill(45);
prueba=40;
port.write(prueba);
}
if (key == ‘d’) {
fill(90);
prueba=60;
port.write(prueba);
}
if (key == ‘f’) {
fill(135);
prueba=90;
port.write(prueba);
}
if (key == ‘g’) {
fill(255);
prueba=120;
port.write(prueba);
}
if (key == ‘a’) {
fill(0);
prueba=1;
port.write(prueba);
}
rect(25, 25, 50, 50);
if (key == ‘t’) {
fill(45);
prueba=2;
port.write(prueba);
}
if (key == ‘h’) {
fill(90);
prueba=3;
port.write(prueba);
}
if (key == ‘n’) {
fill(135);
prueba=4;
port.write(prueba);
}
if (key == ‘y’) {
fill(255);
prueba=5;
port.write(prueba);
}
if (key == ‘j’) {
fill(0);
prueba=6;
port.write(prueba);
}
rect(50, 25, 50, 50);
}
Arduino
#include
Servo myservo; // crea un objeto tipo servo para controlar el servo
Servo myservo2; // crea un objeto tipo servo para controlar el servo
int pos = 0; // variable para almacenar la posición del servo
void setup()
{
Serial.begin(9600);
myservo.attach(9); // liga el servo conectado en el pin 9 al objeto servo
myservo2.attach(6); // liga el servo conectado en el pin 9 al objeto servo
}
void loop()
{
byte brightness;
byte angulo;
// check if data has been sent from the computer:
if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255):
brightness = Serial.read();
// set the brightness of the LED:
if(brightness == 1){
angulo=0;
myservo.write(1);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 40){
angulo=40;
myservo.write(40);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 60){
angulo=60;
myservo.write(60);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 90){
angulo=90;
myservo.write(90);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 120){
angulo=70;
myservo.write(120);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
//Segundo Servo
}
if(brightness == 2){
angulo=45;
myservo2.write(angulo);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 3){
angulo=90;
myservo2.write(angulo);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 4){
angulo=120;
myservo2.write(angulo);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 5){
angulo=180;
myservo2.write(angulo);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
if(brightness == 6){
angulo=1;
myservo2.write(angulo);
brightness = Serial.read();
delay(30);
brightness = Serial.read();
}
}
}
Este obra está bajo una licencia Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.