domingo, 16 de octubre de 2011

Xo robot (sugar y robots)

Este es un pequeño robot usando una Xo del programa OLPC con el sistema operativo sugar y turtleart.
La idea es mostrar que no hace falta grandes capacidades de procesamiento en una notebook para poder armar un robot educativo.


Vista lateral



El robot tiene un sensor cny70 para poder seguir una linea negra y una pinza manejada por un servo para abrir y cerrar.



video donde se puede ver el funcionamiento del robot, cuando el sensor pasa por la linea negra, el motor izquierdo se activa cuando el sensor no toca mas la linea negra, activa el motor derecho, haciendo que el robot avance en zigzag siguiendo el camino marcado por la linea. Cuando topa contra algún objeto , paran los motores, se abre la pinza, se cierra y el robot retrocede durante 5 segundos.

lunes, 29 de agosto de 2011

nueva placa NP04


Esta nueva placa esta diseñada para aprovechar los dos tipos de pics mas comunes del mercado, la gama 16F628A y 16F88.
Esencialmente la diferencia entre dos pics esta en los puertos de transmisión y recepción de señales seriales (Tx y Rx) que en los 16F628 están en los pones 7 y 8 y en los 16F88 están en los pines 8 y 11.
Para permitir trabajar con los dos pics, se selecciona los dos jumpers al lado del MAX232, ademas, tiene un conector para aprovechar la la salida de tension del 7805 (5 volt y la salida directa).
Este PCB no trae el integrado UNL2803 lo que ahorra la instalación de borneras, leds y resistencias y facilita conectar la placa a servomotores y drivers para manejo de motores CC (L293D).
El pcb esta diseñado para tener un conector para cada puerto del pic,


Detalle de la placa armada para pruebas


Controlando dos servomotores futaba

Las dimensiones de la placa esta diseñadas para poder armarlo con un pcb de cobre de 5 cm x 10 cm (medida estandar en argentina).

Esquema de componentes.


diagrama echo con Kicad

Grafico 3D echo con Kicad

Vista de arriba del PCB



Video de control de dos servomotores.

Esta placa requiere de mas conocimiento de electrónica que las placas np03 pero tienen mas posibilidades porque no hay que usar el UNL2803 (que para mover servos o motores cc no sirve).

para descargar el proyecto echo con Kicad:

http://valentinbasel.fedorapeople.org/serie/placa-np-04.tar

el firmware para pic 16F628A:

http://valentinbasel.fedorapeople.org/pic-caro/pic-caro.0.5.tar

Por ahora no arme ningún firmware para los pics 16F88, y hay varias cosas que me gustaría mejorar de esta placa (programación ICPS para no necesitar un programador para el pic por ejemplo).

lunes, 22 de agosto de 2011

icaro 0.6.3

Ya esta lista la nueva versión del firmware para placas icaro np03, Actualizado para usar el compilador SDCC en ves de escribir directamente en assembler.
La ventaja de poder escribir en un lenguaje de alto nivel como C es la facilidad para mantener actualizaciones, modificaciones etc etc.
Esta nueva versión del firmware icaro (icaro06) tiene las siguientes mejoras:

1) mejorada el manejo de servomotores (sin dejar 1500 Ms entre instrucción)
2) capacidad de generar una onda cuadrada de frecuencia audible
3) Reescrito íntegramente en SDCC

Se actualizo el lenguaje icaro a su versión 0.6.3 que permite usar las instrucciones "pausa" y "audio".
En las versiones anteriores del firmware, para poder controlar un servomotor, se enviaba el carácter "m" , el valor de los grados del motor (0-255) y el puerto (1-8) y el micro quedaba en un bucle cerrado de 1500 ms, donde no se podia enviar ninguna otra orden (con peligro de colgar el pic). Con el nuevo firmware, se resuelve ese BUG permitiendo mover mas rapidamente el servo y activar mas de un servo al mismo tiempo (enviando la misma señal a ambos).
La capacidad de generar ondas sonoras fue a pedido de Adrian Frapiccini que me comento que podía serle util para un curso. Para poder generar sonidos, hay que conectar un parlantito directamente a una de las salidas de la placa y usar la función audio(), a diferencia de Arduino, no se enviá la frecuencia de la señal a reproducir, si no la longitud de onda en funcion de eso se puede calcular la frecuencia de sonido.

Robot controlado remotamente.

Este es una prueba del nuevo firmware, usado para controlar un robot movido por dos motores CC y con una camra movil controlada por dos servomotores futaba.

Se puede apreciar la cámara montada sobre dos servomotores


Otro detalle de los servos





video del robot circulando por la casa


El robot es controlado mediante X11vnc con una interface echa con pygtk y usando apicaro 0.2.
Para descargar la nueva version del firmware (echa con el software I4UC):

pic-caro.0.5

la nueva version del lenguaje icaro:

icaro.0.6.3.140811

El api para python actualizado:

apicaro.0.2

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