Mostrando entradas con la etiqueta motores. Mostrar todas las entradas
Mostrando entradas con la etiqueta motores. Mostrar todas las entradas

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.


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 )

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