martes, 9 de febrero de 2016

iBoardbot, tu robot pizarra conectado a internet.

  Después de un buen tiempo sin escribir aquí, llega el momento de presentar nuestro nuevo y apasionante proyecto de robótica : iBoardbot!!


  Esta vez hemos decidido lanzar el proyecto en Kickstarter: link al proyecto
Se trata de una pizarra robot, capaz de escribir, dibujar y borrar. Se controla desde internet mediante una aplicación alojada en la nube y accesible desde cualquier dispositivo. Puedes encontrar más detalles en el link del proyecto!.
  Por supuesto una vez finalice la campaña abriremos el código y el hardware y todo el material será compartido para la comunidad en nuestra página de jjrobots.

Espero que os guste!!
  JJRobots, Science and Fun!


lunes, 23 de febrero de 2015

JJROBOTS just born!

[versión en español]


The idea of JJROBOTS (click the link or the image) born nine months ago when my friend Juan Pedro, who works and live in UK, told me to open a web page to host the projects that I have been publishing here and make it easier to people to make it by themselves and create a platform to grow with new projects.

JJROBOTS is a blog with information of the projects, documentation, build manuals, schemes, a "how it works" section, and an online SHOP for the hardware parts (electronics, plastic parts...). Our target is that people have fun making their own robots and, at the same time, learn how it works. ALL will be OPEN, shared and documented. There will be a community behind with forums so you could get help from us and from other users as your could throw your ideas and share your hackings!

We want that people take this projects as a base, and fell free to hack them to the limits!

B-ROBOT is a good example. Starting from the design I published here last year, it have been improved in many ways. We have create a new electronics shield for an Arduino Leonardo, instructions, build manual and schemes. The code is now much simpler and better documented. This project is very FUN and ,as you can see in the video, the control is excellent! Kids love the robot and adults too!

This is an unique gadget that you could make by yourself (DIY). This is not a toy, is a robot that uses good motors, quality electronics, and sophisticated control algorithms.
Our idea is also to reuse most of the components involved in the early projects in another future projects. For example, the Wifi module (which is not cheap) will be used soon in more projects (subscribe to jjrobots to keep you updated). You are investing in electronic components that could have several lives (motors, arduino, wifi...)

This years we have realized that people love the open projects that I have been publishing here (B-ROBOT, arduspider, Air hockey robot...) but people have problems to reproduce them. Now there are no excuses! you will have available all the parts and documentation to success!

JJROBOTS is an exciting project for us and we are preparing new projects that I am sure you will love if you like the "makers" world...

We hope that you like this new site and we hope you support us on this adventure to create new and exciting robotic projects with "fun" and "learn" words in our minds.

Jose Julio & Juan Pedro



JJROBOTS (@jjrobots) science & fun 2015

Por fin nace JJROBOTS!


jjrobots

JJROBOTS (pincha el enlace o la imagen para ir a la web) es un proyecto que surgió hace unos nueve meses cuando mi amigo Juan Pedro, que vive y trabaja en UK me propuso que creáramos un portal para poder facilitar a la gente que realizara los proyectos que vengo desarrollando en este blog y servir como plataforma para proyectos futuros.

JJROBOTS es un blog con información sobre los proyectos, documentación, manuales, esquemas de montaje, una sección de "como funciona" para cada proyecto y una tienda online donde comprar las piezas necesarias (electrónica, piezas plásticas,...) . Nuestra idea es que la gente pueda divertirse construyendo sus propios robots y pueda aprender como funcionan, TODO esta abierto y publicado. La idea tambien es que puedas modificar y personalizar tus proyectos tanto como quieras. Todas las personalizaciones y hacks tendrán cabida en el foro de jjrobots. En el cual ayudaremos a todos aquellos que tengan dudas y será refugio de ideas y creaciones!.

B-ROBOT es un buen ejemplo. Partiendo del diseño original del robot que había desarrollado el año pasado, hemos mejorado muchas cosas, hemos creado una electrónica (shield) especifica para el Arduino, instrucciones y esquemas de montaje, el código es mucho más simple y sencillo de entender... Es un ejemplo de proyecto muy divertido y como puedes ver en el vídeo tiene un rendimiento muy suave y controlable. A los niños les encanta y a los mayores también! Ademas es un gadget único que puedes construir tu mismo (DIY). No son juguetes, son robots con motores y electrónica de calidad y con algoritmos de control sofisticados.
Nuestra idea ademas es intentar "reutilizar" lo mas posible los propios componentes de los proyectos para otros proyectos. Por ejemplo el modulo Wifi que necesita el robot no es barato pero ya estamos pensando en usarlo para otros proyectos. Tienes que verlo como una inversión, el Arduino leonardo, los motores y muchas otras piezas son también totalmente reutilizables.

Hemos visto que a la gente le encantan los proyectos que hemos ido publicando (B-ROBOT, Air Hockey Robot...) pero a pesar de ser proyectos abiertos muy poca gente ha sido capaz de reproducirlos. Ahora no hay excusas! tienes disponibles las placas, las piezas y todo lo que necesites!

Es un proyecto apasionante para nosotros y ya estamos preparando nuevos proyectos para publicar que seguro que te encantarán y te sorprenderán si te gusta este mundo...

Ojalá os guste lo que estamos haciendo y nos apoyéis para poder continuar con nuestra vocación que es crear nuevos proyectos de robótica divertidos y divulgativos. Eso si, la información esta toda en inglés para tener una mayor difusión pero no dudes en ponerte en contacto con nosotros en español en los foros.

Jose Julio y Juan Pedro




JJROBOTS (@jjrobots) science & fun 2015

lunes, 9 de junio de 2014

Papas solares

Siguiendo la excelente iniciativa de #UnaPapaCaliente de mi amigo Lucas (@imacan, blog: http://imagina-canarias.blogspot.com.es) he decido comenzar a jugar un poco con las cocinas solares y la manera de hacernos una "papas gratis al sol". Ciencia, diversión y comida, buena combinación ;-)

Una vez leída la teoría (hay bastantes fuentes en internet, yo usé esta página como guía: http://solarcooking.org/plans/funnel.htm) busqué un trozo de cartón de 100x50cm (un poco pequeño pero es lo que encontré...), lo cubri con papel de aluminio y lo cerré con la forma de embudo (o fonil).
Como se requiere un objeto negro para atrapar la radiación, en mi caso y por simplificar e introducir alguna variación lo que he hecho ha sido comprar papas negras (que encima están muy ricas) y así me ahorro el envase o caldero negro. Para generar el efecto invernadero (evitar que se escape el calor) he usado una bolsa para hornear. Pues eso es todo! That´s all!


Colocamos las papas dentro de la bolsa de hornear (con unos palillos para dejar aire en medio y que no se pegue la bolsa). Colocamos el embudo solar mirando al sol (yo le he sujetado con unos trozos de pvc que tenía a mano) y ponemos la bolsa con las papas dentro del embudo (usé unos hilos atados desde la bolsa hasta el extremo del embudo para que la bolsa se quede centrada). Esperamos, comprobamos un par de veces y a la hora y media estaba listo! Ha funcionado!


Las papas estaban muy ricas, la piel un poco dura pero pelándolas estaban estupendas. Antes de cocinarlas las había lavado y puesto un poco de sal.
He aprovechado un proyecto que hice el año pasado de Cámara Térmica para Smartphone para realizar algunas mediciones y que esto parezca un poco mas "científico" ;-)
Puse una papa a la sombra, una papa al sol (sin nada) y dos papas en la cocina solar.
Estas son las mediciones de temperatura (a la sombra, al sol y en la cocina solar):


Resumen de mediciones:
Papa a la sombra: 28ºC
Papa al sol : 42ºC (interior de la papa a 40ºC)
Papa en la cocina solar : 95ºC (interior de la papa 86ºC)

Como conclusión el poner una papa al sol supone un incremento de 14ºC y ponerla en la cocina solar supone un incremento de 67ºC sobre la temperatura ambiente. La idea de usar papas negras en vez de un recipiente negro con la comida dentro parece funcionar bien!, el problema es que solo permite cocinar cosas oscuras de esta manera pero como experimento es muy simple!.
Papa sin hacer (arriba) y cocinada (abajo)

Con este mismo tamaño se podrían hacer unas 6 papas de golpe (es posible que hasta más...). Como primera prueba ha resultado muy interesante, habrá que seguir investigando...

Solar Power!

lunes, 3 de febrero de 2014

Nuevo proyecto: Air Hockey Robot (3D printer hack)

[English version here]

Este proyecto se encuentra ahora en: http://jjrobots.com/air-hockey-robot-a-3d-printer-hack/
JJROBOTS (http://jjrobots.com) es el nuevo portal que hemos creado para los proyectos de robotica. Contiene blog, tienda online, instrucciones de montaje, "como funciona", foros... mas info

Después del último proyecto de B-ROBOT, esto es en lo que he estado entretenido los últimos meses...



   Todo surgió a raíz de la construcción de mi impresora 3D. Por un lado, la posibilidad de diseñar y fabricar mis propias piezas y por otro lado, la idea de ¿cómo aprovechar los materiales y los conocimientos en la construcción de la impresora 3D para hacer otra cosa? Es decir, ¿como podría hackear los componentes de una impresora 3D para convertirla en algo distinto?
   Había visto varios proyectos muy interesantes de robots para pintar, para fabricar PCBs etc... pero buscaba algo distinto.
   A esto se unió la afición que mi hija tiene por las máquinas de Air Hockey (y la mía por la robótica) y así un día surgió la idea: Y si.... Mmmmm....Parecía bastante complicado y con muchas incógnitas (detección del disco??, velocidad de movimiento??), pero eso es lo divertido no?



   Tomando como base las piezas de una impresora 3D RepRap típica, es decir, motores NEMA17, drivers, Arduino Mega, RAMPS, correas, rodamientos, varillas, piezas impresas... comenzamos a darle forma al proyecto. La gran ventaja de usar estas piezas es que son baratas y fáciles de conseguir.
   Primero comencé con la construcción de la mesa. Pensé en un tamaño medio (mi casa es pequeña, jeje) pero que fuera suficiente para jugar. Por otro lado tomé las medidas del maletero del coche (quería que el proyecto fuera transportable) y así elegí las dimensiones finales de 100x60cm.
   Compré los tableros y los listones de madera y me puse a montar el bastidor. Primero estaba huyendo de hacerlo con aire y simplemente buscar alguna superficie que deslizara bastante y llegué a montar una mesa de esta forma y se podía jugar, pero la verdad es que perdía bastante gracia, asi que me decidí a hacer una mesa con aire. Tenía muchas incognitas, asi que probé distintas posibilidades hasta que dí con una combinación muy sencilla con 2 ventiladores viejos de PC que funciona muy bien. Por otro lado agujerear la mesa parecía que iba a ser un trabajo enorme pero en realidad, usando una guía para los agujeros, salió bastante fácil.
   Pues bien, ya tenía una mesa de Air Hockey totalmente operativa!! y un par de horitas de juego que le echamos ;-)



   Mientras tanto fui diseñando las piezas del robot. Barajé dos diseños, uno H-Bot y otro el actual. Finalmente me decidí por el actual diseño con 3 motores (2 para el eje Y y uno para el X). Tras varias iteraciones de diseño de las piezas, y algunos cambios de materiales para reducir al máximo los pesos y las inercias (y así incrementar las aceleraciones) llegamos a un diseño bastante operativo. Una de las sustituciones mas importantes es la sustitución de las varillas del eje X por tubos de carbono de cometas que funcionan perfectamente con rodamientos impresos en PLA y ahorran muchísimo peso.



   La parte del código comenzó estudiando el código del Marlin (software típico de las RepRap) pero finalmente decidí no reaprovecharlo por varias razones, primero porque toda la parte de GCODE no era necesaria, y segundo porque los software de las impresoras 3D tienen una parte muy importante de planificación de movimientos que no es la forma en que debe de funcionar el robot de Air Hockey. Las impresoras 3D planifican los movimientos para obtener recorridos suaves pasando por todos los puntos. En el caso del robot de Air Hockey cada nuevo comando que le enviemos debería generar una respuesta inmediata, anulando al anterior, porque lo que prima es que el robot se mueva lo más rápidamente posible a la nueva posición que le hemos indicado.
   De esta forma decidí comenzar el código totalmente desde 0, empezando por implementar el driver para los motores Steppers usando las interrupciones del Arduino y haciendo el código lo más eficiente posible. He implementado un control de posición, velocidad y aceleración, usando una rampa de aceleración con un perfil S-profile en el arranque para hacer los movimientos un poco mas suaves.
  El control de velocidad permite generar pulsos hasta 25Khz que es la máxima velocidad que he conseguido con los steppers. El control de posición funciona a 1Khz.



   Una vez que el robot estaba montado, comenzaron las pruebas e incluso hice una interfaz para controlarlo manualmente desde el móvil por Wifi.
   Para la detección del disco pensé algunas posibilidades pero finalmente decidí usar un sistema de visión.
Inicialmente pensaba usar el sensor CMUCAM5 (Pixy) que encajaba muy bien con este proyecto (y en futuro prepararé una versión para este sensor), pero lo cierto es que los retrasos han hecho que la cámara todavía no este disponible, así que improvisé un plan B: Usar la cámara de la PS3 EYE junto con un PC para desarrollar el sistema de visión. El sistema de visión lo he desarrollado en C usando las librerías de OpenCV para la captura, umbralizado, filtrado y segmentación. 
   El sistema detecta el disco de hockey que debe de tener un color diferenciado y el resultado se envia por un puerto serie al Arduino. El sistema de visión envía paquetes de información que contienen la posición del disco y del robot en píxels dentro de la imagen. La cámara esta funcionando a 60Hz y con una resolución de 320x240. Afortunadamente la cámara tiene muy poca distorsión y no he tenido que realizar correcciones de distorsión de la lente.  A su vez se graba un vídeo en el PC con lo que se está capturando, lo cual es muy útil para depurar.



   Uno de los principales problemas que he tenido es que los motores NEMA17 están bastante justos de potencia para este proyecto y el inconveniente de usar motores paso a paso es que si perdemos pasos (que puede pasar fácilmente, por ejemplo al tropezar el robot con el disco en una pared) no nos damos cuenta y perdemos por completo el posicionamiento del robot. Para solucionar esto, lo que he hecho es aprovechar el sistema de visión para detectar también el robot (con otro color distinto) y así poder detectar cuando el robot ha perdido pasos y solucionarlo.
   Con todo esto, lo que restaba era la implementación (dentro del Arduino) del sistema de predicción de trayectorias y del sistema de estrategia del propio robot. Una vez que tenemos detectado el disco en dos fotogramas consecutivos podemos calcular la trayectoria que va a seguir (ecuación de la recta que pasa por dos puntos, esto son matemáticas del colegio eh!!). También podemos calcular si la trayectoria va a tener rebote con las paredes laterales y su nueva trayectoria. Todos estos cálculos de trayectoria se le pasan al sistema de estrategia que decide qué es lo que va a hacer el robot: Defender, Defender y atacar a la vez o preparar un nuevo ataque.



   Una parte bonita de este proyecto es que el subsistema de estrategia esta totalmente aislado y es muy fácil que cualquiera pueda en el Arduino modificar la estrategia y programar su propio código aislándose de las complejidades del control de los motores, del sistema de visión y de la predicción de trayectorias. Al final la estrategia es lo que hace que el robot gane o pierda!! así que se plantean posibles competiciones de robots de Air Hockey ??

A pesar de que pueda parecer complejo, es un proyecto reproducible, con materiales asequibles y totalmente abierto:

  • Repositorio de código, diseños 3D, documentación: GitHub
  • Manual de construcción (disponible también en inglés): Manual
(*) El manual de construcción incluye fotos detalladas del proyecto

Algunas otras consideraciones que se han tenido durante el proyecto (y para el futuro):
  • Reproducible: Facilidad para conseguir los materiales, documentación, código y hardware abiertos...
  • Transportable: El robot se desmonta completamente solamente con 6 tornillos. Así que se puede desmontar para jugar o transportar.
  • Adaptable: Es muy fácil adaptar el nivel de juego del robot, por ejemplo para jugar con niños, simplemente bajando la aceleración y velocidad máxima del robot (esto se podria mejorar en un futuro o incluso que fuera dinámico)
  • Actualmente el robot no detecta los goles pero se podría plantear algún sensor para ello (futuro).
  • En un futuro el robot podrá autocalibrar la cámara usando unos movimientos predefinidos al inicio (evitaría la calibración de la cámara).
  • Competiciones: La mesa permite colocar 2 robots, uno a cada lado. Competiciones entre robots ???? Al final cada uno podría tener su código con la estrategia y comparar distintas estrategias en un torneo...
  • Ciencia: Es un proyecto estupendo y entretenido para enseñar ciencia y en especial a los niños:
    • Conceptos de física: Rozamiento, movimiento continuo y uniforme, rebotes, conceptos de posición, velocidad y aceleración
    • Conceptos matemáticos : Ecuación de la recta que pasa por dos puntos, predicción, Sistema cartesiano XY
    • Robótica: Motores, Sistemas de visión, Control, Arduino.
    • Filosofia DIY : Construye tu propia mesa de Air Hockey!
    • Hacking : Usar las piezas de una impresora 3D para construir algo totalmente diferente.

  ¿Cuál es el nivel de juego actual del robot? Pues bien, actualmente el robot le gana fácilmente a un niño. Un adulto con cierta experiencia (yo mismo jeje) todavía le puede ganar al robot, pero seguramente con algunas pequeñas mejoras más va a estar realmente difícil ganarle...

  El proyecto esta totalmente vivo y en fase de mejoras, tanto en el código como en el robot... cualquier aportación al proyecto será bienvenida...


Recueda, las nuevas actualizaciones de este proyecto las encontrarás en JJROBOTS (http://jjrobots.com)

Science&fun
  Jose Julio (@jjdrones). JJROBOTS.COM (@jjrobots)

New Project: Air Hockey Robot (a 3D printer hack)

[Version en español aqui]

This project is now hosted here: http://jjrobots.com/air-hockey-robot-a-3d-printer-hack/
JJROBOTS (http://jjrobots.com) is the new website for this projects: blog, online shop, build instructions, "how it work", forums... more info here

After the last B-ROBOT project, this is what I've been doing the last months...really fun...



  Everything started when I built my 3D printer. First, the posibility to design and build my own parts and second, how could I hack the components of a 3D printer to make something different? 
  I have seen several interesting projects of robots that paint or manufacture PCBs, etc ... but I was looking for something different... 
  My daughter loves the Air Hockey game and I love robotics so one day an idea born in my mind... can I construct...??... Mmmmm .... it seemed very complicated and with many unresolved questions (puck detection??, robot speed??), but that is also part of the fun...


  Based on the idea of use standard RepRap 3D printer parts : NEMA17 stepper motors, drivers, Arduino Mega, RAMPS, belts , bearings, rods, printed pieces ... I started to develop the project. The main advantage of use these parts is that they are cheap and easily available. First I started with the construction of the air hockey table. I choose a medium size (my house is small, ;-)) I wanted something easily transportable but comfortable to play. The final dimensions are 100x60cm. 
  I Bought some wood boards and wood slats and began to mount the table. First I started to build and airless version but it really lacks the feeling so I decided to make a table with air. I tried different possibilities until I test a very simple combination with 2 old PC fans that works very well. I made the table holes (it seemed a hard work but it was not so hard) and I now I had a fully playable Air Hockey table! Time to enjoy it an play!! 



  Meanwhile I was designing the robot parts. I think two defferent designs, one H-Bot and another with 3 motors. Finally I decided to use the 3 motor design (2 for the Y axis and one for the X axis). After several design iterations of the pieces, and some material changes to minimize the weight and inertia (and thus increase the accelerations of the robot) I got a fairly operational design. One of the most important change is the replace of the X axis rods with carbon tubes ones (from kites) that works very well on PLA printed bushings and save a lot of weight.



  The code: I started studying the code of Marlin ( typical RepRap firmware) software but I decided to start from scratch, first because I don´t need a gcode interpreter and second because the software of a 3D printer have a motion planning algorithm and this is not the way the Air Hockey robot must work. 3D printers plans movements for smooth paths through all the points. The Air Hockey Robot should move inmediately with every new command canceling the previous one, because what we need is that the robot moves as quickly as possible to the new position. 
  I began developing the driver for Steppers motors using Arduino interruptions and making the code as efficient as possible. I implemented position, velocity and acceleration control, using an acceleration ramp with a simplified S-profile. The interrupts can generate pulses up to 25Khz which is the maximum speed that I can achieve with the steppers. The position control works at 1 kHz.



  For the puck detection problem I decided to use a computer vision system. Initially I planned to use the CMUCAM5 (Pixy) sensor that fits very well in this project (and in near future I will prepare a version for this sensor), but the camera is not available yet, so I started a new route: Use the PS3 EYE camera with a PC to develop the vision system. I developed the vision system in C lenguaje using OpenCV libraries for capturing, thresholding, filtering and segmentation. 
  The system detects the puck (must have a special color) and the result is sent to the Arduino by serial port.   The vision system sends information packets containing the position of the puck and the robot in pixels within the image. The camera is running at 60Hz at a resolution of 320x240. Fortunately the camera has very little distortion and I don´t need to implement a lens distortion correction. The software records a video on the PC which is very useful for debugging.



  One of the main problems I've had is that the power of the NEMA17 motors are pretty fair for this project and the disadvantage of using stepper motors is that if we lose steps (which can easily happen, for example when the robot hits the puck against the wall) and we do not take into account the missing steps we lose the position of the robot. To fix this, what I've done is to use the vision system to detect also the robot (with a different color) so we can detect when the robot has lost steps and fix it. 
  What remained was the implementation (in the Arduino) of the trajectory prediction system and the strategy of the robot. Once we have detected the puck in two consecutive frames we can calculate the trajectory (equation of the line through two points, this is college math!). The trajectory prediction takes into acount that the puck could bounce in a side wall. All these calculations are accesible to the strategy subsystem that decides what the robot will do: defense, defense+attack of prepare a new attack. 



  A nice part of this project is that the Strategy subsystem is fully insulated and is very easy for everyone to modify this part and program their own strategy algorithms isolated from the complexities of motor control, vision system and prediction code. The strategy is what makes the robot wins or lose! so in the future we could see Air Hockey robot competitions?

Although it can seems a complex project, it´s an affordable and doable project.

  • Code repository, 3D designs, documentation link: GitHub
  • Detailed build Instructions link: Build manual
(*) The build manual contains high detailed photos of the project

Some other considerations that have been taken during into account in this projectt (and the future):

  • The project is reproducible: Easy to get materials, documentation, open source code and open hardware ... 
  • The robot is removed completely from table with only 6 screws. So it can be removed for play or transport 
  • It's very easy to adjust the level of the robot, for example to play with children, just turn down the acceleration and maximum speed of the robot (this could be improved in the future) 
  • Currently the robot is not able to detect goals but we could improve this in future. 
  • In future the robot can self-calibrating the camera using predefined movement at beginning (to avoid the camera calibration). 
  • We could mount two robots per table, one on each side. Competitions between robots?? Compare different strategies in a tournament? ... 
  • It's a great and fun project to teach science specially for childrens: 
    • Concepts of Physics: Friction, continuous and uniform motion, rebounds, concepts of position, speed and acceleration
    • Mathematical Concepts: Equation of the line through two points, prediction, XY Cartesian System
    • Robotics: Motors, Machine Vision, Control, Arduino
    • DIY Philosophy: Build your own Air Hockey table
    • Hacking: Using 3D printer parts to build something completely different. 

  What is the current robot skill? Well, now the robot could easily beat a child. An adult with some experience (myself, lol) can still win the robot, but I am sure that with some more small improvements it is going to be really hard to beat ... 
  The project is fully alive with undergoing improvements, both in code and the robot ... all contribution to the project are welcome ...


Remember, future improvementes will be hosted on JJROBOTS (http://jjrobots.com)

 Science & fun
   Jose Julio (@ jjdrones) JJROBOTS.COM (@jjrobots)

lunes, 28 de octubre de 2013

B-ROBOT: Un robot equilibrista impreso en 3D...

Este proyecto se encuentra ahora en: http://jjrobots.com/b-robot/
JJROBOTS (http://jjrobots.com) es el nuevo portal que hemos creado para los proyectos de robótica. Contiene blog, tienda online, instrucciones de montaje, "como funciona", foros... mas info.

Bueno, ya he terminado mi primer robot totalmente diseñado e impreso con la impresora 3D (ruedas, estructura, cuerpo...  hasta los ojos!).
Se trata de un robot tipo SegWay con solo dos ruedas, que tiene que mantener el equilibrio y que se puede controlar desde un Smartphone/tablet via Wifi. También funciona en modo autónomo con un sonar para detectar obstáculos y alguna que otra sorpresa que se puede ver en el vídeo...



La verdad es que después de "pelearme" un poco con los algoritmos de control ha quedado muy suave y controlable. Inicialmente empecé probando un típico control PID que recibía como entrada el ángulo del robot (calculado con la IMU) y como salida controlaba la velocidad de los motores. El resultado no era muy bueno y sólo conseguía corregir bien en la zona cerca del equilibrio (0 grados) donde el problema parece ser más lineal. La verdadera mejora vino cuando cambié el algoritmo y probé un control PD donde la salida es la aceleración de los motores. Esto sí que permite controlar el balanceo del péndulo inverso y de hecho tiene lógica desde el punto de vista físico del sistema. El problema está en que de esta forma el robot no tiene la "obligación" de quedarse quieto, al fin y al cabo una aceleración 0 no implica velocidad 0, así que añadí un segundo control (control en cascada) PI de velocidad que gobierna al control PD interno de aceleración. Visto esquemáticamente:



La placa principal (WITA) es un diseño que realicé junto con Jordi Muñoz (de 3DRobotics) y se trata de un Arduino Leonardo con un módulo Wifi integrado (RN131 o RN171). Esta placa permite diseñar fácilmente proyectos que se controlan desde dispositivos remotos via Wifi o proyectos de Intenet of Things. En cualquier caso el proyecto podría reproducirse con una placa de Arduino Leonardo y un módulo Wifi externo (tipo RN-XV por ejemplo) o incluso modificando el código supongo que podría hacerse compatible con un Arduino Yun.



La IMU utilizada es un sensor MPU6050 con 3 acelerómetros y 3 giróscopos y usamos además el procesamiento interno DMP para conseguir una solución de actitud (ángulos del robot) a 200Hz.
Los motores empleados son Steppers de tipo NEMA17 (de los cortos) con drivers A4988 y Mircrosteping a 1/8. He montado los 2 drivers necesarios en una pequeña placa aparte añadiendo los condensadores y resistencias necesarios (ver datasheet del driver).



Las librerías de Steppers para Arduino que he podido ver permiten controlar la posición de los steppers pero no su velocidad y la mayoría de ellas son MUY ineficientes! así que me he tenido que hacer un pequeño driver en Arduino usando interrupciones para realizar un control preciso de velocidad (funciona a 25Khz).



La interfaz con los smarphone esta basada en el interfaz abierta OSC (mensajes tipo UDP). La aplicación que suelo usar (tanto para Iphone como Android) se llama TouchOSC.
Para el brazo que permite levantar al robot del suelo uso un servo tamaño mini (20gramos)
Por último el sonar empleado es un LV-MaxSonar-EZ3 que tenía libre de otros proyectos...
Todos los diseños 3D de las piezas han sido realizados en OpenSCAD.



Todo el proyecto: códigos (Open Source), librerías y diseños 3D están públicos y compartidos en un repositorio de GitHub: https://github.com/jjulio/b-robot

Llevo bastantes años dedicado a la robótica y es la primera vez que puedo partir de un lienzo totalmente en blanco y con toda la libertad para hacer lo que quiera. Lo normal (y muchos me comprenderán...) era hacer una visita a Leroy Merlin (o equivalente) ver lo que hay, planchas, varillas, etc... y diseñar condicionado por eso... Ahora cambia el paradigma, abres un OpenSCAD y ha pensar... un paso más adelante en el mundo DIY, me gusta!

Gracias a Ramon por ayudarme como el video como siempre... ;-)

Jose.

jueves, 6 de junio de 2013

Impresora 3D funcionando...

Bueno, desde hace un par de semanitas ya tengo la impresora 3D operativa!!

La verdad es que ha quedado bastante bien...  Ahi van algunas fotos de objetos que he impreso...

Es un modelo basado en la Prusa i3 box modificando algunas cosas (básicamente el marco y las dimensiones de algunas varillas,  ver post anterior).
Como esta impresora es una auténtica RepRap (maquina autoreplicante, es decir las piezas plásticas provienen de otra máquina del mismo tipo) la he inscrito en el árbol genealógico de clones (Comunidad de Clone Wars) y es una máquina de cuarta generación (clon número #210 registrado) Links: Presentación y Arbol genealógico

La verdad es que esto de la impresión 3D es adictivo, empiezas haciendo algunas pruebas y acabas imprimiendo piezas para todo el mundo.... Hay un efecto curioso y es que la gente quiere venir a ver la impresora funcionando y claro, el que viene se quiere llevar un "recuerdito" así que acabas imprimiendo un montón de tonterías para regalar ...
También he impreso algunas cosas mas "serias" como algunos añadidos para la impresora, soporte para la bobina de filamento y un ventilador, una carcasa para un proyecto de robótica... y también he impreso un modelo en miniatura de la isla de El Hierro basado en el modelo digital del terreno de la isla.
Estoy muy contento con la calidad de las piezas pero he tenido algunos problemas con algunos componentes (el carro X en concreto se me rompio!!, menos mal que lo pude arreglar) así que estoy clonando algunas piezas nuevas que estoy rediseñando (basadas en la prusa i3 single frame) para rehacer casi por completo el eje X y también alguna pieza del eje Y (belt holder). Bueno ya mostraré como queda...
Por último un vídeo de la impresora funcionando...


Jose.

domingo, 5 de mayo de 2013

Nuevo proyecto: Impresora 3D


He comenzado un nuevo proyecto para construirme una impresora 3D!. Hacia tiempo que tenía la idea de construirme una y por fin me he decidido.
Tengo muchos proyectos esperando poder construir piezas de plástico, así que creo que voy a poder darle buen uso...



En principio pensaba hacerme un impresora del tipo Printrbot, sobre todo por lo compacta que es, pero finalmente me he decidido por una Prusa i3 (modelo box), que la verdad que después de estudiarla tiene pinta de mejor máquina (mayor estabilidad y precisión).
Ya tengo todos los componentes pedidos y la verdad es que se pierde un montón de tiempo en elegir y comprar todo para evitar pagar muchos gastos de envío... En mi caso lo he comprado casi todo en España (contactando directamente con los vendedores) y me ha ido bien (no he pagado aduanas). Solamente he pedido fuera los motores y el hotbed (cama caliente donde se adhieren las piezas que se están construyendo).
Ya he construido el marco de la impresora y he hecho algunas modificaciones sobre el diseño de referencia para disminuir las dimensiones sin quitar área de impresión. Ahora las dimensiones son más parecidas al modelo de frame de aluminio de la Prusa i3.
Ayer mismo me llegaron las ultimas piezas que había pedido y ahora mismo tengo el SAV (síndrome del ansia viva) a tope ;-). De momento tengo hecho el box frame (soporte del eje Z), he cortado las varillas roscadas y lisas, tengo lista la fuente de alimentación ATX modificada, he probado la electrónica y voy a comenzar el montaje...

Aqui mando el plano del box frame (eje Z)  que he construido y alguna foto:



Las varillas lisas las he cortado a estos tamaños:
Eje X : 415mm
Eje Y : 380mm
Eje Z : 340mm
La distancia entre varillas para el eje Y la he fijado en 165mm.

Eso si, donde no me he ahorrado dinero ha sido en el hotend (parte caliente por donde sale el plastico derretido) y me he decidido por un FaryNozzle que es la versión española del Budas

Por suspuesto esta impresora (las piezas de plástico), como buena reprap (maquina replicante) es un clon fabricado con otra impresora, en este caso de un chico en Zaragoza que conocí en la comunidad de Clone Wars.

Bueno ahora tengo bastante trabajito por delante...

Paginas de referencia, por supuesto la comunidad Clone Wars:


Continuará...

miércoles, 26 de septiembre de 2012

Proyecto: Cámara térmica para Smartphone parte III


Después de las vacaciones retomamos el blog con este tercer post sobre el proyecto de cámara térmica para smartphone.

Esta vez el sistema ya esta totalmente operativo en esta primera versión con un sólo sensor térmico (1 pixel). Ya estoy trabajando en la siguiente versión (ver final del post)

En el video se aprecia que el dispositivo esta pensado para ponerlo en la parte posterior del smartphone y aprovechando la cámara del mismo nos da la temperatura de los objetos en el centro de la imagen.
Desde el punto de vista del hardware la solución tecnológica ha sido un módulo OpenPicus con WIFI para la conexión con el smartphone y el sensor térmico conectado directamente a una entrada analógica del micro. El intercambio de paquetes se ha hecho con protocolo TCP, transmitiendo en todo momento (hay un filtrado previo en el propio micro) la temperatura leida por el sensor IR térmico.

Desde el punto de vista de Software, sin duda la parte más compleja del proyecto, ha sido la programación en IOS para el Iphone, principalmente por mi inexperiencia en este terreno. La curva de aprendizaje de IOS (Objetive-C) es un poco abrupta al principio pero como todo, al final se le va cogiendo el gusto...
La aplicación en el Iphone lee el streming de video de la cámara, lo convierte a Blanco y Negro (toma únicamente el canal Y del tipo de datos YCrCb) y lo muestra en pantalla.
Constantemente se está escuchando los mensajes TCP (puerto 22) que llegan. Cuando llega un paquete se lee y se muestra la información de temperatura en la pantalla y se actualiza el color del puntero del centro de la pantalla.
Existe por ultimo una pantalla de configuración donde pueden elegirse los rangos de colores en función de la temperatura.
En cuanto al software en el OpenPicus, simplemente se lee periodicamente el sensor térmico IR (puerto analógico), se realiza un filtrado paso baja y se envia la información como paquete TCP.

El resultado del proyecto es bastante interesante pero ya estoy trabajando en la siguiente versión, mucho más potente con un sensor de array de termopilas (MLX90620). Este sensor tiene un total de 64 pixels lo que permite realmente tener una cámara térmica aunque sea de baja resolción... Bueno habrá siguiente versión y tiene buena pinta...

Post anteriores del proyecto:
Parte II

domingo, 8 de julio de 2012

Nuevas mejoras en Ferrari?

Video de este nuevo proyecto:

Hola a tod@s, hace un par de semanas viendo una carrera de Formula1 y animado por los buenos resultados de Fernando Alonso con su Ferrari se me ocurrió la idea de este proyecto. ¿Porque no darle la apariencia de un Formula1 a un quadcopter?. Estuve un par de dias pensando la mejor manera de "encajar" la forma de un coche de F1 en un chasis de quadcopter hasta que encontre una solución que me gustó y me puse manos a la obra. Usando plastico coroplast y unas tijeras le di forma a la carroceria y despues busque algunas imágenes del Ferrari de Fernando Alonso para hacerme unas pegatinas en la impresora y este es el resultado...

La verdad es que llevo bastante tiempo haciendo quadcopters y multicopters y nunca me ha gustado la forma tan simétrica que tienen, hablando claro, en general son bastante feos, así que una de las cosas que más me gusta del resultado de este proyecto es que realmente la primera vez que lo vez cuesta darse cuenta que se trata de un quadcopter.


En cuanto a la configuración, estoy usando la misma configuración que use en este proyecto pero he cambiado la electrónica por el ArduPilot Mega 2.0 (APM2) y estoy usando las hélices 5x3 (normales y contra-rotatotias) de HobbyKing con una batería 2S800. He tenido que ajustar un poco los controles PID para adaptarlos al nuevo peso y aerodinámica de este modelo. Ademas he ajustado el Yaw para que sea mucho más agresivo, permitiendo "conducir" el quadcopter de una manera mucho mas parecida a un coche (pero volando, claro)



El resultado es un proyecto francamente divertido, sin duda una mejora que Ferrari debería introducir en sus monoplazas ;-)
Gracias a Ramon por haber sido el cámara del video y ayudarme en el montaje del mismo.

Jose Julio.

lunes, 18 de junio de 2012

Información sobre Quadcopters


En varias ocasiones me han preguntado información sobre quadcopters y los proyectos en los que estoy trabajando, asi que he decidido crear este post (gracias nacho por la idea) como introducción al mundo de los quadcopters...

La página (red social de UAVs) en la que suelo postear los proyectos es http://diydrones.com. Mi perfil dentro de diydrones es jose julio
El proyecto de Multicopters de diydrones se llama Arducopter : Página principal y toda la documentación (wiki): http://code.google.com/p/arducopter/

En cuanto al frame pequeño para vuelo indoor, proviene de este proyecto:
http://diydrones.com/profiles/blogs/indoor-fun-with-a-tiny
En este post hay un link a un documento en google docs con las instrucciones para construir el frame, que usa basicamente varillas y conectores de cometas (se pueden conseguir en decathlon)
Recientemente le he hecho algunas modificaciones que no están en este documento. Basicamente ahora uso estas hélices: http://www.hobbyking.com/hobbyking/store/__22753__5030_Propellers_Black_3xCW_and_3xCCW_6pcs_per_bag.html que ya no necesitan inclinar los motores y ahora uso una bateria 2S800.
En cuanto a la electronica lo que estoy usando últimamente es el Ardupilot Mega 2.0 (https://store.diydrones.com/APM_2_0_Kit_p/br-ardupilotmega-03.htm) Si solo lo quieres para indoor se puede comprar sin GPS. Esta electrónica no es barata pero hay que tener en cuenta que sirve para construir un sistema UAV completo. De hecho ahora mismo dentro de los proyectos de Diydrones se puede construir un piloto automático para aviones, multicopters, barcos y coches (proyectos ArduPilot, ArduCopter, ArduBoat y ArduRover).

En cualquier caso también nombrar que hay otros proyectos opensource de quadcopters, lógicamente yo nombro primero en el que estoy metido ;-), algunos conocidos:
http://aeroquad.com/   (conozco al desarrollador de este proyecto porque estuvo un tiempo metido en arducopter)
http://www.multiwii.com/  (proyecto basado originalmente en los sensores de la wii)
http://www.openpilot.org/

En cuanto a equipamiento de radio control el mejor sitio para pedir y más barato es : http://www.hobbyking.com
Aqui tienes un apartado de multi-rotores donde conseguir incluso frames, quadcopters ready to fly, helices, motores, emisoras...
En concreto tiene algun pequeño frame para vuelo indoor que tiene buena pinta y una electronica muy básica pero muy barata (todo esto en la sección multi-rotores)

Si alquien quiere mas información que me lo comente...

miércoles, 6 de junio de 2012

Porque seguimos sin coches eléctricos?



Más allá de las supuestas confabulaciones de las multinacionales del petroleo, los gobiernos y demás argumentos sensacionalistas (desde mi punto de vista poco realistas a día de hoy) la verdadera razón por la que no ha llegado la revolución del coche eléctrico está en dos números:

13300 y 160

13.300 Wh/Kg es la densidad energética de la gasolina (el diesel un poco menos), es decir, que un 1Kg de gasolina es capaz de generar 13.300 Wattios durante una hora.
Bien, la mejor tecnología de baterías que tenemos hasta la fecha (Baterias de Litio, en sus dos sabores de iones de litio o de polímeros de litio) tienen una densidad energética de 160 Wh/Kg, esto es, 83 VECES MENOS que la gasolina!. O sea, para poder generar los mismos 13.300 Wattios durante una hora necesitamos no un kilo de gasolina, sino una batería de 83 kilos!

Pero todo no es tan malo... la eficiencia de los motores eléctricos para convertir la electricidad en energía mecánica es muy superior a los motores de gasolina de nuestros coches (un motor eléctrico tiene eficiencias entorno al 85% y uno de combustion interna entorno al 20-25%). Si tenemos en cuenta este factor (85/20) a favor de la electricidad, todavia nos quedamos con un factor de 20 veces a favor de la generación de energía mecánica a partir de la gasolina... Por otro lado los motores eléctricos son bastante más ligeros que los de combustión pero aun así los datos no son muy optimistas, sigue habiendo demasiada diferencia. Nuestra tecnología de almacenamiento esta aún lejos de ser adecuada.


En otro orden de cosas siempre me ha resultado curioso que en general pensamos que los motores de explosión son más potentes que los eléctricos. Si hicieramos una encuesta con la siguiente pregunta  ¿porque los camiones y los trailers no son eléctricos? la mayoría de la gente diría que porque necesitan mucha potencia, dudo que la gente contestara que el peso y el tamaño de las baterías necesarias lo haría inviable...
Pero, quien nos enseño de chicos que los motores de explosión son mas potentes? Yo soy aeromodelista desde hace bastante tiempo y la pregunta de la gente siempre es la misma: ¿Es eléctrico o de explosión? Si es eléctrico (como en mi caso) lo toman como un juguete frente a los verdaderos modelos con motor de explosión... Leche!, que neurona es la culpable de esto?
A ver, de toda la vida los trenes han sido eléctricos. El AVE es eléctrico, transporta a 320 pasajeros, pesa casi 400 toneladas y llega a alcanzar los 300Km/h. Eso es potencia!
Nuestros problemas no están en los motores sino en las baterías...

Bueno seguiremos escribiendo sobre el apasionante mundo de la energia...

martes, 5 de junio de 2012

Proyecto: Cámara térmica para smartphone II


Post anterior : Proyecto: Cámara térmica para smartphone I



Soluciones tecnologicas

Me hubiera gustado desarrollar este proyecto usando un arduino (arduino pro mini) y un modulo wifi de este tipo (RN-XV) pero bueno teniendo en cuenta que me plantee este proyecto con objetivo 0€, voy a aprovechar lo que tengo por aqui...

Voy a usar el OpenPicus que ya he usado otras veces. OpenPicus es un proyecto curiosamente italiano (al igual que arduino) que integra un modulo Wifi de Microchip con un PIC24 (16 bits) en un unico módulo. Cuenta con un entorno IDE de desarrollo en C. Toda la parte de la pila TCP/IP de comunicaciones esta ya implementada así que es bastante facil de usar para este proyecto. Otra diferencia es que funciona sobre un RTOS (Real Time Operating System) asi que hay que tener en cuenta algunas cosas sobre threads para que vaya todo bien...

He hecho algunas pruebitas y el codigo sale muy fácil:
- Crear red wifi AdHoc y configurarla
- Samplear un canal analógico (conectado al termómetro IR)
- Convertir valor a grados
- Enviar en un mensaje TCP

El conversor analogico-digital (ADC) del PIC24 es de 10 bits al igual que el arduino y el voltaje de referencia esta en 2.0v. 10 bits es poca resolución para este sensor. Haciendo un par de pruebas he visto que equivale a una resolución de unos 0.4ºC. No esta mal pero se puede mejorar...

Voy a implementar la técnica de oversampling and averaging para aumentar la resolución efectiva del ADC hasta los 11 bits, o sea, que obtendremos una resolución de unos 0.2ºC. Esta técnica (ver este documento) consiste en muestrear la señal a mayor frecuencia de lo necesario y después realizar medias de las medidas como si tuvieramos más bits (en este caso 11). Esta técnica la probé ya en el proyecto de ArduIMU y fue muy bien consiguiendo duplicar la resolución efectiva del ADC (de 10 a 11 bits)

En cuanto al Hardware ya he preparado una pequeña placa con un regulador de voltaje a 5v para poder conectarle una bateria Lipo de 2 celdas (2S460). El sensor se conecta directamente a la entrada analógica del OpenPicus.

La parte más complicada de este proyecto va a ser la parte de programación en IOS, principalmente por mi inexperiencia... he hecho algunas pruebas muy simples con mi Hackintosh (Mac en un viejo portatil), en cualquier caso parece un reto bonito...

Post anterior : Proyecto: Cámara térmica para smartphone I

jueves, 31 de mayo de 2012

Proyecto: Cámara térmica para Smartphone I


Bueno, hace tiempo que un amigo mio (chichi) me regaló un termómetro IR que tenía estropeado y lo tenía por ahi arrimado. Este tipo de termometros permiten medir la temperatura de los objetos a distancia (como los termometros de los niños para medirles la temperatura en el oido). Pues bien, ahora le ha llegado su momento...

El otro dia lo desarmé y pude comprobar que la cabeza sensora funciona correctamente. Despues de un poco de ingeniería inversa pude comprobar que la salida de la cabeza es simplemente una señal analógica de la temperatura medida. Realmente lo que tiene la cabeza es la termopila (sensor IR térmico) y dos operacionales.

Bien lo primero que he hecho es conectarlo a un arduino y leer la señal. Funciona!! Lo intersante de este tipo de termometros es que son muy direccionales, la cabeza tiene un pequeño cilindro con una lente fresnel que enfoca el medidor a un punto muy concreto (tendre que media cuantos grados de apertura tiene realmente). Apuntando a la mesa me da unos valores y si apunto a mi mano me da un valor mayor. Ahora toca tomar un par de valores para hacer una pequeña "calibracion"...

Las cámaras térmicas han bajado mucho de precio pero son todavía muy caras, un par de miles de euros para tener algo decente... así que mi idea es experimentar un poco con este sensor (que vendria a ser un único pixel de una cámara térmica) a ver que resultados obtengo...
Bueno mi idea con este proyecto es usar un smartphone (mi iphone en este caso) para mostrar los resultados, para ello voy a usar una conexion Wifi AdHoc contra el sensor. Últimamente casi todos los proyectos los estoy enfocando de esta manera, es lo que llaman para que quede bonito Internet of Things. En realidad yo lo veo desde el punto de que todos vamos cargando siempre con un smartphone que es finalmente un pequeño ordenador con su pantalla, conectividad inhalambrica y mucha potencia de calculo, en definitiva es muy cómodo para un proyecto de este tipo. Si quiero usar el medidor de temperatura por ahi, no quiero estar cargando mi portatil y conectandolo con un cable USB... simplemente quiero ver los resultados en el teléfono. Otra ventaja es que el sensor podria estar montado en remoto, por ejemplo en casa y servir como alarma de que ha entrado alquien y genere un aviso en el telefono...
Y por ultimo porque lo he llamado Camara térmica? porque mi idea es que como el sensor es bastante direccional, usar la camara del teléfono para apuntar y tomar las mediciones de temperatura superpuestas a la imagen... vamos a ver a donde llegamos... Otra opción es montar el sensor sobre una cabeza de dos ejes (2 servos) y construir una imagen haciendo un recorrido en filas y columnas... veremos...