domingo, 30 de octubre de 2011

Arduino 3 : Robot gusano y cámara robotizada 2



Arduino 3 : Robot gusano y cámara robotizada 2


Hace unos años descubrí la pagina de Iearobotics , donde se hablaba de robots apodos mediante módulos. Yo quise emularlo (lo de diseño modular) para construir un brazo robotico. Pero esta vez he querido ir hasta el concepto original.





Mis módulos

Por eso he programa esta especie de gusano, al cual le 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 la 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í dejos los vídeos, tanto desde fuera como con la Cam montada en el gusano:









Cámara robotiza 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.

No hay comentarios:

Publicar un comentario

Seguir @Exergy123