You are on page 1of 122

UNIVERSIDAD DE SANTIAGO DE CHILE

FACULTAD DE INGENIERIA


Departamento de Ingeniera Mecanica

neumatica
Sistema de levitacion visual
con retroalimentacion

REBOLLEDO GONZALEZ
MAURICIO ANDRES

Profesor gua:
Renato Alberto Salinas Silva

presentado en con-
Trabajo de Titulacion
formidad a los requisitos para obtener el

Ttulo de Ingeniero Civil en Mecanica

Santiago Chile
2016
Mauricio Andres Rebolledo Gonzalez, 2016.

c b n d Algunos derechos reservados. Esta obra esta bajo una Licencia Creative Com-
mons Atribucion-NoComercial-Chile 3.0. Sus condiciones de uso pueden ser revisadas en:
<http://creativecommons.org/licenses/bync/3.0/cl/>.
RESUMEN
En este trabajo de titulacio n se desarrollan diversos metodos de control para un sis-
tema de levitacion neumatica con retroalimentacion visual. Actualmente el transporte de
objetos delicados es un problema que puede ser abordado desde el transporte neumatico,
sin embargo, controlar la posicio n de un objeto en el aire es un desafio que se enfrentara en
este trabajo. El principal objetivo, es desarrollar un sistema que pueda determinar la posi-
cion de un objeto en tiempo real, a traves, de las imagenes obtenidas por una camara en
la plataforma computacional embebida Raspberry Pi 2 y programar un metodo de control
que sea capaz de controlar la posicion de un objeto en el aire, por medio de un flujo de
aire inyectado por un ventilador de velocidad variable.
Para el desarrollo del programa, se utilizo el lenguaje Python con la biblioteca OpenCV,
el programa desarrollado se encarga del procesamiento de las imagenes para la determina-
cion de la posicion del objeto levitador. Se aplicaron tres metodos de control, la respuesta
de e stos es comunicada a traves de una senal PWM hacia un controlador de motor que
hace girar el ventilador del sistema levitador.
Para validar el sistema propuesto se realizan pruebas en la plataforma construida donde
se determina el error de medicion del sistema, se aplican tres metodos de control y luego
se determina cual es el mas adecuado para este sistema. Finalmente se logro realizar un
sistema de levitacion neumatica capaz de mantener un cuerpo levitando en una posicion
indicada con mediciones realizadas por un sensor visual.


Palabras clave: Sistema de control, Vision Computacional, OpenCV, Levitacion
Neumatica.

i
Dedicatoria

A mis padres, por el apoyo y carino incondicional durante toda mi vida.


A mis hermanos y sobrinos, que se encargan de alegrarme da a da.
A Daniela, por ser mi companera de vida y por el apoyo en los momentos
duros de este proceso.
A mis Amigos, que son los mejores.

En memoria de Figo.

ii
Tabla de Contenido

1. Introduccion 1
1.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Solucion propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. Objetivos y alcance del proyecto . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2. Objetivos especficos . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.3. Alcances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.4. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Metodologa y herramientas utilizadas . . . . . . . . . . . . . . . . . . . 5
1.4.1. Metodologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.2. Recursos Tecnologicos . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.2.1. Plataforma Raspberry Pi 2 rev B . . . . . . . . . . . . 6
1.4.2.2. Sistema Operativo Raspbian . . . . . . . . . . . . . . . 7
1.4.2.3. Lenguaje Python 2.7 . . . . . . . . . . . . . . . . . . . 7
1.4.2.4. OpenCV 2.4.11 . . . . . . . . . . . . . . . . . . . . . 8
1.4.2.5. Sensor Visual . . . . . . . . . . . . . . . . . . . . . . 9

2. Marco Teorico 10
2.1. Descripcion sistema de Levitacion . . . . . . . . . . . . . . . . . . . . . 10
2.1.1. Bloque de Sensado . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2. Sistema de Levitacion . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3. Bloque Actuador . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.4. Bloque Controlador . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.5. Modulo de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2. Descripcion Fsica y Supuestos . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1. Peso W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.2. Fuerza de Arrastre Fa . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.3. Otros fenomenos . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3. Modelo Color RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

iii
3. Modelado 21
3.1. Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.1. Dependencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1.1. Time . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1.2. NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1.3. RPi.GPIO . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1.4. Picamera . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1.5. OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2. Configuracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2.1. GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2.2. Registro . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2.3. Camara . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2.4. Interfaz grafica de configuracion . . . . . . . . . . . . 26
3.1.3. Adquisicion de imagenes . . . . . . . . . . . . . . . . . . . . . . 27
3.1.4. Configuracion Filtro . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.5. Filtrado imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.6. Determinacion Posicion . . . . . . . . . . . . . . . . . . . . . . 32
3.1.7. Metodo de Control . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1.7.1. On-Off . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1.7.2. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1.8. Generacion senal PWM . . . . . . . . . . . . . . . . . . . . . . 36
3.2. Controlador de motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4. Pruebas Experimentales 41
4.1. Montaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.1. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.1.1. Base Carril . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.1.2. Riel . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.1.3. Carro movil . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.1.4. Estructura Acrlico . . . . . . . . . . . . . . . . . . . . 43
4.1.1.5. Carcasa Raspberry Pi y Camara . . . . . . . . . . . . . 44
4.1.1.6. Soporte Cilindro y Cilindro . . . . . . . . . . . . . . . 44
4.1.2. Electronica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.2.1. Carcaza . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.2.2. Fuente de poder a rea Potencia . . . . . . . . . . . . . . 46
4.1.2.3. Fuente Poder area Logica . . . . . . . . . . . . . . . . 47
4.1.3. Iluminacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2. Mediciones Estaticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2.1. Error Mediciones Estaticas . . . . . . . . . . . . . . . . . . . . . 51
4.2.2. Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3. Pruebas de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3.1. Sistema On-Off . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

iv
4.3.2. Sistema On-Off Modificado . . . . . . . . . . . . . . . . . . . . 56
4.3.3. Sistema PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.4. Analisis de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.4.1. Sistema On-Off . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.4.2. Sistema On-Off Modificado . . . . . . . . . . . . . . . . . . . . 60
4.4.3. Sistema PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5. CONCLUSIONES Y PERSPECTIVAS FUTURAS 62


5.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.2. Principales aportes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3. Limitaciones y lneas futuras de investigacion . . . . . . . . . . . . . . . 65

Bibliografa 67

Anexos 69

Apendice 89
.1. Codigos Programados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
.2. Planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
.3. Gua Sintonizacion PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
.4. Esquemas Electricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

v

Indice de Tablas

1.1. Especificaciones Tecnicas Raspberry Pi 2 Model B . . . . . . . . . . . . 7


1.2. Especificaciones Tecnicas Camara [1] . . . . . . . . . . . . . . . . . . . 9

3.1. Modos de Camara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.1. Mediciones Estaticas en Pixeles . . . . . . . . . . . . . . . . . . . . . . 50


4.2. Resumen Mediciones Estaticas en mm . . . . . . . . . . . . . . . . . . . 51
4.3. Error Mediciones Estaticas en mm . . . . . . . . . . . . . . . . . . . . . 52
4.4. Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.5. Configuracion Pruebas Sistema de Control . . . . . . . . . . . . . . . . . 54
4.6. Configuracion Sistema On-Off . . . . . . . . . . . . . . . . . . . . . . . 55
4.7. Configuracion Sistema On-Off Modificado . . . . . . . . . . . . . . . . . 56
4.8. Configuracion PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.9. Resultados IAE e ITAE . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

1. Efecto de las acciones de control en los reguladores PID . . . . . . . . . 111

vi

Indice de Figuras

1.1. Esquema Sistema Levitacion . . . . . . . . . . . . . . . . . . . . . . . . 2


1.2. RP 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Ranking de lenguajes de programacion mas populares segun RedMonk . . 8

2.1. Sistema de control lazo cerrado [2] . . . . . . . . . . . . . . . . . . . . . 10


2.2. Bloques de Sistema de Levitacion . . . . . . . . . . . . . . . . . . . . . 11
2.3. Esquema Posicion sensor de Camara . . . . . . . . . . . . . . . . . . . . 12
2.4. Vision de Camara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5. Campo Visual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.6. Sistema levitador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7. Bloque Actuador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.8. Bloque Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.9. Interfaz Grafica configuracion PID y otros parametros . . . . . . . . . . . 16
2.10. Sistemas de fuerzas sobre objeto levitador. . . . . . . . . . . . . . . . . . 17
2.11. DCL Roce contacto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.12. Cubo RGB [3] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.1. Diagrama Programa Sistema de Levitacion . . . . . . . . . . . . . . . . . 22


3.2. Intefaz grafica cofiguracion PID y otros parametros . . . . . . . . . . . . 26
3.3. Ejemplo Arreglo RGB bits por canal de tamano 3x3 . . . . . . . . . . . . 27
3.4. Interfaz configuracion filtro color . . . . . . . . . . . . . . . . . . . . . . 28
3.5. Imagen Filtrada Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.6. Imagen Filtrada paso 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.7. Imagen Filtrada Paso 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.8. Imagen original . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.9. Imagen binaria despues de aplicar filtro . . . . . . . . . . . . . . . . . . 32
3.10. Imagen con Crculo en centroide . . . . . . . . . . . . . . . . . . . . . . 34
3.11. PWM [4] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.12. Esquema pines SN75441ONE . . . . . . . . . . . . . . . . . . . . . . . 39

4.1. Estructura Montada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41


4.2. Base Carril . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3. Riel Gua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

vii
4.4. Carro movil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.5. Estructura Acrlico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.6. Carcaza Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.7. Cilindro y Soporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.8. Esquema didactico conexion Puente H . . . . . . . . . . . . . . . . . . . 46
4.9. Caja Porta Circuitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.10. Fuente de poder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.11. Fuente poder 5v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.12. Iluminacion Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.13. Distancia Camara y Altura . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.14. Grafico Error con Distancia y Altura . . . . . . . . . . . . . . . . . . . . 52
4.15. Error Promedio con Altura . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.16. Error Promedio con Distancia de Camara . . . . . . . . . . . . . . . . . 53
4.17. Posicion sistema control On-Off . . . . . . . . . . . . . . . . . . . . . . 55
4.18. Posicion y Respuesta Sistema On-Off . . . . . . . . . . . . . . . . . . . 56
4.19. Posicion sistema On-Off Modificado . . . . . . . . . . . . . . . . . . . . 57
4.20. Posicion y Respuesta Sistema On-Off Modificado . . . . . . . . . . . . . 57
4.21. Posicion sistema PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.22. Posicion y respuesta PID . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.23. Comparativa Sistemas de Control . . . . . . . . . . . . . . . . . . . . . . 59
4.24. Sistema PID con Set Point Variable . . . . . . . . . . . . . . . . . . . . . 61

1. Efecto control Proporcional. . . . . . . . . . . . . . . . . . . . . . . . . 111


2. Efecto control Integral. . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3. Efecto control Derivativo. . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4. Integral del valor absoluto del Error. . . . . . . . . . . . . . . . . . . . . 113
5. Integral del valor absoluto del Error ponderado en el Tiempo. . . . . . . . 113
6. Esquema conexion Puente H . . . . . . . . . . . . . . . . . . . . . . . . 114

viii
Captulo 1

Introduccion

En el presente trabajo se desarrollan diversos metodos de control para un sistema de


levitacion neumatica con retroalimentacion visual. El principal objetivo es desarrollar un
programa que pueda determinar la posicion de un objeto en tiempo real a traves, de las
imagenes obtenidas por una camara en la plataforma computacional embebida Raspberry
Pi 2 y desarrollar un metodo de control que sea capaz de controlar la posicion de un objeto
sustentado en el aire por medio de un flujo de aire inyectado por un ventilador de velocidad
variable.
Para desarrollar este sistema se utilizo como base un sistema realizado con anterioridad
por Michael Miranda [2] en el marco de la asignatura Topicos Avanzados en Control
Automaticodel programa de doctorado en ciencias de la ingeniera, mencion automatica
de la Universidad de Santiago de Chile. El sistema esta compuesto por un cilindro con
un objeto en su interior, en la parte inferior del cilindro hay un ventilador accionado por
un motor de corriente continua de velocidad variable, conectado a un puente H. Este a
su vez recibe una senal PWM generada por un micro computador Raspberry Pi que tiene
conectada una camara que visualiza el cilindro con el objeto, como se puede ver en la
figura 1.1. El micro computador Raspberry Pi determina la posicion del objeto en tiempo
real a traves de las imagenes obtenidas por la camara y tambien genera la senal de control
para el sistema.

1
Para el analisis de las imagenes obtenidas por la camara se desarrollo un codigo en
Python, utilizando la librera OpenCV (Open Computer Vision) de caracter libre, bajo li-
cencia BSD. Esta librera permite hacer un analisis en tiempo real de las imagenes donde
el codigo entrega como resultado la posicion del objeto de interes. La informacion de la
posicion es registrada y procesada por un codigo propio escrito en Python, donde se apli-
can algunos metodos de control para generar una excitacion que es transmitida al puente
H a traves de una senal PWM.

Figura 1.1: Esquema Sistema Levitacion

1.1. Antecedentes
Las imagenes son ampliamente utilizadas como una de las fuentes mas importantes
de informacion, tal como: control de calidad, medicion, vigilancia de seguridad, desarro-
llo de sistemas biometricos, juegos multimedia de interaccion hombre maquina, robotica,
videoconferencias.

2
Gracias al progreso tecnologico en la fabricacion de sensores que captan imagenes
digitales a un bajo costo y mejorando cada vez sus caractersticas, se puede constatar el
crecimiento de su utilizacion en diversos campos y aplicaciones. Estos avances tambien
se han hecho presente en el campo de la computacion, logrando equipos con capacida-
des suficientes para el tratamiento de imagenes de alta resolucion en tiempo real y con
dimensiones altamente reducidas permitiendo su aplicacion incluso en dispositivos movi-
les. Estos avances han posibilitado el surgimiento de diversas plataformas orientadas a
desarrolladores y entusiastas en el a rea del control y robotica, una de estas plataformas es
la Raspberry Pi que es una plataforma de desarrollo de alta capacidad computacional, de
reducido tamano, altamente versatil y de muy bajo costo.
El transporte de objetos especiales o delicados, es un gran problema en la actualidad,
el transporte por levitacion neumatica es una posible solucion a este problema, ya que
practicamente se elimina el contacto fsico con otros solidos que pudiesen danar los ob-
jetos. Controlar la posicion de estos objetos cuando estan levitando es un desafo que se
aborda en este trabajo.

1.2. Solucion propuesta


En este trabajo se propone un sistema de levitacion neumatica con la utilizacion de un
sensor visual del tipo camara para medir la posicion del objeto levitador, as se podra ge-
nerar una respuesta a traves de algun metodo de control, dicha respuesta sera expresada a
traves de una senal PWM que luego sera interpretada por un controlador de motor, que a
su vez, hara funcionar el ventilador para lograr finalmente suspender el objeto en el aire.
Se propone la utilizacion de la plataforma computacional Raspberry Pi 2 en conjunto con
un programa desarrollado en Python y la biblioteca OpenCV.

3
1.3. Objetivos y alcance del proyecto

1.3.1. Objetivo general

Realizar un sistema de control automatizado de la altura de flotacion de un objeto en


el aire con retroalimentacion mediante sensor visual.

1.3.2. Objetivos especficos

Para la consecucion del objetivo general, se plantean las siguientes metas intermedias:

1. Describir el sistema de flotacion.

2. Determinar variables de control.

3. Programar un codigo que permita la obtencion de la posicion de un objeto mediante


sensor visual.

4. Generar respuesta de control de flotacion.

5. Seleccion de metodo de control: On-Off, On-Off Modificado y PID.

6. Implementar sistema en plataforma Raspberry Pi

1.3.3. Alcances

El sistema de control propuesto solo controla la posicion de un objeto en el eje


vertical.

El objeto levitador debe ser de un color, de preferencia primario y diferente de los


colores que se encuentran presentes en el lugar de trabajo.

Se considera que el objeto levitador esta estatico cuando sus oscilaciones sean de un
orden de amplitud inferior al largo del tubo.

4
La descripcion Fsica de los fenomenos ocurridos en el Sistema Levitador solo se
abordaran de manera general.

1.3.4. Limitaciones

La plataforma Raspberry Pi 2 tiene una capacidad computacional elevada para su


reducido tamano, sin embargo, para el analisis de imagenes de alta resolucion re-
quiere de capacidades aun mas altas, por lo tanto, se deben minimizar los costos
computacionales en el codigo desarrollado.

El sistema esta disenado para trabajar con condiciones lumnicas normales ya sea
con luz natural, artificial o ambas.

El sistema utiliza un filtro de imagenes por color, es por esto que no deben existir
objetos del mismo color del objeto levitador dentro del campo visual de la camara,
ya que alterara los resultados que se busca estudiar.

1.4. Metodologa y herramientas utilizadas

1.4.1. Metodologa

1. Definicion del problema y recopilacion de informacion.

2. Diseno y desarrollo de los enfoques de solucion.

3. Obtencion de la solucion de los problemas mediante el desarrollo de un software.

4. Validacion de las soluciones obtenidas.

1.4.2. Recursos Tecnologicos

Se disponen de los siguientes recursos tecnologicos para tratar el problema:

5
1.4.2.1. Plataforma Raspberry Pi 2 rev B

Raspberry Pi es un computador de placa reducida o (placa u nica) (SBC) de bajo costo


desarrollado en Reino Unido por la Fundacion Raspberry Pi, con el objetivo de estimular
la ensenanza de ciencias de la computacion en las escuelas.

Figura 1.2: Raspberry Pi 2 Modelo B [5]

La version utilizada en este trabajo es Rapberry Pi 2 Model B, la cual posee capacida-


des suficientes para utilizarse como un computador de escritorio, centro multimedia o en
este caso, para el analisis de imagenes y control automatizado. Posee 40 pines de entradas
o salidas digitales totalmente configurables por el usuario, ademas cuenta con un puerto
especialmente disenado para conectar una camara de alta velocidad (hasta 90 FPS).

6
Tabla 1.1: Especificaciones Tecnicas Raspberry Pi 2 Model B

SoC : Broadcom BCM2836


CPU : ARM11 ARMv7 ARM Cortex-A7 4 nucleos @ 900 MHz
GPU : Broadcom VideoCore IV 250 MHz. OpenGL ES 2.0
RAM : 1 GB LPDDR2 SDRAM 450 MHz
USB 2.0 : 4
Entradas/Salidas Digitales : 40 Pines GPIO
Salidas de vdeo : HDMI 1.4 @ 1920x1200 pxeles
Almacenamiento : microSD 32GB Clase 10
Ethernet : 10/100 Mbps
Tamano : 85,60x56,5 mm
Peso : 45 g
Consumo : 5v, 900mA

1.4.2.2. Sistema Operativo Raspbian

Raspbian es un sistema operativo libre basado en la distribucion de Linux Debian y


optimizado para correr en la plataforma de Rapsberry Pi. Este sistema operativo consta
de un set de programas y utilidades basicas para que pueda funcionar el Raspberry Pi, sin
embargo, contiene alrededor de 35.000 paquetes y software pre compilado en un formato
de facil instalacion.
Raspbian es una adaptacion no oficial de Debian Wheeze optimizada para procesado-
res ARM como el del Raspberry Pi, lo que permite un excelente rendimiento en aplicacio-
nes con alto uso de operaciones aritmeticas de punto flotante.[6]

1.4.2.3. Lenguaje Python 2.7

Segun [7],Python es un lenguaje de programacion de alto nivel, interpretado y mul-


tiproposito. Actualmente y como se puede apreciar en la figura 1.3, segun un ranking
propuesto por [8], Python es uno de los lenguajes de programacion mas utilizados, alcan-
zando el cuarto lugar a nivel mundial.

7
Figura 1.3: Ranking de lenguajes de programacion mas populares segun RedMonk

Una de las grandes ventajas de Python es su gran versatilidad en cuanto a distintas


plataformas se trate, esto ya que puede ser utilizado por distintos sistemas operativos,
algunos de estos son: Windows, Mac OS X, Linux, etc.
Python puede ser utilizado para desarrollar software destinado a distinto tipos de cosas,
como por ejemplo: Software de escritorio, aplicaciones cientficas, comunicaciones de red,
juegos, telefonos inteligentes y paginas Web.

1.4.2.4. OpenCV 2.4.11

OpenCV (Open Computer Vision) es una librera escrita en C y C++ y es capaz de


correr en Linux, Windows y OS X. Tienen un desarrollo activo en distintos lenguajes como
Python , Ruby, Matlab, entre otros. OpenCV fue disenada para la eficiencia computacional
altamente enfocada a aplicaciones en tiempo real.
Una de las mayores ventajas de OpenCV es que proporciona una estructura de vision
computacional de facil uso que ayuda al usuario a crear facilmente sofisticadas aplicacio-
nes de vision computacional.

8
OpenCV contiene alrededor de 500 funciones que abarcan diferentes a reas de vision
como control de calidad, imagenologa medica, seguridad, interfaces de usuario, calibra-
cion de camaras, vision estereo y robotica.[9]

1.4.2.5. Sensor Visual

Como sensor visual se utiliza una camara de alta velocidad y bajo costo disenada por
la Raspberry Pi Fundation, e sta se conecta a la Raspberry Pi a traves del puerto especial
CSI donde los datos son procesados directamente por la GPU, logrando de esta manera
un mejor rendimiento comparado a la conexion USB. A continuacion se presentan las
especificaciones tecnicas:

Tabla 1.2: Especificaciones Tecnicas Camara [1]

Sensor : Omnivision 5648


Tamano sensor : 3673,6 x 2738,4 m
Resolucion : 5 Megapixeles
Resolucion Fotografas: : 2592 x 1944
Maxima tasa de transferencia de imagenes : 1920 x 1080 @30 fps
1280 x 720 @60 fps
640 x 480 @90fps
Tamano : 36 x 36 mm
Conexion : Interfaz CSI Camera Serial Interface de 15 Pines
Lente : LS-40136 3.2mm M12xP0.5

9
Captulo 2

Marco Teorico

2.1. Descripcion sistema de Levitacion


El sistema de levitacion neumatica utilizado corresponde a un sistema de lazo cerrado.
Ver figura 2.1.
Para facilitar el trabajo de descripcion, se realiza una division en cinco bloques los
cuales se detallan a continuacion. Ver figura 2.2.

Figura 2.1: Sistema de control lazo cerrado [2]

10
Figura 2.2: Bloques de Sistema de Levitacion

2.1.1. Bloque de Sensado

Consiste en un sensor visual del tipo camara con las caractersticas mencionadas en la
tabla 1.2 cuyos datos son procesados en la plataforma Raspberry Pi con el codigo progra-
mado. La camara esta montada en una estructura de acrlico a una altura correspondiente
al punto medio del cilindro de levitacion. La estructura de acrlico puede moverse por
un riel, el cual, permite desplazarlo horizontalmente a una distancia desde 500mm hasta
1500mm del sistema levitador. Con respecto al a ngulo de inclinacion de la camara, co-
rresponde a un a ngulo de 90 con respecto a la horizontal. Es importante mencionar que
el sensor de la camara es rectangular, es por esta razon, que el dispositivo esta dispuesto
de manera vertical como se observa en la figura 2.3. La forma de como la camara entrega
la informacion se puede apreciar en la figura 2.4 y su campo visual esta representado en la
figura 2.5.

11
Figura 2.3: Esquema Posicion sensor de Camara

Figura 2.4: Vision de Camara

12
Figura 2.5: Campo Visual

2.1.2. Sistema de Levitacion

Esta compuesto por una base metalica que sostiene de manera vertical un cilindro de
acrlico, transparente y abierto en sus 2 extremos, ver figura 2.6a. Dentro de este cilindro
se inserta un objeto, el objeto levitador, de forma cono truncado, forrado con un manto de
color rojo y tapas de color negro, ver figura 2.6b.

13
(a) Cilindro y So- (b) Objeto Levitador
porte

Figura 2.6: Sistema levitador

2.1.3. Bloque Actuador

Esta conformado por un ventilador DC (ver figura 2.7a), el cual proporciona el caudal
de aire necesario para el control del objeto levitador. Ademas se encuentra un panal (ver
figura 2.7b), ubicado sobre el ventilador, cuya funcion es hacer que el flujo de aire sea
paralelo al tubo.

14
(a) Ventilador [2] (b) Panal Flujo Laminar[2]

Figura 2.7: Bloque Actuador

2.1.4. Bloque Controlador

Constituido por el Raspberry Pi con el codigo programado y el puente H, que cumple


la funcion de interpretar la senal de salida PWM de 3,3 Volt, entregada por el Raspberry
Pi, generando un voltaje de 0 a 12 volt, para controlar la velocidad del motor.

(a) Raspberry Pi 2 (b) Puente H SN75441ONE

Figura 2.8: Bloque Controlador

15
2.1.5. Modulo de Entrada

El modulo de entrada corresponde a un teclado, mouse USB y una interfaz grafica


desplegada en una pantalla HDMI o VGA estandar. A traves de este modulo, se ingresa la
configuracion y el Set Point del sistema, ver figura 2.9.

Figura 2.9: Interfaz Grafica configuracion PID y otros parametros

2.2. Descripcion Fsica y Supuestos


El sistema de levitacion neumatica propuesto puede describirse fsicamente de manera
simplificada como el modelo de un cuerpo que se desplaza de manera vertical en un flujo
de gas, se deben determinar las fuerzas que actuan sobre el cuerpo dentro del ducto, la
figura 2.10 muestra estas fuerzas, las cuales pueden ser cuantificadas por medio de las
leyes de Newton.

16
Figura 2.10: Sistemas de fuerzas sobre objeto levitador.

Las fuerzas que representa la figura 2.10 son el peso (W ) y la fuerza de arrastre (Fa ).
Estas fuerzas generan como resultado un cambio en la posicion y velocidad del cuerpo, lo
cual cumple con la igualdad representada en la segunda ley de Newton.[10]
A continuacion en la ecuacion 2.2, se calcula la sumatoria de fuerzas que actuan en el
eje vertical.

Fy : W Fa = m a
Donde a es la aceleracion vertical a la cual esta sometida el cuerpo levitador y m es la
masa de e ste. Cada una de las fuerzas se describen a continuacion:

2.2.1. Peso W

Es la fuerza ejercida por el campo gravitatorio sobre la masa del cuerpo levitador, su
valor corresponde a la masa multiplicada por la aceleracion de gravedad g.

~ = m ~g
W

m : masa del objeto levitador.

~g : aceleracion de gravedad.

17
2.2.2. Fuerza de Arrastre Fa

El arrastre es una fuerza mecanica. Es generada por la interaccion y contacto de un


cuerpo rgido y un fluido. Para que exista arrastre el cuerpo debe estar en contacto con el
fluido. Debe haber un movimiento relativo entre el fluido y el solido.
Las fuerzas de arrastre se pueden calcular, y se expresan matematicamente mediante
la formula [11]:

1
Fa = CD v2 A
2
Donde:

CD : Coeficiente de arrastre. Es un numero adimensional que depende de la forma del


objeto y su posicion con respecto al flujo.

: Densidad del fluido, en este caso aire.

v : Velocidad de la corriente de fluido en relacion al objeto.


A : Area caracterstica del cuerpo. Lo mas comun es considerar al a rea transversal como
el a rea caracterstica o a rea proyectada.

2.2.3. Otros fenomenos

Existen otros fenomenos que no han podido ser considerados para la descripcion fsica
y que si tienen importancia. El desplazamiento en el eje horizontal es descontrolado, en
algunas ocasiones el objeto levitador toca las paredes del cilindro, provocando la aparicion
de nuevas fuerzas, como la fuerza de roce.

18
Figura 2.11: DCL Roce contacto

2.3. Modelo Color RGB


Durante el desarrollo de este trabajo se realizaran analisis de imagenes digitales, para
esto, es necesario utilizar algun modelo que represente los colores, el modelo propuesto
corresponde al modelo de color RGB.
El modelo de color RBG esta basado en la sntesis aditiva, con el que es posible repre-
sentar un color mediante la mezcla por adicion de los tres colores de luz primarios (Rojo,
azul y verde).
Para indicar con que proporcion es mezclado cada color, se asigna un valor a cada
uno de los colores primarios, de manera que el valor 0significa que no interviene en
la mezcla y, a medida que ese valor aumenta, se entiende que aporta mas intensidad a la
mezcla.
La intensidad de cada una de las componentes se mide segun una escala que va del
0 al 255 y cada color es definido por un conjunto de valores escritos entre parentesis
(correspondientes a valores R, G y B) y separados por comas.
De este modo, el rojo se obtiene con (255,0,0), el verde con (0,255,0) y el azul con
(0,0,255), obteniendo, en cada caso un color resultante monocromatico. La ausencia de

19
color, es decir el color negro, se obtiene cuando las tres componentes son 0: (0,0,0). La
combinacion de dos colores a su maximo valor de 255 con un tercero con valor 0 da lugar
a tres colores intermedios. De esta forma, aparecen los colores amarillo (255,255,0), cian
(0,255,255) y magenta (255,0,255). El color blanco se forma con los tres colores primarios
a su maximo valor (255,255,255).
El conjunto de todos los colores tambien se puede representar en forma de cubo, ver
imagen 2.12. Cada color es un punto de la superficie o del interior de e ste. La escala de
grises estara situada en la diagonal que une al color blanco con el negro. [12]

Figura 2.12: Cubo RGB [3]

20
Captulo 3

Modelado

3.1. Programa
El programa detallado a continuacion se encarga de obtener y procesar los datos del
sensor visual, para luego analizarlos y determinar el error, de esta forma, se genera una
respuesta para el sistema a traves de diferentes metodos de control y finalmente la respues-
ta es expresada por medio de la modulacion de una senal PWM. El codigo programado se
divide en 8 bloques representados en la figura 3.1 y detallados en las secciones siguientes.

21
Figura 3.1: Diagrama Programa Sistema de Levitacion

22
3.1.1. Dependencias

Para comenzar el programa se importan las bibliotecas necesarias que permitiran el


funcionamiento de e ste, a continuacion se describe el funcionamiento de cada una:

3.1.1.1. Time

Esta biblioteca es parte de las Bibliotecas basicas de Python, proporciona diversas


funciones relacionadas con el tiempo. En el programa sera utilizado para determinar el
rendimiento de algunas funciones entre otras cosas.

3.1.1.2. NumPy

Numpy es una biblioteca en la que se define un tipo de dato que representa matrices
multidimensionales, equivalentes a las matrices de los numeros reales (IR). Ademas inclu-
ye algunas funcionalidades basicas para trabajar con ellas. Numpy es una librera con una
amplia tradicion en Python, es estable y muy rapida.[13]

3.1.1.3. RPi.GPIO

RPi.GPIO es una biblioteca que permite la comunicacion con los 40 pines GPIO dis-
ponibles en la platarforma Raspberry Pi. Esta biblioteca gestiona las entradas o salidas
digitales, ademas puede modular senales del tipo PWM.

3.1.1.4. Picamera

Picamera es una biblioteca que proporciona una interfaz entre el modulo de la Rasp-
berry Cam con Python. Trabaja con una licencia libre tipo BSD, a continuacion se mues-
tran los modos de camara disponibles para la configuracion:

23
Tabla 3.1: Modos de Camara

# Resolucion Relacion de aspecto Framerates


1 1920x1080 16:9 1-30fps
2 2592x1944 4:3 1-15fps
3 2592x1944 4:3 0.1666-1fps
4 1296x972 4:3 1-42fps
5 1296x730 16:9 1-49fps
6 640x480 4:3 42.1-60fps
7 640x480 4:3 60.1-90fps

3.1.1.5. OpenCV

Esta biblioteca es la encargada de proporcionar las funciones necesarias para el anali-


sis de imagenes. Se utilizaran muchas de sus funciones como la interfaz grafica, filtrado
de imagenes, analisis y calculos de momentos, superposicion de formas geometricas en
tiempo real entre otras.

3.1.2. Configuracion

Despues de importar todas las libreras necesarias se configuran los parametros deta-
llados a continuacion :

3.1.2.1. GPIO

Es necesario indicar que pines seran utilizados para enviar la respuesta del sistema al
bloque actuador, la senal de salida sera del tipo PWM, que posteriormente sera interpretada
por el puente H SN75441ONE. El puente H requiere de tres senales logicas para hacer
funcionar el motor, las cuales son:

Pin 2: Este pin se configura como pin de salida (GPIO.OUT) y se le asigna el valor ver-
dadero (3.3V) para indicarle al puente H que encienda el motor.

Pin 3: Este pin se configura como pin de salida (GPIO.OUT) y se indica que la senal

24
de salida sera del tipo PWM (3,3V). (GPIO.PWM[pin,frecuencia]) para indicarle al
puente H el sentido de giro y la velocidad a la cual debe girar el motor.

Pin 4: Este pin se configura como pin de salida (GPIO.OUT) y se le asigna el valor falso
(0.0V) para indicarle al puente H el sentido de giro del motor.

3.1.2.2. Registro

Se crea un archivo para guardar registro de la informacion utilizada por el sistema


como tiempo, posicion, senal de salida entre otros. Este registro es almacenado en la me-
moria micro SD del Raspberry Pi.

3.1.2.3. Camara

Se indican los parametros necesarios para que la librera Picapera 3.1.1.4 pueda pro-
porcionar los datos al programa.

Resolucion : Se indica la resolucion en pixeles a la cual se le solicitaran las imagenes


a la camara. Para evitar un re dimensionamiento se deben utilizar las resoluciones
indicadas en la tabla 3.1

camera.resolution = (ancho,alto)

Framerate : Se indica la velocidad maxima a la cual se enviaran las imagenes en Frames


Por Segundo (FPS), esta no debe superar la indicada en la tabla 3.1

camera.framerate = FPS

Formato : Se indica el formato al cual se solicitan las imagenes, por un tema de ahorro
de costos computacionales se trabaja en formato RGB que corresponde a los datos
entregados por la camara en forma de un arreglo de 3 dimensiones RGB de 8 bits
por canal.

25
rawCapture = PiRGBArray(camera, size=(ancho,alto))

Inicializacion : La camara requiere un tiempo para inicializarce por lo que se genera una
pausa de 0,1 segundos.

time.sleep(0.1)

3.1.2.4. Interfaz grafica de configuracion

Para que el usuario pueda configurar el filtro, set point y parametros de control se crea
una interfaz grafica correspondiente a una ventana con 6 trackbars para la configuracion
del filtro por color, un trackbar para el set point y los trackbars que le correspondan al
metodo de control utilizado. En la imagen 3.2 se puede ver la interfaz grafica para el
metodo de control PID.

Figura 3.2: Intefaz grafica cofiguracion PID y otros parametros

Para la creacion de la interfaz grafica se utilizo la instruccion cv2.createTrackbar de la

26
biblioteca OpenCV para cada uno de los parametros a configurar. Esta instruccion trabaja
con la siguiente sintaxis segun[14] :

cv2.createTrackbar(Variable,Nombre Ventana,Valinf,Valsup,nothing)

Parametros:

Variable: Corresponde al nombre de la variable que se ingresa al trackbar.

Nombre Ventana Corresponde al nombre de la ventana donde se desplegara el trackbar.

Valinf Corresponde al valor mnimo al cual el trackbar puede llegar.

Valsup Corresponde al valor maximo al cual el trackbar puede llegar.

3.1.3. Adquisicion de imagenes

El Sensor Omnivision 5648 proporciona una salida de imagenes en formato RGB de


8 bits a traves del puerto CSI que llegan directamente al GPU (Unidad de Procesamiento
Grafico) Broadcom VideoCore IV. La biblioteca Picamera3.1.1.4 permite la obtencion de
un arreglo de 3 dimensiones en formato RGB de 8 bits por canal organizado de la manera
(fila,columna,color) , la figura 3.3 es la representacion de un arreglo de tamano 3x3 pixeles.

Figura 3.3: Ejemplo Arreglo RGB bits por canal de tamano 3x3

Para el tratamiento de estas imagenes se realiza un bucle que extrae un frame que
almacena en la variable image. Se utiliza la siguiente sintaxis:

27
for frame in camera.capture continuous(rawCapture, format=bgr,
use video port=True):

3.1.4. Configuracion Filtro

El programa posee una interfaz grafica para la configuracion del filtro de color, esta
interfaz esta compuesta por 6 trackbars creados en punto 3.1.2.4, ver figura 3.4.

Figura 3.4: Interfaz configuracion filtro color

Los tres primeros trackbars corresponden al limite inferior del rango de filtrado, mien-
tras que los tres siguientes corresponden al limite superior del rango de filtrado. Para de-
terminar los valores que se deben asignar a cada trackbar se debe tener en cuenta las
condiciones lumnicas y colores presentes en el lugar de trabajo, el objeto levitador es de
color rojo, por lo que se recomienda fijar los valores de la siguiente manera:

1. Mover el trackbar llamado R max (limite superior del canal Rojo) hasta el valor 255.

28
Figura 3.5: Imagen Filtrada Paso 1

2. Mover los trackbars B max y G max hasta que el objeto levitador se encuentre
totalmente blanco en la ventana de imagen filtrada. La imagen filtrada se encuentra
con ruido no deseado.

Figura 3.6: Imagen Filtrada Paso 2

3. Mover el trackbar R min hasta que todo el ruido desaparezca y solamente se encuen-
tre el objeto levitador presente en la ventana imagen filtrada.

29
Figura 3.7: Imagen Filtrada Paso 3

3.1.5. Filtrado imagen

Hasta este momento el programa tiene un arreglo que representa la imagen en formato
RGB de 8 bits por canal (3 canales), el cual debe ser transformado en un arreglo binario
mediante la instruccion InRange de OpenCV.
La instruccion InRange se encarga de comprobar si un elemento se encuentra dentro
de los rangos indicados por dos arreglos, uno superior y otro inferior, para entregar como
resultado un arreglo del mismo tamano que el original, pero con todos sus elementos
binarios.
En python se utiliza de la siguiente manera segun [15]:

cv2.inRange(src, lowerb, upperb[, dst]) dst

Parametros:

src: Arreglo de entrada, en RGB para este sistema.

lowerb: limites inferiores en formato de arreglo RGB de 3 canales de 8bits por canal
(valores entre 0-255).

upperb: limites en formato de arreglo RGB de 3 canales de 8bits por canal (valores entre
0-255).

30
dst: Arreglo de salida binario.

La instruccion realiza la siguiente funcion a cada elemento del arreglo, en este caso de
3 canales:

dst(I) = lowerb(I)0 src(I)0 upperb(I)0

lowerb(I)1 src(I)1 upperb(I)1

lowerb(I)2 src(I)2 upperb(I)2

El programa toma la imagen del arreglo image y aplica la instruccion InRange con
los parametros obtenidos en 3.1.4, para el sistema en estudio el filtro se configura dejando
solamente el color rojo del objeto levitador. El resultado, es un arreglo binario almacenado
en la variable filtrada del mismo tamano que el arreglo image. A continuacion en la figura
3.8 se muestra la imagen original y en la figura 3.9 la imagen binaria filtrada.

Figura 3.8: Imagen original

31
Figura 3.9: Imagen binaria despues de aplicar filtro

3.1.6. Determinacion Posicion

Para determinar la posicion se deben calcular los momentos del arreglo binario filtrada,
para esta tarea se utiliza la instruccion cv2.Moments de OpenCV.
La sintaxis en python es de la siguiente manera segun [16]:

cv2.moments(imgbinaria) Momentos

Parametros:

imgbinaria: Corresponde al nombre de la variable de entrada, debe ser de caracter bina-


rio.

Momentos: Corresponde al vector entregado por la funcion cv2.moments,

La definicion para el calculo de momentos alrededor del punto c en un entorno de dos


dimensiones es la siguiente:

ZZ
mi j = (x cx )i (y cy ) j f (x, y)dxdy

32
Donde f (x, y) es la imagen que se asumira continua. Para este caso se requiere discretizar
ya que la imagen esta compuesta por pixeles discretos. Se reemplazan las integrales por
sumatorias quedando de la siguiente manera:


mi j = (x cx )i(y cy) j f (x, y)
x=0 y=0

Para este caso se ignoran las constantes cx y cy .

mi j = f (x, y) x j yi
x,y

Para calcular el centroide se requiere antes calcular el a rea, que corresponde al mo-
mento m00 :
Area = m00 = f (x, y) x0 y0
x,y

Donde f (x, y) para el caso de una imagen binaria tiene los valores de 0 para el color negro
y 1 para el color blanco.
Finalmente, la posicion del centroide viene dada por la siguiente ecuacion:

m10 m01
y =
x, ,
m00 m00

Despues de realizar estos calculos el programa dibuja un circulo donde su centro co-
rresponde al centroide, esto se realiza sobre la imagen original como se ve en la figura
3.10.

33
Figura 3.10: Imagen con Crculo en centroide

3.1.7. Metodo de Control

3.1.7.1. On-Off

La salida del controlador On-Off, o de dos posiciones, solo puede cambiar entre dos
valores al igual que dos estados de un interruptor. Este sistema de control no tiene la capa-
cidad para producir un valor exacto en la variable controlada para un valor de referencia
dado pues el controlador produce una continua desviacion del valor de referencia.

0 si error < 0
Respuesta =
100 si error > 0

3.1.7.2. PID

La combinacion de la accion de control proporcional, la accion de control integral


y la accion de control derivativa se denomina accion de control proporcional-integral-
derivativa. Esta accion combinada tiene las ventajas de cada una de las tres acciones de

34
control individuales.

Accion proporcional (P): es la accion que produce una senal proporcional a la desvia-
cion de la salida del proceso respecto al Set Point.

Accion integral (I): es la accion que produce una senal de control proporcional al tiempo
que la salida del proceso ha sido diferente del Set Point.

Accion derivativa (D): es la accion que produce una senal de control proporcional a la
velocidad con que la salida del proceso esta cambiando respecto del Set Point.

La ecuacion de un controlador con esta accion combinada esta dada por:

Kp de(t)
Z
u(t) = K p e(t) + e(t)dt + K p Td
Ti dt

Donde K p es la ganancia proporcional, Ti es el tiempo integral y Td es el tiempo


derivativo.[17]
La programacion de este metodo se realizo con la siguiente sintaxis:

Se calcula el intervalo de tiempo (dt) que tardo el programa en analizar la imagen.

tnow=time.clock()

dt=tnow-t0

tnow : Corresponde al tiempo en segundos en el momento que es solicitado.

t0 : Corresponde al tiempo donde se captura el frame.

dt : Corresponde a la diferencia entre el tiempo en que se captura el frame y el


tiempo en que se termina el proceso de deteccion de posicion.

Se calcula el error, error de sumatoria y error derivativo.

error=punto-cx

35
errorsum=errorsum+error*dt

derror=(error-lasterror)/dt

lasterror=error

error : Corresponde a la diferencia entre el Set Point y la posicion detectada.

errorsum : Corresponde a la sumatoria de los errores multiplicados por la diferen-


cia de tiempo (dt).

derror : Corresponde a la diferencia del error con el error anterior dividido por la
diferencia de tiempo(dt).

lasterror : Corresponde al error anterior.

Se genera la respuesta del sistema PID en la variable PIDX.

PIDX=kp*error+ki*errorsum+kd*derror

PIDX : Respuesta del sistema PID.

kp : Constante Proporcional.

ki : Constante Integral.

kd : Constante Derivativa.

Se realizan ajustes a la respuesta del sistema PID, se aplican los limites inferiores y
superiores, ya que esta respuesta debe estar dentro del rango de valores de 0 a 100 o
dentro de los valores configurados por el usuario.

3.1.8. PWM
Generacion senal

La modulacion por ancho o de pulso (o en ingles pulse width modulation PWM) es


un tipo de senal de voltaje utilizada para enviar informacion o para modificar la cantidad

36
de energa que se enva a una carga. Este tipo de senales es muy utilizada en circuitos
digitales que necesitan emular una senal analogica.
Este tipo de senales son de tipo cuadrada en las cuales se les cambia el ancho relativo
respecto al perodo de la misma, el resultado de este cambio es llamado ciclo de trabajo y
sus unidades estan representadas en terminos de porcentaje. Cuando la senal esta en 0 %
se puede ver que representa un 0 y en cambio si es de 100 %, entonces el voltaje aplicado
sera maximo. Matematicamente se tiene que:


D= 100 %
T

D: Ciclo de trabajo

: Tiempo en que la senal es positiva.

T: Periodo

Para emular una senal analogica se cambia el ciclo de trabajo (duty cicle en ingles) de tal
manera que el valor promedio de la senal sea el voltaje aproximado que se desea obtener,
pudiendo entonces enviar voltajes entre 0[V] y el maximo que soporte el dispositivo PWM
utilizado, en el caso de Raspberry Pi es 3.3[V].[4]

37
Figura 3.11: PWM [4]

La Biblioteca GPIO es la encargada de generar la senal PWM a traves de la instruccio-


nes GPIO.PWM(pin,freq) que indica que el pin configurado debe emitir una senal PWM y
ChangeDutyCycle(senal) que se encarga de cambiar el ciclo de trabajo la sintaxis de esta
u ltima se explica a continuacion:

ChangeDutyCycle(senal)


Senal: Valor correspondiente al ciclo de trabajo en porciento, sus valores van de 0 a 100.

3.2. Controlador de motor


El controlador de motor es el encargado de transformar la senal de control tipo PWM
emitida por el Raspberry Pi en una senal de potencia con voltaje variable para alimentar al
motor del ventilador. Se sabe que la velocidad de un motor DC es proporcional al voltaje
aplicado, el controlador de motor proporciona una salida cuyo voltaje es proporcional al
ancho de pulso, se puede establecer una relacion matematica descrita a continuacion:

(PW M RPM12vdc )
RPM =
100 %

38
RPM: Valor teorico de velocidad de giro del motor.

RPM12vdc : Valor de velocidad de giro del motor a su voltaje maximo, en este caso 12vdc.

PWM: Valor en porcentaje del ciclo de trabajo de la senal PWM.

El controlador de motor utilizado es un circuito integrado fabricado por Texas Instru-


ments modelo SN75441ONE, e ste esta alimentado, en su parte de potencia por una fuente
de poder de 12VDC con 2A y en su parte logica, es alimentada por la salida de 5V del
Raspberry Pi.
A continuacion en la figura 3.12 se detalla el esquema de conexion de pines del circuito
integrado SN75441ONE.

Figura 3.12: Esquema pines SN75441ONE

Pin 1: Este pin corresponde a una entrada logica que cumple la funcion de activar o des-
activar el motor 1, esta conectado al pin GPIO03 del Raspberry Pi.

Pin 2: Este pin corresponde a una entrada logica que cumple la funcion de controlar el
sentido de giro del motor 1 y recibe la senal PWM desde el pin GPIO02 del Rapberry
Pi.

Pin 3: Este pin corresponde a una salida de potencia, puede ser negativa o positiva, esta co-
nectado a un terminal del ventilador.

Pin 4: Tierra.

39
Pin 5: Tierra.

Pin 6: Este pin corresponde a una salida de potencia, puede ser negativa o positiva, esta co-
nectado a un terminal del ventilador.

Pin 7: Este pin corresponde a una entrada logica que cumple la funcion de controlar el
sentido de giro del motor 1 y recibe la senal PWM desde el pin GPIO02 del Rapberry
Pi.

Pin 8: Este pin corresponde una entrada de potencia, donde se suministra la corriente para
alimentar al ventilador 1, va conectado a la salida positiva de la fuente de poder DC.

Pin 9: No se utiliza en este circuito.

Pin 10: No se utiliza en este circuito.

Pin 11: No se utiliza en este circuito.

Pin 12: Tierra.

Pin 13: Tierra.

Pin 14: No se utiliza en este circuito.

Pin 15: No se utiliza en este circuito.

Pin 16: Este pin corresponde a una entrada de 5v para alimentar el circuito integrado,
esta conectado a la salida de 5v del Raspberry Pi.

40
Captulo 4

Pruebas Experimentales

4.1. Montaje
Para describir de mejor manera el montaje del sistema se utilizara la division de es-
tructura fsica y electronica, descritos a continuacion:

4.1.1. Estructura

La estructura fsica utilizada esta detallada en los planos del Apendice B, a continua-
cion en la imagen 4.1 se observa el montaje final de la estructura.

Figura 4.1: Estructura Montada

A continuacion se describe brevemente cada uno de los elementos de la estructura:

41
4.1.1.1. Base Carril

Estructura de 1500mm de largo fabricada con perfiles L de acero, todas las uniones
son soldadas, esta pintado de color negro mate y tiene 4 perforaciones de 12 milmetros
en su placa centro y posterior. Su funcion es ser el soporte para el carro y estructura que
tiene la camara y el Raspberry Pi.

Figura 4.2: Base Carril

4.1.1.2. Riel

Dos Rieles de 1000mm de largo, esta fabricado con dos tubos de 12mm de diametro
exterior y 10mm de diametro interior. Cumple la funcion de gua para el carro movil y van
montados en las perforaciones de la base y carro movil.

Figura 4.3: Riel Gua

42
4.1.1.3. Carro movil

Carro fabricado con perfiles L de acero, sus dimensiones son 130x150x60mm. Tiene
4 perforaciones de 12mm por donde pasan las guas, todas sus uniones son soldadas y
esta pintado de color negro mate. Su funcion es sostener la estructura que soporta la camara
y el Raspberry Pi.

Figura 4.4: Carro movil

4.1.1.4. Estructura Acrlico

Estructura fabricada en acrlico transparente de 3mm de espesor, sus dimensiones son


130x150x510mm. Va montado sobre el carro movil, todas las uniones fueron echas con
cloroformo. Su funcion es soportar el Raspberry Pi y la camara.

Figura 4.5: Estructura Acrlico

43
4.1.1.5. Carcasa Raspberry Pi y Camara

Carcasa comercial de acrlico especialmente disenada para alojar al Raspberry Pi 2


Model B, se le adiciono un soporte de camara fabricado en acrlico y unido con clorofor-
mo.

Figura 4.6: Carcaza Raspberry Pi

4.1.1.6. Soporte Cilindro y Cilindro

El soporte de cilindro esta construido de acero solido, mide 1100mm de alto, sus unio-
nes son soldadas y esta pintado de color negro mate. El cilindro esta construido de acrlico
transparente con un largo de 910mm y un diametro de 97mm. Este cilindro va fijado al
soporte mediante abrazaderas metalicas.

44
(a) Soporte Cilindro (b) Cilindro Acrlico

Figura 4.7: Cilindro y Soporte

4.1.2. Electronica

El montaje electronico utilizado esta representado de manera esquematica en la figura


6 ubicada en el apendice, tambien se muestra una representacion didactica del circuito en
la figura 4.8.

45
Figura 4.8: Esquema didactico conexion Puente H

4.1.2.1. Carcaza

El circuito fabricado esta almacenado en una caja porta circuitos de plastico negro.

Figura 4.9: Caja Porta Circuitos

4.1.2.2. Fuente de poder a rea Potencia

Para la alimentacion de la parte de potencia del circuito se utilizo un fuente de poder


DC de 12v 2A, el voltaje se fijo en 12v.

46
Figura 4.10: Fuente de poder

4.1.2.3. Fuente Poder area Logica

Para la alimentacion del a rea logica compuesta por el Raspberry Pi se utilizo una fuente
de poder DC de 5v 2A con conexion micro USB.

Figura 4.11: Fuente poder 5v

4.1.3. Iluminacion

Todas las pruebas se realizaron en las instalaciones del laboratorio de robotica del de-
partamento de Ingeniera Mecanica de la Universidad de Santiago de Chile, la iluminacion

47
proviene de dos fuentes principalmente, luz natural que entra desde la parte superior del
galpon y luz artificial desde un grupo de tubos fluorescentes ubicados a 2 metros de altura
aproximadamente.

Figura 4.12: Iluminacion Laboratorio

4.2. Mediciones Estaticas


Es necesario analizar la calidad de las mediciones obtenidas por el sensor visual y el
codigo programado, para esto se realizaron mediciones con el objeto levitador puesto de
manera estatica en 8 posiciones a lo largo del cilindro desde 0 a 700 [mm] de altura, en

48
pasos de 100[mm] y tambien se vario la distancia de la camara en pasos de 100 [mm]
desde 800 a 1400[mm], ver figura 4.13. La tabla 4.1 muestra los resultados obtenidos en
pixeles.

Figura 4.13: Distancia Camara y Altura

49
Tabla 4.1: Mediciones Estaticas en Pixeles

Distancia 800 900 1000 1100 1200 1300 1400


/ Altura [mm] [mm] [mm] [mm] [mm] [mm] [mm]
0[mm] 10[px] 46[px] 64[px] 89[px] 105[px] 116[px] 129[px]
100[mm] 79[px] 107[px] 119[px] 138[px] 151[px] 161[px] 166[px]
200[mm] 149[px] 169[px] 174[px] 188[px] 199[px] 204[px] 205[px]
300[mm] 218[px] 230[px] 229[px] 239[px] 246[px] 246[px] 242[px]
400[mm] 287[px] 291[px] 284[px] 288[px] 292[px] 290[px] 283[px]
500[mm] 357[px] 352[px] 340[px] 336[px] 340[px] 333[px] 320[px]
600[mm] 426[px] 414[px] 396[px] 387[px] 385[px] 375[px] 359[px]
700[mm] 496[px] 476[px] 450[px] 438[px] 432[px] 419[px] 399[px]

Para transformar las medidas de pixeles a milmetros se utiliza la siguiente metodo-


loga:

1. Restar a todos los valores el valor de la muestra 1 que corresponde a la altura cero.

H pxi = Hi H1

Donde:

H px : Altura corregida en pixeles.

H1 : Altura de muestra en pixeles.

2. Calcular coeficientes locales Cl.

H pxi H pxi1
Cli =
Hmmi Hmmi1

Donde:

H px : Altura de muestra corregida en Pixeles.

Hmm : Altura referencia en milmetros.

50
3. Calcular coeficiente global Cp como el promedio de todos los coeficientes locales.

ni=1 Cli
Cp =
n

Donde:

Cli : Coeficientes locales.

n : Numero total de muestras.

4. Aplicar coeficiente Global Cp a las valores.

Hmmi = H pxi Cp

Como resultado de la transformacion descrita anteriormente se obtiene la tabla 4.2 que


contienen las medidas de las muestras en milmetros.

Tabla 4.2: Resumen Mediciones Estaticas en mm

Distancia 800 900 1000 1100 1200 1300 1400


/ Altura [mm] [mm] [mm] [mm] [mm] [mm] [mm]
0[mm] 0[mm] 0[mm] 0[mm] 0[mm] 0[mm] 0[mm] 0[mm]
100[mm] 100[mm] 100[mm] 100[mm] 99[mm] 98[mm] 103[mm] 97[mm]
200[mm] 201[mm] 201[mm] 200[mm] 200[mm] 201[mm] 202[mm] 200[mm]
300[mm] 300[mm] 300[mm] 299[mm] [mm] 302[mm] 298[mm] 297[mm]
400[mm] 400[mm] 400[mm] 399[mm] 401[mm] 400[mm] 398[mm] 405[mm]
500[mm] 501[mm] 499[mm] 501[mm] 498[mm] 503[mm] 497[mm] 502[mm]
600[mm] 600[mm] 600[mm] 603[mm] 601[mm] 599[mm] 593[mm] 605[mm]
700[mm] 701[mm] 702[mm] 701[mm] 704[mm] 700[mm] 694[mm] 710[mm]

4.2.1. Error Mediciones Estaticas

La tabla 4.3 muestra el error en milmetros correspondiente a la diferencia entre las


medidas de referencia con las obtenidas en las muestras aplicando la transformacion ante-
riormente explicada.

51
Tabla 4.3: Error Mediciones Estaticas en mm

Distancia 800 900 1000 1100 1200 1300 1400 Promedio


/ Mues- [mm] [mm] [mm] [mm] [mm] [mm] [mm]
tra
1 0,0[mm] 0,0[mm] 0,0[mm] 0,0[mm] 0,0[mm] 0,0[mm] 0,0[mm] 0,0[mm]
2 0,5[mm] 0,5[mm] 0,2[mm] 1,2[mm] 1,6[mm] 3,0[mm] 2,7[mm] 1,4[mm]
3 0,5[mm] 0,7[mm] 0,4[mm] 0,4[mm] 1,1[mm] 1,5[mm] 0,2[mm] 0,7[mm]
4 0,1[mm] 0,2[mm] 0,5[mm] 2,4[mm] 1,7[mm] 2,3[mm] 2,9[mm] 1,5[mm]
5 0,4[mm] 0,3[mm] 0,7[mm] 1,2[mm] 0,1[mm] 1,6[mm] 4,9[mm] 1,3[mm]
6 0,6[mm] 0,8[mm] 0,9[mm] 2,0[mm] 2,9[mm] 3,1[mm] 2,1[mm] 1,8[mm]
7 0,1[mm] 0,4[mm] 2,6[mm] 0,9[mm] 0,9[mm] 6,9[mm] 4,6[mm] 2,3[mm]
8 1,1[mm] 1,6[mm] 0,6[mm] 3,7[mm] 0,3[mm] 6,2[mm] 9,8[mm] 3,3[mm]
Promedio 0,4[mm] 0,5[mm] 0,7[mm] 1,5[mm] 1,1[mm] 3,1[mm] 3,4[mm] 1,5[mm]

La figura 4.14 muestra un grafico que representa el comportamiento del error frente a
la variacion de la distancia de la camara y la altura del objeto levitador.

Figura 4.14: Grafico Error con Distancia y Altura

Para visualizar de mejor forma el comportamiento del error frente a las variables altura
y distancia de camara se presentan a continuacion en las figuras 4.15 y 4.16

52
Figura 4.15: Error Promedio con Altura

Figura 4.16: Error Promedio con Distancia de Camara

53
4.2.2. Rendimiento

Se realizaron mediciones de la posicion del objeto a tres distintas resoluciones para


medir la cantidad de imagenes que puede procesar el sistema por unidad de tiempo. A
continuacion en la tabla 4.4 se muestran los resultados obtenidos:
Tabla 4.4: Rendimiento

Resolucion Rendimiento
640 x 480 50 fps
1280 x 720 16 fps
1920 x 1080 7,7 fps

4.3. Pruebas de control


Para evaluar los sistemas de control propuestos se realizaron pruebas con la configura-
cion descrita en la tabla 4.5 :
Tabla 4.5: Configuracion Pruebas Sistema de Control

Resolucion : 640x480 [px]


Framerate : 50 [fps]
Distancias Horizontal : 1100 [mm]
Luz : Natural + CFL
Voltaje Ventilador : 12 [vdc]

Se fijo un Set Point a la altura de 300 pixeles (440mm) y se configuro manualmente el


filtro de color adecuado a las condiciones lumnicas existentes en el momento de realizar
las pruebas. Para la obtencion de la informacion de la posicion y respuesta del sistema se
utilizo el archivo de registro del codigo programado.
A continuacion se presentan las pruebas de los tres metodos de control propuestos.

4.3.1. Sistema On-Off

Se realizo una prueba con la configuracion descrita en la tabla 4.5 y se extrajeron


los datos, los cuales, estan representados en la figura 4.17 que grafica las variables altura

54
versus tiempo. Este sistema de control tiene 2 respuestas, las cuales por definicion son:

Tabla 4.6: Configuracion Sistema On-Off

PWM
On : 100 %
Off : 0%

Figura 4.17: Posicion sistema control On-Off

Para representar la respuesta del sistema de control, se agrego al grafico de posicion el


ciclo en porcentaje de la senal PWM, ver figura 4.18.

55
Figura 4.18: Posicion y Respuesta Sistema On-Off

4.3.2. Sistema On-Off Modificado

Se realizo una prueba con la configuracion descrita en la tabla 4.5 y se extrajeron


los datos, los cuales, estan representados en la figura 4.19 que grafica las variables altura
versus tiempo. Este sistema de control tiene 2 respuestas, las cuales se modificaron de la
siguiente manera:

Tabla 4.7: Configuracion Sistema On-Off Modificado

PWM
On : 85 %
Off : 70 %

56
Figura 4.22: Posicion y respuesta PID

4.4. Analisis de resultados


La figura 4.23 muestra los resultados de los tres metodos utilizados.

Figura 4.23: Comparativa Sistemas de Control

59
Par cuantificar el rendimiento de los sistemas de control propuestos se calculan los
indices de comportamiento de Integral del valor Absoluto del Error (IAE) y la Integral del
valor Absoluto del Error ponderado por el Tiempo (ITAE). Las formulas utilizadas segun
[18] son las siguientes:
Z
IAE = |e(t)| dt
0

Z
ITAE = t |e(t)| dt
0

A continuacion se muestra la tabla con los resultados del IAE e ITAE de los tres meto-
dos de control durante 23 segundos.

Tabla 4.9: Resultados IAE e ITAE

Metodo IAE ITAE


On-Off 2825 31166
On-Off Mod 973 6076
PID 762 3332

4.4.1. Sistema On-Off

Este sistema de control basico no logra que el objeto levitador se mantenga en el set
point, se mantiene oscilando en periodos de 2,3 segundos aproximadamente desde los 80
px (0 mm) hasta 350 px (544 mm). La respuesta de este sistema no es capaz de controlar de
manera adecuada la posicion del objeto levitador, esto se ve reflejado en los altos valores
obtenidos en los indices de comportamiento IAE de 2825 e ITAE de 31166.

4.4.2. Sistema On-Off Modificado

Este sistema de control logra mantener el objeto levitador oscilando en la vecindad del
set point a los 4,34 segundos. Las oscilaciones tienen una amplitud de 55 px (110 mm) y
van desde los 280 px (400 mm) hasta los 335 px (514 mm). Los indices de comportamiento

60
IAE de 973 e ITAE de 6076 demuestran que este sistema de control es sustancialmente
mejor que el sistema On-Off.

4.4.3. Sistema PID

Este sistema de control logra mantener el objeto levitador en el set point a los 13 se-
gundos aproximadamente, cuando el sistema se estabiliza quedan pequenas oscilaciones
de 4 px (8 mm) aproximadamente. Los indices de comportamiento IAE de 762 e ITAE de
3332 demuestran que este sistema de control es el con mejor comportamiento de los tres
sistemas probados. La respuesta del sistema PID graficada en la figura 4.22 muestra que
para este set point el voltaje del motor debe estar fluctuando alrededor del 75 % . Este sis-
tema, resulto ser el u nico que logra dejar el objeto levitador en una posicion relativamente
estatica, ademas se realizo una prueba donde se modifico el set point arbitrariamente ob-
teniendose los siguientes resultados graficados en la figura 4.24.

Figura 4.24: Sistema PID con Set Point Variable

La figura anterior muestra que el sistema ademas es capaz de responder satisfactoria-


mente en un tiempo relativamente rapido a los cambios arbitrarios de set ponit.

61
Captulo 5

CONCLUSIONES Y PERSPECTIVAS
FUTURAS

En este captulo se presentan las principales conclusiones obtenidas en el desarrollo de


la memoria junto con los aportes y posibles lneas futuras de trabajo.

5.1. Conclusiones
En el presente trabajo se diseno e implemento un sistema de levitacion neumatica con
retraolimentacion visual, mediante la utilizacion de una plataforma fsica y un sistema
de control compuesto por un sensor visual del tipo camara, una plataforma computacional
Raspberry Pi, un controlador de motor y un codigo programado en Python con la biblioteca
OpenCV.
El codigo desarrollado esta disenado pensando en las capacidades computacioneles
del Raspberry Pi. Las imagenes son obtenidas por el programa en un arreglo en formato
RGB, se evita realizar cambios en el formato de la imagen porque e stos calculos adicio-
nales merman el rendimiento del programa. Luego se utilizan funciones de la biblioteca
OpenCV para realizar un filtrado por color, de esta manera se elimina la informacion de
los objetos no deseados y solamente dejar la informacion de la imagen del objeto levita-

62
dor. Luego se calcula el centroide del objeto levitador mediante la funcion momentsde
OpenCV, es importante senalar que no se pudo aplicar metodos de reduccion de ruido
disponibles en OpenCV, como por ejemplo la erosion y dilatacion, debido a que tenan
un costo computacional muy alto para las capacidades del Raspberry Pi y mermaban el
rendimiento a la mitad de lo obtenido sin aplicarlos. Finalmente, el programa genera una
respuesta del tipo PWM mediante el metodo de control seleccionado, se programaron tres
metodos, siendo el PID el con mejor resultado. La senal PWM es comunicada a un contro-
lador de motor tipo puente H mediante los puertos GPIO disponibles en el Raspberry PI,
la senal es interpretada por el controlador de motor que mueve el ventilador del sistema
levitador.
Se diseno y fabrico una estructura para sostener al Raspberry Pi en conjunto con la
camara, la estructura esta montada en un riel que permite variar la distancia de la camara
con el sistema levitador, para ajustar el campo visual. Se construyo un circuito para poder
alimentar y controlar el giro del ventilador del sistema de levitacion neumatica.
Las pruebas realizadas con el objeto levitador sujeto de manera estatica, mostraron el
comportamiento del error de medicion obtenido por el sensor visual y programa a distintas
alturas y distancia de camara. Se determino el error de medicion promedio, la distancia de
camara donde el error de medicion es menor y la altura donde el error de medicion es
mayor. En cuanto a la distancia de camara, se observa que el error de medicion aumenta
proporcionalmente con la distancia, esto puede explicarse porque al estar la camara mas
lejos, cada pixel tendra una mayor equivalencia en distancia en milmetros, haciendo la
medicion mas sensible a ser afectada por algun tipo de ruido. Por otra parte, no se observa
un patron claro en el comportamiento del error de medicion con la altura, a excepcion
de las alturas 600 y 700 que muestran un error mayor a sus antecesoras, esto puede ser
explicado por la existencia de una abrazadera en ese sector, la cual cubre la imagen del
objeto levitador cuando e ste pasa por ese sector, se propone cambiar esta abrazadera por
una transparente.
Las pruebas de rendimiento, en cuanto a la capacidad de imagenes que puede pro-

63
cesar el sistema por unidad de tiempo, mostraron que el sistema puede obtener hasta 50
mediciones por segundo a la resolucion de 640x480 pixeles. Con esta tasa de muestreo
es posible describir el movimiento del objeto levitador de manera correcta, sin embargo,
a resoluciones mas altas no fue posible describir de manera correcta el movimiento del
objeto levitador, debido a que la velocidad a la que se mueve es muy alta para las tasas de
muestreo de 16 fps y 7,7 fps.
El sistema obtiene la posicion del objeto en dos coordenadas, para este sistema solo se
utiliza una, ya que el movimiento del objeto levitador esta limitado solo a un eje. Existen
trabajos similares donde se utilizan sensores de ultrasonido para obtener la posicion del
objeto, el bajo error de medicion obtenido por el sensor visual abre la posibilidad de ser
un candidato para reemplazar a los sensores de ultrasonido.
Las pruebas de los sistemas de control se realizaron solo a la resolucion de 640x480
debido a que las resoluciones mas altas no podan describir de manera correcta el mo-
vimiento del objeto levitador. Los resultados del sistema de control On-Off no fueron
satisfactorios, ya que no logro mantener al objeto levitador en el set point, si no que se
mantuvo con oscilaciones de gran amplitud, el sistema de control On-Off modificado,
tampoco pudo mantener el objeto levitador en el set point, pero sus oscilaciones fueron de
menor amplitud que las del sistema On-Off. El sistema de control Proporcional Integral y
Derivativo (PID) si logro mantener al objeto levitador en el set point de manera satisfac-
toria, ademas fue capaz de ajustarse rapidamente a los cambios de set point aleatorios a lo
largo de todo el tubo de levitacion.

5.2. Principales aportes


De la presente investigacion se pueden destacar las siguientes contribuciones:

Se logro realizar un control automatizado de la altura de flotacion de un objeto en el


aire con retroalimentacion visual.

64
Se logro describir el sistema de levitacion neumatica.

Se logro disenar un programa que obtiene la posicion de un objeto, mediante el


analisis en tiempo real de imagenes obtenidas desde una camara.

Las mediciones de posicion obtenidas con el sistema desarrollado, tiene un error


promedio de 1,5 mm tomando en cuenta todas las distancias de camara posibles, sin
embargo, este error puede llegar a tan solo 0,4 mm en la distancia de camara de 800
mm.

El programa desarrollado es capaz de obtener a traves de un sensor visual, la po-


sicion del objeto levitador con una velocidad de 50 fps en promedio, la cual es
suficiente para capturar de manera adecuada el movimiento del objeto levitador.

Se pudo seleccionar y determinar un sistema de control adecuado para el fenomeno


fsico presente en el Sistema de levitacion neumatica.

Se logro generar una respuesta para el sistema mediante una senal PWM que es
interpretada por un controlador de motor que a la vez hace girar el ventilador del
sistema de levitacion neumatica.

Se creo una gua practica para la sintonizacion del controlador PID.

5.3. Limitaciones y lneas futuras de investigacion


El trabajo realizado posee diferentes limitaciones que a su vez posibilitan abrir nuevas
lneas de investigacion y desarrollo a considerar:

El programa disenado solo utiliza un nucleo del procesador, quedando 3 sin trabajar,
por lo tanto, a futuro se tendra que disenar un programa multihilo para utilizar los 4
nucleos disponible logrando utilizar todos los recursos.

65
La Raspberry Pi tiene una capacidad computacional ajustada para el tratamiento o
procesamiento de imagenes, es por esto, que si a futuro existen recursos compu-
tacionales mas avanzados se podra procesar imagenes de mayor resolution con un
mayor niimero de imagenes por segundo.

La biblioteca OPENCV ofrece otras formas para determinar la position de un ob-


jeto, como lo es el reconocimiento por forma, sin embargo, no se pudo aplicar este
metodo debido a que exige costos computacionales mas altos, es por esta razon
que se utilizo el filtrado por color.

El control disenado solo trabaja en una dimension, por lo que se cree que a futuro
se podra trabajar en 2 dimensiones para poder utilizarlo en el transporte de objetos
delicados.

La camara entrega information en formato RGB, se intento realizar una conversion


de formato a HSV para facilitar la configuration del filtro por parte del usuario, ya
que este espacio de color es mas amigable de interpretar para el humano, sin
embargo, esta conversion mermaba el rendimiento a la mitad, es por esto, que si
llega a existir una plataforma con mayor poder computacional se recomienda
utilizar este espacio de color.

El programa analiza toda la imagen entregada por la camara, sin embargo, la


region de interes es solo una parte de esta. Se podrla lograr un mejor rendimiento
si es que solo se analizara la information de la region de interes.

66
Bibliografa

[1] OmniVision-Technologies. Ov5647 Datasheet [en lnea][fecha de consulta:8


noviembre 2015]. Disponible en:
http://www.seeedstudio.com/wiki/images/3/3c/Ov5647_full.pdf.

[2] MIRANDA, Michael. Identificacin y control de un sistema de levitacin


neumtico en tiempo real. Informe final asignatura Tpicos avanzados en control
automtico programa de doctorado en ciencias de la ingeniera mencin
automtica. Universidad de Santiago de Chile, Facultad de Ingeniera,
Departamento de Elctrica, 2014.

[3] Maklaan. A rgb color cube explained with three diagrams [en lnea][fecha de
consulta: 20 agosto 2015]. Disponible en:
https://commons.wikimedia.org/wiki/File:RGB_color_cube.svg.

[4] Racso. Modulacin por ancho de pulso pwm [en lnea][fecha de consulta:12
octubre 2015]. Disponible en: http://www.arduino.utfsm.cl/modulacion-por-ancho-
de-pulso-pwm/.

[5] Raspberry Pi Foundation. Raspberry pi 2 model b [en lnea][fecha de consulta:12


octubre 2015]. Disponible en: https://www.raspberrypi.org/wp-
content/uploads/2015/02/Pi_2_Model_B.png.

[6] Raspbian.org. Raspbian about [en lnea][fecha de consulta:15 octubre 2015].


Disponible en: https://www.raspbian.org/RaspbianAbout.

[7] Carlos Santana Roldan. que es python? [en lnea][fecha de consulta:29 octubre
2015]. Disponible en: http://www.codejobs.biz/es/blog/2013/03/02/que-es-python.

[8] Stephen OGrady. The redmonk programming language rankings: June 2015 [en
lnea][fecha de consulta: 2 noviembre 2015]. Disponible en:
http://redmonk.com/sogrady/2015/07/01/ language-rankings-6-15/.

[9] BRADSKI, Gary and KAEHLER, Adrian. Learning OpenCV: Computer vision
with the OpenCV library. OReilly Media, Inc., 2008.

67
[10] MOSQUERA L., Vctor, QUINONES M., German, and DIAZ F., Anderson,.
Control de posicin de un sistema de levitacin. Revista Universitaria RUTIC,
2013.

[11] MOTT, Robert. Mecdnica defluidos. Pearson educacion, 2006.

[12] RYBERG, Robert, LUNDBERG, Peter, and JOHANSSON, Kaj. Manual de


production grfica: Recetas, 2004.

[13] Bioinformatics. Numpy [en lnea][fecha de consulta: 5 noviembre 2015].


Disponible en: https://bioinf.comav.upv.es/courses/ linux/python/scipy.html.

[14] OpenCV Dev Team. User interface opencv 2.4 documentation [en lnea][fecha de
consulta: 8 noviembre 2015]. Disponible en: http:
//docs.opencv.org/2.4/modules/highgui/doc/user_interface.html.

[15] OpenCV Dev Team. Operations on arrays opencv 2.4 documentation [en
lnea][fecha de consulta: 10 noviembre 2015]. Disponible en:
http://docs.opencv.org/2.4/modules/core/doc/operations_ on_arrays.html.

[16] OpenCV Dev Team. Structural analysis and shape descriptors opencv 2.4 docu-
mentation [en lnea][fecha de consulta: 12noviembre 2015]. Disponible en:
http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_de
scriptors.html.

[17] OGATA, Katsuhiko. Ingeniera de control moderna. Pearson Education, 2003.


[18] HUANG Barney. Computer simulation analysis of biological and agricultural sys-
tems. CRC Press, 1994.

68
Anexos

A continuacion se muestran las hojas de datos del hardware utilizado.

Omnivision 5648: es un sensor de camara de excelente relacion costo eficiencia y


posee 5 Megapixeles. Es utilizado en la camara Rapicam conectada a la plataforma
Raspberry Pi 2.

LS-40136: es el lente utilizado en la camara. Tiene una distancia focal de 3,2mm


M12xP0.5.

SN75441ONE: es un circuito integrado que cumple la funcion de puente H, puede


controlar 2 motores con voltajes desde 4,5 a 36 V con 1A. En el sistema de levitacion
neumatica es el encargado de controlar el voltaje suministrado al ventilador.

69
OV5648 5-megapixel product brief

Cost-Efficient 5-Megapixel Camera Solution


lead free
for Mainstream Mobile Devices
available in
a lead-free
The OV5648 is a cost-efficient, high performance formatting and output transfer. It offers defective pixel
package 5-megapixel CameraChip sensor for smartphones and canceling and all required automatic image control
tablets. Utilizing OmniVision's latest 1.4-micron OmniBSI+ functions, including automatic exposure control, automatic
pixel architecture, the OV5648 combines a reduced die size gain control, automatic white balance, and automatic black
with improved quality photography and high-definition (HD) level calibration.
video, making it ideally suited for mainstream mobile
applications. A secondary image sensor may be connected to the
OV5648 enabling a Video-in-Video (ViV) feature in which
OmniVision's powerful new OmniBSI+ pixel architecture the secondary image is overlaid to the OV5648 output
offers significant performance improvements over our video. The combined video is streamed out over the MIPI
original OmniBSI architecture, including a 60 percent interface. A bypass mode allows a secondary sensor
increase in full-well capacity and a significant improvement to utilize the OV5648 MIPI interfaced baseband.
in low-light sensitivity. With OmniBSI+, the 1/4-inch
OV5648 is capable of capturing high quality still images as The OV5648 can fit into a 6 x 6 mm fixed focus camera
well as 720p HD video at 60 frames per second (fps) and module with a z-height of less than 4.5 mm.
1080p HD video at 30 fps.
Find out more at www.ovt.com.
The sensor supports a two-lane MIPI interface, and
provides full-frame, windowed or binned 10-bit images
in RAW RGB format with complete user control over
Applications OV5648
Cellular and Picture Phones Toys

PC Multimedia Digital Still Cameras

Ordering Information
Product Features OV05648-A53A
(color, lead-free, 53-pin CSP3)
OV05648-G04A
(color, chip-probing, 200 m
backgrinding, reconstructed wafer)
1.4 m x 1.4 m pixel with OmniBSI+ support for internal and
technology for high performance external frame synchronization
(high sensitivity, low crosstalk, low noise) for frame exposure mode

optical size of 1/4" support for horizontal and


vertical sub-sampling Product Specifications
automatic image control functions:
- automatic exposure control (AEC) standard serial SCCB interface
- automatic gain control (AGC) active array size: 2592 x 1944 max S/N ratio: 36 dB
- automatic white balance (AWB) MIPI interface (two lanes)
- automatic black level calibration (ABLC) power supply: dynamic range: 72 dB @ 8x gain
Video-in-Video (ViV) and - core: 1.5V 5%
programmable controls for frame rate, bypass support for secondary sensor (with embedded 1.5V regulator) maximum image transfer rate:
AEC/AGC 16-zone size/position/ - analog: 2.6 ~ 3.0V (2.8V typical) - QSXGA (2592x1944): 15 fps
weight control, mirror and flip, cropping, 32 bytes of embedded one-time - I/O: 1.7 ~ 3.0V - 1080p: 30 fps
windowing, and panning programmable (OTP) memory - 960p: 45 fps
power requirements: - 720p: 60 fps
defective pixel canceling on-chip phase lock loop (PLL) - active: 219 mW - VGA (640x480): 90 fps
- standby: 36 W
support for output formats: embedded 1.5V regulator sensitivity: 690 mV/lux-sec
8-/10-bit raw RGB data for core power temperature range:
- operating: -30C to 70C junction shutter: rolling shutter
support for video or snapshot operations programmable I/O drive capability, temperature
I/O tri-state configurability - stable image: 0C to 50C junction pixel size: 1.4 m x 1.4 m
support for LED and flash strobe mode temperature
support for black sun cancellation dark current: 0.7 mV/s
output formats: @ 50C junction temperature
8-/10-bit RGB RAW output
image area: 3673.6 m x 2738.4 m
lens size: 1/4"
package/die dimensions:
lens chief ray angle: 29.1 - CSP3: 5010 m x 4810 m
- COB: 5000 m x 4800 m
input clock frequency: 6 ~ 27 MHz

Functional Block Diagram

OV5648
image sensor core image image output
sensor interface
column processor
sample/hold
row select

image 10-bit MCP/N


FIFO

MIPI
ISP

AMP MDP/N[1:0]
array ADC

gain control

control
register bank

timing generator and SPI SCCB slave


PLLs
system control logic interface interface
XVCLK

PWDNB

TM

RESETB

VSYNC

FREX

STROBE

GPIO

SCK

SDI[1:0]

SIOC

SIOD

4275 Burton Drive Tel: + 1 408 567 3000 OmniVision reserves the right to make changes to their products or to discontinue any product or
service without further notice. OmniVision, the OmniVision logo and VarioPixel are registered
Santa Clara, CA 95054 Fax: + 1 408 567 3001 trademarks of OmniVision Technologies, Inc. CameraChip and OmniBSI+ are trademarks of
USA www.ovt.com OmniVision Technologies, Inc. All other trademarks are the property of their respective owners.

Version 1.3, March, 2014


Product Sample & Technical Tools & Support &
Folder Buy Documents Software Community

SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015

SN754410 Quadruple Half-H Driver


1 Features 3 Description

1 1-A Output-Current Capability Per Driver The SN754410 is a quadruple high-current half-H
driver designed to provide bidirectional drive currents
Applications Include Half-H and Full-H Solenoid up to 1 A at voltages from 4.5 V to 36 V. The device
Drivers and Motor Drivers is designed to drive inductive loads such as relays,
Designed for Positive-Supply Applications solenoids, DC and bipolar stepping motors, as well as
Wide Supply-Voltage Range of 4.5 V to 36 V other high-current/high-voltage loads in positive-
supply applications.
TTL- and CMOS-Compatible High-Impedance
Diode-Clamped Inputs All inputs are compatible with TTL-and low-level
Separate Input-Logic Supply CMOS logic. Each output (Y) is a complete totem-
pole driver with a Darlington transistor sink and a
Thermal Shutdown pseudo-Darlington source. Drivers are enabled in
Internal ESD Protection pairs with drivers 1 and 2 enabled by 1,2EN and
Input Hysteresis Improves Noise Immunity drivers 3 and 4 enabled by 3,4EN. When an enable
input is high, the associated drivers are enabled and
3-State Outputs
their outputs become active and in phase with their
Minimized Power Dissipation inputs. When the enable input is low, those drivers
Sink/Source Interlock Circuitry Prevents are disabled and their outputs are off and in a high-
Simultaneous Conduction impedance state. With the proper data inputs, each
pair of drivers form a full-H (or bridge) reversible drive
No Output Glitch During Power Up or Power
suitable for solenoid or motor applications.
Down
Improved Functional Replacement for the SGS A separate supply voltage (VCC1) is provided for the
L293 logic input circuits to minimize device power
dissipation. Supply voltage VCC2 is used for the output
circuits.
2 Applications
The SN754410 is designed for operation from 40C
Stepper Motor Drivers
to 85C.
DC Motor Drivers
Latching Relay Drivers Device Information(1)
PART NUMBER PACKAGE (PIN) BODY SIZE (NOM)
SN754410 PDIP (16) 19.80 mm 6.35 mm

(1) For all available packages, see the orderable addendum at


the end of the datasheet.

4 Simplified Schematic

An IMPORTANT NOTICE at the end of this data sheet addresses availability, warranty, changes, use in safety-critical applications,
intellectual property matters and other important disclaimers. PRODUCTION DATA.
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015 www.ti.com

Table of Contents
1 Features .................................................................. 1 9.2 Functional Block Diagram ......................................... 8
2 Applications ........................................................... 1 9.3 Feature Description................................................... 8
3 Description ............................................................. 1 9.4 Device Functional Modes.......................................... 9
4 Simplified Schematic............................................. 1 10 Application and Implementation........................ 10
10.1 Application Information.......................................... 10
5 Revision History..................................................... 2
10.2 Typical Application ............................................... 10
6 Pin Configuration and Functions ......................... 3
11 Power Supply Recommendations ..................... 11
7 Specifications......................................................... 4
7.1 Absolute Maximum Ratings ...................................... 4 12 Layout................................................................... 12
7.2 Recommended Operating Conditions....................... 4 12.1 Layout Guidelines ................................................. 12
7.3 Thermal Information .................................................. 4 12.2 Layout Example .................................................... 12
7.4 Electrical Characteristics........................................... 5 13 Device and Documentation Support ................. 12
7.5 Switching Characteristics .......................................... 5 13.1 Trademarks ........................................................... 12
7.6 Typical Characteristics .............................................. 6 13.2 Electrostatic Discharge Caution ............................ 12
8 Parameter Measurement Information .................. 7 13.3 Glossary ................................................................ 12

9 Detailed Description .............................................. 8 14 Mechanical, Packaging, and Orderable


Information ........................................................... 12
9.1 Overview ................................................................... 8

5 Revision History
Changes from Revision B (November 1995) to Revision C Page

Added Applications, Device Information table, Pin Functions table, ESD Ratings table, Thermal Information table,
Typical Characteristics, Feature Description section, Device Functional Modes, Application and Implementation
section, Power Supply Recommendations section, Layout section, Device and Documentation Support section, and
Mechanical, Packaging, and Orderable Information section. ................................................................................................. 1
Deleted Ordering Information table. ....................................................................................................................................... 1

2 Submit Documentation Feedback Copyright 19862015, Texas Instruments Incorporated

Product Folder Links: SN754410


SN754410
www.ti.com SLRS007C NOVEMBER 1986 REVISED JANUARY 2015

6 Pin Configuration and Functions

Pin Functions
PIN
TYPE DESCRIPTION
NAME NO.
1,2EN 1 I Enable driver channels 1 and 2 (active high input)
<1:4>A 2, 7, 10, 15 I Driver inputs, non-inverting
<1:4>Y 3, 6, 11, 14 O Driver outputs
Device ground and heat sink pin. Connect to circuit board ground plane with multiple solid
GROUND 4, 5, 12, 13
vias
VCC2 8 Power VCC for drivers 4.5V to 36V
3,4EN 9 I Enable driver channels 3 and 4 (active high input)
VCC1 16 5V supply for internal logic translation

Copyright 19862015, Texas Instruments Incorporated Submit Documentation Feedback 3


Product Folder Links: SN754410
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015 www.ti.com

7 Specifications
7.1 Absolute Maximum Ratings
over operating free-air temperature range (unless otherwise noted) (1) (2)
MIN MAX UNIT
VCC1 Output supply voltage range 0.5 36 V
VCC2 Output supply voltage range 0.5 36 V
VI Input voltage 0.5 36 V
VO Output voltage range 3 VCC2 + 3 V
IP Peak output current 2 A
IO Continuous output current 1 A
Continuous total power dissipation at (or below) 25C free-air
PD 2075 mW
temperature (3)
TA Operating free-air temperature range 40 85 C
TJ Operating virtual junction temperature range 40 150 C
Tstg Storage temperature range 260 C

(1) Stresses beyond those listed under Absolute Maximum Ratings may cause permanent damage to the device. These are stress ratings
only, which do not imply functional operation of the device at these or any other conditions beyond those indicated under Recommended
Operating Conditions. Exposure to absolute-maximum-rated conditions for extended periods may affect device reliability.
(2) All voltage values are with respect to network GND.
(3) For operation above 25C free-air temperature, derate linearly at the rate of 16.6 mW/C. To avoid exceeding the design maximum
virtual junction temperature, these ratings should not be exceeded. Due to variations in individual device electrical characteristics and
thermal resistance, the built-in thermal overload protection can be activated at power levels slightly above or below the rated dissipation.

7.2 Recommended Operating Conditions


over operating free-air temperature range (unless otherwise noted)
MIN MAX UNIT
VCC1 Logic supply voltage 4.5 5.5 V
VCC2 Output supply voltage 4.5 36 V
VIH High-level input voltage 2 5.5 V
VIL Low-level input voltage 0.3 (1) 0.8 V
TJ Operating virtual junction temperature 40 125 C
TA Operating free-air temperature 40 85 C

(1) The algebraic convention, in which the least positive (most negative) limit is designated as minimum, is used in this data sheet for logic
voltage levels.

7.3 Thermal Information


SN754410
THERMAL METRIC (1) NE UNIT
16 PINS
RJA Junction-to-ambient thermal resistance 60 C/W

(1) For more information about traditional and new thermal metrics, see the IC Package Thermal Metrics application report, SPRA953.

4 Submit Documentation Feedback Copyright 19862015, Texas Instruments Incorporated

Product Folder Links: SN754410


SN754410
www.ti.com SLRS007C NOVEMBER 1986 REVISED JANUARY 2015

7.4 Electrical Characteristics


over operating free-air temperature range (unless otherwise noted)
PARAMETER TEST CONDITIONS MIN TYP MAX UNIT
VIK Input clamp voltage II = 12 mA 0.9 1.5 V
IOH = 0.5 A VCC2 1.5 VCC2 1.1
VOH High-level output voltage IOH = 1 A VCC2 2 V
IOH = 1 A, TJ = 25C VCC2 1.8 VCC2 1.4
IOL = 0.5 A 1 1.4
VOL Low-level output voltage IOL = 1 A 2 V
IOL = 1 A, TJ = 25C 1.2 1.8
IOK = 0.5 A VCC2 + 1.4 VCC2 + 2
VOKH High-level output clamp voltage V
IOK = 1 A VCC2 + 1.9 VCC2 + 2.5
IOK = 0.5 A 1.1 2
VOKL Low-level output clamp voltage V
IOK = 1 A 1.3 2.5
Off-state high-impedance-state VO = VCC2 500
IOZ(off) A
output current VO = 0 500
IIH High-level input current VI = 5.5 V 10 A
IIL Low-level input current VI = 0 10 A
All outputs at high level 38
All outputs at low level 70
ICC1 Output supply current IO = 0 mA
all outputs at high
25
impedance
All outputs at high level 33
All outputs at low level 20
ICC2 Output supply current IO = 0 nA
All outputs at high
5
impedance

7.5 Switching Characteristics


over operating free-air temperature range (unless otherwise noted), VCC1 = 5 V, VCC2 = 24 V, CL = 30 pF, TA = 25C
PARAMETER TEST CONDITIONS MIN TYP MAX UNIT
Delay time, high-to-low-level output
td1 400 ns
from A input
Delay time, low-to-high-level output
td2 800 ns
from A input
See Figure 3
Transition time, low-to-high-level
tTLH 300 ns
output
Transition time, high-to-low-level
tTHL 300 ns
output
ten1 Enable time to the high level 700 ns
ten2 Enable time to the low level 400 ns
See Figure 4
tdis1 Disable time from the high level 900 ns
tdis2 Disable time from the low level 600 ns

Copyright 19862015, Texas Instruments Incorporated Submit Documentation Feedback 5


Product Folder Links: SN754410
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015 www.ti.com

7.6 Typical Characteristics


VCC1 = 5 V, VCC2 = 24 V

24.0 2.0
-40C -40C
23.8 1.8
25C 25C
23.6 1.6
125C 125C
Output Voltage (V)

Output Voltage (V)


23.4 1.4
23.2 1.2
23.0 1.0
22.8 0.8
22.6 0.6
22.4 0.4
22.2 0.2
22.0 0.0
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
Output Current (A) C001 Output Current (A) C001

Figure 1. VOH vs IOH Figure 2. VOL vs IOL

6 Submit Documentation Feedback Copyright 19862015, Texas Instruments Incorporated

Product Folder Links: SN754410


SN754410
www.ti.com SLRS007C NOVEMBER 1986 REVISED JANUARY 2015

8 Parameter Measurement Information

A. The pulse generator has the following characteristics: tr 10 ns, tf 10 ns, tw = 10 s, PRR = 5 kHz, ZO = 50
B. CL includes probe and jig capacitance.

Figure 3. Test Circuit and Switching Times from Data Inputs

A. The pulse generator has the following characteristics: tr 10 ns, tf 10 ns, tw = 10 s, PRR = 5 kHz, ZO = 50
B. CL includes probe and jig capacitance.

Figure 4. Test Circuit and Switching Times from Enable Inputs

Copyright 19862015, Texas Instruments Incorporated Submit Documentation Feedback 7


Product Folder Links: SN754410
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015 www.ti.com

9 Detailed Description

9.1 Overview
The SN754410 is a quadruple high-current half-H driver designed to provide bidirectional drive currents up to 1 A
at voltages from 4.5 V to 36 V. The device is designed to drive inductive loads such as relays, solenoids, DC and
bipolar stepping motors, as well as other high-current/high-voltage loads in positive-supply applications. All inputs
are compatible with TTL and low-level CMOS logic. Each output (Y) is a complete totem-pole driver with a
Darlington transistor sink and a pseudo-Darlington source. Drivers are enabled in pairs with drivers 1 and 2
enabled by 1,2EN and drivers 3 and 4 enabled by 3,4EN. When an enable input is high, the associated drivers
are enabled and their outputs become active and in phase with their inputs. When the enable input is low, those
drivers are disabled and their outputs are off and in a high-impedance state. With the proper data inputs, each
pair of drivers form a full-H (or bridge) reversible drive suitable for solenoid or motor applications.
A separate supply voltage (VCC1) is provided for the logic input circuits to minimize device power dissipation.
Supply voltage VCC2 is used for the output circuits. The SN754410 is designed for operation from 40C to 85C.

9.2 Functional Block Diagram

This symbol is in accordance with ANSI/IEEE Std 91-1984and IEC Publication 617-12.

9.3 Feature Description


9.3.1 High Current, High Voltage Outputs
Four high current and high voltage outputs feature clamp diodes for inductive load driving.

Figure 5. Typical of All Outputs

8 Submit Documentation Feedback Copyright 19862015, Texas Instruments Incorporated

Product Folder Links: SN754410


SN754410
www.ti.com SLRS007C NOVEMBER 1986 REVISED JANUARY 2015

Feature Description (continued)


9.3.2 TTL Compatible Inputs
Data inputs and enable inputs are compatible with TTL. 3.3-V CMOS logic is also acceptable, however open or
high impedance input voltage can approach VCC1 voltage.

Figure 6. Equivalent of Each Input

9.4 Device Functional Modes

Table 1. Function Table (1)


INPUTS (2) OUTPUTS
A EN Y
H H H
L H L
X L Z

(1) H = high-level
L = low-level
X = irrelevant
Z = high-impedance (off)
(2) In the thermal shutdown mode, the
output is in a high-impedance state
regardless of the input levels.

Copyright 19862015, Texas Instruments Incorporated Submit Documentation Feedback 9


Product Folder Links: SN754410
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015 www.ti.com

10 Application and Implementation

NOTE
Information in the following applications sections is not part of the TI component
specification, and TI does not warrant its accuracy or completeness. TIs customers are
responsible for determining suitability of components for their purposes. Customers should
validate and test their design implementation to confirm system functionality.

10.1 Application Information


Provide a 5-V supply to VCC1 and valid logic input levels to data and enable inputs. VCC2 must be connected to a
power supply capable of suppling the needed current and voltage demand for the loads connected to the
outputs.

10.2 Typical Application


12 V

Figure 7. Typical Application Schematic

10.2.1 Design Requirements


The design techniques in the following sections may be used for applications which fall within the following
requirements.
4.5-V minimum and 36-V maximum VCC2 voltage
1000-mA or less output current per channel
5-V supply with 10% tolerance or less
TTL compatible logic inputs

10 Submit Documentation Feedback Copyright 19862015, Texas Instruments Incorporated

Product Folder Links: SN754410


SN754410
www.ti.com SLRS007C NOVEMBER 1986 REVISED JANUARY 2015

Typical Application (continued)


10.2.2 Application Curves
Driver output voltage waveform with a two phase stepper motor; 12-V 20- coils.

14

12

10

Voltage (V)
6

2 Output
4
0 1 2 3 4 5 6 7 8 9 10
Time (ms) C001

Figure 8. 100 Hz Driver Output Waveform

11 Power Supply Recommendations


VCC1 is 5 V 0.5 V and VCC2 can be same supply as VCC1 or a higher voltage supply with peak voltage up to 36
V. Bypass capacitors of 0.1 uF or greater should be used at VCC1 and VCC2 pins. There are no power up or
power down supply sequence order requirements.

Copyright 19862015, Texas Instruments Incorporated Submit Documentation Feedback 11


Product Folder Links: SN754410
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015 www.ti.com

12 Layout

12.1 Layout Guidelines


Place device near the load to keep output traces short to reduce EMI. Use solid vias to transfer heat from ground
pins to circuit board's ground plane.

12.2 Layout Example


GND

0.1 F
TTL Logic 1 1,2EN VCC1 16 5V

TTL Logic 2 1A 4A 15 TTL Logic

1 Ampere 3 1Y 4Y 14 1 Ampere

4 13
GND
VIAS
5 12

1 Ampere 6 2Y 3Y 11 1 Ampere

TTL Logic 7 2A 3A 10 TTL Logic

5V to 36V 8 VCC2 3,4EN 9 TTL Logic

1 F
GND

Figure 9. Layout Diagram

13 Device and Documentation Support


13.1 Trademarks
All trademarks are the property of their respective owners.
13.2 Electrostatic Discharge Caution
These devices have limited built-in ESD protection. The leads should be shorted together or the device placed in conductive foam
during storage or handling to prevent electrostatic damage to the MOS gates.

13.3 Glossary
SLYZ022 TI Glossary.
This glossary lists and explains terms, acronyms, and definitions.

14 Mechanical, Packaging, and Orderable Information


The following pages include mechanical, packaging, and orderable information. This information is the most
current data available for the designated devices. This data is subject to change without notice and revision of
this document. For browser-based versions of this data sheet, refer to the left-hand navigation.

12 Submit Documentation Feedback Copyright 19862015, Texas Instruments Incorporated

Product Folder Links: SN754410


PACKAGE OPTION ADDENDUM

www.ti.com 24-Oct-2014

PACKAGING INFORMATION

Orderable Device Status Package Type Package Pins Package Eco Plan Lead/Ball Finish MSL Peak Temp Op Temp (C) Device Marking Samples
(1) Drawing Qty (2) (6) (3) (4/5)

SN754410NE ACTIVE PDIP NE 16 25 Pb-Free CU NIPDAU N / A for Pkg Type -40 to 85 SN754410NE
(RoHS)
SN754410NEE4 ACTIVE PDIP NE 16 25 Pb-Free CU NIPDAU N / A for Pkg Type -40 to 85 SN754410NE
(RoHS)

(1)
The marketing status values are defined as follows:
ACTIVE: Product device recommended for new designs.
LIFEBUY: TI has announced that the device will be discontinued, and a lifetime-buy period is in effect.
NRND: Not recommended for new designs. Device is in production to support existing customers, but TI does not recommend using this part in a new design.
PREVIEW: Device has been announced but is not in production. Samples may or may not be available.
OBSOLETE: TI has discontinued the production of the device.

(2)
Eco Plan - The planned eco-friendly classification: Pb-Free (RoHS), Pb-Free (RoHS Exempt), or Green (RoHS & no Sb/Br) - please check http://www.ti.com/productcontent for the latest availability
information and additional product content details.
TBD: The Pb-Free/Green conversion plan has not been defined.
Pb-Free (RoHS): TI's terms "Lead-Free" or "Pb-Free" mean semiconductor products that are compatible with the current RoHS requirements for all 6 substances, including the requirement that
lead not exceed 0.1% by weight in homogeneous materials. Where designed to be soldered at high temperatures, TI Pb-Free products are suitable for use in specified lead-free processes.
Pb-Free (RoHS Exempt): This component has a RoHS exemption for either 1) lead-based flip-chip solder bumps used between the die and package, or 2) lead-based die adhesive used between
the die and leadframe. The component is otherwise considered Pb-Free (RoHS compatible) as defined above.
Green (RoHS & no Sb/Br): TI defines "Green" to mean Pb-Free (RoHS compatible), and free of Bromine (Br) and Antimony (Sb) based flame retardants (Br or Sb do not exceed 0.1% by weight
in homogeneous material)

(3)
MSL, Peak Temp. - The Moisture Sensitivity Level rating according to the JEDEC industry standard classifications, and peak solder temperature.

(4)
There may be additional marking, which relates to the logo, the lot trace code information, or the environmental category on the device.

(5)
Multiple Device Markings will be inside parentheses. Only one Device Marking contained in parentheses and separated by a "~" will appear on a device. If a line is indented then it is a continuation
of the previous line and the two combined represent the entire Device Marking for that device.

(6)
Lead/Ball Finish - Orderable Devices may have multiple material finish options. Finish options are separated by a vertical ruled line. Lead/Ball Finish values may wrap to two lines if the finish
value exceeds the maximum column width.

Important Information and Disclaimer:The information provided on this page represents TI's knowledge and belief as of the date that it is provided. TI bases its knowledge and belief on information
provided by third parties, and makes no representation or warranty as to the accuracy of such information. Efforts are underway to better integrate information from third parties. TI has taken and
continues to take reasonable steps to provide representative and accurate information but may not have conducted destructive testing or chemical analysis on incoming materials and chemicals.
TI and TI suppliers consider certain information to be proprietary, and thus CAS numbers and other limited information may not be available for release.

Addendum-Page 1
PACKAGE OPTION ADDENDUM

www.ti.com 24-Oct-2014

In no event shall TI's liability arising out of such information exceed the total purchase price of the TI part(s) at issue in this document sold by TI to Customer on an annual basis.

Addendum-Page 2
MECHANICAL DATA

MPDI003 OCTOBER 1994

NE (R-PDIP-T**) PLASTIC DUAL-IN-LINE PACKAGE


20 PIN SHOWN

0.070 (1,78) MAX


20 11 PINS **
16 20
DIM

MIN 0.914 (23,22)


A
C MAX 0.780 (19,80) 0.975 (24,77)

MIN 0.930 (23,62)


B
MAX 1.000 (25,40)
1 10
MIN 0.240 (6,10) 0.260 (6,61)
C
MAX 0.260 (6,60) 0.280 (7,11)
A 0.020 (0,51) MIN

0.200 (5,08) MAX


Seating Plane
0.155 (3,94)
0.125 (3,17)

0.100 (2,54) 0.021 (0,533)


0.010 (0,25) M
0.015 (0,381)

0.310 (7,87)
B 0.020 (0,51) MIN
0.290 (7,37)

0.200 (5,08) MAX


Seating Plane
0.155 (3,94)
0.125 (3,17)

0.100 (2,54) 0.021 (0,533) 0 15


0.010 (0,25) M
0.015 (0,381)
0.010 (0,25) NOM

4040054 / B 04/95

NOTES: A. All linear dimensions are in inches (millimeters).


B. This drawing is subject to change without notice.
C. Falls within JEDEC MS-001 (16 pin only)

POST OFFICE BOX 655303 DALLAS, TEXAS 75265 1


IMPORTANT NOTICE

Texas Instruments Incorporated and its subsidiaries (TI) reserve the right to make corrections, enhancements, improvements and other
changes to its semiconductor products and services per JESD46, latest issue, and to discontinue any product or service per JESD48, latest
issue. Buyers should obtain the latest relevant information before placing orders and should verify that such information is current and
complete. All semiconductor products (also referred to herein as components) are sold subject to TIs terms and conditions of sale
supplied at the time of order acknowledgment.
TI warrants performance of its components to the specifications applicable at the time of sale, in accordance with the warranty in TIs terms
and conditions of sale of semiconductor products. Testing and other quality control techniques are used to the extent TI deems necessary
to support this warranty. Except where mandated by applicable law, testing of all parameters of each component is not necessarily
performed.
TI assumes no liability for applications assistance or the design of Buyers products. Buyers are responsible for their products and
applications using TI components. To minimize the risks associated with Buyers products and applications, Buyers should provide
adequate design and operating safeguards.
TI does not warrant or represent that any license, either express or implied, is granted under any patent right, copyright, mask work right, or
other intellectual property right relating to any combination, machine, or process in which TI components or services are used. Information
published by TI regarding third-party products or services does not constitute a license to use such products or services or a warranty or
endorsement thereof. Use of such information may require a license from a third party under the patents or other intellectual property of the
third party, or a license from TI under the patents or other intellectual property of TI.
Reproduction of significant portions of TI information in TI data books or data sheets is permissible only if reproduction is without alteration
and is accompanied by all associated warranties, conditions, limitations, and notices. TI is not responsible or liable for such altered
documentation. Information of third parties may be subject to additional restrictions.
Resale of TI components or services with statements different from or beyond the parameters stated by TI for that component or service
voids all express and any implied warranties for the associated TI component or service and is an unfair and deceptive business practice.
TI is not responsible or liable for any such statements.
Buyer acknowledges and agrees that it is solely responsible for compliance with all legal, regulatory and safety-related requirements
concerning its products, and any use of TI components in its applications, notwithstanding any applications-related information or support
that may be provided by TI. Buyer represents and agrees that it has all the necessary expertise to create and implement safeguards which
anticipate dangerous consequences of failures, monitor failures and their consequences, lessen the likelihood of failures that might cause
harm and take appropriate remedial actions. Buyer will fully indemnify TI and its representatives against any damages arising out of the use
of any TI components in safety-critical applications.
In some cases, TI components may be promoted specifically to facilitate safety-related applications. With such components, TIs goal is to
help enable customers to design and create their own end-product solutions that meet applicable functional safety standards and
requirements. Nonetheless, such components are subject to these terms.
No TI components are authorized for use in FDA Class III (or similar life-critical medical equipment) unless authorized officers of the parties
have executed a special agreement specifically governing such use.
Only those TI components which TI has specifically designated as military grade or enhanced plastic are designed and intended for use in
military/aerospace applications or environments. Buyer acknowledges and agrees that any military or aerospace use of TI components
which have not been so designated is solely at the Buyer's risk, and that Buyer is solely responsible for compliance with all legal and
regulatory requirements in connection with such use.
TI has specifically designated certain components as meeting ISO/TS16949 requirements, mainly for automotive use. In any case of use of
non-designated products, TI will not be responsible for any failure to meet ISO/TS16949.

Products Applications
Audio www.ti.com/audio Automotive and Transportation www.ti.com/automotive
Amplifiers amplifier.ti.com Communications and Telecom www.ti.com/communications
Data Converters dataconverter.ti.com Computers and Peripherals www.ti.com/computers
DLP Products www.dlp.com Consumer Electronics www.ti.com/consumer-apps
DSP dsp.ti.com Energy and Lighting www.ti.com/energy
Clocks and Timers www.ti.com/clocks Industrial www.ti.com/industrial
Interface interface.ti.com Medical www.ti.com/medical
Logic logic.ti.com Security www.ti.com/security
Power Mgmt power.ti.com Space, Avionics and Defense www.ti.com/space-avionics-defense
Microcontrollers microcontroller.ti.com Video and Imaging www.ti.com/video
RFID www.ti-rfid.com
OMAP Applications Processors www.ti.com/omap TI E2E Community e2e.ti.com
Wireless Connectivity www.ti.com/wirelessconnectivity

Mailing Address: Texas Instruments, Post Office Box 655303, Dallas, Texas 75265
Copyright 2015, Texas Instruments Incorporated
Apendice

.1. Codigos Programados


A continuacion se muestran los codigos programados en lenguaje python. La descrip-
cion de cada uno es la siguiente:

Programa Sistema Levitacion On-Off : codigo del programa del Sistema de Levita-
cion neumatica con retroalimentacion visual con sistema de control On-Off. Esta di-
senado y optimizado para correr en la plataforma Raspberry Pi 2 con la camara
RaspiCam.

Programa Sistema Levitacion On-Off Modificado: codigo del programa del Sistema
de Levitacion neumatica con retroalimentacion visual con sistema de control On-
Off Modificado ,donde el valor On corresponde a un porcentaje del maximo y el
valor Off corresponde a otro porcentaje. Esta disenado y optimizado para correr en
la plataforma Raspberry Pi 2 con la camara RaspiCam.

Programa Sistema Levitacion PID : codigo del programa del Sistema de Levitacion
neumatica con retroalimentacion visual con sistema de control Proporcional Integral
Derivativo PID. Esta disenado y optimizado para correr en la plataforma Raspberry
Pi 2 con la camara RaspiCam.

89
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 10:47
1 #Programa Tesis Sistema Levitacion Neumatica con retroalimentacion
Visual
2 #Mauricio Rebolledo Gonzalez
3 #mauricio.rebolledo@usach.cl
4 #Universidad de Santiago de Chile
5
6
7
8 #Importa bibliotecas nesesarias
9
10 from picamera.array import PiRGBArray
11 from picamera import PiCamera
12 import time
13 import cv2
14 import numpy as np
15 import RPi.GPIO as GPIO
16 import PID as control
17
18
19 #configuracion pines GPIO
20 GPIO.setmode(GPIO.BCM)
21 #GPIO.setup(numero_pin,GPIO.(in-out)
22
23 GPIO.setup(03,GPIO.OUT) #controla sentido ON
24 GPIO.setup(04,GPIO.OUT) #controla sentido off
25 GPIO.setup(02,GPIO.OUT) #controla velocidad mediante PWM
26
27
28 GPIO.output(02,True) #enciendo pin 02 Enable motor
29 #GPIO.PWM(Pin,Frecuencia)
30 vent = GPIO.PWM(03,100)
31 vent.start(0.0)
32 vel=50
33
34
35 def nothing(x):
36 pass
37
38 #se inician variables con valor 0
39
40 lasterror=0.0
41 errorsum=0.0
42
43
44
45 #crea un archivo lamado registro.txt para guardar un log de
posiciones y otras variables
46 registro=open("registro.txt","w")
47 #se escriben titulos de columnas
48 registro.write('x \t y \t tiempo \t kp \t ki \t kd \t p \t i \t d \t
salida \n')
49
50
51 #creacion ventana de configuracion
52 cv2.namedWindow('color')
53
54 cv2.createTrackbar('B min','color',0,255,nothing)
55 cv2.createTrackbar('G min','color',0,255,nothing)
56 cv2.createTrackbar('R min','color',0,255,nothing)
57 cv2.createTrackbar('B max','color',0,255,nothing)
58 cv2.createTrackbar('G max','color',0,255,nothing)
59 cv2.createTrackbar('R max','color',0,255,nothing)
60 cv2.createTrackbar('punto','color',0,640,nothing)
61 cv2.createTrackbar('kp','color',0,1500,nothing)
62 cv2.createTrackbar('ki','color',0,1500,nothing)
63 cv2.createTrackbar('kd','color',0,1500,nothing)

-1-
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 10:47
64 cv2.createTrackbar('linf','color',0,100,nothing)
65 cv2.createTrackbar('lsup','color',0,100,nothing)
66
67
68 # Configuraicon y creacion de variable camara
69 ancho = 640
70 alto = 480
71 camera = PiCamera()
72 camera.resolution = (ancho,alto)
73 camera.framerate = 60
74 rawCapture = PiRGBArray(camera, size=(ancho,alto))
75
76 # La camara requiere un tiempo para inicializarse
77 time.sleep(0.1)
78
79 # ciclo de captura de frames de la camara
80 for frame in camera.capture_continuous(rawCapture, format="bgr",
use_video_port=True):
81 #obtiene un arreglo numpy representando la imagen en formato rgb
crudo
82
83 #se obtiene el tiempo 0
84 t0 = time.clock()
85
86 #variable image contiene el arreglo rgb
87 image = frame.array
88
89 #se capturan los datos de la ventana de configuracion
90 Bmin = cv2.getTrackbarPos('B min','color')
91 Gmin = cv2.getTrackbarPos('G min','color')
92 Rmin = cv2.getTrackbarPos('R min','color')
93 Bmax = cv2.getTrackbarPos('B max','color')
94 Gmax = cv2.getTrackbarPos('G max','color')
95 Rmax = cv2.getTrackbarPos('R max','color')
96 punto = cv2.getTrackbarPos('punto','color')
97 kpa = cv2.getTrackbarPos('kp','color')
98 kia = cv2.getTrackbarPos('ki','color')
99 kda = cv2.getTrackbarPos('kd','color')
100 linf = cv2.getTrackbarPos('linf','color')
101 lsup = cv2.getTrackbarPos('lsup','color')
102
103
104 #se dibuja linea en set point
105 cv2.line(image,(punto,0),(punto,alto),(255,0,0),2,8,0)
106
107
108 #se arman arreglos de limites de color para posterior filtrado
109 inf=np.array([Bmin,Gmin,Rmin],dtype="uint8")
110 sup=np.array([Bmax,Gmax,Rmax],dtype="uint8")
111
112 #se dividen por 100 las constantes
113 kp=float(kpa)/100
114 ki=float(kia)/100
115 kd=float(kda)/100
116
117 #cv2.inRange(entrada,limite inferior, limite superior)
118 #mas informacion
http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
119 imgfiltrada = cv2.inRange(image, inf, sup)
120
121 #disminuyen a la mitad los fps por eso no se utilizan
122 #imgfiltrada = cv2.erode
(imgfiltrada,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),itera
tions = 1)
123 #imgfiltrada = cv2.dilate
(imgfiltrada,cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)),itera

-2-
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 10:47
tions = 1)
124
125
126 #se crea variable momento
127 #moments
128 #mas informacion
http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and
_shape_descriptors.html
129 momento = cv2.moments(imgfiltrada)
130 #Se pone como condicion un area minima para evitar que ruido sea
considerado en los calculos
131 #se extrae m00 que corresponde al area de la variable momento
132 if momento['m00']>60000:
133 #el centro de masa en x esta dado por cx=m10/m00
134 #se utiliza int para transformar valor de division en un
entero
135 cx = int(momento['m10']/(momento['m00']+0.0000000001))
#el centro de masa en y esta dado por cy=m01/m00
136 cy = int(momento['m01']/(momento['m00']+0.0000000001))
137 #se muestra valores de centroides calculados
138 print 'el centro es ' , cx, ',', cy
139 registro.write(str(cx))
140 registro.write('\t')
141 registro.write(str(cy))
142 registro.write('\t')
143
144 #se dibuja circulo en posicion detectada
145 cv2.circle(image,(cx,cy),20,(0,255,0),2)
146
147 #Se calcula el tiempo que demora en procesar 1 frame
148 #donde "t0" corresponde al tiempo donde se captura el frame y dt
corresponde a la diferencia entre el tiempo donde se captura el
frame y el tiempo en que se termina de proceso de deteccion de
imagen
149 fps = 1/(time.clock()-t0+0.00000000001)
150 print 'rendimiento' ,fps, 'fps'
151 registro.write(str(fps))
152 registro.write('\t')
153 #inicio del sistema de control ON-Off
154 #se calcula el error
155 error=punto-cx
156 #si el error es mayor a 0 se cambia el ciclo pwm a 100%
157 if error>0:
158 p.ChangeDutyCycle(100)
159 registro.write('100')
160 registro.write('\n')
161 #de otro modo se cambia el ciclo pwm a 0%
162 else:
163 p.ChangeDutyCycle(0)
164 registro.write('0')
165 registro.write('\n')
166 #se crea ventana que muestra las imagenes original "frame" y la
filtrada en ByN "imgfiltrada"
167 cv2.imshow('Salida', image)
168 cv2.imshow('Filtrada', imgfiltrada)
169 key = cv2.waitKey(1) & 0xFF
170
171 # se limpia sistema para proximo frame
172 rawCapture.truncate(0)
173
174 #tecla q para salir de ciclo
175 if key == ord("q"):
176 break
177
178 #fin programa

-3-
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 11:20
1 #Programa Tesis Sistema Levitacion Neumatica con retroalimentacion
Visual
2 #Mauricio Rebolledo Gonzalez
3 #mauricio.rebolledo@usach.cl
4 #Universidad de Santiago de Chile
5
6
7
8 #Importa bibliotecas nesesarias
9
10 from picamera.array import PiRGBArray
11 from picamera import PiCamera
12 import time
13 import cv2
14 import numpy as np
15 import RPi.GPIO as GPIO
16 import PID as control
17
18
19 #configuracion pines GPIO
20 GPIO.setmode(GPIO.BCM)
21 #GPIO.setup(numero_pin,GPIO.(in-out)
22
23 GPIO.setup(03,GPIO.OUT) #controla sentido ON
24 GPIO.setup(04,GPIO.OUT) #controla sentido off
25 GPIO.setup(02,GPIO.OUT) #controla velocidad mediante PWM
26
27
28 GPIO.output(02,True) #enciendo pin 02 Enable motor
29 #GPIO.PWM(Pin,Frecuencia)
30 vent = GPIO.PWM(03,100)
31 vent.start(0.0)
32 vel=50
33
34
35 def nothing(x):
36 pass
37
38 #se inician variables con valor 0
39
40 lasterror=0.0
41 errorsum=0.0
42
43
44
45 #crea un archivo lamado registro.txt para guardar un log de
posiciones y otras variables
46 registro=open("registro.txt","w")
47 #se escriben titulos de columnas
48 registro.write('x \t y \t tiempo \t kp \t ki \t kd \t p \t i \t d \t
salida \n')
49
50
51 #creacion ventana de configuracion
52 cv2.namedWindow('color')
53
54 cv2.createTrackbar('B min','color',0,255,nothing)
55 cv2.createTrackbar('G min','color',0,255,nothing)
56 cv2.createTrackbar('R min','color',0,255,nothing)
57 cv2.createTrackbar('B max','color',0,255,nothing)
58 cv2.createTrackbar('G max','color',0,255,nothing)
59 cv2.createTrackbar('R max','color',0,255,nothing)
60 cv2.createTrackbar('punto','color',0,640,nothing)
61 cv2.createTrackbar('kp','color',0,1500,nothing)
62 cv2.createTrackbar('ki','color',0,1500,nothing)
63 cv2.createTrackbar('kd','color',0,1500,nothing)

-1-
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 11:20
64 cv2.createTrackbar('linf','color',0,100,nothing)
65 cv2.createTrackbar('lsup','color',0,100,nothing)
66
67
68 # Configuraicon y creacion de variable camara
69 ancho = 640
70 alto = 480
71 camera = PiCamera()
72 camera.resolution = (ancho,alto)
73 camera.framerate = 60
74 rawCapture = PiRGBArray(camera, size=(ancho,alto))
75
76 # La camara requiere un tiempo para inicializarse
77 time.sleep(0.1)
78
79 # ciclo de captura de frames de la camara
80 for frame in camera.capture_continuous(rawCapture, format="bgr",
use_video_port=True):
81 #obtiene un arreglo numpy representando la imagen en formato rgb
crudo
82
83 #se obtiene el tiempo 0
84 t0 = time.clock()
85
86 #variable image contiene el arreglo rgb
87 image = frame.array
88
89 #se capturan los datos de la ventana de configuracion
90 Bmin = cv2.getTrackbarPos('B min','color')
91 Gmin = cv2.getTrackbarPos('G min','color')
92 Rmin = cv2.getTrackbarPos('R min','color')
93 Bmax = cv2.getTrackbarPos('B max','color')
94 Gmax = cv2.getTrackbarPos('G max','color')
95 Rmax = cv2.getTrackbarPos('R max','color')
96 punto = cv2.getTrackbarPos('punto','color')
97 kpa = cv2.getTrackbarPos('kp','color')
98 kia = cv2.getTrackbarPos('ki','color')
99 kda = cv2.getTrackbarPos('kd','color')
100 linf = cv2.getTrackbarPos('linf','color')
101 lsup = cv2.getTrackbarPos('lsup','color')
102
103
104 #se dibuja linea en set point
105 cv2.line(image,(punto,0),(punto,alto),(255,0,0),2,8,0)
106
107
108 #se arman arreglos de limites de color para posterior filtrado
109 inf=np.array([Bmin,Gmin,Rmin],dtype="uint8")
110 sup=np.array([Bmax,Gmax,Rmax],dtype="uint8")
111
112 #se dividen por 100 las constantes
113 kp=float(kpa)/100
114 ki=float(kia)/100
115 kd=float(kda)/100
116
117 #cv2.inRange(entrada,limite inferior, limite superior)
118 #mas informacion
http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
119 imgfiltrada = cv2.inRange(image, inf, sup)
120
121 #disminuyen a la mitad los fps por eso no se utilizan
122 #imgfiltrada = cv2.erode
(imgfiltrada,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),itera
tions = 1)
123 #imgfiltrada = cv2.dilate
(imgfiltrada,cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)),itera

-2-
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 11:20
tions = 1)
124
125
126 #se crea variable momento
127 #moments
128 #mas informacion
http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and
_shape_descriptors.html
129 momento = cv2.moments(imgfiltrada)
130 #Se pone como condicion un area minima para evitar que ruido sea
considerado en los calculos
131 #se extrae m00 que corresponde al area de la variable momento
132 if momento['m00']>60000:
133 #el centro de masa en x esta dado por cx=m10/m00
134 #se utiliza int para transformar valor de division en un
entero
135 cx = int(momento['m10']/(momento['m00']+0.0000000001))
#el centro de masa en y esta dado por cy=m01/m00
136 cy = int(momento['m01']/(momento['m00']+0.0000000001))
137 #se muestra valores de centroides calculados
138 print 'el centro es ' , cx, ',', cy
139 registro.write(str(cx))
140 registro.write('\t')
141 registro.write(str(cy))
142 registro.write('\t')
143
144 #se dibuja circulo en posicion detectada
145 cv2.circle(image,(cx,cy),20,(0,255,0),2)
146
147 #Se calcula el tiempo que demora en procesar 1 frame
148 #donde "t0" corresponde al tiempo donde se captura el frame y dt
corresponde a la diferencia entre el tiempo donde se captura el
frame y el tiempo en que se termina de proceso de deteccion de
imagen
149 fps = 1/(time.clock()-t0+0.00000000001)
150 print 'rendimiento' ,fps, 'fps'
151 registro.write(str(fps))
152 registro.write('\t')
153 #inicio del sistema de control ON-Off Modificado
154 #se crean variables max y min , que corresponden al valor
maximo (on) y minimo (off) del sistema on-off modificado
155 max=88
156 min=70
157 #se calcula el error
158 error=punto-cx
159 #si el error es mayor a 0 se cambia el ciclo pwm a 100%
160 if error>0:
161 p.ChangeDutyCycle(max)
162 registro.write('100')
163 registro.write('\n')
164 #de otro modo se cambia el ciclo pwm a 0%
165 else:
166 p.ChangeDutyCycle(min)
167 registro.write('0')
168 registro.write('\n')
169 #se crea ventana que muestra las imagenes original "frame" y la
filtrada en ByN "imgfiltrada"
170 cv2.imshow('Salida', image)
171 cv2.imshow('Filtrada', imgfiltrada)
172 key = cv2.waitKey(1) & 0xFF
173
174 # se limpia sistema para proximo frame
175 rawCapture.truncate(0)
176
177 #tecla q para salir de ciclo
178 if key == ord("q"):

-3-
C:\Users\Talento\Desktop\Tesis\programa\rgbONOFF.py martes, 05 de enero de 2016 11:20
179 break
180
181 #fin programa

-4-
C:\Users\Talento\Desktop\rgbPID.py domingo, 13 de diciembre de 2015 16:25
1 #Programa Tesis Sistema Levitacion Neumatica con retroalimentacion
Visual
2 #Mauricio Rebolledo Gonzalez
3 #mauricio.rebolledo@usach.cl
4 #Universidad de Santiago de Chile
5
6
7
8 #Importa bibliotecas nesesarias
9
10 from picamera.array import PiRGBArray
11 from picamera import PiCamera
12 import time
13 import cv2
14 import numpy as np
15 import RPi.GPIO as GPIO
16 import PID as control
17
18
19 #configuracion pines GPIO
20 GPIO.setmode(GPIO.BCM)
21 #GPIO.setup(numero_pin,GPIO.(in-out)
22
23 GPIO.setup(03,GPIO.OUT) #controla sentido ON
24 GPIO.setup(04,GPIO.OUT) #controla sentido off
25 GPIO.setup(02,GPIO.OUT) #controla velocidad mediante PWM
26
27
28 GPIO.output(02,True) #enciendo pin 02 Enable motor
29 #GPIO.PWM(Pin,Frecuencia)
30 vent = GPIO.PWM(03,100)
31 vent.start(0.0)
32 vel=50
33
34
35 def nothing(x):
36 pass
37
38 #se inician variables con valor 0
39
40 lasterror=0.0
41 errorsum=0.0
42
43
44
45 #crea un archivo lamado registro.txt para guardar un log de
posiciones y otras variables
46 registro=open("registro.txt","w")
47 #se escriben titulos de columnas
48 registro.write('x \t y \t tiempo \t kp \t ki \t kd \t p \t i \t d \t
salida \n')
49
50
51 #creacion ventana de configuracion
52 cv2.namedWindow('color')
53
54 cv2.createTrackbar('B min','color',0,255,nothing)
55 cv2.createTrackbar('G min','color',0,255,nothing)
56 cv2.createTrackbar('R min','color',0,255,nothing)
57 cv2.createTrackbar('B max','color',0,255,nothing)
58 cv2.createTrackbar('G max','color',0,255,nothing)
59 cv2.createTrackbar('R max','color',0,255,nothing)
60 cv2.createTrackbar('punto','color',0,640,nothing)
61 cv2.createTrackbar('kp','color',0,1500,nothing)
62 cv2.createTrackbar('ki','color',0,1500,nothing)
63 cv2.createTrackbar('kd','color',0,1500,nothing)

-1-
C:\Users\Talento\Desktop\rgbPID.py domingo, 13 de diciembre de 2015 16:25
64 cv2.createTrackbar('linf','color',0,100,nothing)
65 cv2.createTrackbar('lsup','color',0,100,nothing)
66
67
68 # Configuraicon y creacion de variable camara
69 ancho = 640
70 alto = 480
71 camera = PiCamera()
72 camera.resolution = (ancho,alto)
73 camera.framerate = 60
74 rawCapture = PiRGBArray(camera, size=(ancho,alto))
75
76 # La camara requiere un tiempo para inicializarse
77 time.sleep(0.1)
78
79 # ciclo de captura de frames de la camara
80 for frame in camera.capture_continuous(rawCapture, format="bgr",
use_video_port=True):
81 #obtiene un arreglo numpy representando la imagen en formato rgb
crudo
82
83 #se obtiene el tiempo 0
84 t0 = time.clock()
85
86 #variable image contiene el arreglo rgb
87 image = frame.array
88
89 #se capturan los datos de la ventana de configuracion
90 Bmin = cv2.getTrackbarPos('B min','color')
91 Gmin = cv2.getTrackbarPos('G min','color')
92 Rmin = cv2.getTrackbarPos('R min','color')
93 Bmax = cv2.getTrackbarPos('B max','color')
94 Gmax = cv2.getTrackbarPos('G max','color')
95 Rmax = cv2.getTrackbarPos('R max','color')
96 punto = cv2.getTrackbarPos('punto','color')
97 kpa = cv2.getTrackbarPos('kp','color')
98 kia = cv2.getTrackbarPos('ki','color')
99 kda = cv2.getTrackbarPos('kd','color')
100 linf = cv2.getTrackbarPos('linf','color')
101 lsup = cv2.getTrackbarPos('lsup','color')
102
103
104 #se dibuja linea en set point
105 cv2.line(image,(punto,0),(punto,alto),(255,0,0),2,8,0)
106
107
108 #se arman arreglos de limites de color para posterior filtrado
109 inf=np.array([Bmin,Gmin,Rmin],dtype="uint8")
110 sup=np.array([Bmax,Gmax,Rmax],dtype="uint8")
111
112 #se dividen por 100 las constantes
113 kp=float(kpa)/100
114 ki=float(kia)/100
115 kd=float(kda)/100
116
117 #cv2.inRange(entrada,limite inferior, limite superior)
118 #mas informacion
http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
119 imgfiltrada = cv2.inRange(image, inf, sup)
120
121 #disminuyen a la mitad los fps por eso no se utilizan
122 #imgfiltrada = cv2.erode
(imgfiltrada,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),itera
tions = 1)
123 #imgfiltrada = cv2.dilate
(imgfiltrada,cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)),itera

-2-
C:\Users\Talento\Desktop\rgbPID.py domingo, 13 de diciembre de 2015 16:25
tions = 1)
124
125
126 #se crea variable momento
127 #moments
128 #mas informacion
http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and
_shape_descriptors.html
129 momento = cv2.moments(imgfiltrada)
130 #Se pone como condicion un area minima para evitar que ruido sea
considerado en los calculos
131 #se extrae m00 que corresponde al area de la variable momento
132 if momento['m00']>60000:
133 #el centro de masa en x esta dado por cx=m10/m00
134 #se utiliza int para transformar valor de division en un
entero
135 cx = int(momento['m10']/(momento['m00']+0.0000000001))
#el centro de masa en y esta dado por cy=m01/m00
136 cy = int(momento['m01']/(momento['m00']+0.0000000001))
137 #se muestra valores de centroides calculados
138 print 'el centro es ' , cx, ',', cy
139 registro.write(str(cx))
140 registro.write('\t')
141 registro.write(str(cy))
142 registro.write('\t')
143
144 #se dibuja circulo en posicion detectada
145 cv2.circle(image,(cx,cy),20,(0,255,0),2)
146
147 #Se calcula el tiempo que demora en procesar 1 frame
148 #donde "t0" corresponde al tiempo donde se captura el frame y dt
corresponde a la diferencia entre el tiempo donde se captura el
frame y el tiempo en que se termina de proceso de deteccion de
imagen
149 fps = 1/(time.clock()-t0+0.00000000001)
150 print 'rendimiento' ,fps, 'fps'
151 registro.write(str(fps))
152 registro.write('\t')
153
154 #inicio del sistema de control
155 #PID
156 #se obtiene tiempo actual en variable tnow
157 tnow=time.clock()
158 #se calcula delta de tiempo dt
159 dt=tnow-t0
160 #se calcula error, error sumatoria y error derivativo
161 error=punto-cx
162 errorsum=errorsum+error*dt
163 derror=(error-lasterror)/(dt+0.00000000000000001)
164 #se genera la respuesta del sistema pid en la variable xxx
165 xxx=kp*error+ki*errorsum+derror*kd
166 lasterror=error
167 #se suma a la respuesta el valor de 80
168 xxx=80+xxx
169 #se imprime salida
170 print xxx
171 #se analiza la respuesta y se modifica para que quede dentro
de los rangos inf y sup
172 if xxx<linf:
173 xxx=linf
174 if xxx>lsup:
175 xxx=lsup
176 #se imprime salida y otras variables
177 print xxx
178 registro.write(str(tnow))
179 registro.write('\t')

-3-
C:\Users\Talento\Desktop\rgbPID.py domingo, 13 de diciembre de 2015 16:25
180 registro.write(str(kp))
181 registro.write('\t')
182 registro.write(str(ki))
183 registro.write('\t')
184 registro.write(str(kd))
185 registro.write('\t')
186 registro.write(str(xxx))
187 registro.write('\n')
188
189 #se cambia la velocidad del motor segun calculo de PID
190
191 vent.ChangeDutyCycle(xxx)
192 #se crea ventana que muestra las imagenes original "frame" y la
filtrada en ByN "imgfiltrada"
193 cv2.imshow('Salida', image)
194 cv2.imshow('Filtrada', imgfiltrada)
195 key = cv2.waitKey(1) & 0xFF
196
197
198 # se limpia sistema para proximo frame
199 rawCapture.truncate(0)
200
201 #tecla q para salir de ciclo
202 if key == ord("q"):
203 break
204
205 #fin programa

-4-
.2. Planos
A continuacion se muestran los planos de partes y piezas construidos para el desarrollo
de la plataforma y sistema de levitacion neumatica. La descripcion de cada uno es la
siguiente:

Base Carril: Estructura fabricada con perfiles L de acero.

Riel: Fabricados con tubos de 12mm de diametro exterior y 10mm de diametro


interior.

Carro movil: Estructura fabricada con perfiles L de acero.

Estructura de Acrlico: Estructura fabricada en acrilico de 3mm de espesor.

Carcasa Raspberry Pi y Soporte Camara: Carcaza comercial y soporte camara de


acrilico.

Soporte Cilindro: Estructura fabricada en acero.

Cilindro: Cilindro construido en acrilico transparente.

Objeto Levitador: Objeto de poliestileno forrado en cinta autoadhesivo color rojo.

Sistema Levitador: Ensamblado de Sistema Levitador.

101
154

500
1000

12

14
25

DETALLE B
ESCALA 1 : 2
150
30

1500
NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Base Carril
MATERIAL Perfil L 30x30x2
CANTIDAD 1
COMENTARIOS:

Dimensiones en TAMAO N. DE DIBUJO REV.


milimetros. A Base Carril 0
ESCALA:1:10 PESO: HOJA 1 DE 1
C

1000

10
C
SECCIN C-C
ESCALA 2 : 1

12

NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Guia Carro
MATERIAL Acero
CANTIDAD 2
COMENTARIOS:

Dimensiones en TAMAO N. DE DIBUJO REV.


milimetros. A Guia 0
ESCALA:2:1 PESO: HOJA 1 DE 1
150

130

25 25
30

60
30

30

150

NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Carro Mvil
MATERIAL Perfil L 30x30x2
CANTIDAD 1
COMENTARIOS:

Dimensiones en TAMAO N. DE DIBUJO REV.


milimetros. A Carro Mvil 0
ESCALA:1:2 PESO: HOJA 1 DE 1
105

3
140
3
12,50 12,50

30
3
150
3
510

324

130
NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Base Acrilico
MATERIAL

CANTIDAD
Acrlico soporte de
1
COMENTARIOS:
Raspberry Pi
Dimensiones en TAMAO N. DE DIBUJO REV.
milimetros A Base Acrlico 0
ESCALA:1:5 PESO: HOJA 1 DE 1
96

67

16 19,50
3

16 20
29

29
144
32

20,50 55 20,50

NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Case Raspberry Pi
MATERIAL Acrlico Soporte Cmara
CANTIDAD 1
COMENTARIOS:

Dimensiones en TAMAO N. DE DIBUJO REV.


milimetros. A Case Raspberry Pi 0
ESCALA: 1:2 PESO: HOJA 1 DE 1
105
210

110

210

137

2,54
1120

990
20 110

NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Soporte Cilindro
MATERIAL

CANTIDAD
Acero Sistema
1
COMENTARIOS:
Levitador
Dimensiones en TAMAO N. DE DIBUJO REV.
milimetros A Soporte Cilindro 0
ESCALA:1:10 PESO: HOJA 1 DE 1
97
A

89
900

NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Cilindro Acrlico
A MATERIAL Acrlico Sitema Levitador
SECCIN A-A CANTIDAD 1

ESCALA 1 : 5 COMENTARIOS:

Dimensiones en TAMAO N. DE DIBUJO REV.


milimetros A Cilindro Acrlico 0
ESCALA:1:5 PESO: HOJA 1 DE 1
81

62

48

NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Objeto Levitador
MATERIAL Compuesto
CANTIDAD 1
COMENTARIOS:

Dimensiones en TAMAO N. DE DIBUJO REV.


milimetros. A Objeto Levitador 0
ESCALA: 1:1 PESO: HOJA 1 DE 1
NOMBRE FECHA

DIBUJADO M.R.G. 15/12/15 Universidad de Santiago de Chile


REVISADO R.S.S. 11/01/16
APROBADO R.S.S. 15/01/16 Sistema Levitador
MATERIAL Compuesto
CANTIDAD 1
COMENTARIOS:

Ensamblado TAMAO N. DE DIBUJO REV.


A Sistema Levitador 0
ESCALA: 1:10 PESO: HOJA 1 DE 1
.3. Gua Sintonizacion PID
Existen diversos metodos de sintonizador de controladores PID, en la siguiente gua se
describe el metodo de Prueba y Error, es practico ya que no requiere saber la funcion de
planta. Es indispensable conocer los efectos de las acciones de control en un sistema PID,
ver tabla 1.
Tabla 1: Efecto de las acciones de control en los reguladores PID

Accion de Control Efecto en regimen transitorio Efecto regimen permanente


Proporcional Disminuye el tiempo de res- No presenta mejoras segun el
puesta del sistema, haciendo- tipo de sistema.
lo mas rapido.
Integral Empeora el transitorio, au- Mejora el estacionario.
menta el sobreimpulso y el
tiempo de establecimiento del
sistema, haciendolo mas osci-
latorio.
Derivativo Mejora el transitorio, reduce No actua en regimen estacio-
el tiempo de establecimiento nario (derivada nula).
y disminuye el sobreimpulso.

A continuacion se indican los pasos a seguir:


1. Probar el control Proporcional elevando progresivamente el valor en la constante Kp
hasta que se llegue al Set Point en un tiempo razonable.Es importante saber que al
aumentar el valor de la constante Kp se disminuye el tiempo de respuesta del sis-
tema, el control proporcional no es capaz de eliminar el efecto de una perturbacion
que permanece en el tiempo.

Figura 1: Efecto control Proporcional.

111
2. El sistema debe estar con un error de regimen permanente, por lo que se debe agregar
el control integral. Elevar progresivamente el valor de la constante Ki hasta que se
disminuya al mnimo el error de regimen permanente.

Figura 2: Efecto control Integral.

3. Anadir un control derivativo elevando progresivamente la constante Kd para mejorar


el transitorio, reduciendo el sobreimpulso y el tiempo de estabilizacion.

Figura 3: Efecto control Derivativo.

4. Se debe reiniciar el sistema con las constantes fijadas anteriormente para registrar el
comportamiento durante un tiempo en un Set Point fijo.
5. Con los datos obtenidos en el paso anterior se debe calcular los indicadores IAE
(Integral del valor absoluto del error) e ITAE (Integral del valor absoluto del error
ponderado en el tiempo).

112
Figura 4: Integral del valor absoluto del Error.

Figura 5: Integral del valor absoluto del Error ponderado en el Tiempo.

6. Repetir el proceso desde el paso numero 1 al menos 3 veces.

7. Seleccionar el conjunto de constantes que obtuvieron el menor valor en los indica-


dores IAE e ITAE.

.4. Esquemas Electricos


Esquema conexion Puente H:

113
Figura 6: Esquema conexion Puente H 114

You might also like