lunes, 4 de julio de 2011

fresadora CNC con icaro y linux (parte uno)

Una fresadora es una máquina herramienta utilizada para realizar mecanizados por arranque de viruta mediante el movimiento de una herramienta rotativa de varios filos de corte denominada fresa. En las fresadoras tradicionales, la pieza se desplaza acercando las zonas a mecanizar a la herramienta, permitiendo obtener formas diversas, desde superficies planas a otras más complejas (definición de la wikipedia).
Una fresadora es una maquina muy polivalente, con capacidad de mecanizar una gran variedad de formas con enorme precisión.


fresadora del Instituto técnico artes y oficio melchore lazo de la vega (panamá)

CNC (control numérico computado) es un sistema para control de maquinas herramientas como una fresadora mediante software de computadora. Permite tener la precisión de una fresadora con la posibilidad de automatización que da la computadora.
En este proyecto, vamos a implementar una fresadora CNC de 3 ejes (X, Y, Z) mediante 3 motores paso a paso.
Cada motor PaP esta conectado a una varilla roscada milimétrica (una especie de tornillo de 1 metro de largo sin cabeza), con cada vuelta que de el motor, la varilla girara y moverá una tuerca que esta agarrada a la plataforma, esto hace que la plataforma se mueva 1 milimetro por cada vuelta de la varilla en un sentido o el otro.
Como los motores paso a paso que estamos usando son de impresora, necesitan activar en orden sus 4 bobinas para hacer un paso, y con 50 pasos el motor da una vuelta completa quedando en la misma posición, si calculamos, por cada vuelta completa el motor activa 200 veces sus 4 bobinas para mover la plataforma 1 mm, eso nos da una precisión de 1/200 mm ( 0.005 mm).

Motor PaP conectado a la varilla con rosca milimetrica


Detalle de la varilla unida a la plataforma.

La forma de trabajo de nuestra fresadora consiste en tener la plataforma Y montada sobre la plataforma X y nuestra pieza a mecanizar sobre las dos bases.
De esta forma moviendo X y Y podemos disponer en calquier espacio cartesiano el material a trabajar. En el eje Z va instalado nuestra mecha fresadora para cortar (en realidad puede ir casi cualquier cosa, desde un laser de corte hasta una jeringa para inyectar silicona y hacer una impresora 3d).

Ejes X/Y y su posición en la maquina.

Vista general delo ejes X/Y y los rieles donde van montados

Ya con nuestra maquina armada y operativa, nos falta el software para controlarla, y es ahi donde usaremos ICARO para mover los motores, python para generar la interface grafica y calcular nuestro dibujo, y por ultimo inkscape para generar la imagen vectorial que vamos a fresar.
INKSCAPE es un programa para dibujo de gráficos vectoriales muy usado por los diseñadores graficos, entre sus muchas aplicaciones y posibilidades esta la de exportar nuestro trabajo al formato .PLT (hpgl) un formato estándar desarrollado por HP para controlar sus plotters. los archivos .plt son una linea de texto plano con todas las coordenadas de los puntos que marcan cada vector de nuestro dibujo.
el formato de estos archivos es facil:

todos comienzan con "IN" y despues van los comandos (PU,PD) y las cordenadas x,yterminadno con el caracter ";".

IN;PU 064,60;PD064,90;PU;

"PU" significa levantar el lapiz, "PD" es para bajar y comenzar a dibujar.


Un dibujo echo con inkscape.

Con nuestro archivo .plt listo, pasamos a programar en python usando pygtk + cairo + ICARO.

Primera versión del programa de control escrito en python

El programa dibuja el archivo .plt y como ven sale la imagen espejada, eso es por la forma de trabajo de los plotters, en nuestro caso no es tan importante.






video de prueba de los motores paso a paso
y la interface.


lunes, 13 de junio de 2011

seguidor de linea

Un seguidor de linea es un robot que puede movilizarse sobre una superficie blanca y detectar una linea de color negro.
Su funcionamiento es bastante sencillo, pero tiene partes interesantes de desarrollo entorno al algoritmo para detección de lineas negras. La parte mas importante esta en el sensor CNY70 el cual consta de un emisor y receptor de infrarrojo en una misma capsula.
cuando una onda de luz infrarroja choca contra una superficie blanca o clara, rebota hacia el receptor, el cual generara una señal lógica de uno si la superficie es blanca o cero si es negra.
En realidad para poder trabajar directamente con un PIC, hay que acomodar la señal con un integrado 40106, El cual es un integrado con lógica negada (NOT) o tambien conocido como Schmitt Trigger.


Diagrama esquemático de la conexión del CNY70 y el 40106

en la pagina de r-luis hay excelente información al respecto, donde se puede ver mucha información técnica y posibilidades de configuración.
Este robot (una variación del presentado en la FUDCON de panama), tiene un sensor CNY70 sobre la rueda libre al frente del robot aproximadamente a 5 mm del piso. Se pone el robot sobre la derecha de la linea negra y cuando se inicia el algoritmo, se enciende el motor izquierdo hasta que toque la linea negra y se apaga el motor izquierdo y se prende el motor derecho hasta llegar al blanco y así avanzara emulando el andar de una persona no vidente con su bastón.
con dos sensores se puede conseguir un mejor rendimiento y velocidad, pero con un sensor es mas fácil de diseñar.

Sensor CNY70 visto de frente


Sensor CNY70 de costado


robot con plataforma para la netbook

Placas con el integrado 40106 de control y el l293D para los motores



Video del robot

Se puede ver como en la primera vuelta el robot "se pierde" por cruzar la linea y no ubicar el espacio blanco. Con dos sensores se puede lograr un mejor rendimiento y estabilidad (y velocidad).

jueves, 9 de junio de 2011

Sensores termicos y motores CC

Este es un pequeño tutorial que muestra como usar icaro para controlar un motor CC (corriente continua) con un relé  simple y ademas el uso de un termistor para controlar la temperatura (un incendio).
Hay varias formas de controlar un motor CC, la mas fácil de entender es mediante el uso de un relé simple. los relé son muy útiles para separar mecánicamente una conexión eléctrica de la controladora de ICARO, nosotros solo activamos la bobina que genera un campo magnético que mueve la pieza de metal que hace contacto, activando o desactivando el paso de la corriente de otra fuente de alimentación.
La ventaja de este sistema es que es bastante fácil de armar y de entender, básicamente un relé es un interruptor de tensión movido por un electro imán, También nos permite manejar grandes cargas de corriente y voltaje sin peligro para nuestra placa (y computadora), un tipico problema es causado por la inductancia que genera todo motor al ser activado y que puede causarnos problemas (en las placas np03 hace que se reinicie el micro controlador).

La desventaja de este tipo de trabajo es que al ser un componente mecanico, los relé solo pueden ser activados a una velocidad reducida, no permitiendo hacer PWM por ejemplo, y si necesitamos invertir el giro del motor tendriamos que usar otro relé mas, del tipo doble inversor, que nos permita invertir la polaridad del motor, por lo tanto su costo de fabricacion haria que sea mas barato conseguir un puente H integrado como el L293D, que es mas eficiente y permite PWM (aunque puede ser difícil de conseguir).

esquema de conexion en la protoboard ( usando fritzing)


relé en la protoboard con los contactos armados



viejo cooler de una fuente ATX 


Conexiones de la placa icaro 


Termistor ntc perla y un encendedor


Esquema echo con GEDA


El circuito en si es muy simple, en la protoboard esta conectado el motor al relé y este es activado por el pin 1 de la placa np03 (que podría ser tranquilamente una placa de puerto paralelo). 
El termistor es un sensor de temperatura, a medida que sube su temperatura, varia su resistencia electrica. Al llegar a un umbral, la placa icaro detecta la variación de resistencia y marca activado o desactivado (1 - 0).
El programa solamente hace un bucle infinito y  mira el valor del sensor 1 de la placa (devuelve uno o cero), si es igual a cero es porque el termistor esta frió y no hace nada; si el sensor marca 1, es porque algo esta calentando el termistor (el encendedor) y activa durante 5 segundos el pin 1 de la placa, lo que hace que se active el relé y este prende el ventilador cooler que apaga la llama y ayuda a enfriar el sensor.



pantalla con el código de turtleart



Video del motor

En el video se puede escuchar como chasquea el relé cuando es activado por la placa icaro (y se prende el led 1 )

domingo, 8 de mayo de 2011

icaro y servomotores (prueba)

Con una actualización del firmware de la placa np03 se puede manejar servomotores.
Los servomotores tienen ciertas características como su control de posición que los hace muy efectivos para proyectos de robótica, son precisos, potentes y relativamente baratos.


un servo Futaba s3003, muy usado en hobbies
Para poder trabajar con servos hay que modificar la placa np03 y eliminar el integrado UNL2803 (por la forma de trabajo del servo no la necesitamos), en este caso armamos un "adaptador" para poder conectar 3 servos futaba 3003, las salidas directas del pic 16F628A van al puerto de control de cada servo, mediante PWM generamos el pulso para controlar la posición del servo de 0 a 180 grados.




placa modificada con adaptador


 brazo echo con 3 servos futaba

 La camara es para hacer pruebas con TurtleArt

 detalle de la pinza abierta 

 Pinza cerrada

Vista general



robot en accion.



 otra vista

mediante TurtleArt controlamos los grados de cada servo del brazo robot y lo movemos, con una primitiva que nos permite seleccionar el servo y la posición (de 0 a 255 representando los 180 grados del servo)


Turtleart con opción para control de servo



barra de herramienta icaro en TurtleArt


Todavía el firmware es inestable y no puede manejar mas de un servo al mismo tiempo, ademas si no se hace una pausa de 1500 mili segundos el sistema se cuelga y hay que reiniciar al pic.

Link de descargas



firmware de prueba para manejar servomotores
 


plugin para TurtleArt (version 107) que agrega primitivas de icaro


lunes, 18 de abril de 2011

TurtleArt (sugar) + icaro = Tortucaro

Tortucaro es un plugin y una API escritos en python para usar con TurtleART.
TurtleArt Es un entorno de programación gráfico basado en el lenguaje LOGO, en el que se puede hacer pequeños programas y realizar diseños con una tortuga de forma gráfica.
La idea fue desarrollar como primera medida una API (usando python-serial) que permitiera trabajar directamente con python y la placa de control ICARO NP03 a través del puerto serie /dev/ttyUSB0. Luego desarrolle un plugin para Turtle Art para crear "primitivas" propias de icaro y poder interactuar con el software TurtleArt.
Las primitivas integradas a TurtleArt son para activar las salidas de la plca NP03, leer los 6 sensores digitales y un retardo en mili-segundos para hacer pausas.


pantalla de TurtleArt con ICARO




video del robot

En este video podemos ver el funcionamiento de TurtleArt con icaro, el programa activa el avance del robot y se queda en un bucle infinito esperando que los sensores 2 y 3 hagan contacto. Cuando eso pasa, el robot retrocede y gira para la derecha y vuelve a avanzar.


otro ejemplo de TurtleArt con icaro





video del robot con un sensor LDR para seguir una linterna


Con este programa, el robot gira constantemente a la derecha hasta que se activa el LDR (por el contacto con una fuente de luz). Cuando el sensor se pone en estado alto (hay luz) el robot avanza, si no, gira a las derecha.
cuando choca con el sensor 2, un boton del tipo "final de carrera", se para el programa.




control de un motor paso a paso con LDR


detalles de las primitivas icaro


barra de herramientas TurtleArt con icaro


para ver un tutorial de como hacer plugins para TurtleArt:

http://wiki.sugarlabs.org/go/Activities/TurtleArt/Plugins


codigo fuente de la API:

http://valentinbasel.fedorapeople.org/apicaro.py

codigo fuente del plugin:

http://valentinbasel.fedorapeople.org/icaro_plugin.py

version de TurtleArt 106 con icaro ya instalado:

http://valentinbasel.fedorapeople.org/turtleart.tar

martes, 14 de diciembre de 2010

Py-caro

Py-caro es una aplicación del tipo front-end para icaro.
La idea es tener un programa que permita de forma visual y simple hacer una primera aproximación a la manipulacion de mecanismos electricos sencillos (motores de corriente continua, paso a paso, leds).
Py-caro esta programado en python usando las librerías pygame para gestionar los gráficos, y ejecutando código icaro para mandar señales a la placa np03.
la version para descargar esta en estado BETA, funciona y mas o menos hace lo que tiene que hacer, pero le falta un gran trabajo de correccion de errores (sobre todo los errores en tiempo de ejecución tan dificiles de descubrir).
El sistema se basa en poner objetos (motores, leds) y mediante conectores y lineas, unirlos a las salidas correspondientes de la placa np03.

pantalla principal de Py-caro

el programa es bastante simple visualmente, a la derecha estan lo botones con los objetos que se pueden insertar, motores de corriente continua, motores paso a paso, un botón para encender un led o cualquier cosa que requiera un solo pin de la placa, un botón para activar hasta 4 pines a la ves y un jostick ara manejar u pequeño robot de 2 motores que muevan sus dos ruedas.
a la izquierda se encuentan los 8 pines de la placa de control (de color violeta) donde se conectan los objetos para controlar mecanismos físicos en la placa. los pines violetas estan ordenados de arriba a abajo, siendo el mas alto el pin numero 1 y el mas bajo el pin numero 8, en realidad son representaciones de un byte por lo tanto su orden seria:

pin 1 = 1
pin 2 = 2
pin 3 = 4
pin 4 = 8
pin 5 = 16
pin 6 = 32
pin 7 = 64
pin 8 = 128

Funcionamiento


Para empezar se elige el objeto en el menú de la derecha, el cual aparecerá en la pantalla .

controlador de motores de corriente continua

Con el boton derecho del mouse sobre el cuerpo nos permitira moverlo y acomodarlo en distintas partes de la pantalla.

detalle del controlador de motores C.C

Los botones verdes ejecutan código ICARO cuando se los aprieta (boton izquiero del mouse), para conectar el controlador con un pin violeta primero hay que hacer click con el boton del medio (generalmente la bolita que sirve para subir y bajar de pagina) o con los dos botones al mismo tiempo (en notebooks) sobre el conector amarillo, con eso aparecera una linea blanca que seguirá al puntero del mouse.

linea para unir el conector amarillo con el violeta


Para "fijar" la unión entre los dos conectores, llevar el mouse hasta uno de los pines violetas y apretar el botón izquierdo y se dibujara una linea roja que representa la unión y a cual pin controlara el objeto.


controlador de C.C conectado al pin 1 de la placa

una ves conectados todos los pines del controlador, al apretar sobre los botones verdes, se ejecuta código ICARO y activa un pin o los dos pines para mover para un lado o para el otro al motor c.c (usando un rele doble inversor o un puente H).
En el siguiente ejemplo se puede ver como controlar un motor paso a paso desde Py-caro, y ademas la integración con el entorno SUGAR para las OLPCs.


controlador de motores paso a paso (4 bobinas)




Video de Py-caro con SUGAR

En el video anterior se puede ver como Py-caro esta integrado con SUGAR y controla un pequeño motor paso a paso de una impresora vieja.


dos formas de controlar un motor paso a paso

También se puede controlar usando objetos "led" y activando una a una las bobinas del motor (presionando en secuencia en cada controlador led).

Para descargar el código fuente escrito de Py-caro:

http://valentinbasel.fedorapeople.org/pycaro.tar

todavia hay mucho por mejorar, pero ya se pueden grabar las sesiones y volverlas a abrir con los controladores para c.c, led y "paso a paso".
tambien hay un par mas de controladores para agregar como, semáforos, vayas que suben y bajan o controladores personalizados.
esta version trabaja con icaro-0.6.2.261110 y puerto serie, para usarla en puerto paralelo hay que modificar todos los icr que están en la carpeta icaro, pronto voy a subir una modificación que permita usar los dos puertos indistintamente

jueves, 25 de noviembre de 2010

robot con brazo actuador

Este robot usa el mismo chasis que el robot con cámara de vigilancia, solo que se sustituyo la cámara por un brazo de 1 grado de libertad (solamente en el eje Y) con una pinza hidráulica echa con 2 jeringas como mecanismo para abrir y cerrar la pinza.
La pinza es accionada por un motor con una varilla roscada que mueve un tornillo al que esta pegado el embolo de la primer jeringa. Cuando el motor se acciona el tornillo mueve el embolo haciendo que la jeringa empuje una columna de agua por el tubo hacia la otra jeringa que reacciona moviéndose en sentido contrario (efecto de pascal).


representación del efecto de pascal

En ese sentido el conjunto motor-varilla se convierte en un actuador lineal.
como es muy difícil saber cuantos segundos activar el motor para que mueva la jeringa hasta el tope y no se pase, se instalo dos sensores final de carrera, uno en la base del conjunto motor-varilla para que cuando el tornillo llegue hasta la base del motor se apague, y otro en la pinza.
Para controlarlo se uso dos camaras webs (una en la pinza y otra de navegación) y la interface gráfica fue echa en python con librerías pygtk, el control de los motores esta escrito con icaro 0.6 y la interface de hardware es la placa np03.
En este robot se usan 2 de las 5 entradas digitales de la placa np03 para determinar cuando la pinza esta cerrada o totalmente abierta, mediante icaro se activa el motor-varilla hasta que la pinza aprieta el sensor o el tornillo llega hasta la base del motor.

robot visto desde arriba



Vista de costado


Detalle de la pinza y la jeringa

Detalle del actuador lineal

Motor y sensor "final de carrera"


Vista general del actuador lineal con
la jeringa

Los videos siguientes muestran como funciona el robot para agarrar una pequeña flor de papel en una plataforma y mover lo hacia otra plataforma.
el sistema se controla desde VNC y la GUI esta escrita en python.
Los dos videos muestran la misma escena, uno filmando el robot y el otro es una captura de escritorio de la computadora que se uso para controlar remotamente al robot.





filmación del robot trabajando.





captura de escritorio VNC.



miércoles, 22 de septiembre de 2010

robot de vigilancia

La placa de conexión NP03 sirve de interface entre la computadora y los periféricos (sensores, actuadores) que queramos controlar con el lenguaje ICARO.

Se conecta a la computadora mediante un cable Serie o un adaptador Serie/USB y puede manejar hasta 8 dispositivos digitales (ON/OFF) simultáneos con una tension maxima de 12 V - 500 mA y la minima de 5 V - 500 mA

La parte mas importante del circuito es el microcontrolador PIC 16F628A que sirve de interface para demultiplexar los bytes enviados a traves del puerto serie, y para mandar informacion de los 6 sensores digitales que tiene.




Esquema de funcionamiento de la placa



diagrama esquemático del circuito

PCB de la placa


Este es un Robot con cámara de vigilancia aprovechando la placa np03 de puerto serie/usb, el sistema esta controlado por una netbook ASUS de 8 pulgadas y 2 gigas de disco duro.
en la netbook se instalo icaro (version 0.6), tkinter (para la ventana de control), opencv (para manejar las camras), vncserver (para controlar remotamente a la netbook) y python.
el mecanismo de funcionamiento es sencillo, se activa el servidor vnc y desde otra pc dentro de la misma red wifi se llama al cliente vnc (vncviewer) y se abre un usuario dentro de la netbook.
como ROOT (desde la terminal) se abre el programa ./gui.py que es una ventana echa en tkinter y python que contiene los botones para enviar la informacion a la placa de control.
cuando se apreta un boton, se graba un numero en el archivo variables.txt y se ejecuta el archivo .icr con icaro.
el software icaro lee variables.txt y en funcion del valor (que graba en una variable) del numero, activa los puertos y genera el voltaje que accionan los motores que controlan las dos ruedas y los dos ejes de la camara de vigilancia



detalle de la placa montada sobre el robot




la placa con los reles para controlar el giro de los motores


robot de costado


Vista de frente del robot



Otra vista

El siguiente es un video de 4 minutos donde se puede ver la vision del robot de vigilancia, usando sus dos camaras web (la propia de la netbook y la movil).
En el video se puede ver como desde la pc controlo el robot (mediante VNC) y lo muevo por el living de la casa.
como la computadora es de bajos recursos, los videos no son de la mejor calidad, pero sirve ara mostrar las posibilidades del sistema.




conferencia CNEISI

Estas son unas imagenes (cortesia de Matias Maceira) de la conferencia que di en el 4º Congreso Nacional de Estudiantes de Ingeniería en Sistemas de Información (CNEISI 2010) en la UTN Santa Fe.
La charla se trato sobre robótica educativa con software libre y fue una presentación de ICARO como alternativa libre a software de robótica educativa privativos.







Después de la presentación, mostré el funcionamiento de un pequeño robot controlado por una netbook (ASUS de 8 pulgadas) al cual comandaba desde otra netbook mediante una red inalambrica y un servidor VNC.
el robot esta construido con dos motores CC controlados con la placa icaro NP03 , un adaptador serie/usb que conectaba la placa a la netbook (de prestaciones similares a las XO del proyecto OLPC)
En el siguiente video se puede ver al robot navegando y mostrando las imagenes mediante su camara web en el proyector de la sala (también se puede ver como se cae tratando de cruzar un cable).




En este video, muestro el uso de librerias open-cv para reconocimiento de rostros y un proyecto de front-end para icaro escrito en python con librerías pygame.



Quería aprovechar este medio para mandar un saludo y nuestro agradecimiento a la gente que estuvo en la organización del evento que fueron muy amables en invitarnos a dar las charlas sobre software libre que se dieron en el congreso.