.::MATLAB - CONTROL MOTOR PAP::.

Conteo de tráfico vehicular

A través del procesamiento de imágenes con Matlab, este programa consigue caracterizar el tráfico de una avenida de dos carriles.

Artist's interpretation of article headline

Calificación automática de exámenes

Aplicación basada en procesamiento de imágenes con Matlab cuya entrada es un examen de opción múltiple como imagen y provee la calificación total del examen con detalle de respuestas correctas e incorrectas etiquetadas.

Artist's interpretation of article headline

Medición de distancia con una webcam y puntero láser

Cálculo de la distancia desde una webcam usando un puntero láser. El programa está diseñado para trabajar con múltiples tipos de cámaras y ser parametrizable para cada montaje.

Artist's interpretation of article headline

Spycam

Esta aplicación sirve para detectar la presencia de movimiento ya sea de una persona u objeto que esté dentro del campo de visión de la cámara instalada. Es configurable con un valor de sensibilidad para calibrar el tamaño del objeto a detectar. Asimismo, almacena cada una de las imágenes capturadas para un análisis ulterior.

Artist's interpretation of article headline

CONTROL DE MOTOR PASO A PASO USANDO MATLAB

Resumen.- El presente artículo contiene una breve introducción sobre los motores paso a paso así como el código de un programa desarrollado en Matlab 7.1 para controlar su velocidad y dirección de giro. El programa es una función y una GUI, donde se puede controlar los pasos del motor, velocidad y dirección de giro.

INTRODUCCIÓN

Los motores paso a paso son ideales para la construcción de mecanismos en donde se requieren movimientos muy precisos. La característica de estos motores es poder moverlos un paso a la vez por cada pulso que se le aplique.

DESARROLLO DEL PROGRAMA

Matlab posee comandos sencillos para el control del puerto paralelo. Basta con crear la entrada digital del puerto y asignar que pines son de entrada y cuales de salida.

ent= digitalio('parallel','LPT1');

dato= addline(ent,0:4,'out');

putvalue(dato,2);

El código anterior crea la entrada digital del puerto paralelo, asigna los pines 2 a 5 como salidas y escribe el valor decimal 2 (Matlab realiza automáticamente la conversión a binario) en el puerto.

Las condiciones iniciales del programa colocan a cero los pines de puerto paralelo:

diego= digitalio('parallel','LPT1');

dato= addline(diego,0:3,'out');

putvalue(dato,0);

Como se puede ver en la figura 1, lo único que se debe programar en la interfaz gráfica es la captura del retardo, la dirección de giro y el encendido-apagado del motor.

guide
Fig. 1. Entorno del programa motor.

La mayor parte del código se programa en el toggle button ON-OFF, cuyo campo Tag es state. Sin embargo, es necesario un código adicional para el texto del botón-interruptor de la dirección:

f=get(handles.direction,'Value');

if f==1

    set(handles.direction,'String','DIRECTION ''L''');

else

    set(handles.direction,'String','DIRECTION ''R''');

end

La secuencia que se envía al motor es:

secuencia

La programación del botón de encendido es:

d=get(hObject,'Value');

if d==1

    set(handles.state,'String','ON');

    diego=digitalio('parallel','LPT1');

    dato=addline(diego,0:3,'out');

    g=1;

    while g

        e=get(handles.direction,'Value');

        if e==0

            mov=[3 6 12 9];

        else

            mov=[9 12 6 3];

        end

        delay=str2double(get(handles.speed,'String'))*1e-3;

        if delay<0 ||isnan(delay)

            errordlg('Time out of range','ERROR');

            delay=500;

            set(handles.speed,'String',500);

            set(handles.state,'String','OFF');

            set(handles.state,'Value',0);

            break;

        end

        if get(hObject,'Value')==0

            break

        end

        putvalue(dato,mov(1));

        pause(delay);

        if get(hObject,'Value')==0

            break

        end

        putvalue(dato,mov(2));

        pause(delay);

        if get(hObject,'Value')==0

            break

        end

        putvalue(dato,mov(3));

        pause(delay);

        if get(hObject,'Value')==0

            break

        end

        putvalue(dato,mov(4));

        pause(delay);

    end

 

else

    set(handles.state,'String','OFF');

end

Para la conexión del motor se puede usar el siguiente esquema:

circuito
Fig. 2. Esquema para conexión del motor.

La siguiente figura muestra el modelo ensayado y funcionando:

final
Fig.3. Circuito final.

Asimismo, la siguiente función controla el número de pasos del motor, velocidad y dirección de giro:

function motor(step,delay,direction)

%Controlling a stepper motor

%step must be integer.

%delay is in seconds.

%direction: 1 or 2.

warning off

if nargin==1

    delay=1;direction=1;

elseif nargin==2

    direction=1;

end

if isnan(step)||step<0

    error('Step value must be positive integer');

elseif direction~=1 && direction~=2

    error('Direction options: 1 or 2')

elseif isnan(delay)||delay<0

    error('Delay value must be positive integer')

end

step=ceil(step);

inout=digitalio('parallel','LPT1');

dato=addline(inout,0:3,'out');

if direction ==1

    sent=[3 6 12 9];

else

    sent=[9 12 6 3];

end

m=1;

for n=1:step

    putvalue(dato,sent(m));

    pause(delay);

    m=m+1;

    if m>4

        m=1;

    end

end

Para bajar el programa pulsa el botón descargar:

descargar