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.

viernes, 28 de octubre de 2011

Resumen: Programadoras, Controladoras y Controlodora-Programadora

A continuación voy a hacer un resumen de las diferentes tarjetas controladoras e interfaz que existen y se aplican en el mundo de la robótica. Solo para intentar tener un poco más claros los conceptos:

Programadoras (Grabadora): Se conecta al PC a través del puerto paralelo, puerto serie o USB y se descargan programas de manera rápida y sencilla. Perfecto para aprender a programar microcontroladores. Los más simples son los de puerto paralelo, ya que se pueden programar directamente:
Puerto Paralelo: El más simple, se utilizan algunos pines de este puerto para programar el chip.
Uno de los más sencillos que he encontrado:

http://www.todorobot.com.ar/proyectos/picprog/picprog.htm
Otra versión: http://www.pablin.com.ar/electron/circuito/mc/ppp/index.htm



Puerto serie: Para adaptar los niveles del protocolo R232, hará falta un chip como Max232:

http://www.iearobotics.com/personal/andres/proyectos/picmin/pic1.html



USB: necesitariamos un conversor USB-R323 , sino el unico que he ecnontrado que se puede programar directamente es el microcontrolador de Microchip PIC18F2550, el cual soporta el protocolo HID implementado por hardware:

http://usbpicprog.org/

Controladora: Puede funcionar en modo autónomo, sin conectarse al PC. Cada vez que se encienda la tarjeta se ejecutará el programa que está grabado en la memoria del PIC.
De este tipo ya apenas se encuentran, porque la diferencia en costo de fabricar una de estas y una que ademas sea programadora es minima.

Controlodora-Programadora (Entrenadora)

Incluye las caracteristicas de las dos anteriores en una sola. Son las más populares.
Suelen funcionar como interfaz, es decir, actúa como un periférico del PC, puede recibir órdenes y enviar datos. Las hay para conectarlas por paralelo,serie y USB.

Vamos a destacar tres, por su conexión USB , facilidad y porque son OSHW (Open Source Hardware)

Arduino: Ya hemos hablado antes de esta. Con nucleo Atmel , es la más famosa.
http://www.arduino.cc/es/

Pinguino: ya lleva implementado por hardware el protocolo HID, por lo que no le hace falta un chip traductor. Usada sobre todo por ARDE:
http://www.hackinglab.org/



Skypic: Diseñada por "Obijuan", tambien tiene nucleo PIC
http://www.iearobotics.com/wiki/index.php?title=Skypic

Alternativas de pago hay muchas, ejemplo:
http://www.superrobotica.com/S310205.htm

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

domingo, 23 de octubre de 2011

Controlando con el teclado y Arduino: Camara robotizada

En el experimento de hoy he probado el control serie de Arduino , enviando bytes a través del USB y haciendo que Arduino los interprete. Para enviar los datos he utilizado Processing , primo hermano de Arduino, es un lenguaje orientado a gráficos basado en Java. Para este ejemplo he probado los ejemplos de Dimmer y Sweep en Arduino y Keyboard en Processing. Digamos que los he mezclado un poco y he conseguido un programa que interpreta algunas teclas como bytes, las envía a Arduino y este las interpreta como posición para el servo.

Como bonus, le he puesto una webcam a la estructura, por lo que he conseguido una cámara robotizada

Para Processing:

//Este ejemplo esta bajo licencia Creative Commons

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 MAYÚSCULAS

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

}

Para Arduino:


#include

Servo myservo; // 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
}

void loop()
{
byte brightness;

// 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:
myservo.write(brightness);
delay(3000);
}
}

Estos son los vídeos. Os recomiendo que los veáis los dos a la vez, ya que asín están grabados.





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

sábado, 22 de octubre de 2011

Un viaje por el 3D

Un viaje por el 3D

Desde hace unos años han aparecido un motón de formas de ver 3D. Sin embargo , no hay una forma estándar sino muchas formas de generar 3D. Aquí hago un pequeño resumen:

Sistemas volumétricos

Son los más simples y menos espectaculares. Se basan en grabar una imagen en un cristal y darle luz. Se pueden encontrar sobre todo en las tiendas de regalo.

Sistemas estereoscopicos

Se basan en superponer dos imágenes desde distinta perspectiva para conseguir el 3D.Son los sistemas más utilizados

Anaglifos: Las imágenes de anaglifo se componen de dos capas de color, superimpuestas pero movidas ligeramente una respecto a la otra para producir el efecto de profundidad. Usualmente, el objeto principal está en el centro, mientras que lo de alrededor y el fondo están movidos lateralmente en direcciones opuestas. La imagen contiene dos imágenes filtradas por color, una para cada ojo.

Proyectores 3D: Los más comunes son a traves de gafas polarizadas (son las llamadas gafas pasivas) .El sistema por polarización usa un doble proyector enclavijado (dual-projector interlocked). Hubo un resurgimiento del interés 3D en los años 60, los años 70 y los años 80 debido a la simplificación de la proyección polarizada estéreo en “los procesos de la sola tira” iniciados por Obler (Spacevision) y Silliphant (Stereovision). Stereovision seguía siendo el formato principal para la distribución de las películas de 35mm de 3D hasta la aparición del más grande, formato 3D de IMAX 70mm. Actualmente se vende proyectos domesticos en 3D.


Los más novedoso en este campo son los proyectores de la empresa Heliodisplay , capaces
de proyectar en el aire sin necesidad de pantalla. Esta a medio camino , permiten simular 3D pero solo desde vista frontal, por eso no pueden ser clasificado como sistema holografico.



Televisores y Pantallas 3D: Al no poder utilizar dos polarizaciones , lo normal es el sistema de gafas activas las cuales poseen sensores infrarrojos (IR) que permiten conectarse de manera inalámbrica con el televisor 3D. En este sistema, las dos imágenes no se muestran al mismo tiempo, sino que se encienden y apagan a alta velocidad. Los lentes de cristal líquido se van alternando entre un modo "transparente" y un modo "opaco" al mismo tiempo que las imágenes se alternan en la pantalla, es decir, el ojo izquierdo se bloquea cuando la imagen del ojo derecho aparece en la televisión y viceversa. Esto ocurre tan rápido que nuestra mente no puede detectar el parpadeo de los lentes.


Una de las formas más extremas de gafas activas es a traves de impulsos electromagneticos a los parpados.




Otra solucion pero esta vez sin gafas es a traves de una lente orientable de forma que proyecta diferentes visiones a cada ojo. Para eso hace falta que la pantalla reconozca a la persona que la ve. Estos sistemas de llaman autoestereoscopicos.







Nintendo 3Ds

Sistemas holograficos

Caja de espejos: Una curiosidad del siglo XIX. Este invento proyecta una imagen 3D de un objeto que hayamos introducido previamente en él.



Caja de leds: Solución DIY para hacer pequeños montajes en 3d.


Hologramas: técnica avanzada de fotografía , que consiste en crear imágenes tridimensionales. Para esto se utiliza un rayo láser , que graba microscópicamente una película fotosensible. Ésta, al recibir la luz desde la perspectiva adecuada, proyecta una imagen en tres dimensiones.


Proyectores Láser: Comunes en fiestas y discotecas, también sirven para planetarios. Con ellos se pueden proyectar lineas que forman figura si se cambian las propiedades del aire (se suele echar humo) o si son muy potentes(punteros láser astronómicos)



Proyección sobre sistemas de espejos giratorios: Los más avanzados. Pocas empresas tienen estos sistemas y actualmente no estás a la venta. En este enlace se puede ver el más avanzado que he encontrado, patrocinado por Sony:

http://gl.ict.usc.edu/Research/3DDisplay/




BONUS: Para hacer nuestros propios anaglifos:

Un procedimiento más sencillo es usar una cámara digital y un software de retoque fotográfico.

  • Tomar las dos fotos, con una distancia de entre 3 y 5 cm enfocando a un punto en concreto.
  • Para la foto que representa al ojo izquierdo, en la paleta Canales se eliminan los colores Azul y Verde.
  • Para la foto que representa al ojo derecho, en la paleta Canales se elimina el canal Rojo.
  • La foto representante del ojo izquierdo se arrastra hasta la otra foto, superponiéndola y aplicando la propiedad de capa Trama (o Dividir, dependiendo de la versión)



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

miércoles, 19 de octubre de 2011

SketchUp = Autocad + Paint

Si sumamos Paint (por su simpleza) + Autocad (por su potencia) + SolidEdge (por el 3D) nos sale SketchUp. Este programa , por cortesía de Google, es el programa más simple que he probado para hacer "bocetos" en 3D de cualquier cosa ( Sketch significa boceto en ingles).

Os voy a dejar con dos de mis bocetos que he hecho esta tarde para entretenerme:


"Castillo a lo Hogwarts"



"Una casa cualquiera"


Próximamente colgare todas las imágenes de este blog en un álbum Picasa, así que si no se ve bien no desesperéis ;)




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

lunes, 17 de octubre de 2011

Mi primer Hola Mundo con Arduino




Como comentaba en la anterior entrada, antes de Arduino era muy difícil hacer aplicaciones sencillas de robótica. Hoy me ha llegado mi primer AR-UNO y por eso voy a mostrar mis primeros experimentos con la placa.





1º Experimento : Encender y apagar un led

Después de pelearme con la instalación de los drivers, debido a que instale la versión 19(no soporta AR-UNO) , conseguí conectar la placa al ordenador.

Este es el código que inserte (se llama Blink y es el 1º ejemplo que viene):

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.
*/

void setup() {
// initialize the digital pin as an output:
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}

Utilice dos leds y así quedo el montaje:





2ºExperimento: Control de un servo

Hace ya mucho tiempo que quería echar a andar estos servos, los cuales acople a una estructura que pretendía ser un brazo robótica. He probado primero con un servo que va hacia arriba y hacia abajo. Este es el código:

// Sweep
// por BARRAGAN

#include

Servo myservo; // crea un objeto tipo servo para controlar el servo

int pos = 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
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // va de 0 a 180 grados
{ // en pasos de 1 grado
myservo.write(pos); // 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
}
for(pos = 180; pos>=1; pos-=1) // va de 180 a 0 grados
{
myservo.write(pos); // 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
}
}




En vez de dejaros fotos , dejare un vídeo que le he hecho:








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


lunes, 10 de octubre de 2011

Arduino's Revolution

Antes , cuando se quería realizar un proyecto de robótica, y en este se queria utilizar el ordenador, había que o bien dejarse el dinero comprando controladoras, interfaces y microcontroladoras o bien habia que hacerse un curso de electronica para montar tu mismo uno. A esto ademas habia que añadir problemas de compatiblidades entre controladores de diferentes fabricantes, diferentes lenguajes de programacion y falta de librerias.



Todo eso se acabado desde la llegada de Arduino.


Arduino es un hardware libre que ha conseguido reunir a un buen numero de seguidores en todo el mundo. ¿Sus ventajas? Vamos a enumerarlas:

1º Compatiblidad entre modelos: Varias son las variantes y todas son interconectables entre si
2º Gran numero de fans por todo el mundo: Esto permite que haya una gran bibliografía e información en Internet
3º Bajo coste debido a software libre y hardware libre
4º Versatilidad: Permite controlar todo tipos de motores , sensores, circuitos,etc.

Aqui os dejos algunas paginas interesantes:

Pagina oficial: http://www.arduino.cc/es/
Modelos: http://arduino.cc/es/Main/Hardware
Proyecto Gameduino: http://blog.bricogeek.com/noticias/arduino/gameduino-consola-de-juegos-con-arduino/#more
Proyecto Osciloscopio: http://blog.bricogeek.com/noticias/arduino/osciloduino-un-osciloscopio-diy-con-arduino/#more
Proyecto Coche RC http://blog.bricogeek.com/noticias/arduino/coche-rc-controlado-con-arduino-y-android/#more
Proyecto CNC: http://blog.bricogeek.com/noticias/arduino/mtm-snap-pequena-cnc-con-arduino/#more
Proyecto PID: http://blog.bricogeek.com/noticias/arduino/libreria-pid-con-arduino/#more
Proyecto Android: http://blog.bricogeek.com/noticias/arduino/comunicacion-entre-arduino-y-android-con-magnetometro/#more
Proyecto Grabadora laser: http://blog.bricogeek.com/noticias/arduino/grabadora-laser-casera-con-arduino/#more

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

sábado, 8 de octubre de 2011

Helicópteros, cuadricópteros y octocópteros

Hoy en el Fnac, he visto el siguiente Cuadricóptero que se puede controlar con un iphone o movil android y que lleva camaras de video incorporadas. Su precio es de 300 euros.






He aprovechado y he visto otras ofertas por la web, como los mini-helicopteros(25€) o cuadricópteros RC (75€)

Dejo algunos enlaces interesantes:

http://aumentada.net/2010/01/ardrone-cuadricoptero-controlado-por-iphone-y-con-juego-de-realidad-aumentada/

http://www.minihelicopterosrc.com/

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

jueves, 6 de octubre de 2011

Steve Jobs

Steve Jobs, 1955 - 2011

miércoles, 5 de octubre de 2011

El estado del Internet móvil en España



Hoy he estado haciendo una comparación y estos son los precios y tarifas de las dos principales compañías de telefonía móvil :

A Octubre de 2011

Movistar

Fijo: 25 €/mes, Velocidad de 10 Mb, Tráfico ilimitado

Móvil: 25 €/mes,Velocidad de 7,2 Mb, Tráfico 1 Gb
35 €/mes,Velocidad de 42 Mb, Tráfico 5 Gb
45 €/mes,Velocidad de 42 Mb, Tráfico 10 Gb


Vodafone

Fijo: 26,2 €/mes,Velocidad de 6 Mb, Tráfico ilimitado
30 €/mes,Velocidad de 20 Mb, Tráfico ilimitado

Móvil: 19 €/mes,Velocidad de 7,2 Mb, Tráfico 1 Gb
32 €/mes,Velocidad de 7,2 Mb, Tráfico 2 Gb
39 €/mes,Velocidad de 42 Mb, Tráfico 5 Gb
49 €/mes,Velocidad de 42 Mb, Tráfico 10 Gb


No he comprobado las mismas compañías en Reino Unido, las cuales tienen que pagar mucho más que en España por el espectro radioeléctrico , pero no me sorprendería que fuesen mucho mejores. Os mantendré informados.

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