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.

jueves, 19 de agosto de 2010

Nueva pagina web de ICARO

La gente de proyecto FEDORA mediante su sistema de redmine, dieron alojamiento para el codigo fuente de icaro y los planos PCB de las placas de control que estamos desarrollando.

para descargar el .tar con el código fuente de ICARO, planos, pdfs y demás información ir a la web de rpmdev:

http://rpmdev.proyectofedora.org/projects/icaro/wiki

Ahi se alojaran los paquetes actualizados del sistema he información tecnica.

jueves, 18 de marzo de 2010

camara de vigilancia

Este proyecto muestra como usar ICARO como un script para controlar dos motores CC (corriente continua) y rotar sobre sus ejes una camara web.
Se usa como interface de control un pequeño programa escrito en python usando las librerias graficas Tkinter (Tk) para generar una ventana con 4 botones (arriba, abajo, izquierda, derecha) y con otro programa en python usando librerias opencv para visualizar la camara web.
cuando se presiona un boton, el programa graba un valor en un archivo de texto (variable.txt) y ejecuta el archivo ICARO el cual toma el valor del archivo de texto y en funcion de eso, activa el motor correspondiente y su direccion.
pasandole mas datos a traves de "variable.txt" se puede aumentar o disminuir la velocidad de giro o sus tiempo de encedido.
De esta forma ICARO se vuelve un lenguaje de script y se puede controlar desde distintas interfaces como python o hasta PHP, con lo que se podria hacer una camara controlada por internet (mediante streamind de video).


Diagrama esquematico del proyecto


usando un par de motoreductores CC se controlan los dos ejes (x,y), se usan dos pines de la placa ICARO para controlar cada motor, un pin activa/desactiva la tension en el motor y el otro trabaja sobre un Rele que cambia el sentido de la direccion de giro del motor.


diseño de la camara
con los dos motores de control





Aca se puede ver como funciona el programa, primero se activa el archivo camara.py (programa python) con lo que se genera la ventana con los botones de control, despues se activa la camara web mediante opencv.
cada ves que se apreta un boton, se graba un valor numerico en un archivo de texto, luego se ejecuta ICARO mediante una llamada a sistema y abre el archivo de texto, lee el valor y activa los puerto en funcion de eso.




Imagen de la camara con el controlador





Detalle de la camara con
el motor de control eje Y

Motor eje X

placa controladora ICARO con dos reles
para cambiar la direccion de giro de los motores



Video de ejemplo de la camara

martes, 10 de noviembre de 2009

brazo robotico

Siguiendo con los proyectos para mostrar las posibilidades del sistema ICARO, desarrolle este brazo robotico de 3 grados de libertad fabricado con motores de lectoras de CD rotas.
La idea basica era fabricar de un brazo de costo casi cero con componentes recuperados de basura electronica, poco hardware y aprovechar los 8 conectores de la placa ICARO.
Basicamente, cada motor es controlado por un relé doble inversor, y este a su ves es controlado por 2 conectores del puerto paralelo (con este esquema se puede controlar hasta 4 motores).
un conector envia tension al motor prendiendolo y apagandolo; El otro motor controla el rele que al activarlo cambia la polaridad de la tension haciendo que el motor gire para un lado o para el otro.
de esta forma con los dos conectores de lpt se puede activar/desactivar el motor , cambiar su sentido de giro (derecha/izquierda) y controlando el encedido y apagado, se puede controlar la velocidad con la que gira prendiendolo y apagandolo en pulsos regulares (PWM).
Este pequeño brazo tiene muy poca presicion y es bastante debil para levantar objetos, pero mas que nada sta diseñado para demostrar como se pueden fabricar pequeños robots educativos con un bajo costo. Sin embargo, si se utilizaran componentes de buena calidad (motores mas pontentes con servomecanismos y una estructura mas estable) se con el mismo codigo ICARO, se podria usar un brazo robotico muchisimo mas estable y profesional.



En esta fotografia se aprecia los motores y los grados de libertad del brazo robot.
los motores y sus engranajes son del dispositivo de ejeccion de la bandeja de CD de lectoras rotas.

Para controlarlo uso los 5 conectores de sensores de la placa ICARO para manejar cada motor a modo de jostick. 4 conectores controlan el giro izquierda/derecha de 2 motores. el quinto boton, cambia a los otros dos motores para asi poder controlar el giro de los 4 motores en total.





lunes, 14 de septiembre de 2009

live cd ICARO

primeras imagenes del live-cd de FEDORA 10 con Icaro instalado para pruebas.
esta version de FEDORA fue modificada ( lo que se denominca un respin) para contener programas especificos de electronica como el software Kicad, GEDA y ademas tenr instalado el binario de ICARO (esta version es la 0.3.3.110909 que todavia usa las instruccion outp de assembler) para poder trabajar directamente sin nececidad de compilar.
ESte live-cd esta compilado con XFCE4 para reducir su consumo de RAM, pero igual es recomedable usarlo con una pc de por lo menos 256 Mb de memoria RAM.
un especial agradecimeinto a Edwin del proyecto FEDORA por explicarme como armar un respin de FEDORA usando las excelentes herrramientas como REVISOR y Kickstart.

IMAGENES:

cover art del cd


splash de boot de fedora con logo ICARO


pantalla inicial de XFCE4


corriendo el programa KICAD


desde la terminal usando ICARO
con un archivo de ejemplo

miércoles, 9 de septiembre de 2009

control de motores de CC

Los motores de C.C (corriente continua) son muy comunes, suelen estar en cualquier dispositivo electromecanico y son muy sencillos de contrlar (para mas informacion consultar la wikipedia).
hay dos factores importantes a la hora de manipular un motor CC, uno es que la direccion de giro depende de la polaridad con la que se conecta la fuente de alimentacioin al motor, el otro factor, es la cantidad de tension y amperaje que se aplica al motor.
si queremos que gire para un lado o para el otro, debemos cambiar su plaridad. Si queremos aumentar o disminuir su potencia, subiremos o bajaremos la tension.
para el siguiente proyecto usaremos un rele doble inversor (bastante comun en las casa de electronica) en cada motor de CC para controlar su polaridad. como se observa En el grafico siguiente, nececitamos 2 puertos de la placa de control, el puerto 1 activa o desactiva el rele, y el puerto 2 envia tension al motor.
Cuando se aplica tension al rele, este mediante su bobina interna, mueve el interruptor cambiando la polaridad que se envia al motor mediante el puerto 2, es como si se sacaran los cables y se invirtieran cambiando su polaridad.
para controlar este motor nececitamos activar el puerto 2 para enviar tension al motor, y si queremos cambiar el sentido de giro, activamos el puerto 1 y el puerto 2.


esquema de conexiones

En el siguiente programa vemos como activar durante 2 segundos la direccion de giro y despues cambiarla durante otros 2 segundo antes de salir del sistema

#----programa de ejemplo---- 

inicio
# poner los pines del puerto a cero y esperar
#
5000 milisegundo
multipuerto(0,5000)
# activamos el puerto 2 y el motor
#girara en un sentido durante 2000 Ms
multipuerto(2,2000)
# activamos el puerto 2 y 1 (3) y el motor girara en el
#otro sentido durante 2000 Ms
multipuerto(3,2000)
# salimos del programa
multipuerto(0,0)
final

Para mostrar algunas de las posibilidades de este tipo de motores
en el siguiente video vemos un robot con 2 motores CC y 2 interruptores de contacto que al ser activados modifican el funcionamiento de os motores.


video


cuando el sensor izquierdo es activado (el robot choca contra la pared) el programa cambia la direccion del motor derecho durante 500 Ms y luego continua el ciclo normal. Cuando se activa el sensor derecho, es el motor izquierdo el que cambia de sentido de giro.
Si se activan los dos sensores al mismo tiempo, se cambia la polaridad a los dos motores para que el robot retroceda y despues se lo hace girar a la izquierda durante 500 Ms.

algunas imagenes del robotito









Aca esta el codigo de control del programa
#----programa del robot que resuelve laberintos---- 


# poner los pines del puerto a cero y esperar
inicio
#variables de movimeinto del robot
#----------------------------#
#retrocede rueda derecha
$a=2
#avanza rueda derecha
$b=3
#----------------------------#

#----------------------------#
# retrocede rueda izquierda
$c=8
# avanza rueda izquierda
$d=12
#----------------------------#

#avanza
$e=15
#retrocede
$f=10

#----------------------------#
# variables sensores
# sensor derecha
$g=63
# sensor izquierda
$h=255
# ambos sensores
$i=191
#salir
$j=119
#----------------------------#


#----------------------------#
# inicia el programa #
#----------------------------#

# pongo los pines a cero
multipuerto(0,4000)

# bucle de inicio
bucle

# salir
si(%p=$j)
multipuerto(0,0)
final
finsi

# Avanzo
multipuerto($e,2)
multipuerto(5,30)
# golpea ambos sensores
si(%p=$i)
multipuerto($f,200)
finsi

# sensor izquiero
si(%p=$h)
multipuerto($f,300)
multipuerto($d,360)
finsi

# sensor derecho
si(%p=$g)
multipuerto($f,300)
multipuerto($b,360)
finsi

finbucle

final

martes, 1 de septiembre de 2009

Hardware

El hardware propuesto es muy sencillo, se basa en el integrado UNL2803 que no es mas que un array de 8 transistores Darlington que elvan la tension TTL del puerto (5 volt) y pueden manejar cargas de hasta 12 volts 500ma, suficiente para manejar pequeños motores o accionar reles para manejar tensiones mayores.
Las 8 salidas de potencia no son mas que la amplificación mediante un array de transistores Darlington (ULN2803) de las salidas TTL 0 a 7 Este chip puede drenar una corriente máxima de 500ma, lo que es suficiente para activar un LED, un relé y hasta un motor DC de bajo consumo (tipo motor de grabador).
Las entradas son conexiones directas a los pines del puerto de control del puert paralelo

diagrama esquematico del UNL2803



diseño del PCB

Una de las ventajas de este integrado es su bajo costo y facil obtencion, haciendolo ideal para proyectos sencillos de robotica educativa, donde los alumnos podrian quemar los componentes por su falta de experiencia.
En internet existen una gran cantidad de proyectos que usan este tipo de integrado para controlar el puerto paralelo como por ejemplo:

todorobot
proyecto reess
pablin electronica
bulma

Todos estos proyectos se pueden usar con el Sistema ICARO, porque se basan en el mismo funcionamiento. La ventaja de usar ICARO radica en no nececitar programar en C/C++ para cada manejar cada placa, basta con crear los archivos de textos con instrucciones ICARO.

ejemplo 3

En este ejemplo usaremos la variable especial %p. Esta variable lee el valor del puerto de control de LPT y se utiliza para saber si alguno de los 5 pines de control han sido activados.
El ejempo inicia con la instruccion bucle que es igual a repetir( con la diferencia que hace iteraciones infinitas hasta que se sale del programa. el programa se quedara leyendo la instruccion si( y comparando el valor de %p, si %p es igual a 112 (pin 1 activado) se ejacutara todas las instrucciones abajo de si( hasta llegar a finsi. Si %p no es igual a 112, se salteara todas las instrucciones y el programa seguira desde finsi.

#----programa de ejemplo---- 

# declarar las variables al inicio del codigo
variables
$tiempo=100
$puerto=1
finvariables


inicio
# poner los pines del puerto a cero y esperar
#
5000 milisegundo
multipuerto(0,5000)
# iniciar un bucle infinito y leer
# el puerto de control
bucle

# si el puerto de control es igual a 119
# repetir 5 veces multipuerto( $puerto,$tiempo)
# y sumar $puerto + 1
si(%p=119)
repetir(5)
multipuerto($puerto,$tiempo)
$puerto=suma($puerto;1)
finrepetir
finsi

# si el puerto de control es igual a 119
# apagar todos los pines y salir del sistema
si(%p=112)
# apagar los pines y salir del programa
multipuerto(0,0)
# cuando se llega a la instruccion "final"
# se sale del sistema
final
finsi

finbucle

final



al iniciarse el programa entra en un bucle infinito, y se queda leyendo todo el tiempo el puerto de control (%p). si %p= 119 envia al puerto de datos el valor de $puerto.
si %p=119 sale del sistema.
En el video se puede ver en la protoboard 2 micro-swichts que al ser presionados ponen en estado alto los pines del puerto de control.