Latest Entries »

Como os dije en la entrada anterior hemos empezado a construir nuestro propio brazo robótica.

Para ello en primer lugar observamos el diseño del brazo que venden como kit de montaje, (el que controlábamos en el video anterior) vimos sus movilidad, sus limitaciones, su fuerza, su velocidad… Con respecto a la movilidad es un brazo bastante flexible, tiene cinco articulaciones, permite llegar a todos los puntos de diferentes formas. Uno de los grandes incovenientes es que es bastante lento, como está hecho con motores DC y reductoras para conseguir algo de precisión tiene muy poca velocidad, y no lo puedes controlar con exactitud, no hace dos movimientos iguales. También la fuerza era un punto a mejorar, a pesar de que los motores no estuviesen muy allá está hecho de plástico y por lo tanto limitado a coger objetos ligeros.

Una vez estudiado los puntos a mejorar del brazo procedimos a hacer un diseño para tener una idea de los materiales que ibamos a necesitar, su precio, electrónica, motores…  El diseño lo hicimos en CAD os dejo aquí el plano.

Brazo robotico-Model

El brazo está diseñado para fabricarse con perfiles en U de aluminio, y motorizado con Servomotores en las articulaciones bajas y microServos en las articulaciones más altas. Una vez terminado la parte del diseño llegó la hora de ir a comprar, los perfiles de aluminio U son fáciles de encontrar en almacenes de bricolaje al igual que la tornillería, los servos lo teníamos de otros proyectos y la garra la compramos en libelium.

En el siguiente post seguiremos contando cómo avanza el proyecto.

Buenas, desde hace un mes nos hemos metido más a fondo en el tema de la mecatrónica, y que mejor forma de hacerlo que controlando el brazo robótico que compramos hace ya un tiempo, para controlarlo hemos usado nuestra placa focusduino, basada en arduino.

A pesar de que este brazo está hecho con motores DC y la estructura es de plástico nos ha motivado a seguir avanzando un poco más en esto de los brazos robóticos, con lo que nos hemos propuesto construirnos nuesto propio brazo robótico, ya que en las tiendas lo mejor que podemos encontrar es este y controlado por un software que tiene que estar enchufado al ordenador y solo es compatible con el OS de Sr Gates.

 

 

Pronto os iremos contando los avances con nuestro brazo.

Buenas, una de las cosas más impactantes de la domótica es llegar a casa dar una palmada y encender la luz, pues bien, eso lo podríamos hacer con alguno de los micrófonos que venden en dealextreme para arduino por unos cuantos dolares, pero si vuestra paciencia no es capaz de esperar a hacerse viejo y queréis saber cómo hacerlo sin usar ninguna placa de micrófono os explico brevemente qué tenéis que usar.

No sé si sabréis que un altavoz no es más que una membrana que al llegarle una señal por el cable la hace vibrar a una frecuencia determinada, pues si lo hacéis a la inversa, es decir, mandáis una frecuencia por el aire a la membrana, ésta a su vez se excita y manda por el cable una señal, esa pequeña señal la podéis amplificar y leerla con Arduino.

Para amplificar esa señal existen numerosos circuitos, esta vez he usado un amplificador operacional u741 que añadiéndole un par de resistencias y polarizándolo con +15v, gnd y -15v  podéis hacer que amplifique la señal por la constante que queráis (entre 1 y 1 millón) Os dejo el esquema para que le echéis un vistazo.

esquema741

Teniendo el circuito amplificador listo, leemos la señal analógica con Arduino, usando el programa que viene en el compilador como ejemplo de AnalogReadSerial vemos la entrada que tenemos, y cómo varía al dar una palmada o golpear la mesa, ponemos. Escribimos en nuestro programa que cuando el sonido llegue a un punto determinado se enciende un led, o active el relé para encender la luz.

Os dejo por aquí el video, esta vez no enciendo la lámpara sino que enciendo un led del laboratorio.

Retomando un poco el tema de la domótica hemos hecho un pequeño proyecto para probar los sensores magnéticos, instalando uno en la puerta de la habitación hacemos que al abrirla se encienda la luz y al cerrarla se apague.

Un sensor magnético consiste básicamente en un pequeño «interruptor» formado por una pequeña lámina metálica que al acercarse el imán ésta hace contacto cerrando así el circuito, son bastante económicos aunque también bastante frágiles ya que al tener ese movimiento mecánico con el tiempo suelen dañarse. En esta ocasión he usado uno que he sacado de un velocímetro de bicicleta, para comprobar si funciona hemos le ponemos una resistencia y montamos un circuito desde el gnd de arduino hasta la salida de 5v, cargamos el código de DigitalReadSerial y pinchando uno de los pines digitales vemos como al acercarse el imán marca 1 y al alejarse 0.

 

Habiendo montado ese circuito retocamos un poco el código añadiendo una condición para activar el relé cuando marque 0 la lectura. Podéis ver cómo haceros una placa relé y un código de ejemplo en el primer post: https://openmechatronics.wordpress.com/2011/09/03/control-de-luces-con-mando-ir-y-arduino/

 

Os dejo un vídeo para que veáis cómo funciona.

 

 

Otro de los proyectos que he hecho durante este curso ha sido el disparador de fotos por ultrasonido, con este «aparatito» podemos cerrar el obturador de una cámara mediante un movimiento. Es bastante útil ya que podemos accionar la cámara a parte de con un sensor ultrasonido con cualquier otra aplicación para Arduino (sensor de luz, Xbee, Ethernet…).

Os dejo el video para que veais el funcionamiento.

Para interactuar desde Arduino con la cámara hemos usado un emisor IR el cual actúa como mando para la cámara, a partir de ahí ya podemos usar cualquier cosa para controlarla, desde un pulsador para hacer un mando económico, hasta la ethernet shield para realizar fotos desde cualquier parte del mundo.

Os dejo un enlace con las librerías para controlar diferentes cámaras a través del IR y con el código de prueba.

FocusBot

Tras haber dejado de lado un poco el blog, os subo los proyectos que he estado haciendo durante el curso, no he hecho todos los que me hubiese gustado por falta de tiempo.

En esta entrada os voy a mostrar FocusBot, hecho desde Iniciativa Focus en la Universidad de Málaga, este robot quizás sea el más inteligente o más bien el menos tonto de los que he hecho hasta ahora, es capaz de avanzar por una habitación con obstáculos esquivándolos en un 90 % de los casos, este porcentaje de éxito se podría aumentar con facilidad mejorando la «visión», es decir, eliminando los ángulos muertos, esto lo haríamos añadiéndole un tercer sensor de ultrasonido.

Como siempre hemos usado una placa Arduino Focusduino (placa arduino con contrador de motores), dos sensores ultrasonidos y una base robótica con dos motores.

Os dejo el video.

También he hecho una librería para los sensores de ultrasonido para aligerar así el código, la podréis descargar junto con el programa del robot como ejemplo:

Descargar librería y código aquí.

Hace algunos días, escuché que algunos profesores de la UMA (Universidad de Málaga) aconsejaban o más bien, pedían, a los alumnos que instalasen en sus ordenadores sistemas operativos libre, distribuciones de linux como Ubuntu, Debian… para trabajar la asignatura correspondiente, casi siempre programación. Esto a los usuarios de Linux les parecía totalmente razonable, pero una gran mayoría, usuarios de Microsoft casi todos, temen cambiar de sistema operativo, no creen que un ordenador pueda funcionar si no arranca con Windows, y si lo hace, creen que sólo va a funcionar mediante comandos en una ventana con letras blancas sobre un fondo negro, algo intraducible para gran parte de los usuarios de ordenador hoy día.

Por esta razón escribo este post, como usuario de linux (Ubuntu y Debian), para exponer porque no hay que temer cambiar de sistema operativo, y pasar a la comunidad del software libre. Una de las razones más convincentes para cambiar es que las distribuciones Linux carecen de virus, si en Windows hay más de 150.000 virus, en Linux hay 500 (es un 0.3 % en relación con los de Windows), y es casi imposible que puedan dañar el sistema. A esto los usuarios de Windows responden que para eso están los antivirus, evidentemente, pero el tener un programa en uso desde el momento en el que se enciende el PC, hasta que se apaga está reduciendo el rendimiento del procesador, por no mencionar la infinidad de actualizaciones que necesita y hace que ralentice la señal de red, y para colmo si éticamente piensas que está mal realizar descargas ilegales y vas a cualquier tienda a comprar un antivirus ve preparando desembolsar más de 100€ y empezar ahorrar porque al año siguiente tendrás que compar la versión actualizada. A parte de los antivirus, cualquier programa fundamental en un ordenador personal, como puede ser Microsoft Office la útlima versión del paquete puede tener un precio mínimo de 150 $, y si buscas algo más especializado como por ejemplo Adobe Photoshop ve preparando la disparatada cantidad de 1042 €, y si quieres actualizar te costará 288 €, podríamos decir que en tiempos de recesión económica nadie paga esa cantidad, pero es que en tiempos de bonanzas una inmensa mayoría se niega a pagar tal cantidad de dinero por un software, cuando pueden tener el sistema operativo el paquete Openoffice, y programas de edición de imágenes como el Gimp por 0 €. Podríamos seguir exponiendo datos y razones por las que cambiar a Linux, como por ejemplo que Windows cuesta 320 € y Linux cuesta 320€ más barato, pero mejor vamos a ver quién ha cambiado a Linux:

Los gobiernos de países como Inglaterra, Alemania, Japón, China, India, Corea, México, Brasil, Bergen, Múnich, por mencionar algunos, cambiaron su plataforma de software de Windows a Linux, para servidores, estaciones de trabajo, escritorios…
También existen muchas organizaciones, escuelas, negocios, etc., como el Departamento de Defensa de los Estados Unidos, BBC, NASA, Orbitz, PGA Tour, Bolsa Mercantil de Chicago, JP Morgan, Banco de Milano, USB Watburg, Meryl Lynch, Morgan Stanley, KB Toys, Expedia, Amerada Hess Corporation, BART, Department Stores de Boscov, Burlington Coat Factory, Conocophillips, Cisco, Panasonic, Royal Dutch/Shell, Westerngeco, Netherlands Foreign Investment Agency, Federal Credit Union, Banco BNL do Brasil S/A, Mercedes-Benz AG, Stanford, MIT, Berkely, The Alberta Mental Health Board, Clinical Pharmacological Research, Canadian Medical Laboratories, Priority Mobile Health, Mitra Imaging INC, Garnet Health Systems Corporation, Minoru Development Corporation, Biosan Laboratories INC., Paramount, Lucas Entertainment, Spyglass, por citar algunos, que usan Linux o software libre, que están migrando o que ya lo hicieron.

Además existen corporaciones como IBM, Novell, Red Hat, Dell, Oracle, HP, entre otras, que ofrecen un amplio soporte para la plataforma Linux.

No hay que olvidar al creciente, y no menos importante, número de usuarios que usamos Linux como sistema operativo. Y muchos otros quienes están cambiando de sistema operativo hacia Linux.

Por estas razones, no es de extrañar que un profesor pida a sus alumnos que usen Linux para realizar prácticas en alguna asignatura, más bien ahora lo que sería ilógico es que sea necesario pagarle la nueva mansión al señor Bill Gates para realizar un trabajo para la facultad.

Mecatrónica

Ahora que comienza el curso es buen momento para explicar qué es, o para qué sirve lo que llamamos MECÁTRONICA. Esta nueva disciplina viene de la combinación de distintas ramas de la ingeniería como son: la ingeniería mecánica, ingeniería electrónica, ingeniería de control e ingeniería informática. Esta combinación forman lo que es la ingeniería mecatrónica, una especialidad reciente que surge ante la necesidad tecnológica a la que vamos orientados.

Este término fue acuñado por  la empresa japonesa Yaskawa Electric Co en 1969, y años más tarde permite el libre uso de este término. La mecatrónica nace para autimatizar la maquinaría existente, y hacer así los procesos más agiles y confiables, con esta nueva rama se pretende conseguir también la armonización de los componentes mecánicos de un sistema y los electrónicos lo cual ha sido siempre bastante complejo.

Un ingeniero en Mecatrónica es un profesional con amplio conocimiento práctico y multidisciplinario capaz de integrar y desarrollar sistemas automatizados que involucren tecnologías de varios campos de la ingeniería. Este especialista entiende sobre el funcionamiento de los componentes mecánicos, eléctricos, electrónicos y computacionales de los procesos industriales; y que tiene como referencia el desarrollo sostenible.

Para estudiar esta profesión cada día va siendo más accesible, aunque aún no se ha extendido a numerosas universidades, pese a que en EE.UU. lleva ya tiempo existiendo esta especialización, aquí en España para ser ingeniero en mecatrónica tenías que hacer ingeniería industrial o informática y una vez terminada realizar un máster. Hoy día contamos en Andalucía (Sevilla y Málaga) con Ingeniería electrónica, robótica y mecatrónica, una nueva carrera que ha apecido gracias al proyecto de Andalucía Tech.

Cada día nuestra persiana se va haciendo más inteligente, o más bien, la voy haciendo menos tonta. Esta vez hemos incluido al sistema un elemento muy importante a la hora de hacerla más autónoma: el sensor de luz, al haberle incorporado la memoria eeprom anteriormente nos posibilita añadirle este tipo de sensores. El funcionamiento en esta primera prueba es muy simple, cuando detecta que hay una determinada luz sube la persiana para así dejar pasarla, y cuando detecta más oscuridad la cierra, partiendo de esto podríamos hacerla a nuestro gusto,  y conforme hubiera más luz, se pusiese a una determinada posición. Os dejo el video de prueba

El código es el siguiente:

// Miguel Angel Torres de la Camara, matc2068@gmail.com, openmechatronics.wordpress.com
//Proyecto domotica: control de persianas mediante el sensor de luminosidad
#include <Servo.h>
#include <Wire.h>
#include <CursoArduino.h>
#include <EEPROM.h>
const int analogInPin = A0;
int sensorPin = A0;    // pin del sensor de luz
int sensorValue = 0;
int addr = 0;
int estado = EEPROM.read(addr); //estado de la persiana (0-100) guardado en la memoria eeprom
byte valor;

void setup(){
  inicializa();
  Serial.begin(9600);
}
void subePersiana(){ //funcion para subir la persiana (100) desde abajo (0)
  if(sensorValue > 640){ //sube la persiana si hay mucha luz
  retrocedeDerecho(100);
  delay(900);
  estado = 100; //al subir el estado es igual a 100
  EEPROM.write(addr, estado); //guarda el estado en la direccion 0
}
else{
  para();
}}
void bajaPersiana(){ //funcion para bajar la persiana (0) desde arriba (100)
  if(sensorValue < 500){ //baja la persiana si hay poca luz
  avanzaDerecho(100);
  delay(850);//al bajar, el tiempo necesario disminuye
  estado = 0; //estado nuevo es igual a 0
  EEPROM.write(addr, estado);  //guarda estado en la eeprom
}
else{
para();
}}
void loop(){
  sensorValue = analogRead(analogInPin);   
  int dato = Serial.read(); //lee el numero en el serial
  if(estado == 100){ //si la persiana esta arriba
    bajaPersiana(); //bajala cuando no haya luz
  }
  else if(estado == 0) { //si la persiana esta abajo
    subePersiana(); //subela cuando no haya luz
  }
  //imprime el estado de la memoria eeprom y el valor del sensor de luminosidad
  Serial.print(addr);
  Serial.print(«\t»);
  Serial.print(EEPROM.read(addr), DEC);
  Serial.println();               
  Serial.print(«sensor = » );                       
  Serial.print(sensorValue);  
  Serial.println();
  delay(30);    
}

Tras los proyectos de domótica realizados, me atraía la idea de hacer un robot un poco más dinámico y menos aburrido que hacer subir y bajar la persiana. Desde que vi un Segway quedé fascinado por el funcionamiento, la suavidad y el manejo tan simple que tenía, a la vez que combinaba una tecnología compleja para permanecer en equilibrio. Con los avances tecnológicos que ha habido en el siglo XX, parece mentira que hasta el siglo XXI (alrededor del 2000 o 2001) no se haya inventado este medio de transporte individual. Hoy en día es usado en las grandes industrias para que los empleados se desplacen de un lugar a otro, también lo usan los agentes de seguridad en aeropuertos, en zonas peatonales… Así que me propuse hacer un segway, o más bien, un minisegway con lo que tenía por casa, el controlador sería como no nuestra placa arduino, con el controlador de motores,  como acelerómetro usaríamos el del mando nunchuck de la wii, un par de motores y listo, sólo quedaría la programación, que no es poco. Así que monté todo el chasis instalé todos los componentes y me puse manos a la obra con el código. En primer lugar probé un código simple, que leyese el ángulo del acelerómetro y si pasase del punto de equilibrio hacia un lado o hacia otro andase adelante o hacia atrás, dependiendo. Evidentemente no fue así de fácil, tenía que tener en cuenta la aceleración, conforme se fuese cayendo fuera acelerando para contrarrestar la caída, así que tras varios intentos fallidos hice el siguiente código:

// Miguel Angel Torres de la Camara, matc2068@gmail.com, openmechatronics.wordpress.com
//Robotica, mecatronica libre: Segway

#include <Servo.h>

#include <CursoArduino.h>

#include <WiiNChuck.h>

#include <Wire.h>

WiiNChuck chuck;
//acelerometros
int accx;
int accy;
int e = 95; //angulo de equilibrio
void setup(){
Wire.begin();
inicializa();
chuck.begin();
Serial.begin(9600);
}
void aceleraMotor(){ //funcion de aceleracion del motor
int x = 15;
if (accy < 40 && accy > 140){ // si el angulo que sale es < 40 o > 140 acelera mas
x = 2*x;
}
else{
x = 2*x;
}
if (accy < e){  //conforme caiga hacia la izquierda retrocede
retrocede(-((accy-e)-x));
}
else if (accy > e){ //conforme caiga a la derecha avanza
avanza((accy-90)+x);
}
}

void loop(){
chuck.update();
//acelerometros
accx=chuck.AccelX();
accy=((chuck.AccelY()) – 385); // al restar 385 el valor minimo pasa a ser 0, y el maximo 180

Serial.print(»  Acc X: «); //imprime acelerometro eje x
Serial.print(accx);
Serial.print(»  Acc Y: «); //imprime acelerometro eje y
Serial.print(accy);

Serial.println();     //salto de linea
delay(10);

//control de motores
int der = 180; //angulo maximo
int izq = 0; //angulo minimo
if (accy > izq && accy < der){ //si se sale de ese rango, o sea si vuelca, para
aceleraMotor();
}

else {
para();
}
}

Pues aunque en la teoría debía funcionar, en la práctica permanece en pie pocos segundos, así que si alguien sabe cómo se puede solucionar le invito a que modifique el código. Como pista os puedo dar que hay que usar un sistema PID.