Professional Documents
Culture Documents
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
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
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
vi
Indice de Figuras
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
viii
Captulo 1
Introduccion
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.
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.
3
1.3. Objetivos y alcance del proyecto
Para la consecucion del objetivo general, se plantean las siguientes metas intermedias:
1.3.3. Alcances
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
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.1. Metodologa
5
1.4.2.1. Plataforma Raspberry Pi 2 rev B
6
Tabla 1.1: Especificaciones Tecnicas Raspberry Pi 2 Model B
7
Figura 1.3: Ranking de lenguajes de programacion mas populares segun RedMonk
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]
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:
9
Captulo 2
Marco Teorico
10
Figura 2.2: Bloques de Sistema de Levitacion
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
12
Figura 2.5: Campo Visual
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
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]
15
2.1.5. Modulo de Entrada
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
~g : aceleracion de gravedad.
17
2.2.2. Fuerza de Arrastre Fa
1
Fa = CD v2 A
2
Donde:
A : Area caracterstica del cuerpo. Lo mas comun es considerar al a rea transversal como
el a rea caracterstica o a rea proyectada.
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
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]
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
3.1.1.1. Time
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
3.1.1.5. OpenCV
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
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.
camera.resolution = (ancho,alto)
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)
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.
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:
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):
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.
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.
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
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]:
Parametros:
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:
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.
31
Figura 3.9: Imagen binaria despues de aplicar filtro
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:
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
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.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
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.
Kp de(t)
Z
u(t) = K p e(t) + e(t)dt + K p Td
Ti dt
tnow=time.clock()
dt=tnow-t0
error=punto-cx
35
errorsum=errorsum+error*dt
derror=(error-lasterror)/dt
lasterror=error
derror : Corresponde a la diferencia del error con el error anterior dividido por la
diferencia de tiempo(dt).
PIDX=kp*error+ki*errorsum+kd*derror
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
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
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]
ChangeDutyCycle(senal)
Senal: Valor correspondiente al ciclo de trabajo en porciento, sus valores van de 0 a 100.
(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.
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 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.
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.
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.
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.
43
4.1.1.5. Carcasa Raspberry Pi y Camara
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
4.1.2. Electronica
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.
46
Figura 4.10: Fuente de poder
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.
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.
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.
49
Tabla 4.1: Mediciones Estaticas en Pixeles
1. Restar a todos los valores el valor de la muestra 1 que corresponde a la altura cero.
H pxi = Hi H1
Donde:
H pxi H pxi1
Cli =
Hmmi Hmmi1
Donde:
50
3. Calcular coeficiente global Cp como el promedio de todos los coeficientes locales.
ni=1 Cli
Cp =
n
Donde:
Hmmi = H pxi Cp
51
Tabla 4.3: Error Mediciones Estaticas en 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.
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
53
4.2.2. Rendimiento
Resolucion Rendimiento
640 x 480 50 fps
1280 x 720 16 fps
1920 x 1080 7,7 fps
54
versus tiempo. Este sistema de control tiene 2 respuestas, las cuales por definicion son:
PWM
On : 100 %
Off : 0%
55
Figura 4.18: Posicion y Respuesta Sistema On-Off
PWM
On : 85 %
Off : 70 %
56
Figura 4.22: Posicion y respuesta PID
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.
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.
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.
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.
61
Captulo 5
CONCLUSIONES Y PERSPECTIVAS
FUTURAS
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.
64
Se logro describir 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.
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.
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.
66
Bibliografa
[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/.
[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.
[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.
68
Anexos
69
OV5648 5-megapixel product brief
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
OV5648
image sensor core image image output
sensor interface
column processor
sample/hold
row select
MIPI
ISP
AMP MDP/N[1:0]
array ADC
gain control
control
register bank
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.
SN754410
SLRS007C NOVEMBER 1986 REVISED JANUARY 2015
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
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
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
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
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.
(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.
(1) For more information about traditional and new thermal metrics, see the IC Package Thermal Metrics application report, SPRA953.
24.0 2.0
-40C -40C
23.8 1.8
25C 25C
23.6 1.6
125C 125C
Output Voltage (V)
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.
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.
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.
This symbol is in accordance with ANSI/IEEE Std 91-1984and IEC Publication 617-12.
(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.
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.
14
12
10
Voltage (V)
6
2 Output
4
0 1 2 3 4 5 6 7 8 9 10
Time (ms) C001
12 Layout
0.1 F
TTL Logic 1 1,2EN VCC1 16 5V
1 Ampere 3 1Y 4Y 14 1 Ampere
4 13
GND
VIAS
5 12
1 Ampere 6 2Y 3Y 11 1 Ampere
1 F
GND
13.3 Glossary
SLYZ022 TI Glossary.
This glossary lists and explains terms, acronyms, and definitions.
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
0.310 (7,87)
B 0.020 (0,51) MIN
0.290 (7,37)
4040054 / B 04/95
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
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:
101
154
500
1000
12
14
25
DETALLE B
ESCALA 1 : 2
150
30
1500
NOMBRE FECHA
1000
10
C
SECCIN C-C
ESCALA 2 : 1
12
NOMBRE FECHA
130
25 25
30
60
30
30
150
NOMBRE FECHA
3
140
3
12,50 12,50
30
3
150
3
510
324
130
NOMBRE FECHA
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
110
210
137
2,54
1120
990
20 110
NOMBRE FECHA
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
ESCALA 1 : 5 COMENTARIOS:
62
48
NOMBRE FECHA
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.
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.
113
Figura 6: Esquema conexion Puente H 114