sistema automático de conteo y clasificación de cajas según tamaño

37
Sistema automático de conteo y clasificación de cajas según tamaño 1. Introducción La visión artificial se ha convertido en una herramienta fundamental dentro del campo de la automatización. Los sistemas de visión son capaces de guiar a los robots en la aprehensión de productos en movimiento o mezclados permitiendo así la robotización de tareas que hace unos años eran imposibles de automatizar. A nivel industrial, la visión artificial se emplea también para llevar a cabo la detección de todo tipo de defectos superficiales, comprobaciones en el etiquetado, mediciones sin contacto con precisión de micras, verificaciones sobre la integridad de conjuntos, clasificación de objetos, etc., controlando toda la producción con fiabilidad y a la velocidad requerida por el proceso Por tales motivos, cada vez más empresas optan por incluir este tipo de tecnologías en sus procesos. En este proyecto, se buscó simular el proceso de clasificación de cajas según su tamaño, haciendo uso de las herramientas que la Visión Artificial nos provee. El problema se aborda mediante un esquema de Visión Artificial consistente en 6 etapas: obtención de la imagen (caja), preprocesamiento, segmentación, extracción de características y clasificación.

Upload: josebalcazar89

Post on 27-Dec-2015

50 views

Category:

Documents


21 download

TRANSCRIPT

Sistema automático de conteo y clasificación de cajas según tamaño

1. Introducción

La visión artificial se ha convertido en una herramienta fundamental dentro del campo de la automatización. Los sistemas de visión son capaces de guiar a los robots en la aprehensión de productos en movimiento o mezclados permitiendo así la robotización de tareas que hace unos años eran imposibles de automatizar.

A nivel industrial, la visión artificial se emplea también para llevar a cabo la detección de todo tipo de defectos superficiales, comprobaciones en el etiquetado, mediciones sin contacto con precisión de micras, verificaciones sobre la integridad de conjuntos, clasificación de objetos, etc., controlando toda la producción con fiabilidad y a la velocidad requerida por el proceso

Por tales motivos, cada vez más empresas optan por incluir este tipo de tecnologías en sus procesos.

En este proyecto, se buscó simular el proceso de clasificación de cajas según su tamaño, haciendo uso de las herramientas que la Visión Artificial nos provee.

El problema se aborda mediante un esquema de Visión Artificial consistente en 6 etapas: obtención de la imagen (caja), preprocesamiento, segmentación, extracción de características y clasificación.

Objetivo General

Lograr que al término del proyecto, se pueda comprender y diseñar sistemas basados en técnicas de Visión Artificial aplicados a sistemas mecatrónicos.

Objetivos Específicos

Automatización del proceso de clasificación de cajas según su tamaño.

Manejo de técnicas referentes a la Visión Artificial.

2. Sistema automático de conteo y clasificación de cajas según tamaño

2.1. Objeto a examinarSe trata de cajas comunes, de diferentes tipos: grandes, medianas y pequeñas.Ningún lado de las cajas denominadas grandes no deberá sobrepasar el ancho de la faja transportadora, aproximadamente, 16 cm. Se recomienda, para que el proyecto tenga éxito, utilizar cajas de colores oscuros. Esto por problemas con la iluminación.

2.2. Descripción del procesoSe tienen cajas de diferentes tamaños.Las cajas viajan a través de una banda transportadora, la cual cuenta con un sensor LDR en conjunto con un puntero láser y tiene como objetivo el envío de una señal que informe al módulo de proceso (PC), la presencia de una pieza u accesorio sobre la banda. En el módulo se ejecuta el algoritmo de captura y procesamiento de imágenes; determinando si la caja es de tamaño grande, mediano o pequeño, y realiza el conteo respectivo. Al final de la banda transportadora se localiza un actuador extremo del proceso (pistón eléctrico), el mismo que se encuentra en reposo hasta la llegada de una señal, que le indique que debe ser activado para desechar algunas de las cajas (Figura1)

.

Figura1. Esquema general del sistema de visión a implementar

2.3. Elementos constitutivos del sistema2.3.1. Dispositivo de captura de imágenes

Para la obtención de información relativa a una escena, el sistema visión artificial cuenta con una cámara web.(Figura 2).

Figura2. Cámara web utilizada en el sistema de visión a implementar

El dispositivo a utilizar, se conecta fácilmente a la PC y ya está lista

para usarse, previa instalación de los drivers.

2.3.2. Sensor de detecciónEl sensor de detección, es un sensor activo, el cual basa su funcionamiento en la combinación de un puntero láser, encargado de enviar luz tenue continua al sensor de detección, que será un LDR (Figura 3).

Figura3. Sensor compuesto por un puntero láser y una fotorresistencia

2.3.2.1.Funcionamiento del sensor de detección

Una fotorresistencia es un componente electrónico cuya resistencia disminuye con el aumento de intensidad de luz incidente

El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (puede descender hasta 50 ohms) y muy alto cuando está a oscuras (varios megaohmios).

Su funcionamiento se basa en el efecto fotoeléctrico. Un fotorresistor está hecho de un semiconductor de alta resistencia como el sulfuro de cadmio. Si la luz que incide en el dispositivo es de alta frecuencia, los fotones son absorbidos por las elasticidades del semiconductor dando a los electrones la suficiente energía para saltar la banda de conducción. El electrón libre que resulta, y su hueco asociado, conducen la electricidad, de tal modo que disminuye la resistencia. Los valores típicos varían entre 1 MΩ, o más, en la oscuridad y 100 Ω con luz brillante.Las células de sulfuro del cadmio se basan en la capacidad del cadmio de variar su resistencia según la cantidad de luz que incide la célula. Cuanto más luz incide, más baja es la resistencia. Las células son también capaces de reaccionar a una amplia gama de frecuencias, incluyendo infrarrojo (IR), luz visible, y ultravioleta (UV).La variación del valor de la resistencia tiene cierto retardo, diferente si se pasa de oscuro a iluminado o de iluminado a oscuro. Esto limita a no usar los LDR en aplicaciones en las que la señal luminosa varía con rapidez. El tiempo de respuesta típico de un LDR está en el orden de una décima de segundo. Esta lentitud da ventaja en algunas aplicaciones, ya que se filtran variaciones rápidas de iluminación que podrían hacer inestable un sensor (ej. tubo fluorescente alimentado por corriente alterna).

2.3.3. Banda transportadoraLa banda transportadora del sistema es del tipo síncrono en una sola dirección, y se para cuando el usuario lo requiera a través de la interfaz (Figura 4).

Figura4. Faja transportadora usada en el proyecto. a) Vista frontal b) Vista lateral

Para la construcción de esta, se utilizaron soportes de maderas de forma rectangular de 16 x 60 cm, en donde se asientan los rodillos. Dado que el uso del proyecto fue netamente académico, se improvisaron dos cilindros huecos de dunlopillo (Figura 5) en combinación con tubos con diámetro de ¾ pulgada y cinta para el ajuste de estos dos. Así también los rodillos iban ajustados a su respectivo rodamiento, el cual estaba pegado al soporte de madera.

Figura5. Cilindros huecos de dunlopillo

a) b)

Para la faja misma, se utilizó el papel que se usa en las gigantografías. La faja cuenta con 18 cm de ancho por 50 cm de largo (por un lado).

2.3.4. Pistón eléctrico

Básicamente se trata de un electroimán, excitado con una fuente de 12V y 8.5A.

Un electroimán está hecho con un núcleo de hierro dulce en torno al cual se arrolla la espiral de un circuito eléctrico. Cuando se envía una corriente continua a la espiral del circuito, el núcleo de hierro se magnetiza. Cuando esta corriente se interrumpe, el núcleo se desmagnetiza. Un electroimán es, por lo tanto, un imán artificial y temporal, que resulta activado y desactivado enviando o interrumpiendo una corriente continua a la espiral del circuito que envuelve el núcleo de hierro.

El principio de funcionamiento de un actuador lineal basado en un electroimán o solenoide, es introducir un material imantado en el interior del campo generado por el solenoide. Cuando el solenoide crea el campo magnético genera unas fuerzas de atracción o repulsión en el material imantado.

Para la elaboración del pistón eléctrico se utilizaron 25 gr de alambre de cobre calibre 12 (Figura 6).

Figura6. Alambre de cobre calibre 12.

Con esta cantidad de alambre, se procedió a construir la bobina del electroimán, enrollándolo sobre un carrete, como se muestra en la figura 7.

Figura6. Bobina con alambre de cobre calibre 12

Después de aislarla con plástico, se la colocó sobre un pedazo de madera que contiene una bornera para los alambres de la bobina por dónde se excitará este dispositivo (Figura 7).

Figura7. Bobina con alambre de cobre calibre 12

Cabe resaltar que para la elección del calibre del alambre se preguntó a gente que ya había tenido una experiencia con este tipo de dispositivos.

Finalmente, se optó por elegir a una varilla de fierro con 1 cm de diámetro y 15 cm de longitud para que sea el pistón, y para el retorno de este se, utilizó un muelle o resorte del mismo diámetro y 6 cm de longitud.

2.4. Adquisición y procesamiento

En este punto es importante mencionar que la codificación de la metodología propuesta fue realizada en toda su extensión en el lenguaje de programación MatLab.

El paquete computacional MatLab provee un ambiente flexible en el que se pueden integrar las diferentes partes del sistema propuesto, tanto el procesamiento de imágenes, como la extracción de características

2.4.1. Captura de la imagenPara la captura de imágenes se trabajó con una cámara web.

Esta va conectada al puerto serial de la computadora a usar.En el programa de Matlab se utlizarán funciones como: videoinput, start, stop, preview y getsnapshot

Esta última, se usará para la captura de la imagen de a caja.Cabe mencionar que, es el sensor descrito anteriormente que dará paso a la captura de imagen y posterior procesamiento.

2.4.2. Procesamiento de imagenEn esta sección se utilizan técnicas de procesamiento de imágenes como detección de bordes y métodos morfológicos para detectar las cajas presentes en una imagen de entrada así como para extraer información que sea significativa para el proceso de clasificación discutido más adelante.

Lectura de imagenEl primer paso hacia la detección es leer el cuadro de imagen a ser procesada.

La figura 8 muestra un ejemplo de imagen de entrada.

Figura8. Imagen de la caja a procesar

Definir área de interés

De la figura 8 podemos apreciar que en la toma hay áreas que no corresponden a la caja, sin embargo, están allí y dificultan el procesamiento logrando que este se tarde más tiempo de lo debido, por ello se procedió a recortar la imagen para captar solo el área que nos interesa

Figura9. Área de interés

Imagen en escala de grisesLa imagen es transformada a escala de grises como se muestra en la figura 10, eliminando la tonalidad e información de saturación pero conservando la luminosidadEste paso es necesario para la aplicación de técnicas morfológicas discutidas más adelante.

Figura10. Imagen en escala de grises

Detección de bordes

Un objeto puede ser detectado fácilmente en una imagen si éste tiene suficiente contraste con respecto al fondo. DosComo se puede ver, en la figura 11, el objeto a ser segmentado difiere grandemente en contraste de la imagen del fondo. Los cambios de contraste son detectados poroperadores de la función de detección de bordes.

En general, la detección de bordes es una técnica de segmentación que devuelve una imagen binaria donde los pixeles que encuentra la función tienen valor de 1 y todos los demás tienen valor de 0 .

Figura11. Detección de bordes

Dilatación de bordes La figura 12 muestra las líneas de alto contraste encontradas en la imagen a través del método de detección de bordes. Sin embargo, estas bordes no delinean muy bien el

contorno de las cajas. Comparada a la imagen original, se pueden ver agujeros en las líneas que rodean los objetos.

Estos agujeros en los bordes desaparecen al dilatarlos usando elementos de estructuración vertical así como elementos de estructuración horizontal.

Figura12. Dilatación de bordes

Agujeros rellenados La figura 12 muestra un contorno del objeto detectado que se ajusta bien a la descripción de las cajas sin embargo aún existen agujeros en el interior del área seleccionada. En este caso, un agujero es un área de pixeles negros (apagados) rodeada de pixeles blancos (encendidos). Al rellenar los agujeros se obtiene la segmentación mostrada en la figura 13.

Figura13. Agujeros rellenados

Erosión de la imagenFinalmente, como se muestra en la figura 14, se ha obtenido una segmentación que describe aceptablemente la caja detectada; sin embargo, aún existen pixeles blancos (encendidos) que no pertenecen al vehículo. Para eliminar cualquier clase de ruido se erosiona la imagen dos veces con elementos de estructuración morfológica

Figura14. Segmentación de la imagen

Al final la detección vehicular se reduce a la obtención de una imagen binaria en la que todos los pixeles que pertenecen al vehículo detectado tienen el valor de 1, y todos los otros pixeles tienen el valor de 0 como se muestra en la figura 15.

Una manera gráfica de representar la detección vehicular es superponiendo el perímetro de máscara del objeto a la imagen de entrada como se muestra en la figura 15.

Figura15. Detección de la caja

Extracción de característicasLa extracción de características es un paso importante hacia la clasificación. Hasta este punto se ha descrito cómo detectar

Una caja a través de procesamiento de imágenes en una imagen bidimensional. Una vez logrado esto, es importante seleccionar características a través de las cuales podamos distinguir la categoría o clase a la que pertenece un elemento. En este punto, se discute la selección de características para este propósito.

En primer lugar, se calcularon un conjunto de propiedades para cada una de las regiones identificadas en la imagen binaria, es decir, para cada uno de los vehículos detectados. Las características que se calcularon son:

Área. El número total de pixeles en la región identificada.

Caja de delimitación. El rectángulo más pequeño que pueda contener la región. Se estimó el punto que representa la esquina superior derecha de la caja de limitación y así como su largo y ancho.

Centroide. El centro de masa de la región identificada.

Polígono convexo. El polígono convexo más pequeño que pueda contener a la región.Se almacenaron los valores x y y de las coordenadas de cada vértice del polígono.

Excentricidad. La excentricidad de la elipse más pequeña que circunscribe la región identificada. Recordemos que la excentricidad es el radio de distancia entre el foco de la elipse y el largo de su eje mayor. El valor se representa entre 0 y 1; donde una elipse cuya excentricidad es 0 se trata de un círculo, mientras que una elipse cuya excentricidad es igual a 1 se trata de un segmento de línea.

Un ejemplo de la elipse menor que circunscribe un área se presenta en la figura 16.

Figura16. Extracción de carácterísticas

Luego, del área obtenida en la extracción de la imagen, obtendremos una clasificaciónEn el programa se fijó que para un número de píxeles superiores o iguales a 45 000, la caja se interpretaría como grande.De otro modo, para número de píxeles superiores a 15000 pero menores que 45 000, la caja se interpretaría como mediana.En el resto de los cajos, la caja sería pequeña.

2.5. Implementación del sistema y resultadosEn este punto se abarca la implementación del circuito y la interfaz gráfica.

El circuito elegido se describe en las figuras 17,18 y 19.

Figura 17. Circuito pata control de la faja y el actuador.

Este circuito consta de 3 partes; una, que es la etapa del sensado, la segunda es la etapa del procesamiento de datos a cargo del microcontrolador y la última, es la etapa de transmisión y recepción de de datos.

En la etapa de sensado, se encuentra el LDR, el cual estará posicionado en uno de los soporte de la faja. A continuación de este, se aprecia un comparador, el cual se encarga de emitir la señal que irá a uno de los canales analógicos del pic. Se compara la señal proveniente de un dividir de tensión, que hará la función de umbral, puesto que si la señal del divisor de tensión, en donde se encuentra el LDR, es mayor que está, mandar una señal por encima de los 2 voltios. En el otro caso, mandará una señal debajo de 1 voltio.

En la etapa de procesamiento de la señal, el microcontrolador es el encargado de dar paso al procesamiento de imagen, siempre y cuando la señal que reciba por parte del comparador sea por encima de los 2 voltios. De otro modo, también es el encargado de recibir datos por parte de la PC, para, según sea el caso, activar o desactivar los relés que gobernarán al actuador y al motorreductor que mueve a la faja.

La última etapa, está implementada para la transmisión y recepción de datos entre el microcontrolador y la PC. Para ello se utilizó un conector DB9 hembra y un circuito integrado max232. Este último será encargado del acondicionamiento de señal para que se realice la comunicación PIC-PC.

Figura 18. Circuito pata control para la faja

Figura 19. Circuito pata control para la actuador

Para la visualización de datos se utilizó la Interfaz Gráfica de Matlab.

En donde se colocó un objeto de video para visualizar el proceso en tiempo real.

Además se colocó, un botón que inicie el movimiento de la faja, y otro que lo para.

Así también, se implementó, a través de botones seleccionadores, la habilitación o no del puerto serial.

Finalmente, se implementó 3 cajas de textos para el conteo de cajas según su tamaño.

Lo mencionado anteriormente se encuentra descrito en la figura 20.

Figura 20. GUI del proceso

3. Conclusiones

Se pudo implementar un sistema capaz de clasificar cajas según su tamaño usando Matlab.

El sistema es bueno para aplicaciones en donde el color de las cajas no sea muy claro, pues el programa en error por dificultades con la iluminación.

Las herramientas de Visión Artificial que provee el software de Matlab son bastante buenas.

4. Bibliografía

http://catarina.udlap.mx/u_dl_a/tales/documentos/lem/jimenez_c_e/apendiceA.pdf

http://rd.udb.edu.sv:8080/jspui/bitstream/ 123456789/270/1/034512_tesis.pdf

5. Anexos Programa del micriocontrolador.#include "C:\Documents and Settings\Jose Manuel\Escritorio\ASDF\RS232_FINAL.h"#int_RDAvoid RDA_isr(void) {unsigned int dato,adc0; //Declaramos variables a usar.

dato=getc(); //Recogemos dato recibido. switch(dato){ case '1': output_high(PIN_B1); //Prende LED1 break; case '2': output_low(PIN_B1); //Apaga LED1 break;

case '3': output_high(PIN_B2); //Prende LED2 break; case '4': output_low(PIN_B2); //Apaga LED2 break; case 'a': adc0=read_adc(); //Lemos el ADC0 printf("%d \n\r",adc0); //Envío el valor del ADC0 break; default: break; } }

void main(){ setup_adc_ports(AN0); setup_adc(ADC_CLOCK_INTERNAL); //setup_pp(PMP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); set_adc_channel(0); //Selecciono el canal 0 del ADC. set_tris_b(0b00000001); //Configuramos el puerto B como salida excepto el pin RB0

//printf("UART Conectada \n\r"); //Imprime en panatalla UART Conectada output_low(PIN_B1); output_low(PIN_B2);

while(true){ }}

Código de la GUI de Matab

function varargout = GUI(varargin) % GUI MATLAB code for GUI.fig% GUI, by itself, creates a new GUI or raises the existing% singleton*.%% H = GUI returns the handle to a new GUI or the handle to% the existing singleton*.%% GUI('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in GUI.M with the given input arguments.%% GUI('Property','Value',...) creates a new GUI or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before GUI_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to GUI_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help GUI % Last Modified by GUIDE v2.5 11-Jul-2012 14:30:03 % Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @GUI_OpeningFcn, ... 'gui_OutputFcn', @GUI_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end % End initialization code - DO NOT EDIT % --- Executes just before GUI is made visible.function GUI_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to GUI (see VARARGIN) % Choose default command line output for GUIhandles.output = hObject; % Update handles structureguidata(hObject, handles); % UIWAIT makes GUI wait for user response (see UIRESUME)% uiwait(handles.figure1); vid2 = videoinput('winvideo',2); % create video input object from the 2nd source h1 = image; % create image object axis ij % flip the image preview(vid2,h1) % display 1st webcam preview s = instrfind(); if ~isempty( s )

fclose( s ); delete( s ); clear s end SerPIC = serial('COM2'); set(SerPIC,'BaudRate',9600); set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); % --- Outputs from this function are returned to the command line.function varargout = GUI_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes during object creation, after setting all properties.function axes1_CreateFcn(hObject, eventdata, handles)% hObject handle to axes1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: place code in OpeningFcn to populate axes1 % --- Executes on button press in encender.function encender_Callback(hObject, eventdata, handles)% hObject handle to encender (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) global apagado numchicas numgrandes nummedianas SerPIC numchicas=0; nummedianas=0; numgrandes=0; apagado=0;

SerPIC = instrfind(); while(apagado~=1) fprintf(SerPIC,'%s','1');%Activar faja pause(0.02) fprintf(SerPIC,'%s','a'); pause(0.02); b =fscanf(SerPIC, '%d'); pause(0.02); if(b>75) %tic %vid=videoinput('winvideo',2,'RGB24_640x480'); %set(vid,'FramesPerTrigger',4); start(vid)%I_anterior=0; finalB=0; rect=[85 10 430 620 ];%aux=1; I_entrada=getsnapshot(vid); I_recortada = imcrop(I_entrada,rect); I_escala_gris = rgb2gray(I_recortada); [~, threshold] = edge(I_escala_gris, 'sobel'); %~=junk fudgeFactor = .55; I_gradiente = edge(I_escala_gris,'sobel', threshold * fudgeFactor); se90 = strel('line', 2, 90); se0 = strel('line', 2, 0); I_dilatada = imdilate(I_gradiente, [se90 se0]); I_no_small = bwareaopen(I_dilatada,50); I_rellenada = imfill(I_no_small, 'holes'); I_nobord = imclearborder(I_rellenada, 4); seD = strel('diamond',1); I_segmentada = imerode(I_nobord,seD); I_segmentada = bwareaopen(I_segmentada,100); [I_labeled,numObjects] = bwlabel(I_segmentada,4); stats = regionprops(I_labeled, 'all'); areas = [stats.Area]; idxofCars = find(areas >= max(areas)); statsCars = stats(idxofCars); len = length(idxofCars); if (len~=0) for idx = 1 : length(statsCars) c=statsCars(idx).BoundingBox;

finalB=(c(3)*c(4)); end end if(finalB>=50000) %disp('se encontró una caja grande') numgrandes = numgrandes+1; set(handles.grandes,'String',num2str(numgrandes)); fprintf(SerPIC,'%s','3');%Activar actuador %pause(0.02) %disp('sensor està activado') pause(1) fprintf(SerPIC,'%s','4');%Apagar actuador pause(0.02) elseif(finalB>=25000) %disp('se encontró una caja mediana') nummedianas = nummedianas+1; set(handles.medianas,'String',num2str(nummedianas)); else %disp('se encontró una caja pequeña') numchicas= numchicas+1; set(handles.chicas,'String',num2str(numchicas)); end stop(vid) delete(vid) %toc else msgbox('Abra el puerto para empezar la selección') end end % --- Executes on button press in apagar.function apagar_Callback(hObject, eventdata, handles)% hObject handle to apagar (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global apagado

apagado=1;fprintf(SerPIC,'%s','4');%Apagar actuadorpause(0.02) function grandes_Callback(hObject, eventdata, handles)% hObject handle to grandes (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of grandes as text% str2double(get(hObject,'String')) returns contents of grandes as a double % --- Executes during object creation, after setting all properties.function grandes_CreateFcn(hObject, eventdata, handles)% hObject handle to grandes (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end function medianas_Callback(hObject, eventdata, handles)% hObject handle to medianas (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of medianas as text% str2double(get(hObject,'String')) returns contents of medianas as a double

% --- Executes during object creation, after setting all properties.function medianas_CreateFcn(hObject, eventdata, handles)% hObject handle to medianas (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end function chicas_Callback(hObject, eventdata, handles)% hObject handle to chicas (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of chicas as text% str2double(get(hObject,'String')) returns contents of chicas as a double % --- Executes during object creation, after setting all properties.function chicas_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end % --- Executes when selected object is changed in uipanel1.function uipanel1_SelectionChangeFcn(hObject, eventdata, handles) global SerPIC if hObject==handles.abrir SerPIC = instrfind(); fopen(SerPIC); msgbox('puerto abierto') else

SerPIC = instrfind(); if ~isempty( SerPIC ) fclose(SerPIC); delete(SerPIC) clear SerPIC end msgbox('puerto cerrado') end