PROBLEMA DE INGENIERIA TECNICAS DIGITALES III



Documentos relacionados
podemos enfocar al funcionamiento del robot, es decir la parte de electrónica. Para que el

Placa de control MCC03

SERVOMOTORES. Los servos se utilizan frecuentemente en sistemas de radiocontrol, mecatrónicos y robótica, pero su uso no está limitado a estos.

Control de motor de pasos Para Pic12C508

AUTOMATIZACIÓN INDUSTRIAL DESCRIPCIÓN Y MANEJO DEL SERVOMOTOR DE PRÁCTICAS

Una vez descrita la constitución general de un robot, podemos empezar con la

Comparadores de tensión

Control de motores de CC

Gestión digital sencilla de controladores de fuentes de alimentación analógicas

ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ

Control Teaching de un Brazo Robot de Cinco Grados de Libertad

DESCRIPCION DEL SITEMA MASTER.

TELEOPERACIÓN DE UN ROBOT MOVIL CON MANEJO DIFERENCIAL A BAJO COSTO

CAPITULO II CARACTERISTICAS DE LOS INSTRUMENTOS DE MEDICION

Nociones básicas sobre adquisición de señales

CATEDRA de PROYECTO FINAL

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

La forma de manejar esta controladora es mediante un ordenador utilizando algún lenguaje de programación (Por ejemplo.: C, Visual Basic, Logo,...).

Motores de Corriente Continua...3 Motores Paso a Paso...7 Bibliografía...9

Anexo B. Comunicaciones entre mc y PC

Señal de Referencia: Es el valor que se desea que alcance la señal de salida. SET POINT.

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

ANTENAS: Teledistribución y televisión por cable

Laboratorio de Física Universitaria II. FISI 3014 Primer semestre del año académico Departamento de Física y Electrónica de la UPR-H

AUTOMATIZACION. Reconocer la arquitectura y características de un PLC Diferenciar los tipos de entradas y salidas

Inicialmente, sin aplicar ninguna corriente a las bobinas (que también reciben el nombre de fases) y con M en una posición cualquiera, el imán

CAPÍTULO 1 Instrumentación Virtual

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE MECANICA ELECTRICA LABORATORIO DE ELECTRONICA PENSUM COMUNICACIONES 3

Circuitos, Sensores y Actuadores

MODULO Nº6 TIRISTORES UNIDIRECCIONALES

PLACAS FERTIRIEGO ELECTRÓNICA NUEVA

COMUNICACION DE PLC S MEDIANTE EL PUERTO RS- 485 Y MONITOREADO POR PANTALLA.

UNIDADES DE ALMACENAMIENTO DE DATOS

Programando con Enchanting

En el presente capítulo se describe la programación del instrumento virtual y cómo

MODULO Nº12 TRANSISTORES MOSFET

CURSO TECNOLOGÍA TECNOLOGÍA 4º ESO TEMA 5: Lógica binaria. Tecnología 4º ESO Tema 5: Lógica binaria Página 1

HARDWARE DE SISTEMA AUTOMÁTICO DE RASTREO DE VEHÍCULOS MEDIANTE TECNOLOGÍAS GPRS Y GPS

Tema 11: Instrumentación virtual

CAPÍTULO 3 Programación en LabVIEW

Familias de microcontroladores de radio frecuencia.

by Tim Tran:

9) UPS s: EN QUE CONSISTEN DE QUE Y COMO PROTEGEN

CAPITULO 3. SENSOR DE TEMPERATURA

INSTRUMENTACIÓN AVANZADA Departamento de Ingeniería Eléctrica y Electromecánica Facultad de Ingeniería Universidad Nacional de Mar del Plata

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Como utilizar un servo motor con Arduino.

TARJETA CONVERSORA ANALOGA/DIGITAL (A/D)

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

CONEXIONADOS OPCIONALES

Osciloscopio Funciones

Tutorial de Electrónica

Guía de uso del Cloud Datacenter de acens

INSTITUTO TECNOLOGICO DE COSTA RICA INGENIRIA ELECTRONICA ELECTRONICA DE POTENCIA PROF. ING. JUAN CARLOS JIMENEZ TEMA: CIRCUITOS INVERSORES

El Vehículo Eléctrico

INTERRUPTOR SÒNICO PARA LUCES

Figura 1 Fotografía de varios modelos de multímetros

DISEÑO E IMPLEMENTACIÓN DE UNA TARJETA DE ADQUISICIÓN DE DATOS PARA EL LABORATORIO DE TELECOMUNICACIONES DE LA FIEC.

Versión 1.0. BOLETÍN (JUNIO 2009) a2móvil PC. a2 softway C. A.

CAPITULO 4. Inversores para control de velocidad de motores de

WINDOWS : TERMINAL SERVER

Temporizadores y contadores en tiempo real: El módulo Timer0 y el prescaler del PIC

INGENIERIA EN MICROCONTROLADORES. Protocolo RS-485. Introducción

Desde el punto de vista físico en un ordenador se pueden distinguir los siguientes elementos:

Medidas de la tensión de salida en variadores de velocidad con osciloscopios digitales ScopeMeter Serie 190 de Fluke

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

Práctica 4 Diseño de circuitos con puertas lógicas.

UNIVERSIDAD DE SALAMANCA

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

Introducción a los sistemas de control

Capítulo 5. Cliente-Servidor.

Capítulo 1 GESTIÓN DE LA ALIMENTACIÓN

Actividad 4: Comunicación entre PLC s vía Ethernet

Especificaciones técnicas de los prototipos:

TEMA 5. ELECTRÓNICA DIGITAL

Fig. 3.1 Brazo Mecánico Utilizado. que es capaz de girar igualmente 180º, (Fig. 3.1).

ESTUDIO DEL SISTEMA ESTÁTICO DE PROTECCIÓN DE UNA TURBINA A GAS

+++OK atis C E. CTC-072, Utilización de XBee Wi-Fi para sensores remotos

Instituto Tecnológico de Massachussets Departamento de Ingeniería Eléctrica e Informática Circuitos electrónicos Otoño 2000

Capítulo V Resultados y conclusiones

PIC MICRO ESTUDIO Timer Monoestable/Biestable ajustable hasta 99H 59M 59S Timer 2T Clave:

Copyright Exemys, Todos los Derechos Reservados. Rev. 4

e-netcamanpr INDICE: Manual de Instalación

4.2 Acción de Control.

En este capítulo se describe la forma de cómo se implementó el sistema de video

EL LOGRO DE SU FORMACIÓN DEPENDE TAMBIÉN DE USTED INSTRUCTOR: ING. JULIO CÉSAR BEDOYA PINO ELECTRÓNICA DIGITAL 2014

ESPECTRÓMETRO FCC-330

28 = =

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation.

CAPITULO 4 IMPLEMENTACIÓN Y PRUEBAS EXPERIMENTALES. En este capítulo se mostrarán los resultados de la simulación del Corrector de Factor

UNIVERSIDAD DE IBAGUÉ INGENIERÍA ELECTRÓNICA MANUAL PRACTICO OSCILOSCOPIO DIGITAL HP 54600B

Interoperabilidad de Fieldbus

Trabajo 3. PROTOCOLOS DE COMUNICACIÓN SERIAL INDUSTRIALES Edwin Gilberto Carreño Lozano, Código:

Inversores De Frecuencia

Sesión 8 Sensor de Ultrasonido

C A P Í T U L O 2 CIRCUITOS

La importancia de dimensionar correctamente los sistemas de frenado en aerogeneradores residenciales.

SISTEMAS DE NUMERACIÓN. Sistema decimal

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Transcripción:

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL SAN NICOLAS INGENIERIA EN ELECTRONICA PROBLEMA DE INGENIERIA TECNICAS DIGITALES III MAQUINA PALETIZADORA VIGILADA POR CAMARA WEB Integrantes: Marchiano Damián Perez Ramiro Zapata Gerónimo Docentes: Ing. Felipe Poblete Ing. Mariano Gonzalez AÑO 2013

INDICE OBJETIVOS DEL TRABAJO OBJETIVOS... 3 MATERIAS INTEGRADAS... 3 POSIBLES APLICACIONES... 4 PROFESORES ENTREVISTADOS... 4 BIBLIOGRAFIA... 4 DESARROLLO INTRODUCCION... 5 DIAGRAMA EN BLOQUES DEL SISTEMA... 6 TEORIA DE FUNCIONAMIENTO... 6 COMUNICACION DEL SISTEMA... 8 DIGITALIZACION DEL SISTEMA... 11 MOVIMIENTOS DEL SISTEMA... 13 CIRCUITOS ELECTRONICOS DESARROLLO PLACAS Y CIRCUITOS ELECTRONICOS... 19 SISTEMA NEUMATICO... 37 PROGRAMA DEL MICROCONTROLADOR PIC... 40 SOFTWARE DE LA PC - LABVIEW... 50 PROGRAMA CAMARA WEB - VISION BUILDER AI... 59 PRUEBAS REALIAZADAS PRUEBAS CON CAMARA WEB... 63 PRUEBAS EN LA COMUNICACION RS-232... 67 CONCLUSIONES CONCLUSION DEL PROYECTO DE INGENIERIA... 70 CONCLUSION PERSONAL DEL GRUPO DE TRABAJO... 70 ANEXOS LISTADO DE PROGRAMAS... 71 FOTOS DEL PROYECTO FOTOS DEL PROTOTIPO... 74 FOTOS MAQUINA PALETIZADORA... 74 FOTOS PANTALLA OPERATIVA... 77 2

OBJETIVOS DEL TRABAJO OBJETIVOS El objetivo de este proyecto, consiste en realizar (a escala) un sistema capaz de cumplir con todos los requisitos necesarios para paletizar las cajas de productos (de un tamaño determinado) provenientes de una cinta transportadora, correspondientes de un proceso industrial definido, de forma segura y controlada. En simples palabras, debe ser capaz de transportar una caja a través de una cinta transportadora, detenerla en el momento correcto, sujetarla con el brazo robótico y realizar los movimientos correspondientes, para finalmente colocar la caja en la posición seteada por el operador, cumpliendo con ciertas condiciones seguras. Todos estos movimientos deben ser automáticos, y controlados por la PC. Pero nuestro proyecto no termina ahí; al mismo tiempo, el objetivo principal y novedad de la maquina paletizadora, será desarrollar un sistema de captura y tratamiento de imágenes (TDI), el cual nos permita controlar la zona de trabajo del equipo. Se obtendrán imágenes continuas de la zona donde se depositan las cajas para su posterior despacho. Este espacio se corresponderá a nuestra área "critica", por presentar posibilidades de superposición de tareas, con mayor probabilidad a un accidente. Se buscara una vigilancia continua, con el fin de evitar incidentes y/o accidentes (en caso de que alguna persona se encuentre cruzando por donde no debe) o si el operador seteo el "DESPACHO" de la caja, estando la zona ocupada (por otra caja o una Yale). Con esta información, generaremos alarmas, avisos de invasión de zona, y condicionantes para posterior toma de decisiones (por ejemplo detener el brazo en caso de invasión de zona de despacho al momento de estar ejecutando dicho movimiento, para un posterior reconocimiento de esta "parada del sistema", y finalmente llevar al brazo y la carga, a una posición segura). La PC se encargará del control de los movimientos y el TDI; utilizando el programa LabView, quien también cumplirá la función de interface entre el sistema y el usuario. Finalmente, un microcontrolador PIC será quien cumpla la función de drive y concentrador de variables, junto con el puente H y un sistema de medición. MATERIAS INTEGRADAS Electrónica Aplicada I [Transistores bipolares - Puente H] Técnicas Digitales II [Conversión A/D - Microprocesadores] Maquinas e Instalaciones Eléctricas [Motores] Sistemas de Control [Control de procesos] Técnicas Digitales III [Procesamiento y transmisión digital de señales Adquisición y tratamiento de imágenes] Software en Tiempo Real [Programación orientada a objetos - Labview] 3

POSIBLES APLICACIONES En una producción en serie, se requiere de la ayuda de maquinaria, para aumentar el tiempo de servicio y así poder obtener mayor rentabilidad en la producción. La etapa donde se paletiza el producto, no escapa a este punto. Por tal motivo, es necesario el aporte de una maquina destinada a cumplir con el acomodamiento de las cajas con productos, en los correspondientes palets. Esta tarea es realizada por una maquina paletizadora. Las mismas están compuestas por un brazo robótico, sumado al sistema de pinza o ventosa, adaptado para el paletamiento del producto que corresponda. Dejando de lado el desarrollo del sistema de control del movimiento del brazo, el punto principal del proyecto, y novedad aplicada a este proceso, será la implementación de un sistema de seguridad, utilizando una cámara web. La misma tomara imagen continua de la zona de despacho, monitoreando cualquier invasión de objetos imprevistos, para trasmitir dicha información al control, el cual tomara la decisión más apropiada (acción segura, programada en la lógica). Con este dispositivo y el correcto sistema de tratamiento de imagen, se buscara evitar superposición de tareas sobre la zona de trabajo, donde intervendrían otros equipos u operadores (como una Yale o autoelevador). Como podemos apreciar, este proyecto está destinado a la etapa de acopiamiento y despacho de productos en cajas. Siendo un sistema seguro, por su novedoso sistema de monitoreo continuo con cámara web, y totalmente automático, permitirá optimizar el final de todo proceso productivo en serie; incrementando la confiabilidad, producción y disponibilidad, lo que repercutirá en la disminución del estrés del personal de operaciones. PROFESORES ENTREVISTADOS Profesor Hugo Franzini: Funcionamiento y configuración de servomotores. Profesor Alejandro Lucchesi: Control PID para motoreductor cc. Grupo de investigación GADIB: Programación en Labview. BIBLIOGRAFIA Tecnicas Digitales III - Ing. Felipe F. Poblete / Ing. Mariano M. Gonzalez Curso de programacion en C. - Miquel A.Garcies "Pololu Maestro Servo Controller" Manual de usuario para configurar y controlar servomotores Datasheet: PIC16F877A Datasheet: MAX232 Datasheet: L6201PS NATIONAL INSTRUMENTS - www.ni.com Foro de opiniones de National Instruments - www.forums.ni.com Libro: Ingeniería de Control Moderna (Editarial PEARSON) - Katsuhiko Ogata 4

DESARROLLO INTRODUCCION El sistema a desarrollar consiste en una maquina paletizadora de cajas. El mismo estará compuesto por una cinta transportadora, la cual será comandada por un sistema de arranque manual y una parada dispuesta por una barrera infrarroja. Además, la maquina paletizadora, contará con un brazo robótico, el cual tendrá varios movimientos, comandados por diferentes motores (servomotores y motoreductor). Finalmente, se instalará una cámara web, con la cual podremos hacer un seguimiento de la zona de trabajo o descarga de cajas. El control de todo el sistema y tratamiento de imagen, estarán a cargo del una PC, donde correrá el programa en Labview. Esta aplicación es una útil herramienta que servirá como scada del sistema. Además, utilizaremos diversas funciones para cumplir con los diagnósticos necesario y correspondientes registros del sistema. Por otra parte, un microcontrolador PIC, cumplirá la función de conversión A/D y D/A, para efectuar la interface entre las partes electro-mecánicas y el programa. A continuación, podemos apreciar el modelado del brazo robótico (imagen en 3D), para tener una idea del componente principal que conforma la maquina paletizadora: 5

DIAGRAMA EN BLOQUES DEL SISTEMA El siguiente esquema, define los diferentes bloques de nuestro sistema, las relaciones entre cada uno de ellos y las etapas de comunicación de toda nuestra maquina paletizadora: Gracias al diagrama en bloques, podemos apreciar básicamente, cómo interactúan las distintas partes del sistema. Se debe tener en cuenta la acción de control que se lleva a cabo internamente en la Computadora (PC), mediante el programa desarrollado en Labview. Se recuerda en este punto que el objetivo principal de este informe es el desarrollo de la captura y tratamiento de imagen (dispositivo remarcado en el diagrama en bloques, con color oscuro), correspondiente a la zona de trabajo del brazo robótico; como también, el procesamiento y transmisión de la información de todo el sistema. TEORIA DE FUNCIONAMIENTO Siendo el objetivo primordial del proyecto, controlar el movimiento del brazo robótico en función de la información obtenida a través de la cámara web, acotaremos ciertos aspectos del sistema, los cuales son irrelevantes. Estos pasan a ser de importancia secundaria, para centrar nuestro enfoque, en el desarrollo de adquisición y tratamiento de imagen, para la posterior toma de decisiones sobre el sistema de paletización. Hecha la aclaración, enumerados las condiciones que acotan nuestro sistema: Las cajas serán de un único tamaño (para nuestro caso, se considera paletizar cajas de madera oscura, de las siguientes dimensiones: 5cm x 3,5cm x 1cm). El brazo podrá ubicar las cajas dentro de una zona de trabajo limitada, la cual queda definida según Figura 1, entre 90 y 270. La zona de trabajo será vigilara continuamente por una cámara web, para evitar superposición no deseada de cajas o algún posible accidente (colisión contra Yale u operadores que estén circulando por esta área delimitada). Se programarán alarmas y parada total del sistema. En caso de parada total del sistema a causa del control de vigilancia por cámara web, el operador deberá forzar un permisivo colocado en pantalla, para poder resetear este "disparo", y así recuperar control del proceso. Sera quien opere la maquina paletizadora, el responsable de setear la posición a dirigirse, luego de un "disparo". 6

Se considera 0 como el punto de inicio o reposo del sistema (sobre la cinta transportadora); ver Figura 1. El seteo de la posición donde el operador desee depositar la caja, se ingresara de a una por ves, quedando bloqueado dicho ingreso de datos, mientras el brazo se encuentre en movimiento. En caso de querer detener el movimiento y cambiar dicho set-point, se deberá pulsar "PARAR MOTOR" para frenar movimiento, habilitándose el campo para ingresar nueva posición. El seteo del Puerto VISA, le corresponde al personal de mantenimiento (para nuestro caso, utilizaremos el COM4, correspondiente al adaptador Serie-USB, previamente configurado); siendo imposible modificar para el operador. Se buscara programar una aplicación 100% automática. Tendremos la opción semiautomática, donde contaremos con comandos individuales (ya incluidos en el programa original), los cuales corresponden a: pulsador TOMAR CAJA, seteo de posición final y pulsador DEJAR CAJA. Para avanzar sobre la confección del programa en Labview, el cual controlara cada acción que realice la maquina paletizadora, generando las ordenes para los movimientos de los motores y demás operaciones; primero debemos definir el funcionamiento del sistema. Los movimientos o acciones correctas del proceso, serán las siguientes: Iniciar en posición de reposo (0 ). Dadas las condiciones y permisivos correspondientes, iniciar proceso de paletizacion. Encender cinta transportadora y llevar caja hasta fin de la misma. Tomar caja con brazo robótico, utilizando la ventosa la cual funciona con vacio de aire. Mover brazo robótico hasta posición seteada por operador (si corresponde a sector de descarga, tener en cuenta vigilancia por cámara web). Dejar caja en posición seteada. Retornar brazo robótico a posición de reposo o inicial (para continuar con el proceso). ACLARACION: El sistema de vigilancia monitorea continuamente la zona de despacho, informando sobre cualquier invasión de dicha área, a través de los indicadores en pantalla. De acuerdo a la configuración programada, se plantean tres posibilidades: 7

Se invade la zona mientras el sistema está en reposo; por ende no se activa ninguna alarma (solo se prenden indicadores al momento de la "invasión"). Se invade la zona mientras se esta paletizando cajas hacia un área diferente a la de despacho; por ende el sistema sigue funcionando en automático, pero se activa una alarma la cual indica: "ALARMA ZONA INVADIDA DURANTE EL MOVIMIENTO". Se invade zona mientras se esta paletizando cajas hacia el área de despacho; por ende el sistema se detiene por completo, indicando: "DISPARO DEL SISTEMA - PROBABILIDAD DE ACCIDENTE". Una vez minimizado este inconveniente, debemos reconocer el permisivo "RESET PARADA" para recuperar control y setear nueva posición a donde quiero ir. Podrá ser nuevamente la de despacho, volver a reposo, o dejar la caja en una nueva ubicación. Conociendo el funcionamiento del sistema, el cual tendrá la opción de ser automático o semiautomático, enunciaremos en una breve lista de puntos, el instructivo que deberá cumplir el operador de la maquina paletizadora: Asegurarse que el brazo se encuentre en la posición inicial o de reposo (0 ). De lo contrario, llevarlo a la misma utilizando comando de Set-Point de posición (SP). Colocar la caja en el inicio de la cinta transportadora. Corroborar que todos los permisivos se encuentren habilitados. Pulsar el botón "TOMAR CAJA" ubicado en el scada de la PC. Una vez sujetada la caja por la ventosa, cargar en pantalla (comando SP), la posición donde se desea dejar la caja. Una vez en posición (brazo quieto), pulsar el botón "DEJAR CAJA", ubicado en el scada de la PC. Cada uno de los movimientos, sea el del brazo yendo a la posición inicial o a la seteada por el operador, como las acciones de tomar o dejar la caja, se realizando de manera automática. El sistema cumplirá con los pasos mencionados dentro de un funcionamiento normal, o sea, mientras no se presenten problemas de operación; o como ya mencionamos, mientras no actúe el sistema de vigilancia por cámara web. COMUNICACION DEL SISTEMA En este proceso, el encargado de controlar todo el sistema, es una PC. La velocidad de procesamiento de información, dependerá de la rapidez con la que se puedan transmitir los datos entre el microcontrolador y la PC. Para este análisis, debemos tener en cuenta varios factores intervinientes en el proceso de transmisión de la información. Conociendo la velocidad de transmisión del protocolo RS232 utilizado en nuestro sistema, será necesario acotar los tiempos y demás factores, para una correcta sincronización. Definimos la velocidad de transmisión en 9600 baudios, o sea, 9600 bits por segundos. Además, se configura el protocolo, para comunicar paquetes de 8 bits. 8

En nuestro caso, usaremos 4 "letras", o sea, 4 paquetes de 8 bits cada uno, para enviar la información desde el microcontrolador hacia la PC; obteniendo una velocidad de transmisión de la información, basada en los siguientes cálculos: 4 [bytes] = 4. 8 [bits] = 32 [bits] 9600 bits. 1 segundo 32 bits..... X = 32 / 9600 El tiempo que demora la comunicación en transmitir el paquete de datos es: X = 3,33 milisegundos Podemos observar que nos encontramos por debajo del límite de velocidad de transmisión de paquetes de datos que requerimos transmitir; evitando así, la perdida de información. Por otro lado, tenemos configurado al conversor ADC del microcontrolador, en 10 bits, por ende, tendremos una resolución de 2^10, lo cual equivale a 1024 cuentas" o divisiones del rango. De esta forma, obtenemos una muy buena apreciación en la lectura de los grados: Siendo el CERO = 0 y el SPAN = 270 270 / 1024 = 0,26 Vemos una lectura mínima de casi 1/4 de grado, lo que nos brinda una resolución más que aceptable para el control de posición del brazo robótico. Para definir mejor las correspondencias de estas igualdades, efectuamos una tabla con valores mínimos, medios y máximos de las variables intervinientes en la medición de posición del brazo: VARIABLE UNIDAD VALOR MINIMO VALOR MEDIO VALOR MAXIMO Posición porcentual Porcentaje 0 50 100 [%] Posición Real Grados [ ] 0 135 270 Tensión Voltaje [V] 0 2,5 5 Potenciómetro Entrada Puerto Serie Cuentas 0 512 1024 Para la transmisión de la información desde la PC al microcontrolador (uc), planteamos nuevamente un paquete de 8 bytes: Cada bytes (letra) contiene parte de la información que sale del controlador (PC), la cual será interpretada por el uc. Los bits B7, B6 y B5 contienen la variable de velocidad del motor, la cual se encuentra en el rango de 0-500 "cuentas". El bit B4, indicara el sentido de giro, siendo 0 para girar aumentando la posición en grados, y 1 para disminuir, volviendo a 0º. El bit B3 nos dirá cuando queramos tomar la caja, mientras que el bit B2, le dirá al microcontrolador cuando queramos dejar la caja. El bits B1 le dará aviso al PIC, cuando se produzca el disparo de emergencia de todo el sistema (siendo una de las principales causas, el monitoreo con la cámara web); forzando la detención de todos los movimientos. Esto frenara todo el sistema, dejándolo en reposo; siendo 9

necesario un reconocimiento de la falla del operador, y la posterior operación manual, para normalizar la falla. Esta tarea que suena tediosa para el personal que comande la maquina paletizadora, buscara evitar posibles incidentes o accidentes. Finalmente el bits B0, queda de reserva, para futuras necesidades del proceso. El PIC leerá esta referencia, comandando la entrada del circuito PWM (variable manipulada) que regulará la velocidad y sentido de giro del motoreductor. Para definir mejor las correspondencias de estas igualdades, efectuamos una tabla con valores mínimos, medios y máximos de las variables intervinientes en control de posición del brazo: VARIABLE UNIDAD VALOR MINIMO VALOR MEDIO VALOR MAXIMO Referencia Porcentual Porcentaje [%] 0 50 100 Salida del PID Cuentas 0 250 500 Salida del PIC Salida del PWM Velocidad del motor Ancho de pulso Tensión [V] RPM 0 512 1023 0 6 12 0 3 6 Para la transmisión de información entre el PIC y la PC, se armo un cable utilizando un conector DB9 y uno del tipo USB. A continuación, un esquema y tabla del conexionado entre la placa del circuito del microcontrolador, y el adaptador USB/Serie: La comunicación RS-232 se efectúa básicamente con 2 pines del conector, uno para la lectura y el otro para la escritura. Los datos viajan de manera digital, como 1 y 0, respetando la siguiente tabla: 10

Se utilizo un adaptador estándar, para efectuar la conversión de protocolo, de USB a RS-232 (Serie). Con respecto a la configuración de la electrónica, para comunicarnos con la PC vía RS-232, es de la siguiente manera: El integrado MAX232, cumple la función de convertir las señales del puerto serie RS-232 a señales compatibles con niveles TTL de nuestro circuito lógico. Se utiliza como interfaz de transmisión y recepción para las señales RX, TX, CTS y RTS. El mismo, posee salidas para manejar niveles de voltaje del RS-232 (aprox. ± 7.5 V) que las produce a partir de un voltaje de alimentación de + 5 V utilizando multiplicadores de voltaje internamente en el MAX232 con la adición de condensadores externos. Esto es de mucha utilidad para la implementación de puertos serie RS-232 en dispositivos que tengan una alimentación simple de + 5 V. DIGITALIZACION DEL SISTEMA En este punto, ampliaremos la información desarrollada en el punto anterior, llamado "COMUNICACION DEL SISTEMA"; con la intención de mencionar algunas de las problemáticas, que surgieron durante el desarrollo de la maquina paletizadora con vigilancia por cámara web. Como en todo proyecto, contamos con varias etapas de avance, que van encaminando el desarrollo del mismo. Al momento de plantear la conversión de las señales analógicas, en señales digitales, para su posterior tratamiento informático, surge la necesidad de acotar ciertas cuestiones. Para entender de que estamos hablando, desarrollaremos 4 inconvenientes o cuestiones principales: la precisión en la medición, la sincronización de la comunicación, la frecuencia de muestreo y la rapidez del controlador. Precisión en la medición: la variable medida ingresa al conversor Analógico-Digital que tiene incorporado el uc. Es un conversor configurable en 8 o 10 bits, dándonos una precisión de 256 o 1024 valores en el rango de medición. En nuestro proyecto, pensamos utilizar 8 bits en una medición de 270º, el cual nos daba una resolución de 1,05º/cuenta del ADC; lo cual a simple vista indica el gran error que se genera en la medición (debido a la mala precisión). Por lo tanto, optamos por usar 10bits, lo cual nos implica una resolución de 0,26º/cuenta del ADC; logrando así una buena resolución (con variaciones cercanas a 1/4 de grado) y obteniendo un error mínimo, considerablemente menor a 1º. Sincronización de la comunicación: Para establecer de manera correcta un lazo de comunicación, debemos sincronizar el envío y la recepción de datos, en ambas partes intervinientes. Un ejemplo podría ser una conversación entre dos personas, donde ambas hablaran al mismo tiempo; obviamente se perdería información. Para el sincronismo se opto por definir con mayor 11

prioridad a una de las partes, en este caso, a la PC. Nos referimos a definir un orden en la comunicación. Por ende, por más que el microcontrolador estuviese listo para escribir en el puerto serie (o en su defecto empiece a escribir antes de recibir el comando de inicio por parte de la PC), no sucederá nada. El PIC deberá esperar a que la PC, le envíe un paquete de información, para producirse la conmutación de una bandera de estado en el uc, para que este luego, devuelva la información que corresponda (lectura instantánea del potenciómetro). El siguiente grafico temporal nos muestra el orden en la comunicación: En los primeros intentos de establecer la comunicación entre PIC y PC, al no tener establecida una regla para sincronizar, por más que se regulaban los tiempos para no perder información, la comunicación se perdía. Este inconveniente se soluciono, al lograr la sincronización entre ambos equipos. Frecuencia de muestreo: Si la frecuencia de muestreo no es la correcta, por más que logremos obtener una medición precisa; se establezca que ambos dispositivos se encuentre bajo una norma de sincronismo; y se defina la velocidad de transmisión de datos correctamente; el sistema fallará. El problema se inducirá a causa de la mala digitalización de la señal. En nuestro programa (dentro del microcontrolador PIC), la medición de la variable se realiza de una manera casi permanente. Esto se logro haciendo que el uc mida la variable instantánea (señal del potenciómetro) cada 5mSeg (milisegundos); lo que genera una frecuencia de muestreo de 200Hz. Por ende: 12

5mS ----- 1 muestra 10mS ----- 2 muestras 1000mS ------ 200 muestras Con esto se logra que el uc lea más rápido la variable de lo que se tarda en enviarla (salir del PIC, viajar por el protocolo RS-232 y llegar a ser leída por la PC). De esta manera, se cumple el objetivo de enviar los datos más actuales o "instantáneos" a la PC. Rapidez del controlador: para obtener una respuesta aceptable del controlador, debemos efectuar los cálculos dentro de un tiempo mínimo de ejecución. Esto debe establecerse, para obtener una respuesta, acorde a las variaciones del proceso. Haciendo el análisis de tiempos, se establece una velocidad en la iteración del cálculo de la salida del controlador, de 5mSeg. Este periodo de programa (aplicación Labview en la PC) de 5 milisegundos, me permite obtener una respuesta más rápida que la velocidad de comunicación establecida; por ende, se cumple con uno de los requisitos para el buen funcionamiento del controlador. MOVIMIENTOS DEL SISTEMA En esta sección dejaremos de lado la parte de señales de control, para pasar a desarrollar los movimientos del brazo y la cinta transportadora. Para dichas acciones, se utilizan 2 tipos de motores, los cuales se corresponden a los siguientes: servomotores de corriente continua con sistema de control integrado motorreductor de corriente continua e imán permanente El motor de corriente continua, es una máquina que convierte la energía eléctrica continua en mecánica, provocando un movimiento rotatorio. En la actualidad existen nuevas aplicaciones con motores eléctricos que no producen movimiento rotatorio, sino que con algunas modificaciones, ejercen tracción sobre un riel. Estos motores se conocen como motores lineales. Estos dispositivos se corresponden a los más versátiles dentro de las industrias. Su fácil control de posición, par y velocidad la han convertido en una de las mejores opciones en aplicaciones de control y automatización de procesos. La principal característica del motor de corriente continua es la posibilidad de regular la velocidad desde vacío a plena carga. En la actualidad, los rotores que conforman la parte móvil de los motores de CC, se han hecho con inercias muy pequeñas, de modo que se disponen, comercialmente, con una elevada relación de par motriz a inercia; teniendo algunos constantes de tiempo extremadamente pequeñas. Gran parte de los motores de CC utilizados en el control de procesos son de excitación independiente. Esto nos brinda la posibilidad de controlarlos aplicando la señal de mando al devanado de excitación (motor gobernado por el inductor) o bien al devanado inducido del motor (motor gobernado por el inducido). En nuestro caso se trata de un motorreductor de imán permanente gobernado por el inducido, el cual se detallara más adelante. Motorreductores: Son dispositivos generalmente empleados para realizar trabajos donde se requiera de gran torque de tracción; por ejemplo la tracción de transportes y en movimientos en lo cual se requiera de gran torque al mover pesos; o bien requerimientos de baja velocidad en los cuales un motor con velocidad controlada no pueda lograrlo. Los mismos están compuestos por dos partes: El motor y la Caja Reductora. Hay una gran diversidad de moto-reductores, con motores DC o AC; o bien con distintas variaciones del diseño de la caja reductora, como por ejemplo: Cicloidales, sin fin y corona, 13

Planetaria - Epicicloidal, etc. En nuestro caso usamos motorreductores de 12Vdc con caja reductora Planetaria - Epicicloidal de 3 y 5 etapas, como se observa en la siguiente imagen: Reductor Planetaria - Epicicloidal En nuestro sistema completo, utilizamos dos de estos motorreductores, empleados para el movimiento de la base y la tracción de la cinta transportadora de cajas. Así mismo, empleamos dos modelos distintos para cada etapa mencionada. Esto se debe, básicamente, a la disposición del material y reducción de costos del proyecto. Para el caso, aplican de manera aceptable: Movimiento de Base: Motorreductor Ignis modelo MR6-4.3. Tracción de cinta transportadora: Moto-reductor Ignis MR4-15. Movimiento de Base: Este movimiento, es el más importante para el proyecto, y es el controlado por el PID programado en la PC. El moto-reductor, a diferencia de los servomotores, es un dispositivo que requiere de un control. Por diversos errores aleatorios, presenten en el proceso, como la inercia del movimiento giratorio, hacen que el brazo no se detenga exactamente en la posición deseada, lo cual genera que el dispositivo no funcione correctamente. Para solucionarlo se le acopla un potenciómetro multivueltas, solidario al eje de motorreductor (mediante un par de engranajes idénticos), de manera tal de no perder el paso y mantener la relación 1 a 1 (una vuelta del reductor será igual a una del eje del potenciómetro). A continuación se detallan las características del MOTORREDUCTOR IGNIS, empleado en el movimiento giratorio del brazo robótico: Como se puede ver, en nuestro caso, el modelo del dispositivo es MR6-4.3; esto nos indica que corresponde a un reductor de 4.3 RPM a 12VCC, con un eje de salida diámetro 6mm. A continuación, podremos observar la tabla de características del moto-reductor utilizado para el movimiento principal del brazo robótico: 14

TABLA CARACTERISTICA DE LAS CAJAS REDUCTORAS DISPONIBLES SEGUN VERSION - EJEMPLO RESALTADO De la tabla anterior se puede ver como nuestro motorreductor dispone de una caja reductora de 5 etapas con una relación de 1413 vueltas del motor en 1 del eje de salida y una cupla máxima de 20 kgf/cm. Los motores de CC de imán permanente tienen, en teoría, un comportamiento lineal ideal, es decir que la velocidad desarrollada será proporcional al voltaje aplicado lo cual no es completamente cierto en todo el rango de voltajes. Esto se debe a la zona donde el dispositivo no se mueve frente a una tensión de alimentación de baja amplitud. Esto es causado por la inercia misma del moto-reductor, la cual se tendrá en cuenta al momento de configurar el controlador PID correspondiente al movimiento giratorio del brazo. Una de las condiciones críticas para obtener un buen funcionamiento al utilizar un motorreductor en el control de un movimiento, consiste en obtener una medición libre de perturbaciones y lineal, de la posición real en cada momento del brazo robótico. Para nuestro caso, luego de algunas pruebas fallidas con otros elementos de medición, decidimos utilizar un potenciómetro multivueltas (10 vueltas) de 2KΩ. A esta elección, se le sumo un circuito divisor de tensión, conformado por un preset y dos capacitores (para filtrado de ruido), utilizado para calibrar la unidad de medición. Con la implementación de este circuito, será posible obtener en forma precisa, una variación de 0 a 5 Vdc, dentro de un radio de giro de 270. Dicho dispositivo, tendrá un alcance máximo de 7,5% del rango del mismo, o sea 2000Ω. Por ende, cuando el brazo gire 270, el potenciómetro medirá 150Ω (corresponde al 7,5% de 2000Ω). Para obtener esta respuesta en el funcionamiento, fue necesario setear el preset en 570Ω. Gracias a la etapa de medición y a su conexionado, veremos reflejada a la variación de la posición angular del brazo robótico, en la tensión del terminal variable del potenciómetro, de manera proporcional. Para mantener esta relación lineal (% giro igual % tensión), se debe realizar un acople, el cual debe ser sólido y confiable, para no ocasionar errores de medición o fallas en el sistema de control. Dicho acople se realiza mediante 2 engranajes, uno sólido al eje del motorreductor de CC, mientras que el otro, se monta en el eje del potenciómetro multivueltas. Podemos ver el montaje de elemento de medición, en la siguiente imagen: 15

Al utilizar un par de engranajes totalmente iguales (misma cantidad de dientes e igual tamaño), la relación es 1:1, lo cual mantiene una linealidad, evitando conversiones complejas en la programación; respetando la siguiente tabla: TENSION GRADOS RADIANES = = 0Vdc ~ 5Vdc 0 ~ 270 0 ~ 3/2π Movimiento de tracción de la cinta transportadora: Este movimiento, es realizado por un Motorreductor IGNIS MR4-15; que según los datos brindados por el código del modelo, se trata de un dispositivo de 15RPM a 12VCC con eje de salida de 4mm. TABLA CARACTERISTICA DE LAS CAJAS REDUCTORAS DISPONIBLES SEGUN VERSION - EJEMPLO RESALTADO De la tabla anterior se puede ver como nuestro motorreductor dispone de una caja reductora de 3 etapas con una relación de 280 vueltas del motor en 1 del eje de salida y una cupla máxima de 7.79 kgf/cm. 16

Servomotores: A continuación, se detallaran las características de estos dispositivos, para interiorizarnos luego, en las aplicaciones de cada uno. El servomotor es un dispositivo de movimiento el cual tiene 3 partes fundamentales, como se pueden apreciar en el siguiente esquemático: DESARME DE UN SERVOMOTOR La primera parte se corresponde al motor y tren de engranajes; la segunda es la placa controladora; y la tercera el elemento de medición. El motor suele ser de corriente continua de imán permanente, el cual esta acoplado a un tren de engranajes que varía su relación; haciendo más lento la velocidad de salida del servo; pero a su vez presenta una ganancia en torque. Debido a que un servo suele girar entre 0º y 180º que este sea más lento (en el orden de 0.17seg/60º) no sería una desventaja, y que posea gran torque sería una gran virtud. La placa controladora es la encargada de medir la posición del eje de salida del servo, para ello se acopla un elemento de medición (el cual suele ser un potenciómetro) al tren de engranajes mencionado anteriormente; de esta manera a medida que el eje gira, el pote lo sigue solidario, enviando la tensión medida a la placa controladora. Esta placa, es la encargada de recibir un pulso, mediante el cual obtiene la posición a la que debe posicionar el eje. Una vez recibida tal señal, genera el error con respecto a la señal medida; para luego hacer girar al motor para el lado correspondiente, hasta llegar al Set Point obtenido a través del pulso. Una ventaja que posee el servo es que se puede trabajar en dos formas distintas. En este proyecto empleamos ambas: con refresco de pulsos y sin refresco de pulsos. La diferencia entre ellos se observa cuando aparece una fuerza que tiende a variar la posición del servo, Cuando no se refresca el pulso, la placa de control ve la variación en el eje de salida, pero al no tener la orden de ir a alguna posición esta no actúa; y de esta manera no genera el esfuerzo del servo de mantener la posición y emplear su torque máximo. En cambio, al refrescar el pulso, la placa controladora se dé cuenta de que hay algo que está modificando la posición del eje de salida y actúa haciendo fuerza en sentido opuesto para mantener la posición indicada mediante el pulso. En los movimientos de giro de muñeca, dedos, y movimiento de muñeca no vamos a refrescar los pulsos ya que la misma caja reductora se encarga de vencer a la gravedad. En cambio, en los movimientos de hombro y codo si debemos refrescar los pulsos ya que las cajas reductoras son vencidas por la gravedad. 17

Por ende, los servomotores (servos) empleados en este proyecto, son los encargados de realizar los movimientos del brazo robótico (Maquina paletizadora). Este Brazo cuenta con seis grados de libertad, es decir, 6 movimientos independientes entre sí: Giro de la Base. Movimiento del Hombro. Movimiento del Codo. Movimiento de Muñeca. Giro de muñeca. Movimiento Dedos. Para cada uno de estos desplazamientos, se emplea los siguientes dispositivos, respectivamente: Motorreductor Ignis MR-6 4, 3. Servomotor Hitec HS-805MG. Servomotor Hitec hs-5755mg. Servomotor E-Max ES3001. Servomotor E-Max ES3001. Servomotor Hitec HS205MG. A continuación se detallan las graficas de funcionamiento de los servomotores con sus pulsos, tensiones de alimentación y torques correspondientes: TABLA CARACTERISTICA DE LOS SERVOMOTORES UTILIZADOS EN LA MAQUINA PALETIZADORA 18

Relación Pulso Posición de los servos Características Tensión-Torque de los servos CIRCUITOS ELECTRONICOS DESARROLLO PLACAS Y CIRCUITOS ELECTRONICOS Para el comando de los motores, la electroválvula, y el sistema de medición de posición angular del brazo robótico, se opto por utilizar un microcontrolador PIC 16F877A; el cual reunía los requisitos que este proyecto demandaba. Este dispositivo electrónico será el encargado de dar las ordenes de movimientos de todos los sistemas periféricos de la maquina paletizadora. A continuación desarrollaremos el hardware usado como drive e interface entre el proceso y el sistema operativo. 19

Introducción del diseño electrónico: En esta oportunidad, para desarrollar las funcionalidades del brazo, dividiremos el sistema completo en cuatro bloques fundamentales (a diferencia del diagrama funcional en bloques utilizado en el punto "DIAGRAMA EN BLOQUES DEL SISTEMA"), siendo "Brazo Robótico" y "Transporte de cajas", uno solo: La PC será la encargada de realizar el control del movimiento angular (el cual requiere precisión) resuelto con el motorreductor de CC, y los movimientos combinados (y pre-seteados) de los servomotores; enviándole esta información, a la "Placa de control con uc" (que contiene el PIC). Para efectuar esta transmisión, utilizaremos el protocolo de comunicación RS232. La "Placa de control con uc", será responsable de adquirir los datos de la PC, realizar la conversión adecuada, y enviar las señales de posición (moduladas en ancho de pulso o PWM) a los servomotores y al circuito de puente H que comanda el motorreductor. A su vez, deberá enviar constantemente la posición angular del brazo robótico (vía RS232 a la PC), para controlar este movimiento utilizando el programa Labview. Por otra parte, la fuente de alimentación será la encargada de proveer la energía necesaria a todas las plaquetas electrónicas. La misma, generá alimentaciones de 5Vcc, 6Vcc, 8Vcc,12Vcc y 24Vcc, con hasta 2 amperes máximo por tensión entregada; presentando muy buena estabilidad. Es importante minimizar los ruidos, aislar adecuadamente cada etapa de los circuitos, y tener igual referencia de masa en todas las placas; ya que las mismas se encuentran relacionadas, e interactúan entre sí. Como verán, se hiso hincapié en esta etapa, punto que no deja de ser importante; ya que nos permitió ahorrar tiempo al momento de analizar fallas, sabiendo que nuestra "Fuente de Alimentación" era confiable. 20

Placa de control con uc: Esta placa comanda los movimientos de la maquina paletizadora. A continuación podremos apreciar, el circuito de la placa de control: Para un mejor desarrollo, dividiremos esta placa en varios bloques funcionales: Alimentación. Control. Comunicación Control de motor base Control de Transporte. Manipulación de señales Bloque de Alimentación: Este bloque es el encargado de adecuar la alimentación eléctrica que entrega la placa y va hacia los sensores y demás circuitos integrados. Las mismas están conformadas por los dos puertos USB (alimentación 1 y 2), los cuales son empleados como conectores de acople rápido para la sencilla conexión con la fuente de alimentación; lo que nos permite distribuir de forma más sencilla las tensiones en las plaquetas. Las carcasas se corresponden al GND. 21

En Alimentación 1 tenemos: Pin 4 24Vcc Pin 3 12Vcc Pin 2 8Vcc Pin 1 5Vcc En el puerto denominado Alimentación 2 tenemos: Pin 4 6Vcc Pin 3 12Vcc Pin 2 8Vcc Pin 1 5Vcc Del puerto Alimentación 1 se emplean el pin 4 de 24Vcc, para alimentar un regulador de voltaje LM7805, empleado para alimentar eléctricamente al corazón del bloque de control, es decir, al uc. Los capacitores colocados en el regulador, cumplen la función de filtrar los ruidos de la red eléctrica. A su vez, se emplea un diodo led para la indicación visual de que el uc está encendido. Los pines 1,2 y 3 se emplean para alimentar eléctricamente los sensores y servomotores que forman parte del brazo. Por otra parte, se emplea de Alimentación 2 el pin 1 y 3; el pin 1 provee 5Vcc para los sensores de la barrera infrarroja del transporte, la señal de enable para el puente H y la alimentación para el MAX232 y el MC74HC14N (los cuales detallaremos más adelante). Además, el pin 3, provee los 12Vcc para la alimentación del Relé TTE (correspondiente a la cinta transportadora) y la alimentación para el motor del mismo. Bloque de control: El bloque de control consta de un micro controlador (uc) PIC 18F877A el cual es el corazón del bloque y placa de control. El uc será el encargado de ejecutar las instrucciones provenientes del control ubicado en la PC, mediante protocolo serie. Las principales características del mismo son: Arquitectura de 10bytes. Memoria flash de 4kB. RAM 368 byte. EEPROM 256 byte. Frecuencia Max. de operación: 20MHz. Conversor A/D de 8 canales. Comparadores: 2. Módulos CCP: 2. Timers: 2 de 8 bits, 1 de 16bits. Comunicación: RS232, I2C. 22

El pin-out del mismo es: Para funcionar, en el pin 1 (MCLR/VPP), el uc precisa un circuito de reset, el cual al es negado, entonces debe tener 5Vcc (estado alto) para no recetarse, y al ver en el mismo un 0Vcc (estado bajo) se resetea, según: El pin 2 (AN0), es configurado como entrada analógica; a él llegara una tensión de 0 a 5Vcc. El uc lo empleara como un conversor A/D de 10 bytes, entonces entre 0 y 5Vcc habrá 1024 pasos. Cabe aclarar que en el mismo pin se encuentra un capacitor, el cual cumple la función de filtrar los ruidos, de manera tal de que este no afecte la medición. Una vez obtenido el dato, se podrá determinar la posición en la cual se encuentra la base mediante la siguiente fórmula: Posición = (Valor ADC x 270) / 1024 En el Pin 4 (AN2), el uc recibirá la señal proveniente del diodo infrarrojo receptor del transporte de pallets. Cuando este sensor se ve con el transmisor, envía una señal de 5Vcc al MC74HC14N, este la rectificara e invertirá, entregando 0Vcc. Por lo que el uc entenderá que al tener un estado lógico bajo en ese pin las cajas no han cortado el haz de luz, por lo que el transporte encendería hasta que las cajas lo corten; en dicho caso, el MC74HC14N tendrá 0Vcc en su entrada, rectificando e invirtiendo a 5Vcc que es lo que el uc comprenderá como caja presente. Se opto por utilizar un sistema "bobo" para el control de la cinta transportadora, debido a su papel secundario en este proyecto. No obstante, el funcionamiento cumple perfectamente las necesidades planteadas, siendo más que posible, el mejoramiento de esta sistema auxiliar. En los pines 13 (OSC1/CLKIN) y 14 (OSC2/CLKOUT) se debe conectar el elemento oscilador que servirá de reloj al uc. En este caso, se prefirió usar un cristal de 20MHz para 23

aprovechar la velocidad del uc; y así evitar que el tiempo de ejecución de instrucciones del mismo no nos sea una limitante. Para ello nos manejamos con el manual del uc que establece: De aquí se observa las conexiones necesarias del cristal con el uc; de la tabla se obtiene un cristal de 20MHz un capacitor de 10-22 pf, en nuestro caso, se instalo junto al cristal, dos capacitores de 22pF. En los pines 11 y 32 (Vdd) se le debe aplicar la tensión de alimentación; para que no nos afecte el ruido, le instalamos capacitores de 10pF. En los pines 12 y 31 (Vss) se les debe dar tierra (GND) o bien 0Vcc; mientras que los pines 16 (RC1/T1OSI/CCP2) y 17(RC2/CCP1) son los puertos que el uc empleara para enviar las señales al puente H, que controla el motorreductor de la base. El pin 16 estará aplicada al pin Lpwm (giro contrario a las agujas del reloj) y el restante el pin Rpwm (giro en sentido de las agujas del reloj) de la placa del puente H (se explicara más adelante). La señal generada por el uc en estos pines, son en forma de PWM (modulación por ancho de pulsos), donde el ciclo de trabajo será de 0 a 100% en un margen de 1023 pasos; tendrá una frecuencia de 10KHz según: A través del pin 20 (RD1), el uc será capaz de enviar la señal para activar el motor del transporte de cajas. Al poner el puerto en cuestión en un estado lógico alto, la cinta comenzara a funcionar; caso contrario, estará apagada. Esto lo hará, según sea el estado en el pin 4 (AN2) si es 24

que la barrera infrarroja no esa obstaculizada (recordar que en dicho caso, vera un estado lógico bajo en ese puerto). La circuitería aplicada al pin en cuestión, será explicada más adelante. Los pines 25(RC6/TX/CK) y 26(RC7/RX/DT), son los dos pines empleados para realizar la comunicación vía RS232. El pin 25, es empleado para la transmisión de datos hacia el MAX232 y el pin 26 es el de recepción de datos desde el MAX232 el cual se verá en el próximo bloque. Para darnos cuenta cuando la PC nos envía los datos, así leerlos, emplearemos la interrupción de datos recibidos, esto se apreciara en el programa del uc, y será la modalidad utilizada para sincronizar la comunicación. Los pines 40(RB7/PGD),39(RB6/PGC),38(RB5),37(RB4) y 36(RB3/PGM), son los empleados para el envió de las señales a los servomotores del brazo. Estas señales, son pulsos en PWM con una frecuencia de 50Hz (cada 20mS). Como la salida en PWM propia del micro son dos (CCP1 y CCP2) que ya la hemos empleados para el control del puente H; se decidió realizarlo de esta manera, debido a que el uc para generar una frecuencia de 50MHz, necesita tener un cristal cuya frecuencia de oscilación sea muy chica, y esto haría más lenta la capacidad de procesamiento de datos del uc, lo cual generaría complicaciones. Es por esto, que emplearemos una propiedad del uc que es el Timer 1. Mediante este timer, lo que hacemos es setearlo de manera tal que este genere una interrupción cada 20mS: Fout = Fclk / (4 x Preescaler x (65536 TMR1) x Count) 50Hz = 20MHz / (4 x 4 x (65535 63896) x 15, 25) 50HZ = 49,98Hz Entonces, al ejecutarse esta interrupción cada 20mS, lo que el uc realiza es enviar un pulso cuya duración suele ser de unos us (generalmente de 900 a 2000uS dependiendo del servomotor) en los pines mencionados. De esta manera, se genera una señal en PWM con otros medios independiente a los módulos CCP. Placas y sistema de comunicación: Como ya se adelanto, la comunicación con la PC se realiza vía RS232. Debido a que el uc tiene sus salidas TTLs con niveles de voltaje de 0 a 5V, y la PC opera con niveles de -15 a +15Vcc, se requiere de un dispositivo traductor; en este caso el empleado es el MAX232. Este circuito es un transmisor/receptor doble que incluye un generador de voltaje capacitivo para alimentar el conversor TIA/EIA-232-F a partir de una fuente singular de 5V. Cada receptor convierte la señal de entrada TIA/EIA-232-F en una señal de niveles de 5V TTL/CMOS. Por el otro lado, cada conversor, hará el proceso inverso. Es decir, convertirán las señales TTL/CMOS en señales con niveles TIA/EIA-232-F. 25

A continuación se detalla el pin-out y la aplicación típica: Como puede observarse en la imagen, es un dispositivo que se puede emplear de forma muy sencilla con solo 5 capacitores externos. Teniendo en cuenta el pin-out del IC, se procede a realizar las conexiones: el pin 25 (TX) del uc va conectado al pin 10 (TTL / CMOS INPUT) del MAX 232 y el pin 26(RX) del uc al pin 9 (TTL/CMOS OUTPUTS). Asimismo, se conectó el pin 7 (RS-232 OUTPUT) del MAX232 al pin 2 del conector DB9 y el pin 8 (RS-232 INPUT) del MAX232 al pin 3 del conector DB9. Esto se logro a través de un puerto USB, con el objetivo de minimizar espacio en la placa; ya que solo usamos 3 pines del puerto serial de la PC. El pin-out del mimo es: Control de motor de la base: El control del motorreductor de la base, se logra través de un circuito diseñado para el control de giro y velocidad de motores de CC, denominado puente H. En nuestro proyecto empleamos un puente H integrado, cuyo IC tiene el código L6201PS. Algunas características son: Voltaje de alimentaciones superiores a 48Vcc. Pico máximo de corriente de 5A (2A máx. para L6201). Corriente total RMS sobre el L6201: 1A; L6202: 1.5A; L6203/L6201PS: 4Amp. 26

RDS (ON) 0.3 (valor típico a 25 C). Protección por conduction cruzada. Compatible con señales de manejo TTL. Frecuencias de operación por encima de 100 KHz. Protección térmica. Fuente lógica interna. Alta eficiencia. El diagrama en bloque del integrado es el siguiente: Se puede ver que es un puente H, el cual opera con transistores de salida DMOS; y estos le proporcionan al circuito la capacidad de trabajar a altas frecuencias y tensiones. Se puede observar que hay un pin, denominado enable ; el cual debe estar en estado alto (5Vcc) para que, al enviar la señal de Lpwm o Rpwm (en el diagrama serán IN1 o IN2 respectivamente), el motor gire hacia un lado o hacia el otro. Más allá de las particularidades del circuito ya mencionadas, este se comporta de manera similar al siguiente circuito, el cual es más didáctico, y utilizaremos de manera esquemática, para explicar el funcionamiento: 27

En este caso, los transistores Q1 y Q6 (generalmente son 2N2222 o BC547) son los transistores de excitación de los transistores de potencia Q2, Q3, Q4 y Q5; donde Q2 y Q4 son complementarios con Q3 y Q5; ya que los primeros son PNP los segundos NPN (generalmente suelen ser TIP31C y TIP 32C). Al aplicar la señal Lpwm, en la base se Q1 se activan los transistores Q2 yq5 aplicando la tensión del motor en el punto a tierra o 0Vcc en el punto b, provocando que el motor gire en contra de las agujas del reloj, según: Al aplicar la señal Rpwm, en la base se Q2 se activan los transistores Q3 yq4 aplicando la tensión del motor en el punto b tierra o 0Vcc en el punto a, provocando que el motor gire a favor de las agujas del reloj, según: 28

Nota: Cabe aclarar que las señales Lpwm y Rpwm no se deben dar nunca de manera simultánea; ya que se realizaría un cortocircuito. El circuito del IC L6201PS posee protección, para evitar este tipo de falla. Como dijimos antes, este circuito nos permite controlar tanto sentido de giro como la velocidad del motor; entonces pasamos a explicar lo segundo. Para variar la velocidad del motoreductor, lo que se realiza es enviar la señal Lpwm modulada a una frecuencia fija variando el ciclo activo o de trabajo; es decir le enviamos una señal en PWM. Al enviar un estado lógico constante, los transistores quedan activos y el motor ve como si tuviera aplicados en sus bornes la tensión (VCC) de la fuente de alimentación. Al darle un ciclo de trabajo de por ejemplo el 50% a la señal Lpwm, lo que hacemos es que los transistores comiencen a swichear la alimentación sobre el motor, de forma tal que este ve en sus bornes, un tensión igual a VCC/2. A continuación se presenta una tabla comparativa: 29

Si superponemos la salida del microcontrolador (PWM), con la salida del puente H (la cual se corresponde al nivel de tensión en bornes del motor), se obtiene lo siguiente: Como se observa en el grafico anterior, la tensión que reciba el motoreductor, la cual generara los cambios en su velocidad y sentido de giro, dependerá directamente del ancho de pulso que entregue en microcontrolador PIC al circuito puente H. Este ancho de pulso será directamente proporcional, a la salida del controlador PID, programado en la PC. Por otro lado, el funcionamiento de los servomotores es diferente. En principio veremos similitud con respecto al método de comando del motoreductor, ya que también reciben una señal del tipo PWM, como en el caso anterior; no obstante, su control es un poco más complejo. Este funcionamiento se encuentra desarrollado dentro de la sección "MOVIMIENTOS DEL SISTEMA", punto "Servomotores". A continuación, detallaremos la placa del puente H, la cual (en un principio, fue diseñada y confeccionada por nosotros, para luego comprar una directamente armada. Placa del puente H: Esta plaqueta está basada en el circuito integrado L66201PS, el cual es un controlador de puente completo para aplicaciones de control de motores que combina transistores aislados de potencia DMOS con CMOS, y circuitos bipolares en el mismo chip. Los transistores de salida DMOS puede funcionar con tensiones de alimentación de hasta 42V y a velocidades de conmutación de alta frecuencia. Todas las entradas lógicas son TTL, CMOS y compatible con el mc. Además, cada canal del dispositivo está controlado por una entrada lógica separada (medio puente), mientras que un común permite controlar ambos canales: 30

Las características más importantes son: Voltaje de alimentación: 12V-30V Pico de corriente máximo: 5A Corriente RMS: 4A RDS (ON): 0.3 Ohm (a 25 C) Compatible con señales TTL Opera con frecuencias mayores a 100KHz Protección por sobre temperatura Alimentación lógica interna Alta eficiencia Condicionamiento de corriente y voltaje de salida a través de CT y CV. El microcontrolador PIC genera a través de sus dos puertos con salidas de PWM, dos señales de 10KHz de frecuencia, con un ciclo de trabajo de 0 a 100%. Estas son las entradas Rpwm y Lpwm de la placa en cuestión, lo cual hará que el motor gire hacia un lado o hacia el otro. Dicho porcentaje del ciclo de trabajo vendrá dado por la PC, como resultado del control PID de la misma. Los pines B+ y GND son las alimentaciones lógicas de la placa donde B+ son los 12Vcc y GND corresponde a 0Vcc. El pin EN es la habilitación de los puertos de giro Rpwm y Lpw. Si el pin EN se encuentra en un estado bajo, (0V) por más que aparezca la señal de giro Rpwm o Lpwm el motor no se moverá; para que esto suceda se tiene que dar que EN y Rpwm o Lpwm estén en estado alto (5V). Cabe aclarar que no se pueden dar la condición EN, Rpwm y Lpwm en estado alto ya que esto supondría un corto interno del L6201PS. El pin CT es la protección por sobre corriente, en nuestro caso el motorreductor consume aproximadamente 200mA, y la carga que tiene no le hace realizar esfuerzos como para que esta supere los 4A; por tal motivo no lo empleamos. 31

El pin CV es la protección por sobretensión, esta tampoco la usamos ya que el máximo de tensión de nuestra fuente es de 24Vcc y la placa soporta hasta 30Vcc. En el dibujo de la bornera vemos como en la parte superior va conectado el motor a controlar y abajo del mismo va la fuente de alimentación perteneciente al motor. Cabe aclarar que la tensión aplicada en el pin B+ y la alimentación del motor son distintas. B+ es 12Vcc y la alimentación del motor puede ser 6, 12, 18, 24...30V. El tamaño de la placa es realmente pequeño, no obstante, cumple perfectamente con los requisitos necesarios para el control de nuestro motorreductor. Control de Transporte: Como se adelanto, a través del pin 20 (RD1), el uc será capaz de enviar la señal para activar el motorreductor del transporte de cajas, el circuito aplicado es: Al poner el puerto en cuestión en un estado lógico alto (5Vcc), el uc activa la base del transistor BC547 el cual trabaja en corte y saturación, es decir, opera como una llave electrónica; de esta manera queda polarizada la bobina del relé, cambiando este su estado. Se puede ver que el motor del transporte, con el relé desactivado, recibe por un pin fijo 0Vcc y por el NC también, por lo que no se va a mover. Al activarse el relé, el pin fijo se mantiene, pero el selector del relé pasa al contacto NA donde se le aplican 12Vcc al motor y este comenzará a moverse. El diodo, el capacitor y la resistencia, forman de un circuito de descarga de la bobina del relé; esto se realiza debido a que al cortarle la tensión a la bobina, esta genera una fem para oponerse al cambio y esta puede llegar a dañar el transistor. Manipulación de señales: Por cuestiones prácticas, y errores que se presentaron en las etapas de pruebas, fue necesario incluir un circuito, el cual tratase la señal débil, proveniente de la barrera infrarroja, antes de ser ingresada al uc. La misma cumple la función de definir la presencia o ausencia de la caja; por lo cual, dicha información debe ser precisa. A esta débil señal, de aproximadamente 2Vcc, se le sumaba el inconveniente de que puede oscilar, generando un error en el microcontrolador, haciendo que este se "confunda". Para solucionar dicha problemática, se realizó es el siguiente circuito: 32

Tanto el emisor (TX) y el receptor (RX) son alimentados con 5Vcc. La diferencia entre ambos es que el retorno del diodo TX va a una resistencia a masa para cerrar el circuito; mientras que el RX, activa con 2 voltios la base del transistor BC547; el cual opera en corte y saturación, lo que implica que le envía una señal de 5Vcc al Schmitt-trigger inversor. Este la rectificará e invertirá haciendo llegar al pin AN2 0Vcc ante la ausencia de cajas. Al aparecer las cajas y cortar la barrera infrarroja, el transistor se pone a masa por medio de la resistencia de 150 ohms; provocando que el MC74HC14 la rectifique e invierta entregando 5Vcc en el pin AN2 del uc. En otras palabras, cuando el microcontrolador detecte una señal de 5Vcc, se deberá a que la barrera infrarroja está siendo atravesada por una caja; en caso que vea un estado lógico bajo, la barrera e encontrara sin obstáculos. A continuación se presenta un diagrama de las señales anteriores: 33

La fuente de alimentación: Es la encargada de entregar toda la energía necesaria para el correcto funcionamiento de las demás placas, servo y motores. Por ser un sistema estático y simple, no deja de ser realmente importante. En este proyecto, hay una gran diversidad de tensiones, donde trabajaremos con: 5Vcc, 6Vcc, 8Vcc, 12Vcc y 24Vcc. Estas se obtienen a partir de los reguladores de voltaje de la familia LM78XX que son una serie de reguladores de 3 terminales que se pueden conseguir con una gran variedad de voltajes haciéndolos útiles en un gran rango de aplicaciones. Cada uno de ellos posee limitación de corriente y apagado por sobre temperatura, haciéndolos muy duraderos. Si se los ayuda a disipar la temperatura, pueden llegar a entregar hasta 1,5 amperes. Las principales características son: Corriente de salida hasta 1 Amper s/protección Gran variedad de voltajes de saldas. Protección térmica Protección contra corto circuitos La topología típica de conexión, es la siguiente: 34

A continuación, detallaremos con un esquemático, el circuito correspondiente a la fuente de alimentación: La tensión de 220Vca entra al transformador el cual la reduce a 24Vca; luego pasa por el rectificador de onda completa y se obtienen lo 24Vcc con alto nivel de rizado. Para minimizar este fenómeno eléctrico, se utiliza el capacitor de 4700uFx35Vcc. Luego, siguen las etapas de regulación, donde se obtiene todos los niveles de tensiones mencionadas anteriormente. La etapa de 5Vcc, consta de dos LM7805 en paralelo, los cuales generan 5Vcc a partir de los 24Vcc.Debido a que estos integrados son capaces de entregar hasta 1A, se utiliza un conexionado en paralelo, lo cual permitirá entregarles hasta 2A. Se instala un led de señalización para saber si se encuentran funcionando. La etapa de 8Vcc, consta de dos LM7808 en paralelo, los cuales generan 8Vcc a partir de los 24Vcc. Como en el caso anterior, se utiliza el conexionado en paralelo (para obtener hasta 2A) y el led de señalización de estado. La etapa de 12Vcc, consta de dos LM7812 en paralelo, los cuales generan 12Vcc a partir de los 24Vcc. Como en los casos anteriores, se utiliza el conexionado en paralelo (para obtener hasta 2A) y el led de señalización de estado. La etapa de 24Vcc, consta de dos LM7824 en paralelo, los cuales regulan finamente los 24Vcc a la salida del capacitor de filtro, quedando disponible para emplear. Como en los casos anteriores, se utiliza el conexionado en paralelo y el led de estado. La variante es la fuente de 6V, donde se emplea el regulador de voltaje variable LM317T. Este regulador es capaz de entregar hasta 1 ampere. El circuito empleado desde la hoja de datos del fabricante es: 35

Debido a que los 6Vcc son para alimentar a los Servomotores, y como ellos harán fuerza para sostener el brazo, consumirán más de 1 ampere, por ende el LM317T se quemaría. Entonces, para solucionar el problema se le adiciona un transistor de paso, según el circuito: El transistor de paso, es un transistor TIP32C, el cual soporta hasta 4 amperes. El mismo estará censando la corriente que atraviesa por el LM317T, a través de la resistencia de 0,7 ohms x 5W. Cuando la corriente que atraviesa al LM37T es mayor o igual a 1 ampere, se generará una caída de tensión de 0,7V que activará la base del TIP32C, produciendo que este entre en conducción. De esta manera se entregará el amperaje requerido por la carga, evitando la destrucción del regulador. El brazo robótico y el transporte: Tanto el brazo robótico, como la cinta transportadora, son partes operativas del sistema, las cuales poseen más mecánica y mecanismos, que electrónica. Por un lado, el brazo robótico tiene alojada en la base del mismo, una placa de conexiones. La misma es empleada para realizar la comunicación con la placa de control. En la siguiente imagen, podremos apreciar el lay-out correspondiente: 36

Como se observa, esta placa tiene dos borneras; una de ellas tiene dos conexiones, y es empleada para conectar el cable que va desde la salida del PWM del puente H con el cable del motorreductor de la base. La otra bornera, tiene 4 alojamientos; en ella se conecta el cable de alimentación proveniente de la placa de control. A través de este cable se alimenta con 5Vcc, 8Vcc y 12Vcc, se señalizó con diodos led s a cada tensión para saber que el brazo está alimentado. Además de lo expuesto anteriormente, en esta placa y en la de control, hay dos terminales DB9. Estos terminales son empleados para transmitir las señales del uc hacia los servomotores, y también para recibir las señales del potenciómetro del giro de la base. Por el lado del transporte, solo se tiene la barrera infrarroja, la cual está conformada por un diodo emisor y otro receptor que se encuentran cableados; al igual que el motorreductor que realiza el tiro de la cinta transportadora. SISTEMA NEUMATICO Para el traslado de las cajas, desde el fin de la cinta transportador (inicio movimiento del brazo), hasta la posición seleccionada por el operador, necesitábamos diseñar y sistema auxiliar capaz de sujetarlas y depositarlas correctamente en función de nuestra demanda; y para ello se opto por un sistema neumático. En el extremo del brazo, se encuentra montada una ventosa, la cual utilizando vacio (que se obtiene por medio de una pieza maquinada basada en el principio de venturi), succiona la caja y la sujeta, hasta ser depositada en el espacio que desea el operador. La elección de este elemento, favorece el acomodamiento de las cajas, ya que no intervienen en los costados de la misma, ahorrando espacio en el paletamiento del producto. A continuación describiremos los elementos utilizados para el armado del sistema neumático de la maquina paletizadora, a través de esquemas y gráficos característicos; donde podremos aprecia la funcionalidad del generador de vacio MICRO, utilizado en el proyecto: 37

Para cumplir con la presión y calidad de aire requerido, se decide utilizar el sistema de aire comprimido de la facultad. Sin embargo, a modo informativo, se utilizo un compresor para ciertas pruebas de funcionamiento, donde el sistema respondió correctamente. A continuación, podremos apreciar las curvas características de este dispositivo, punto a tener en cuenta para obtener un buen funcionamiento en la succión de las cajas a paletizar: Como se observa en las graficas, se busco trabajar dentro del rango optimo de presión de entrada, para obtener una buena succión en la ventosa. Por otra parte, describiremos el elemento de succión, el cual fue seleccionado teniendo en cuenta el tamaño y peso de las cajas. Dicha ventosa nos permite sujetar las cajas para el correspondiente traslado, dentro del proceso de palatización: 38

Para la conmutación del estado de la ventosa (con o sin succión), se utiliza una electroválvula marca MAC, la cual es comandada por una bobina de corriente continua de 24Vcc, con un consumo de 8,5Watts. La misma corresponde al modelo 111B-611JB; y se encuentra detallada en el siguiente cuadro, extraído del catalogo oficial de MAC: Además se utilizaron los accesorios correspondientes, como ser conectores de codo oscilante, conector rápido recto, etc., todos de la marca MICRO. Sumado a lo mencionado, se instalo aproximadamente 1 metros de tubo de poliuretano (PU) de 2,5mm de diámetro interior y 4mm de diámetro exterior. 39

PROGRAMA DEL MICROCONTROLADOR PIC El software del brazo robot fue diseñado mediante la plataforma de programación PIC C Compiler, el cual emplea el leguaje de C++ ; pero con un set de instrucciones especificas para cada uc; donde su compilador es capaz de interpretar para crear el archivo en hexadecimal *.hex. A continuación una captura de pantalla de la computadora, durante la correspondiente programación del microcontrolador: Una vez obtenido el archivo en hexadecimal, empleamos el software PICKit2; el cual nos permitirá grabar en la memoria del PIC el programa diseñado, el cual está contenido en el archivo *.hex; según se puede apreciar en la siguiente captura de pantalla de la aplicación mencionada: 40

Al finalizar con estas acciones, el PIC estará listo para ser colocado en la plaqueta, y cumplir con las aplicaciones programadas. Diagrama en bloques del software: A continuación se presenta un diagrama en bloques del software creado en PIC C para el uc. Este se encargara del comando del motorreductor (realizando la conversión del pedido por parte de la PC, a la señal PWM correspondiente), servomotores (ídem motorreductor, pero con diferentes características en la señal PWM), transporte (pedido de movimiento), neumática (señal a EV), medición y transmisión de datos. 41

Según se ve en el diagrama de flujos, al comenzar el programa principal, el uc se fija si es el arranque desde cero; es decir, si es el primer ciclo del programa. En este caso, el uc no conoce la posición de los servos, por tal motivo, lo que hace es llevarlos a la posición de reposo y transmitir el valor del ángulo en el cual se encuentra posicionado. Una vez logrado, actualiza el valor del PWM, el cual en el arranque de pone en cero. Si la PC con el sistema de control lo requiere, se actualizara según los datos que esta le envíe. Lo mismo pasa con el sentido de giro. Actualizado el PWM y sentido de giro, se precede a ver si la PC requiere que se tome una caja. Si es así, el uc espera 50ms y comienza por activar el TTE el cual tiene una rutina fuera del programa principal. Cuando aparece una caja, se detiene y el brazo se acciona para buscarla. Activa 42

la EV(electroválvula) de aire, espera dos segundo para que succione y vuelve al reposo con la caja tomada. Si la PC no requiere que tome una caja, o bien ya la tomó, el uc procede a ver si hay que dejarla. Si no hay que dejarla, vuelve al inicio, donde ya no es un arranque desde cero, y procede a enviar posición de la base y actualizar nuevamente el PWM y sentido de giro. En el caso de que la PC requiera dejar la caja, el uc activara los servos para dejar la caja, desactivara el aire y esperara 2 segundos. Luego, irá a una posición de reposo intermedia para no mover la caja, y luego a la posición de reposo total. A continuación se expresa el código del diagrama en bloques, totalmente comentado: while (TRUE) //Comienza el programa ppal.- {//----------------- Mando los servos al reposo, primer ciclo --------------------------------- While(i==0){ Grados(); // Envió la posición de la base y recibo datos desde la PC Reposo_total(); //Seteo los parámetros de los servo para buscar ir a reposo Servos_buscar(); //Activo los servos delay_ms(50); //Espero 50mS i=1; // para que no entre más en la rutina de inicio desde cero }//------------------------------------------------------------------------------ //------- Rutina de TX de datos y actualización de PWM de forma constante ------ loop: if(data_convert[5]==1) //Me fijo si la PC me avisa de una emergencia {Emergencia();} // si es asi llamo a la sub rutina Grados(); // Envió los datos de posición a la PC para el control PWM(xpwm,giro); // Modifico la velocidad y sentido de giro output_low(codo1); // Fuerzo al inicio, el cero en las salidas de los servos.- output_low(hombro1); // Fuerzo al inicio, el cero en las salidas de los servos.- output_low(muneca1); // Fuerzo al inicio, el cero en las salidas de los servos.- output_low(giromune1); // Fuerzo al inicio, el cero en las salidas de los servos.- output_low(dedos1); // Fuerzo al inicio, el cero en las salidas de los servos.- //------------------------------------------------------------------------------ //Rutina para buscar las cajas con los servos bb=data_convert[4]; // Tomo lo que solicita la PC while(bb==1) // Me fijo si la pc requiere con un 1 {delay_ms(50); //espero 50mS. TTE(); //Activo el tte de cajas, llamando a su rutina if(ir_led==1){ //Me fijo si la barrera está cortada Buscar_cajas(); //Seteo los parámetros p/ activar servos p/buscar las cajas, llamo su rutina Servos_buscar(); //Activo los servos para buscar la caja, llamando a su rutina output_high(ev); //Activo la Electroválvula para chupar la caja, llamando a su rutina delay_ms(2000); //Espero que la ventosa sujete la caja, dos seg. Reposo_total(); //Seteo los parámetros p/activar servos p/reposo las cajas, llamo su rutina Servos_buscar(); //Activo los servos para buscar la caja, llamo su rutinas } bb=0; //Cond. de seguridad para no entrar nuevamente en la rutina la llevo a 0 } //------------------------------------------------------------------------------ //Rutina para dejar las cajas de los servos dd=data_convert[5]; // Me fijo sí que dato me envío la PC 43

while(dd==1) // Me fijo si la pc lo requiere con un 1. { Dejar_cajas(); //Seteo los parámetros para activar los servos para buscar las cajas Servos_dejar(); //Activo los servos para dejar la caja, llamando a su rutina delay_ms(2000); //Espero 2 segundos para soltar ben la caja Reposo_dejar(); //Seteo los parámetros p/activar servos p/reposo interm., llamo su rutina Servos_dejar(); //Activo los servos, llamando a su rutina Reposo_total(); //Seteo los parámetros p/activar servos p/reposo total, llamo su rutina Servos_dejar(); //Activo los servos, llamando a su rutina dd=0; //Condición de seguridad, para no entrar nuevamente en la rutina } }//cierre while //Cierre del while infinito del programa ppal. }//Cierre main //Cierre del main. A continuación se presentan un las subrutinas del uc, correspondientes a los movimientos y TX de datos, las cuales se ejecutan en el programa principal del uc. Modificación del PWM y el giro: PWM(xpwm,giro); Se presenta el diagrama en bloques de la subrutina: LA BASE SE MUEVE SI NO ENVIO UN 1 ENVIO UN 0 PARA QUE LADO GIRA? HORARIO ANTI HORARIO ACTIVO pwm2 ACTIVO pwm1 RETURN A continuación se presenta el código empleado, totalmente comentado: //----------------------------------------- Comienzo subrutina del pwm.------------------------------------ ---- void PWM(int32 xpwm, int32 giro) { // Modifico variable de estado.- if(xpwm==0){ envío[5]=0;} // Si esa quieto se envía un 0, para saber estado del brazo. 44

else{ envío[5]=1;} // Si esa moviendo se envía un 1, para saber estado del brazo. //Búsqueda del origen, hacia donde está el transporte. if(giro==1){ // Si giro es 1, sentido anti horario. set_pwm2_duty(0); // seteo PWM2 con 0. set_pwm1_duty(xpwm); // seteo PWM1 con XPWM, es decir, la velocidad pedida. } //Búsqueda del Angulo if(giro==0){ // Si giro es 0, es sentido horario; set_pwm1_duty(0); // seteo PWM1 con 0 set_pwm2_duty(xpwm); // seteo PWM2 con XPWM, es decir, con la velocidad pedida. }return; //Fuerzo la salida de la subrutina }//----------------------------------------------------------------------------------------------------------------- Subrutina de mando del transporte: TTE(); A continuación se presenta el diagrama en bloques de la subrutina: ESTADO DE BARRERA ESTA EN 0 ESTA EN 1 PRENDO TTE ESTADO DE BARRERA ESTA EN 0 ESTA EN 1 RETURN ESPERO 500uS APAGO EL TTE A continuación se presenta el código totalmente comentado: //---------------------------------- Comienzo la subrutina del movimiento del tte.------------------------ void TTE(void) { while(true){ //Genero un bucle infinito. ir_led=0; ir_led=input_state(barrera); //fuerzo la variable a un cero. //Me fijo estado del la barrera óptica //si ir_led=0, significa que no hay cajas presentes //por eso enciendo el tte hasta que aparezca una caja // Me fijo si la variable ir_led es igual a cero // Hago lo siguiente, hasta que ir_led=1. //Prendo el tte hasta que if (ir_led==0) { do{ output_high(tte_on); ir_led=input_state(barrera); //en el puerto de barrera tenga un 1 45

} while(ir_led==1); //Me fijo si la variable ir_led e igual a 1, si es así salgo. delay_us(500); //Espero medio segundo output_low(tte_on); } //Apago el tte if (ir_led==1){output_low(tte_on); //Si ir_led=1, no hago nada porque hay cajas return;} } // Fuerzo la salida de la subrutina } -------------------------------------------------//Cierre del programa ppal.---------------------------- Subrutina de envío de datos: Grados(); A continuación se presenta el diagrama en bloques de la subrutina: LEO EL ADC ENVIO EL DATO SALGO DE LA RUTINA A continuación se presenta el código totalmente comentado: //---------------------------------- Comienzo rutina de envío de la Posición ----------------------------- void Grados(void) { a = read_adc(); //Leo el valor del ADC printf("%lu \r\n",a); //Lo envío delay_ms(10); //Espero 10mS return; } //Fuerzo la salda de la subrutina //----------------------------------------------RUTNA PARA BUSCAR CAJAS CON LOS SERVOS Subrutina de manejo de servos: Servos_buscar(); y servos_dejar(); A continuación se presenta el diagrama en bloques de la subrutina: 46

47

A continuación se presenta el código totalmente comentado: void Servos_buscar(void) {ah=0; //Fuerzo la variable a 0, esta cuenta la cantidad if(data_convert[5]==1){emergencia();} //Me fijo si hay emergencia. while(true) // de pulsos enviados a los servos para moverlos despacio {ah=ah+1; //la voy incrementando de a 1 //----------------------- Movimiento del servo del hombro -------------------------- if(serhom==hombro){goto c;} //si el valor de servo de hombro no varió, salto a mover otro servo if(serhom<=hombro){ //si el valor de servo de hombro es menor al set point hombro=hombro-25; //decremento el valor del valor actual de a 25 output_high(hombro1); // pongo estado alto la salida del servo delay_us(hombro); // espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(hombro1);} // pongo a cero la salida delay_ms(5); //Espero 5ms. if(hombro<serhom) //si el valor de servo de hombro es mayor al set point {hombro=hombro+25; //incremento el valor del valor actual de a 25 output_high(hombro1); // pongo estado alto la salida del servo delay_us(hombro); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(hombro1); // pongo a cero la salida delay_ms(5);} //Espero 5ms. //----------------------- Movimiento del servo del codo -------------------------- c:if(sercodo==codo){goto d;} //si el valor de servo de hombro no varió, salto a mover otro servo if(sercodo<=codo) //si el valor de servo de codo es menor al set point {codo=codo-18; //decremento el valor del valor actual de a 18 output_high(codo1); // pongo estado alto la salida del servo delay_us(codo); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(codo1); // pongo a cero la salida delay_ms(5);} //Espero 5ms. if(codo<sercodo) //si el valor de servo de hombro es mayor al set point {codo=codo+18; //incremento el valor del valor actual de a 18 output_high(codo1); //pongo estado alto la salida del servo delay_us(codo); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(codo1); //pongo a cero la salida delay_ms(5);} //Espero 5ms. //----------------------- Movimiento del servo de la muñeca -------------------------- d:if(sermune==mune){goto e;} //si el valor de servo de hombro no varió, salto a mover otro servo if(sermune<=mune) //si el valor de servo de muñeca es mayor al set point {mune=sermune; // copio set point en variable de servo. output_high(muneca1); //pongo estado alto la salida del servo delay_us(mune); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(muneca1); //pongo a cero la salida delay_ms(5);} //Espero 5ms. if(mune<sermune) //si el valor de servo de muñeca es menor al set point {mune=mune+5; //incremento el valor del valor actual de a 5 48

output_high(muneca1); //pongo estado alto la salida del servo delay_us(mune); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(muneca1); //pongo a cero la salida delay_ms(5);} //Espero 5ms. //----------------------- Movimiento del servo de giro de muñeca -------------------------- e:if(ah<=sergmun) //si el valor de servo de giro muñeca es mayor o igual al set point {output_high(giromune1); //pongo estado alto la salida del servo delay_us(sergmun); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(giromune1); //pongo a cero la salida delay_ms(5); //Espero 5ms. //----------------------- Movimiento del servo de los dedos -------------------------- if(ah<=serdedo) //si el valor de servo del dedo es mayor o igual al set point {output_high(dedos1); //pongo estado alto la salida del servo delay_us(serdedo); //espero una cierta cantidad de us, para gen el pulso tipo PWM. output_low(dedos1); //pongo a cero la salida delay_ms(5);} //Espero 5ms if(ah==40){i=1;grados();return;}}} // Si ah== 40, mando la posición y salgo de la rutina. De esta manera finalizamos con el detalle del programa del microcontrolador, quien será el responsable de comandar los movimientos de la maquina paletizadora. Este simple pero confiable drive, funcionara como "esclavo" del sistema de control; el cual se ejecutara dentro de la PC. Este ultimo dará las órdenes (interactuando con el operador que manipule al sistema) a través de la aplicación Labview; la cual desarrollaremos a continuación. 49

SOFTWARE DE LA PC - LABVIEW Para realizar el control de la zona de descarga, monitoreada por cámara web, para el comando completo del brazo robótico y demás movimientos del proceso, se opto por implementar un programa en la PC, utilizando el software Labview. Además de cumplir con estas tareas, se utilizaron las prestaciones del programa, para diseñar las pantallas de operaciones y registros correspondiente. El proyecto que se genero, incluye las librerías necesarias para las funciones utilizadas, como así también, las diferentes aplicaciones y variables globales. A continuación, una captura de imagen del proyecto en labview, de la maquina paletizadora vigilada por cámara web: Como podemos apreciar, el encabezado del árbol corresponde al nombre del proyecto "TEC_DIG_3_PROYECTO" y su extensión del tipo: lvproj. Siguiendo con el orden, se encuentra el archivo "Adquisicion imagen - Rev5.vbai", programado en una aplicación de Labview (VISION BUILDER AI). El mismo contiene la configuración de la cámara web, su posterior tratamiento de imagen y obtención de información, como la detección de objetos o conteo de cajas listas para despachar. El programa de dicha aplicación, se desarrollara más adelante. Continuando con el orden descendente, nos topamos con el programa principal, llamado "TP_TEC_DIG_3_Rev9.vi". Como podemos observar, tanto esta aplicación como la mencionada anteriormente, contienen un numero de revisión, el cual fue aumentando, frente a modificaciones grandes (metodología utilizada para seguir un orden de avances). El mismo contiene todo el control de la maquina paletizadora, lo cual desarrollaremos a continuación. Finalmente, debajo de lo mencionado, se encuentran las variables globales, utilizadas para trasmitir información entre las aplicaciones ("Adquisicion imagen - Rev5.vbai" y " TP_TEC_DIG_3_Rev9.vi "), y posterior a estas, las librerías utilizadas. Para comenzar con el desarrollo del programa principal, se mencionaran los comandos, indicadores y demás controles del proceso, que se encuentran en la pantalla de operación del sistema: 50

Como podemos observar, el scada diseñado nos ofrece las siguiente información, presentada en varios formatos: Indicadores luminosos "PRESENCIA EN LATERALES" y "PRESENCIA INGRESO CAMIONES", utilizados para controlar zona de descargas Indicador numérico de cantidad de cajas en zona de despacho Botón de selección "MANUAL" Comando "SET-POINT-MANUAL" Pulsador para ubicar caja en zona de despacho, de forma automática Pulsadores "TOMAS CAJA" y "DEJAR CAJA" Cuadro con imágenes continuas de zona de despacho (área monitoreada) Indicador luminoso "ALARMA ZONA INVADIDA DURANTE EL MOVIMIENTO" Indicador luminoso "DISPARO DEL SISTEMA - PROBABILIDAD DE ACCIDENTE" Checkbox "PERMISIVO" para "RESET PARADA" Pulsador "RESET" Indicadores numericos "i for loop COM" e "i for loop PID" Selection "Puerto VISA" Indicador analógico de la posición del brazo (en unidad de grados) Indicador numérico "POSICION BRAZO [Grados]" Pulsador "PARAR MOTOR" Indicador luminoso que advierte forzamiento disparado motor brazo robótico Visto los comandos e indicadores de la pantalla, con los cuales podremos operar el sistema de paletización y controlar aspectos referidos a un proceso seguro y acotado; pasamos a explicar la programación en Labview. Comunicación: Se programan los bloques correspondientes a la comunicación serie, protocolo RS-232. En primer lugar, debemos iniciar o abrir el puerto, para que este se prepare para ejecutar la acción posterior de lectura y escritura: 51

Como se explica en "DIGITALIZACION DEL SISTEMA" sección "Sincronización", para efectuar la sincronización entre la PC y el microcontrolador, se debe escribir primero, para luego efectuar el comando de lectura, así el PIC sabrá cuando enviar el paquete de datos con la información de la posición del brazo: Posterior a esta pantalla, colocamos un retardo de 1mSeg, que a simple vista parece no influir en nada; pero este comando, se utilizo para sincronizar y ajustar los tiempos de lectura y escritura. Si en algún mantenimiento se requiere modificar el retardo entre el comando de escritura y el de lectura, se podrá ajustar desde este temporizador: 52

Luego de la espera de 1mSeg, se procede hacer la lectura de la información proveniente por el puerto serie seteable; en nuestro caso el COM4 (configuración que se realizo desde Administración de dispositivos en Windows, para usar el adaptador Serie-USB). Como se puede observar en el grafico siguiente, la información ingresa al bloque de lectura de 8 bytes (en donde solo utilizaremos 4 bytes). Se deja configurado como 8 bytes, ya que mismos fueron utilizados durante las pruebas y ajustes durante el desarrollo del proyecto. Se considera conservarlos, en caso de que, en algún mantenimiento se requiera ampliar la información recibida del PIC. Luego, pasa por un selector utilizado para filtrar el ruido cuando el brazo esta posicionado en 0º y las perturbaciones hacen negativo este valor. De la salida del selector tenemos un bloque que calculan la extensión de la entrada y un indicador numérico (utilizado por nosotros en las configuraciones; se encuentra oculto) que muestra el valor sin tratamiento que ingresa por el puerto serie (numero entre 0 y 1024). Conociendo la extensión del valor de entrada (unidad, decenas, centenas o miles), seleccionaremos que salida del bloque de función, vamos a utilizar. Finalmente, la salida se dirige al indicador llamado %. También se observa, el contador de interacciones "i for loop COM', que nos dirá si la rutina se está ejecutando: 53

Finalmente, debemos cerrar el puerto para finalizar con la rutina de comunicación. Esta tarea, se efectúa con el bloque "VISA Close": Para mantener la sincronización y la correcta comunicación entre el microcontrolador y la PC, debemos implementar un retardo o Delay de 5mSeg, colocado en la última secuencia: De esta forma concluye la programación de la comunicación en el software Labview, para el protocolo RS-232. Programa principal: Daremos una explicación concreta y general del programa principal, para no explayarnos demasiado en desarrollo de cada función correspondiente al software Labview; por lo cual se consideran de conocimiento previo, ciertos aspectos de programación en bloque. A continuación, cinco capturas de pantalla, donde se observa la programación del "for infinito" o lazo principal: 54

En la primer pantalla, vemos la programación de una subrutina, que cumple la función de importar una tabla Excel, la cual contiene la correspondencia entre la variable de comunicación serie que recibe labview, y la posición real del brazo. Básicamente, para realizar un lineamiento "fino" de la lectura del movimiento giratorio del brazo robótico, el cual definirá la correcta ubicación de cada caja paletizada. Para ajustar esta tabla, se recurrió a efectuar varias pruebas, para adquirir datos e interpolar dicha relación. A continuación mostramos parte de la tabla, para comprender mejor el "arreglo" del que estamos hablando: Como vemos en la tabla, el bloque colocara en su salida, el valor apuntado por la entrada, la cual tendrá una variación entre 0 y 1023. Por otra parte, podemos apreciar un bloque ubicado en la parte superior derecha, el cual limita la variación de posición del brazo que leemos; dentro de un margen configurable por 55

nosotros. De esta forma, filtramos los ruidos que podrían generar picos irreales de variación, produciendo una lectura errónea. En la segunda pantalla podemos apreciar el tratamiento analógico de la señal de entrada, donde se programo un filtro digital. Básicamente, se compara el valor actual de posición con el de la rutina anterior, si estos son iguales, se mantiene la salida anterior, si hay una diferencia positiva o negativa, se efectúa el incremento correspondiente en una unidad mínima (o sea un 0,26 grado) de la posición anterior. Por la velocidad que tiene nuestro proceso, donde el motor gira a una velocidad máxima de 6rpm, nunca tendremos una variación mayor a 0,26º en una interacción de 5mSeg. En la tercer pantalla, podemos apreciar como formamos el paquete de 8 bits, que contendrá la información enviada desde la PC al PIC: Los bits B7, B6 y B5 contienen la variable de velocidad del motor, la cual se encuentra en el rango de 0-500 "cuentas" (valor que interpretara perfectamente el microcontrolador). El bit B4, indicara el sentido de giro, siendo 0 para girar aumentando la posición en grados, y 1 para 56

disminuir, volviendo a 0º. El bit B3 nos dirá cuando queramos tomar la caja, mientras que el bit B2, le dirá al microcontrolador cuando queramos dejar la caja. Finalmente, el bits B1 le dirá al PIC cuando se produzca un disparo (ver en pantalla variable "DISPARO DEL SISTEMA - PROBABILIDAD DE ACCIDENTE"), y el bits restante B0, quedara como reserva. Como se puede aprecia, optamos por implementar una metodología sencilla de trasmisión de la información; no obstante, se obtuvieron resultados más que aceptables, lo que cumplía con los requisitos planteados. En la cuarta pantalla, podemos apreciar el control PID del movimiento circular del brazo robótico, impulsado por el motorreductor. El mismo está programado en bloques que contienen las subrutinas proporcional, integral, derivativa, tiempo diferencial y Set_Min_Mov. El desarrollo e interpretación de estos bloques se considera de conocimiento del lector. Vemos el cálculo del error, que consiste en la diferencia entre SP (SetPoint) y el "Indicador Aguja" variable local que comanda el indicador analógico de posición, y que corresponde a la posición del brazo. Con dicho error, se hacen los cálculos proporcional, derivativo e integral, se suman y se obtiene la salida del PID. Esta señal, no sale directamente al uc. Primero pasa por el bloque limitador, donde acotamos dicha señal en una banda coherente para el proceso, y para ser interpretada por el PIC. Luego, tenemos el bloque Set_Min_Mov, donde tratamos la salida del controlador para eliminar la banda muerta; zona donde el motor no se mueve ya que debemos primero, vencer la inercia propia del motor. Finalmente, la señal se trata para ser enviada al microcontrolador PIC, el cual dará la orden para mover el motorreductor. 57

En la quinta pantalla, podemos observar mayormente, la programación del registro de información. Se genera un archivo Excel, el cual se almacenara en la dirección "D:\Gero\Facultad\", bajo el nombre "BRAZO.xls". La información que contendrá esta tabla, se corresponderá a: "FECHA" (fecha con formato mes/día/año que se extrae del sistema operativo Windows); "HORA" (base de tiempo con formato hora:minutos:segundos que se toma también del sistema operativo; donde veremos que cada segundo contiene 200 mediciones); "Error" (corresponde al valor error que se debe corregir); "PRESENCIA LATERALES" (valor booleano correspondiente a la detección de invasión por los laterales de la zona de despacho); "PRESENCIA INGRESO" (valor booleano correspondiente a la detección de invasión por el ingreso de camiones a la zona de despacho); "DISPARO POR DETECCION" (valor booleano correspondiente al disparo de todos los movimientos del sistema, por invasión de la zona de despacho cuando se paletiza una caja en dicha área); y "GRADOS" (valor analógico correspondiente a la posición en grados del brazo robótico). Además, podemos observar la base de tiempo o delay de 5mSeg, valor que servirá para sincronizar la PC con el microcontrolador. Por ende, cargaremos la tabla con 200 muestras de datos por segundo. Este valor supera ampliamente las respuestas del proceso, asegurándonos que no tendremos perdida de información. La tabla generada cada vez que se inicia el programa (actualizando los datos dentro del archivo "BRAZO.xls"), es de la siguiente forma: FECHA HORA Error PRESENCIA LATERAL PRESENCIA INGRESO DISPARO POR DETECCION GRADOS 7/14/2013 1:13:27 PM 0 0 0 0 225.68 7/14/2013 1:13:27 PM 0 1 0 1 225.96 7/14/2013 1:13:28 PM 0 1 0 1 225.96 58

Finalmente, en la sexta captura de pantalla del programa Labview, podemos apreciar los comandos de los indicadores luminosos que nos darán aviso de la presencia de objetos en los laterales y en el ingreso de camiones, correspondientes a la zona de despacho. Además, podemos observar las condiciones que generaran el disparo de todos los movimientos de la maquina paletizadora, producto de la invasión de la zona de despacho al momento de paletizar una caja en esta área. Esta condición, pondrá en estado alto al bits B1 del paquete de comunicación que se envía desde la PC al uc (ver "COMUNICACION DEL SISTEMA") para dar aviso al PIC y frenar los movimientos que se estén comandando en ese instante. Por otra parte, tendremos un aviso: "ALARMA ZONA INVADIDA DURANTE EL MOVIMIENTO", que nos dejara un registro si se invadió momentáneamente la zona de despacho, mientras se estaban paletizando cajas, fuera de esta área (condiciones que no dispararan el sistema). Finalmente, se puede observar el manejo de variables locales y globales, las cuales nos brindan la información necesaria para realizar el control de la zona de despacho, durante la operación de la maquina paletizadora; como por ejemplo, la cantidad de cajas, o el display de la cámara web, datos provenientes del programa VISION BUILDER AI (aplicación de Labview, la cual desarrollaremos a continuación). PROGRAMA CAMARA WEB - VISION BUILDER AI La aplicación Vision Builder AI de National Instruments, está orientada a la inspección, tratamiento de imagen y automatización correspondiente. Consiste en una programación similar a la de bloques, salvo que se respeta una serie seguida de instrucciones y comandos, y un solo canal de comunicación de la información, o sea, la captura continua de imagen. No obstante, podemos obtener bifurcaciones, armando un árbol del proyecto, lo cual no fue necesario en nuestro caso. A continuación, el "árbol" de nuestro programa: 59

Como verán, solo tiene un comienzo y un final, y entre ambos, un solo bloque que contendrá los comandos programados (ninguna bifurcación). En el inicio del programa, debemos configurar el dispositivo a utilizar y la función que deseamos realizar. En nuestro caso, se implementara una cámara web marca FULLTECNO con conexión USB, y configurada para adquisición continua de imagen de video. Una vez que se agregue el dispositivo y sea detectado por la aplicación, comenzamos armar nuestro programa. A continuación, una imagen de la programación en bloque realizada para este proyecto: Primer bloque "Acquire Image": dentro de este bloque definimos el dispositivo a utilizar, el modo de adquisición y las calibraciones correspondientes (foco, brillo, etc.). El bloque de color verde y texto "PASS", nos indica el correcto funcionamiento de la función; en caso de perder conexión con cámara web, o presentarse algún otro problema, este indicador pasa a color rojo con un texto que dice "FAIL". Segundo y tercer bloque "Find Edges": estos bloque se utilizan para detectar objetos a través de una línea predefinida por varios puntos interpolados entre sí, que formaran una línea continua denominada contorno. Dicho contorno debe ser definido por el programador, teniendo en cuenta varios aspectos que afectaran directamente a la detección. Alguno de estos parámetros a configurar son: distancia máxima y mínima entre puntos detectados sobre la línea de contorno, diferencia en el nivel de brillo y color que confirmara detección de objeto sobre contorno, etc. El primero se utiliza para detectar objetos que ingresen por los laterales, mientras que el bloque siguiente es el encargado de indicarnos si se invade la zona por el ingreso de camiones. Cabe aclarar que, una vez definidos los parámetros de dichos bloques, fue necesario realizar una configuración fina, para poder obtener un rendimiento acorde a lo requerido en este proyecto. A continuación una definición visual de la zona de trabajo y los limites mencionados: De esta manera, si nos encontramos paletizando una caja hacia la zona de despacho, y se detectara el ingreso de un cuerpo a dicha área controlada (ya sea por alguno de los laterales o por el ingreso de camiones), el control programado en la PC de la maquina paletizadora, lo detectara y procederá a detener todos los movimientos que se estén ejecutando; ya que lo identificara como una invasión peligrosa de un cuerpo extraño. 60

Cuarto bloque "Vision Assistant 1": Este bloque es complejo, ya que posee un editor amplio, lo cual nos brinda gran flexibilidad en la configuración de su funcionamiento. Dentro del mismo, encontraremos herramientas de edición, las cuales también se deben programar en bloque; y con la cuales se obtiene la edición y tratamiento fino de la imagen capturada por la cámara web. A continuación veremos el desglose de este bloque: El primer bloque captura la imagen que está siendo tratada en el programa principal, la encuadra y la prepara para la edición. En el segundo bloque, le aplicamos un filtro de colores, donde se le extrae un tono color verde, de la gama RGB (definido como "Green Plane"); buscando eliminar los tonos diferentes producidos por las luces y sombras. El tercer bloque nos sirve para ajustar contraste, y unificar un objeto de varios tonos, relieve y demás características, en una sola imagen. Con esta función obtendremos un solo objeto uniforme, de color negro y fondo rojo, donde no distinguiremos las diferencias de textura (algo que no nos interesa). De esta manera, estaremos preparando la imagen, para el conteo posterior de las cajas ubicadas en la zona de despacho. Finalmente el cuarto bloque "Lookup Table" conmutara el fondo de color rojo (resultante del bloque anterior) por el color blanco; de esta manera, obtendremos objetos uniformes color negro (sin tonalidades de grises) y en fondo blanco. Quinto bloque "Match Pattern 1": Basicamente, con este bloque funcional, definiremos la región a controlar; para luego generar una variable global con formato de imagen, y utilizarla como entrada de imagen para la pantalla de operaciones, programada en Labview. Sexto bloque "Detect Objects 1": En este paso, con el tratamiento de imagen ya finalizado, podemos aplicar la detección de las cajas de madera que estamos paletizando. Su funcionamiento consiste en definir ciertos parámetros, para filtrar los objetos a detectar, de los que no nos interesan. Conociendo lo que queremos contar, este filtro consistirá en el tono oscuro de los objetos, su homogeneidad y las dimensiones de los mismos. Al configurar estos parámetros, el bloque funcional modificara un registro interno, dependiendo de la cantidad de seteos acertados; referencia que trasmitiremos por medio de una variable global, al programa principal de Labview. Séptimo objeto "Calculator 1": Esta función tiene varias etapas de configuración, pero todas corresponden a definir y preparar las variables globales (que nos permitirán levantar información desde el programa principal de Labview) y sus parámetros correspondientes a esta aplicación. A continuación, veremos un simple esquemático que nos mostrara la relación de estas variables: 61

En la primer línea, generamos la relación entre el conteo de los objetos en el bloque funcional de detección de objetos. En la línea siguiente, con una relación lógica simple, generaremos un booleano que nos informara de la invasión en el ingreso de camines, de la zona de despacho. Finalmente, con la misma lógica que la línea anterior, obtendremos la invasión de la zona de despacho, pero por los laterales. De esta manera, tenemos preparadas las variables para ser transmitidas por un bloque posterior especifico. Octavo bloque "Set Variable 1": Finalmente el último bloque, encargado de levantar las variables configuradas anteriormente, para mostrarlas en el árbol global del proyecto. El panel de configuración, es el siguiente: Como podemos observar, tenemos la variable de la imagen de la cámara, la de cantidad de objetos del tipo caja paletizada, y los indicadores de invasión de zona de despacho; cada una con su configuración y tipo de formato correspondiente. De esta manera, llegamos al "End" del programa configurado, retornando automáticamente al inicio del "For" infinito. Por ende, esta secuencia se repetirá cíclicamente de manera continua e ininterrumpida. 62

PRUEBAS REALIAZADAS PRUEBAS CON CAMARA WEB Una vez configurado el drive de la cámara web, se procedió a realizar distintas pruebas para identificar la posición optima de la imagen que requeríamos tratar, para poder obtener la mejor visualización del área a controla. Se realizo el ajuste del foco y zoom, mediante la lente de la misma, posterior al montaje y fijación correspondiente, sobre la soportaría montada en la zona de despacho de la maquina paletizadora. FIJACION CAMARA WEB Cabe aclarar que el fondo blanco con el remarco rayado (que se observaran en las siguientes imágenes de la zona de despacho), y el color oscuro de las cajas a paletizar, facilitan la detección y conteo de las mismas. Se determino estandarizar dicha tonalidad en los envases, junto con las medidas ya definidas, como condición del proceso. Estas mejoras no se encontraban presente al momento en el cual se realizaron las primeras pruebas, punto que no imposibilito el tratamiento de imagen (ya que los resultados se obtuvieron de igual forma) pero si ayudo con respecto al encuadro de las cajas; además, se busco mejorar la presentación de la maquina paletizadora. A continuación se podrá observar el montaje finalizado de la cámara web, y la zona de despacho la cual está delimitada por un recuadro y resaltada con líneas transversales azules (donde se pretenden ubicar las cajas paletizadas, listas para despachar): 63

MONTAJE CAMARA WEB SOBRE SOPORTE SUPERIOR ZONA DE DESPACHO VISTA SUPERIOR DE ZONA DE DESPACHO 64

Una vez instalada la cámara, realizamos distintas pruebas con el software VISION BUILDER AI, a fin de detectar las cajas que debimos paletizar y contabilizar. Nos topamos con el inconveniente en las sombras que aparecían en la captura de imágenes, y las diferencias en la superficie del área de despacho, lo cual imposibilitaba diferenciar de manera correcta a dichos cuerpos. Esto generaba un mal conteo, además de la falsa detección, ya que cualquier sombra que se metiera en la zona de vigilancia, era tomado por la cámara e informado al programa principal: Como podrán observar en la segunda imagen, se remarco la sombra que generaba la distorsión de la imagen, y la detección errónea del objeto. Para solucionar este inconveniente surgido en las primeras pruebas, se realizo es un tratamiento de la imagen, de manera tal de que se diferencie notablemente el área de despacho de cajas con las mismas; es decir, que se contraste bien la caja con la superficie de apoyo. Se utilizo el bloque funcional "Vision Assistant", de la aplicación VISION BUILDER AI, con la cual se programo toda la captura y tratamiento de la imagen de la cámara web. Como ya se explico en el punto anterior "PROGRAMA CAMARA WEB - VISION BUILDER AI", se programo la siguiente secuencia de bloques, efectuando varios ensayos durante todo su desarrollo; obteniendo los resultados demostrados en las posteriores imágenes: 65

A continuación veremos las secuencias de las capturas de pantallas, donde podremos apreciar cómo se transforman las imágenes tomadas por la cámara web: IMAGEN 1 IMAGEN 2 IMAGEN 3 IMAGEN 4 Como se puede apreciar en la secuencia de las imágenes, al realizar el tratamiento correspondiente, se logro obtener una detección optima de las cajas paletizadas. Al poder diferenciar las sombras de los cuerpos ubicados en la zona de despacho (sean o no cajas paletizadas u otro objeto extraño), procedimos a efectuar las pruebas para contar las cajas y diferenciarlas de cualquier otro objeto interviniente en esta área. Todo estos avances, requirieron varios ensayos, ajustes y puestas a punto, para llegar a obtener el resultado que el proyecto de la maquina paletizadora vigilada por cámara web requería. 66

PRUEBAS EN LA COMUNICACION RS-232 El problema surgido en la comunicación entre la PC y el microcontrolador, que demandaron gran cantidad de ajustes y ensayos, se debió a la diferencia entre los dos software de programación (PC en Labview y la del uc en PCW) que se debían comunicar entre sí mediante RS-232. Como ya se explayo en un punto anterior "DIGITALIZACION DEL SISTEMA" del presente informe, fue necesario el ajuste de varios parámetros. A continuación enumeraremos los inconvenientes y soluciones que fuimos experimentando durante el desarrollo de la comunicación entre estos dispositivos; punto que, como ya mencionamos, demando gran cantidad de pruebas. 1. El primer problema que tuvimos, fue el de comunicar el uc con la PC. Esto se debía a que la PC transmitía a través del Labview más rápido que el uc. Entonces el uc se tildaba, produciendo que la PC largue el error de comunicación por no recibir datos. Para solucionar esto, se ensayaron los tiempos de TX-RX de la PC y del uc hasta lograr la correcta sincronización, la cual iniciaba con el comando de escritura de la computadora al PIC. 2. Con las variaciones debidas a los cambios de los potenciómetros, comenzaron a aparecer pequeños saltos en la medición de posición del brazo. Luego de varias pruebas y análisis de los registros generados, detectamos que se trataba de ruido introducido en la tapa de conversión, propio de las perturbaciones presentes en el ambiente. Para poder eliminar dicho ruido, se realizaron linealizaciones de lecturas en ambos programas. Esto consistió en implementar una pequeña rutina donde grabo el valor actual del ADC, y lo comparo con una nueva lectura, según: Void main { A=read(adc); For(;;) {B=(adc); If(A<B) {A=A+1; PRINTF( Lu,A); } If(B<A) {A=A-1; PRINTF( Lu,A); } If(B=A) {A=A; PRINTF( Lu,A); } } } Al implementar la rutina de arriba, logramos la linealidad, con una muy buena respuesta en el tiempo. Pero al querer variar de a 1 grado el movimiento, notamos que no funcionaba, y el sistema comenzaba a oscilar, surgiendo otro problema de software que se describe continuación. 3. Al notar que el ADC del uc era de 0-255 (8bits), se efectúa el siguiente calculo: si en 270º tengo el valor 255 en el ADC, entonces tengo por cada lectura del ADC una variación de 1.058º(270º/255=1.058º). Esto nos trae aparejado el problema que se nombraba anteriormente, debido a que, si queremos hacer un movimiento cuya variación del valor actual con el set-point es de 1º, el sistema de control no lo detecta, y el brazo comenzaba a oscilar. Debido a esto, se decide pasar el conversor ADC del uc de 8 a 10 bits, cambiando de una lectura de 0 a 255, por una de 0 a 1023. Rehaciendo las cuentas, obtenemos que 270º/1023=0.264º; lo que implica que para cada lectura del ADC, la posición varió 0.264º. De esta manera logramos obtener que la diferencia entre valor actual con el set-point sea de 1º y el sistema no oscile. Al emplearlo y efectuar posteriores pruebas de la modificación efectuada detectamos que el sistema frente a variaciones chicas del setpoint con respecto al valor actual, se comportaba perfectamente; pero para variaciones grandes comenzaba a oscilar de manera importante. Esto nos trajo aparejado otro error, el cual se describe a continuación, en el punto 4. 4. Al pasar el ADC del uc de 8 a 10 bits, notamos que para pequeñas variaciones del set-point con el valor actual el sistema se comportaba correctamente; pero a medida que la diferencia aumentaba, las oscilaciones comenzaban a ser criticas. Esto se debía a la modificación 67

realizada sobre el ADC, ya que la cantidad de cuentas realizadas por el mismo era mayor. Entonces, el brazo se movía más rápido que la indicación en la PC, la cual variaba de forma más lenta, a lo que venía haciendo antes de la modificación. Esto producía una mala lectura de la posición del brazo, el cual pasaba por la ubicación seteada por el operador, pero era informada con lentitud, lo que se traducía en una inestabilidad en el control. En primera instancia, se pensó que la velocidad de transmisión era lenta; donde se probó aumentar de 9600bps a 19200bps sin obtener resultados. Luego de este ensayo, se probó con transmitir un paquete de 5bits a 9600bps, sin obtener una mejora en la respuesta del sistema. Debido a esto se empieza a analizar la rutina de transmisión de datos desde el uc a la PC, y se halla que el código empleado en el punto 2 era el problema; para refrescar la memoria, el mismo es: Void main { A=read(adc); For(;;) { B=(adc); If(A<B) {A=A+1; PRINTF( Lu,A); } If(B<A) {A=A-1; PRINTF( Lu,A); } If(B=A) {A=A; PRINTF( Lu,A); } } } Donde para cuentas de 0 a 255 (ADC de 8bits), las cuentas las hace casi instantáneas; y la variación de la PC va de la mano con el giro del brazo. Pero la cosa cambio al hacer cuentas de 0 a 1023 (ADC de 10bits), donde tarda mucho más tiempo en hacer las cuentas, y por ende desfasa la transmisión de la posición con el giro del brazo; es decir, indica una posición que no se correspondía a la actual del brazo. Al detectar que la falla anterior era provocada por ese código, se procedió a eliminarlo del programa de uc. Pero esto, nuevamente nos trajo aparejado el problema de los saltos de los valores de lectura del ADC; que se estudiaran en el punto siguiente, luego de realizar más pruebas en la comunicación entre la PC y el PIC. 5. Debido a que se tuvo que eliminar la falla del retraso de transmisión de datos desde el uc, eliminando el código de arriba; se produjo nuevamente la falla de saltos en valores de posición. Es decir, había momentos donde el ADC leía siempre el mismo valor para una variación de 10 grados aproximadamente; donde esto se evidenciaba mas entre los 180 y 200 grados. Se procedió a resolver el problema, empezando por analizar alguna posible falla del ADC del uc. Estudiando el tiempo de conversión, se encuentra que este estaba seteado en 4uS usando el clock. Entonces, investigando en el manual del uc, encontramos que aun se podía hacer más rápido usando el clock interno del ADC; el cual varía entre 2 y 6uS dependiendo el cristal. Debido a que el cristal empleado es el de mayor frecuencia que soporta el uc (20 MHz) el clock interno del ADC sería el de 2uS, disminuyendo el tiempo de conversión. Al realizar las pruebas, el sistema de control dio el resultado esperado, leyendo todos los valores en el rango de 0 a 270º; pudiéndose así, setear un error de 1º en 270º de operación; es decir, aceptando un error en todo el rango del 0,37%. 6. Finalmente, como ultima mejora aplicada a la medición de posición del brazo robótico, empleado para la paletización de las cajas, se busco linealizar dicha variable. Como resultado de los análisis sobre los registros generado en las últimas pruebas, se observo la no linealidad de la medición. Para solucionar este inconveniente, como ya se detallo en el desarrollo del programa Labview, se genero una subrutina que cumpla la función de importar una tabla Excel, la cual contiene la correspondencia entre la variable de comunicación serie que recibe labview (valor entre 0 y 1023), y la posición real del brazo. Básicamente, para realizar un lineamiento "fino" de la lectura del movimiento del brazo robótico; se recurrió a efectuar varias pruebas, adquirir datos 68

e interpolar esta relación, con una tabla. A continuación mostramos parte de la tabla (la cual vimos anteriormente), para comprender mejor el "arreglo" del que estamos hablando: Como vemos en la tabla, el bloque colocara en su salida, el valor apuntado por la entrada, la cual tendrá una variación entre 0 y 1023, obteniendo la lectura de la posición exacta en donde se encuentra el brazo que debe paletizar la caja. Finalizada esta modificación, se procedió a las pruebas de todos el sistema terminado, obteniendo resultados aceptables. 69

CONCLUSIONES CONCLUSION DEL PROYECTO DE INGENIERIA A través de la realización del presente proyecto de ingeniería, hemos podido comprender la importancia de plantearse objetivos concisos, aplicables y concretables; para así poder solucionar un inconveniente real y existente; o realizar la mejora de un proceso específico. Durante el desarrollo del proyecto, logramos implementar gran parte de los conceptos estudiados en la materia Técnicas Digitales III, encontrando en determinados temas, diferencias entre la teoría o cálculos; y los resultados prácticos. Estas cuestiones que se fueron presentando, generaron dudas y problemáticas, las cuales pudimos solucionar con ayuda de la teoría y practica de la materia, la investigación y consultas adecuadas con profesores. Aprendimos a realizar tratamiento de imágenes, lo cual resulta ser una herramienta más que interesante. El haber volcado esta tecnología al ámbito de seguridad y control, para detectar y minimizar posibles accidentes, hace del presente, un proyecto interesante y atractivo. CONCLUSION PERSONAL DEL GRUPO DE TRABAJO Creemos haber aprendido a resolver conflictos reales, generando una mejora viable sobre un proceso existente. Esto nos aporta cierta experiencia que nos será de gran utilidad, en futuros retos laborales. De esta manera logramos enlazar la teoría con la práctica para poder obtener los resultados esperados, y así concluir el proyecto; aprendiendo a cooperar entre nosotros, y organizar los avances que dieron resultado a lo demostrado durante el desarrollo del informe. Somos consientes del tiempo dedicado a este proyecto de ingeniería; pero sabemos del aporte y enseñanza que nos deja todo este trabajo; lo cual hubiese sido imposible de conseguir, sin pasar por una experiencia similar. 70

ANEXOS LISTADO DE PROGRAMAS Los softwares empleados para realizar el proyecto, se dividen en dos partes, según sean empleados para la PC o para la placa de comando del bazo. A continuación enunciaremos las aplicaciones utilizadas, con sus respectivas características. Programas para realizar el software de comando de la PC: Labview 2011 de National Instruments o Labview 2011 Professional development system v11.0 Empleado para el programa principal de control y pantalla del sistema. o Vision builder AI Aplicación extra para Labview 2011 - Empleado para el tratamiento de imágenes obtenidas por la cámara web. 71

Programa empleados para la placa de comando: PCWHD Compiler v4.104 Empleado para realizar el software del uc PIC 16f877a por medio del lenguaje C++. El mismo posee un compilador que genera el archivo *.hex que contiene el código traducido al lenguaje assembler del PIC. PICkit 2 v2.61.00 Aplicado para tomar el archivo *.hex que contiene el código traducido en assembler, cargarlo en el uc PIC. 72

Pololu Maestro Control Center v1.4.0 Empleado para la programación calibración de los servomotores que conforman el brazo robótico; por medio de una placa de conexión Micro Maestro 6: PLACA UTILIZADA PARA LA CALIBRACION DE LOS SERVOMOTORES 73

FOTOS DEL PROYECTO FOTOS DEL PROTOTIPO Prototipo inicial del proyecto. Brazo robótico construido en acrílico 3mm. FOTOS MAQUINA PALETIZADORA Vista general de la maquina paletizadora. 74

Vista superior de la zona donde se paletizan las cajas, incluyendo zona de despacho. Vista maquina paletizando a 90 grados. 75

Maquina paletizando en zona de despacho, vigilada por cámara web. Vista superior de maquina paletizando caja en zona de despacho. 76

Vista superior de caja paletizada en zona de despacho, lista para ser expedida del proceso. FOTOS PANTALLA OPERATIVA Vista de la pantalla utilizada para operar toda la maquina paletizadora de cajas vigilada por cámara web. 77