Arduino 3: Robot gusano y cámara robotizada 2

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.


Mis módulos

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();
}
}
}

 

Licencia Creative Commons
Este obra está bajo una licencia Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.

Un comentario en “Arduino 3: Robot gusano y cámara robotizada 2

  1. hola quisiera que me ayudeis se muy poco de programacion quisiera poder duplicar este codigo para dos servos independientesen espera y velocidad e hecho de todo y no lo logro
    un saludo alberto maseda

    Servo servo1;
    int pos = 0;
    void setup()
    {
    servo1.attach(9);
    }

    void loop()
    {
    for(pos = 0; pos =1; pos-=1)
    {
    servo1.write(pos);
    delay(15);
    }
    }

Deja un comentario