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