Вы находитесь на странице: 1из 82

INSTITUTO TECNOLGICO SUPERIOR

DE HUAUCHINANGO

MODELADO Y CONSTRUCCIN DE UN
AEROPNDULO

INGENIERA
MECATRNICA
P

BRENDA SHANTAL
BARRAZA ACOSTA
J11312005

HUAUCHINANGO, PUE. A 17 DICIEMBRE DE 2015

INSTITUTO TECNOLGICO SUPERIOR


DE HUAUCHINANGO

MODELADO Y CONSTRUCCIN DE UN
AEROPNDULO

INGENIERA
MECATRNICA
P

BRENDA SHANTAL
BARRAZA ACOSTA
J11312001

HUAUCHINANGO, PUE. A 17 DICIEMBRE DE 2015

Resumen

Este trabajo presenta el procedimiento realizado, para el diseo y la


construccin de un modelo de aeropndulo portable, para uso de laboratorio basado
en Matlab, Simulink y Arduino. El propsito de construir este mdulo, es
proporcionar un dispositivo fcil de construir y de bajo costo, para prueba y
simulacin de controladores en tiempo real, basado en el envi de seales de PWM
al motor. Se detalla el funcionamiento general del aeropndulo, as como las piezas
que lo conforman. De igual manera se muestra la forma de la conexin del mdulo,
para un sistema de control en lazo cerrado. Haciendo uso de Arduino Uno, como
tarjeta de adquisicin de datos con conexin al Software Matlab y Simulink [1].

Abstract

This work presents the procedure realized for the design and construction of a
portable aeropendulum model for laboratory use based on Matlab, Simulink and
Arduino. The purpose of building this module is to provide a device which is low
cost and easy to construct, this is for probe and simulation of controllers in real time,
based on sending PWM signals to the motor. Is described the general function of the
aeropendulum and its different parts. Also is shown the connection of the module for
a closed loop control system. Using an Arduino UNO board as data aquisition board
with connection to Matlab and Simulink.

Dedicatoria

Dedico el presente trabajo a mis padres los cuales a lo largo de mi vida han
sido mis mejores amigos, a mis hermanos por todo el apoyo y cario que me han
brindaron a lo largo de mi carrera y mi vida.

Agradecimientos
En primer lugar le agradezco a Dios por permitirme llegar hasta aqu y poder
cumplir una meta ms en mi vida.
A mis padres por todo el amor, apoyo y confianza que en mi depositaron para
poder lograr este gran reto que es terminar mi carrera profesional.
A mis hermanos por estar siempre a mi lado cuando ms los necesito.
A mi mejor amigo que siempre estuvo a mi lado en las buenas y en las malas,
apoyndome hasta el final.
A mi asesor el Dr. Gregorio por brindarme su confianza que en mi depsito y
por compartirme parte de su conocimiento en cada clase y asesora.

ndice de contenido
5

Pgina
Resumen
Abstract
Dedicatoria
Agradecimientos
Antecedentes

i
ii
iii
iv
ix

Captulo I. Introduccin
1.1 Problema a resolver
1.2 Justificacin
1.3 Objetivo general
1.4 Objetivos especficos
1.5 Aportaciones del trabajo
1.6 Estructura del trabajo

1
2
2
3
3
3

Captulo II. Marco Terico


2.1 Pndulo
2.1.1 Pndulo simple o matemtico
2.1.2 Ecuacin de movimiento
2.1.3 Pndulo fsico o compuesto
2.1.4 Pndulo doble o doble pndulo
2.2 PWM
2.3 MatLab
2.4 Arduino
2.5 Comunicacin entre MatLab y Arduino
2.6 Sensor MPU-6050
2.7 SolidWorks

4
5
5
6
6
7
8
12
16
18
19

Captulo III. Marco Metodolgico


3.1 Diseo del aeropndulo en SolidWorks
3.2 Modelo matemtico
3.3 Construccin de aeropndulo
3.4 Adaptacin del sensor MPU-6050

20
21
29
33

3.5 Interfaz del aeropndulo en MatLab y Arduino

34

Captulo IV. Anlisis de Resultados


4.1 Imgenes del prototipo final
4.2 Pruebas finales

35
36
6

Conclusiones

43

Recomendaciones

44

Referencias

45

Anexos
Anexo A: Imgenes de prueba
Anexo B: Cdigo de arranque del Motor Multistar Drone
Anexo C: Cdigo del funcionamiento del Aeropndulo con control

47
48

en Arduino
Anexo D: Cdigo de limpieza de la memoria eeprom
Anexo E: Cdigo del funcionamiento del Aeropndulo Arduino-

56

Simulink

50

57

ndice de figuras
Pgina
Figura 1 Galileo Galilei
Figura 2 El fenmeno del pndulo simple
Figura 1.1 Problema a resolver
Figura 2.1 Pndulo
Figura 2.1.1 Pndulo simple
Figura 2.1.3 Pndulo fsico

ix
xi
2
4
5
6
7

Figura 2.1.4 Movimiento de un doble pndulo


Figura 2.2 Grficos de PWM
Figura 2.3 Logotipo de MatLab
Figura 2.3.a Ventana de comandos
Figura 2.3.b Ventana historia de comandos
Figura 2.3.c Ventana del rea de trabajo
Figura 2.3.d Ventana current folder
Figura 2.4 Arduino UNO
Figura 2.4.a Entorno de desarrollo de Arduino
Figura 2.4.b Estructura bsica de un programa de Arduino
Figura 2.5 Comunicacin MatLab-Arduino
Figura 2.6 Sensor MPU-6050
Figura 2.7 Logotipo de SolidWorks
Figura 3.1 Diseo del aeropndulo renderizado
Figura 3.3 Motor Multistar Drone
Figura 3.3.a Hlice del motor
Figura 3.3.b Batera de alimentacin
Figura 3.4 Adaptacin del sensor MPU-6050
Figura 3.5 Diagrama de bloques MatLab-Simulink
Figura 3.5.a Realidad Virtual
Figura 4.1 Prototipo final vista frontal
Figura 4.1.a Prototipo final vista lateral
Figura 4.2 Diagrama de bloques en Simulink
Figura 4.2.a Cdigo del Aeropndulo con control
Figura 4.2.b Cdigo del Aeropndulo Arduino-Simulink
Figura 4.2.c Grfica del controlador P
Figura 4.2.d Ventana Funtion Block Parameters: PIC Controller del
controlador P
Figura 4.2.e Grfica del controlador PD
Figura 4.2.f Ventana Funtion Block Parameters: PIC Controller del
controlador PD
Figura 4.2.g Grfica de controlador PID
Figura 4.2.h Ventana Funtion Block Parameters: PIC Controller del
controlador PID
Figura A.1 Grficas de la simulacin de control
Figura A.2 Valores obtenidos de la simulacin de control

7
8
9
10
10
11
11
12
14
15
17
18
19
20
31
32
32
33
34
34
35
35
36
37
37
38
39
40
40
41
42
47
47

Antecedentes

Se puede decir que el pndulo es el smbolo de la ciencia. Con este elemento


tan simple, se pudo comprobar la translacin de la tierra, ya que este se mantiene
siempre en el mismo lugar, demostrando el giro de la tierra.
El principio del pndulo fue descubierto originalmente por Galileo (fsico y
astrnomo), quien estableci que el periodo de oscilacin es independiente de la
amplitud (distancia mxima que se aleja el pndulo de la posicin de equilibrio). Por
el

contrario,

depende

de

la

longitud

del

hilo

(Figura

1).

Luego surgi justamente lo que te dije al principio: pndulo de Foucault es un


pndulo largo que puede oscilar libremente en cualquier plano vertical y capaz de
oscilar durante horas. Se utiliza para demostrar la rotacin de la Tierra y la fuerza de
Coriolis. Se llama as en honor de su inventor, Len Foucault.
Pndulo, usado en los relojes y otros instrumentos para medir con precisin el
tiempo.
9

Figura 1 Galileo Galilei.

Pndulo, dispositivo formado por un objeto suspendido de un punto fijo y que


oscila de un lado a otro bajo la influencia de la gravedad. Los pndulos se emplean
en varios mecanismos, como por ejemplo algunos relojes.
En el pndulo ms sencillo, el llamado pndulo simple, puede considerarse
que toda la masa del dispositivo est concentrada en un punto del objeto oscilante, y
dicho punto slo se mueve en un plano. El movimiento del pndulo de un reloj se
aproxima bastante al de un pndulo simple. El pndulo esfrico, en cambio, no est
limitado a oscilar en un nico plano, por lo que su movimiento es mucho ms
complejo.
El principio del pndulo fue descubierto por Galileo, quien estableci que el
periodo de la oscilacin de un pndulo de una longitud dada puede considerarse
independiente de su amplitud, es decir, de la distancia mxima que se aleja el
pndulo de la posicin de equilibrio. (No obstante, cuando la amplitud es muy
grande, el periodo del pndulo s depende de ella). Galileo indic las posibles
aplicaciones de este fenmeno, llamado isocronismo, en la medida del tiempo. Sin
embargo, como el movimiento del pndulo depende de la gravedad, su periodo vara
con la localizacin geogrfica, puesto que la gravedad es ms o menos intensa segn
la latitud y la altitud. Por ejemplo, el periodo de un pndulo dado ser mayor en una
montaa que a nivel del mar. Por eso, un pndulo permite determinar con precisin la
aceleracin local de la gravedad.

10

El fenmeno del Pndulo Simple pas de ser un "formulazo" a un modelo, y


de ste a un experimento, pero la historia no estaba terminada an. Investigando ms
sobre el pndulo "simple", llegu a encontrar que Galileo por all del siglo XVI
tambin tuvo que ver con este artefacto. Se cuenta que un da del ao de 1583, en la
catedral de Pisa le llamaron la atencin las oscilaciones de una lmpara de aceite que
penda del techo, observ que el tiempo que tardaba en completar una oscilacin era
aproximadamente el mismo, aunque la amplitud del desplazamiento iba
disminuyendo con el tiempo. Fue aqu cuando el relato me conmovi, porque yo no
saba que, como nuestro amigo Galileo no tena cronmetro para medir los intervalos
del tiempo y verificar su observacin, entonces us como patrn de medida su
propio pulso! Estas mediciones tuvieron una profunda influencia en los estudios
cientficos de la poca (Figura 2).

Figura 2 El fenmeno del Pndulo Simple.

Debido a su acercamiento matemtico al movimiento, Galileo estaba


intrigado por el movimiento hacia atrs y delante de un cuerpo pesado suspendido.
Sus consideraciones ms tempranas de este fenmeno deben datar de los das
anteriores a que aceptara un puesto de maestro en la universidad de Pisa.

11

Su primer bigrafo, Vincenzo Viviani, afirma que comenz su estudio de los


pndulos despus de que observara una lmpara suspendida balancendose hacia
delante y atrs en la catedral de Pisa cuando todava era un estudiante all. Las
primeras notas de Galileo sobre la materia datan de 1588, pero no comenz a hacer
investigaciones serias hasta 1602.
El descubrimiento de Galileo fue que el periodo del balanceo de un pndulo
es independiente de su amplitud - el arco del balanceo - el isocronismo del pndulo.
Este descubrimiento tena importantes aplicaciones para la medida de intervalos de
tiempo. En 1602 explic el isocronismo de pndulos largos en una carta a un amigo,
y un ao despus a otro amigo, Santorio Santorio, un fsico de Venecia, que comenz
a usar un pndulo corto, al que llam "pulsilogium", para medir el pulso de sus
pacientes. El estudio del pndulo, el primer oscilador armnico, data de este periodo.
El movimiento del pndulo planteaba interesantes problemas. Qu
movimiento era ms rpido desde un punto elevado a otro ms bajo, aqul a lo largo
de un arco circular como un pndulo o aqul a lo largo de una lnea recta como en un
plano inclinado? Afecta el peso del pndulo al periodo? Cul es la relacin entre la
longitud y el periodo? A travs de su trabajo experimental, el pndulo nunca se alej
demasiado de los pensamientos de Galileo. Pero tambin estaba la cuestin de su uso
prctico.
Un pndulo podra usarse para medir pulsos o actuar como un metrnomo
para estudiantes de msica: sus balanceos medan intervalos de tiempo iguales.
Podra usarse tambin para mejorar los relojes? El reloj mecnico, que usaba un
cuerpo pesado para proporcionar el movimiento, comenz a desplazar al reloj de
agua en la Edad Media. Por sucesivas mejoras, el sistema se haba hecho ms
pequeo y ms fiable. Pero la precisin de los mejores relojes era todava demasiado
mala para, por ejemplo, tener utilidad en astronoma. No solo se adelantaban o
retrasaban, sino que adems lo hacan de una forma irregular e impredecible. Podra
aadirse un pndulo al mecanismo de escape de un reloj para regularlo?
En 1641, a la edad de 77 aos, totalmente ciego, Galileo centr su atencin en
este problema. Vincenzo Viviani describe los sucesos tal y como sigue:
12

"Un da de 1641, cuando yo viva con l en su pueblo en Arcetri, recuerdo que se le


ocurri la idea de que el pndulo podra ser adaptado a relojes con pesos, sirviendo
en lugar del habitual tempo, confiando en que el movimiento natural y uniforme del
pndulo corregira todos los defectos del arte de los relojes. Pero dado que estaba
privado de la vista, no pudo hacer dibujos y modelos del efecto deseado, y le cont a
su hijo Vicenzio que vena un da de Florencia a Arcetri su idea y discutieron sobre
ella. Finalmente decidieron un esquema que debera ser puesto en prctica para
aprender de las dificultades que apareceran y que no se habran previsto por la
teora."
Vivani escribi esto en 1559, diecisiete aos despus de la muerte de Galileo
y dos aos despus de la publicacin de Horologium de Christiaan Huygens, en el
que ste describa su reloj de pndulo.

Captulo I. Introduccin
El pndulo fsico es un sistema que demanda un modelado preciso y
sofisticadas estrategias de control. Dentro de la teora de control, el pndulo demanda
robustez, estabilidad y eficiencia para ser controlado. Un aeropndulo basa sus
movimientos angulares en un motor, montado en la parte superior del eje de un
pndulo, el cual cuenta con una hlice para generar un impulso al eje rotario del
pndulo. El objetivo de construir un dispositivo de control en lazo cerrado, basado en
Matlab, Simulink y Arduino, de laboratorio para el aeropndulo. Es proporcionar un
dispositivo fcil de construir y de bajo costo, para prueba y simulacin de
controladores en tiempo real. Basando el control del aeropndulo, en l envi de
seales PWM, generados por Arduino hacia el motor, para posicionar el aeropndulo
al Angulo deseado por el usuario. Mediante la descripcin del funcionamiento
general del aeropndulo, son detalladas las piezas que lo conforman. De igual
manera se muestra la forma de la conexin del aeropndulo, para un sistema de
control en lazo cerrado. Haciendo uso de Arduino Uno, como tarjeta de adquisicin
de datos con conexin al software Matlab y Simulink.

1.1 Problema a resolver


13

En nuestra carrera le hace falta equipo de laboratorio para prcticas de


control, para resolver este problema se ha propuesto desarrollar un sistema
mecatrnico portable para control y se utilice para prcticas de laboratorio; es por
esto que en el presente proyecto el problema a resolver es modelar y construir un
aeropndulo portable de fcil construccin y de bajo costo para prueba y simulacin
de controladores. (Figura 1.1).

Figura 1.1 Problema a resolver

1.2 Justificacin
En nuestra carrera de Ingeniera Mecatrnica carece de prcticas de control, como
son: PID, PD, P, LQR, FUZZY, es por eso se ha construido un sistema macatrnico
con la finalidad de llevar a cabo prcticas de laboratorio para controladores. El
mtodo utilizado, se implement por medio de simulaciones realizadas bajo los
ambientes de MatLab, Simulink y Arduino. Con el deseo de probar la efectividad de
los controladores en el sistema mecatrnico en tiempo real. El aeropndulo es una
opcin de fcil diseo y construccin.

1.3 Objetivo general


Disear y construir un mdulo portable para laboratorio basado en MatLab,
Simulink y un aeropndulo, para proporcionar un dispositivo didctico, fcil de
construir y de bajo costo.

1.4 Objetivos especficos


-

Prototipo portable.
Desarrollar en Simulink un diagrama de bloques para el control del

aeropndulo.
Realizar la comunicacin entre MatLab y Arduino para la manipulacin del
aeropndulo.

1.5 Aportaciones del trabajo


El desarrollo de este proyecto tiene como alcance el poder moverse a una
posicin indicada (ngulo) y estabilizarse si es que lo mueven.

1.6 Estructura del trabajo


A continuacin se describe el contenido de los captulos que conforman este
trabajo:
En el Captulo I: Introduccin, se hace una breve descripcin de las
caractersticas principales del proyecto.

En el Captulo II: Marco Terico, se presentan las definiciones y bases


tericas sobre las que se fundamenta el proyecto.
En el Captulo III: Metodologa, se explica el modelo matemtico realizado,
as como el diagrama de bloques en MatLab-Simulink y la elaboracin del
aeropndulo.
En el Captulo IV: Anlisis de Resultados, se analizan los resultados
obtenidos para determinar si se ha logrado el objetivo trazado.

Captulo II. Marco Terico


En este captulo se introducen una serie de conceptos preliminares para
comprender las partes especficas del aeropndulo y su funcionamiento.
2.1 Pndulo
El Pndulo es un sistema fsico que puede oscilar bajo la accin gravitatoria u
otra caracterstica fsica (elasticidad, por ejemplo) y que est configurado por una
masa suspendida de un punto o de un eje horizontal fijo mediante un hilo, una varilla,
u otro dispositivo que sirve para medir el tiempo (Figura 2.1).
Existen muy variados tipos de pndulos que, atendiendo a su configuracin y
usos, reciben los nombres apropiados: pndulo simple, pndulo compuesto, pndulo
cicloidal, doble pndulo, pndulo de Foucault, pndulo de Newton, pndulo balstico,
pndulo de torsin, pndulo esfrico, etctera.

Figura 2.1 Pndulo.

2.1.1 Pndulo simple o matemtico


Tambin llamado pndulo ideal est constituido por un hilo inextensible de
masa despreciable, sostenido por su extremo superior de un punto fijo, con una masa
puntual sujeta en su extremo inferior que oscila libremente en un plano vertical fijo
(Figura 2.1.1).
Al separar la masa pendular de su punto de equilibrio, oscila a ambos lados de
dicha posicin, desplazndose sobre una trayectoria circular con movimiento
peridico.

Figura 2.1.1 Pndulo Simple.

2.1.2 Ecuacin de movimiento


Para escribir la ecuacin del movimiento observaremos la figura adjunta,
correspondiente a una posicin genrica del pndulo. La flecha azul representa el
peso de la masa pendular. Las flechas en color violeta representan las componentes
del peso en las direcciones tangencial y normal a la trayectoria.
Aplicando la Segunda ley de Newton en la direccin del movimiento,
tenemos ecuacin (1):
Ft =mgsin=m at

donde el signo negativo tiene en cuenta que la

(1)

tiene direccin opuesta a la del

desplazamiento angular positivo. Considerando la relacin existente entre la


aceleracin tangencial y la aceleracin angular, ecuacin (2):
at =l

(2)

obtenemos finalmente la ecuacin diferencial (3) del movimiento plano del pndulo
simple [5].
gsin=0
l +

(3)

2.1.3 Pndulo fsico o compuesto


Pndulo fsico o pndulo compuesto es cualquier cuerpo rgido que pueda
oscilar libremente en el campo gravitatorio alrededor de un eje horizontal fijo, que no
pasa por su centro de masa (Figura 2.1.3).

Figura 2.1.3 Pndulo Fsico.

2.1.4 Pndulo doble o doble pndulo


Pndulo doble o doble pndulo es un sistema compuesto por dos pndulos,
con el segundo colgando del extremo del primero. En el caso ms simple, se trata de
dos pndulos simples, con el inferior colgando de la masa pendular del superior
(Figura 2.1.4).
Normalmente se sobreentiende que nos referimos a un doble pndulo plano,
con dos pndulos planos coplanarios. Este sistema fsico posee dos grados de libertad
y exhibe un rico comportamiento dinmico. Su movimiento est gobernado por dos
ecuaciones diferenciales ordinarias acopladas. Por encima de cierta energa, su
movimiento es catico.

Figura 2.1.4 Movimiento de un doble pndulo.

2.2 PWM
Pulso modulacin de ancho, o PWM, es una tcnica para obtener resultados
anlogos con medios digitales. Control digital se utiliza para crear una onda
cuadrada, una seal cambia entre encendido y apagado. Este patrn de encendido y
apagado puede simular tensiones en el medio completo en (5 voltios) y desactivacin
(0 Volts) cambiando la parte de las veces la seal pasa en comparacin con el tiempo
que la seal pasa fuera. La duracin de "a tiempo" se llama el ancho de pulso. Para
obtener variando valores analgicos, se cambia, o modular, que el ancho de pulso. Si
repite este patrn de encendido y apagado suficientemente rpido con un LED por
ejemplo, el resultado es como si la seal es una tensin constante entre 0 y 5v
controlar el brillo del LED [6].
En el siguiente grfico, las lneas verdes representan un perodo de tiempo
regular. Esta duracin o perodo es la inversa de la frecuencia PWM. En otras
palabras, con frecuencia PWM de Arduino en alrededor de 500 Hz, las lneas verdes
mediran 2 milisegundos cada uno. Una llamada a analogWrite () es en una escala de
0 a 255, de tal manera que analogWrite (255) solicita un ciclo de trabajo del 100%
(siempre encendido), y analogWrite (127) es un ciclo de trabajo del 50% (en la mitad
del tiempo) para ejemplo (Figura 2.2).

Figura 2.2 Grficos de PWM.

2.3 MatLab
El nombre de MatLab es una abreviatura de Matrix Laboratory (Laboratorio
Matricial), desde su aparicin en los aos 70, ha ido introducindose con fuerza en el
mbito cientfico y universitario; en la actualidad es una de las principales
herramientas para el clculo matemtico, anlisis de datos, simulacin y
visualizacin de resultados. Una ventaja importante que presenta MatLab es el
entorno grfico de trabajo, la claridad en la presentacin de resultados y la
versatilidad que presenta para la creacin de funciones [7].
Todas las operaciones que realiza MatLab se basan en una estructura de datos
matriciales; todas las funciones o comandos de MatLab se agrupan en las llamadas
toolbox, y abarcan diferentes campos, como son el anlisis y adquisicin de datos,
procesamiento de imgenes y de seales, anlisis y diseo de sistemas de control,

comunicaciones, simulaciones en tiempo real y tambin herramientas para finanzas,


estadstica, economa o lgica difusa (Figura 2.3).

Figura 2.3 Logotipo de MatLab.

MatLab utiliza varias ventanas, las principales se mencionan a continuacin:


a) Ventana de comandos (Command Window). La ejecucin de comandos o
funciones se realiza en esta ventana y el resultado de una ejecucin se
muestra en la misma (Figura 2.3.a).

Figura 2.3.a Ventana de comandos.

10

b) Historia de Comandos (Command History). Registra los comandos que se


escriben en la ventana de comandos; cuando se sale de MatLab o cuando se
escribe el comando clc, la ventana de comandos se limpia; sin embargo la
ventana de historia de comandos conserva una lista de todos los comandos
que se han utilizado (Figura 2.3.b).

Figura 2.3.b Ventana historia de comandos.

c) rea de trabajo (Workspace). Esta ventana muestra las variables que se


definan conforme se ejecutan comandos (Figura 2.3.c).

Figura 2.3.c Ventana del rea de trabajo

d) Carpeta actual (current folder). Enlista todos los archivos contenidos en la


ubicacin de la carpeta actual (Figura 2.3.d).

11

Figura 2.3.d Ventana current folder.

2.4 Arduino

Arduino es una plataforma de electrnica abierta para la creacin de


prototipos basada en software y hardware flexibles y fciles de usar (Figura 2.4). Se
cre para artistas, diseadores, aficionados y cualquiera interesado en crear entornos
u objetos interactivos. Arduino puede tomar informacin del entorno a travs de sus
pines de entrada de toda una gama de sensores y puede afectar aquello que le rodea
controlando luces, motores y otros actuadores. El microcontrolador en la placa
Arduino se programa mediante el lenguaje de programacin Arduino y el entorno de
desarrollo Arduino; los proyectos hechos con Arduino pueden ejecutarse sin
necesidad de estar conectado a un ordenador [8].

12

Figura 2.4 Tarjeta Arduino UNO.

Arduino naci en el ao 2005 en el Instituto de Diseo Interactivo de Ivrea


(Italia), centro acadmico donde los estudiantes se dedicaban a experimentar con la
interaccin entre humanos y diferentes dispositivos (muchos de ellos basados en
microcontroladores) para conseguir generar espacios nicos, especialmente artsticos.
Arduino apareci por la necesidad de contar con un dispositivo para utilizar en las
aulas que fuera de bajo costo, que funcionase bajo cualquier sistema operativo y que
contase con documentacin adaptada a gente que quisiera empezar de cero. La idea
original fue, pues, fabricar la placa para uso interno de la escuela. No obstante, el
Instituto se vio obligado a cerrar sus puertas precisamente en 2005. Ante la
perspectiva de perder en el olvido todo el desarrollo del proyecto Arduino que se
haba ido llevando a cabo durante aquel tiempo, se decidi liberarlo y abrirlo a la
comunidad para que todo el mundo tuviera la posibilidad de participar en la
evolucin del proyecto, proponer mejoras, sugerencias y mantenerlo vivo. Y as ha
sido: la colaboracin de muchsima gente ha hecho que Arduino poco a poco haya
llegado a ser lo que es actualmente: un proyecto de hardware y software libre de
mbito mundial. El principal responsable de la idea y diseo de Arduino, y la cabeza
visible del proyecto es el llamado Arduino Team, formado por Massimo Banzi
(profesor en aquella poca del Instituto Ivrea), David Cuartielles (profesor de la
13

Escuela de Artes y Comunicacin de la Universidad de Mlmo, Suecia), David


Mellis (por aquel entonces estudiante en Ivrea y actualmente miembro del grupo de
investigacin High-Low Tech del MIT Media Lab), Tom Igoe (profesor de la Escuela
de Arte Tisch de Nueva York), y Gianluca Martino (responsable de la empresa
fabricante de los prototipos de las placas).
A continuacin se describen algunos de los pines de la tarjeta Arduino:
-

Digitales. Se pueden utilizar como entrada o salida, trabajan con seales de


tensin, funcionan a 5V y pueden suministrar hasta 40nA. Cuando llegan 5V
o ms se interpreta como 1 (HIGH) y cuando llegan a 0V se interpreta como 0

(LOW).
Analgicos. Tienen una resolucin de 10 bits, retornando valores desde 0 a

1023, su uso principal es para la lectura de sensores analgicos.


RX y TX. Se usan para transmisiones serie de seales TTL.
PWM. Arduino dispone de pines de salida destinados a la generacin de

seales PWM (modulacin por ancho de pulso).


SPI. Permiten llevar a cabo comunicaciones SPI.
I2C. Permite establecer comunicaciones a travs de un bus I 2C (interconexin
de sistemas embebidos).
La tarjeta Arduino puede alimentarse directamente a travs del cable USB que

realiza la comunicacin de la tarjeta con la PC o mediante una fuente de


alimentacin externa, los lmites de alimentacin estn entre los 5 y los 12V.
Para programar la tarjeta Arduino es necesario descargarse de la pgina web
de Arduino el entorno de desarrollo (IDE) (Figura 2.4.a), el cual est disponible en
versiones para MAC, Windows y LINUX; adems de tener el entorno de desarrollo
es necesario instalar los drivers incluidos al descargarlo. Lo primero que se tiene que
hacer para comenzar a trabajar en el entorno de desarrollo es configurar la
comunicacin entre la tarjeta Arduino y la PC, para ello se debe abrir el men
Tools y la opcin Serial Port, en esta opcin se deber seleccionar el puerto serie
al que est conectado la tarjeta [9].

14

Figura 2.4.a Entorno de desarrollo de Arduino.

La estructura bsica de un programa de Arduino es simple y divide la


ejecucin en dos partes (Figura 2.4.b):
-

Setup(). Constituye la preparacin del programa, incluye el modo en que se


utilizaran los pines de la tarjeta y se trata de la primera funcin que se ejecuta

en el programa.
Loop(). Incluye el cdigo a ser ejecutado continuamente, leyendo las entradas
de la placa, salidas, etc.

Figura 2.4.b Estructura bsica de un programa de Arduino.

15

Las funciones principales utilizadas en la programacin de la tarjeta Arduino


se describen a continuacin:
-

pinMode(pin, mode). Se utiliza para configurar un pin para comportarse como

INPUT (entrada) u OUTPUT (salida).


digitalRead(pin). Lee el valor desde un pin digital, devuelve un valor HIGH

(alto) o LOW (bajo).


digitalWrite(pin, valor). Introduce un nivel bajo o alto en el pin digital.
analogRead(pin). Lee el valor de un pin analgico especfico con una

resolucin de 10 bits, el valor resultante es un entero de 0 a 1023.


analogWrite(pin, valor). Introduce un valor a un pin analgico.
delay(ms). Realiza una pausa en el programa de acuerdo a la cantidad de

tiempo en milisegundos especificada.


millis(). Devuelve la cantidad de milisegundos que lleva la placa Arduino

ejecutando el programa actual.


Serial.begin(velocidad). Abre un puerto serie y especifica la velocidad de
transmisin (la velocidad tpica es de 9600), se muestra en el Serial Monitor
del IDE de Arduino el contenido del puerto serie (mensajes, valores de

variables, etc.).
Serialprintln(dato). Imprime datos al puerto serie seguido por un retorno de

lnea automtico.
Serial.read(). Lee o captura un carcter desde el puerto serie.
Serial.available(). Devuelve el nmero de caracteres disponibles para leer
desde el puerto serie.

2.5 Comunicacin entre MatLab y Arduino


Para conectar la tarjeta Arduino con MatLab se pueden seguir los siguientes pasos:
1. Descargue

el

archivo

ArduinoIO.zip

de

la

pgina

http://www.mathworks.com/matlabcentral/fileexchange/27843-arduino-iopackage--slides-and-examples.
2. Descomprima el archivo en la carpeta deseada en el equipo, preferiblemente

en la carpeta Matlab, que est en Mis Documentos; de esta forma, los M-

16

files, quedan disponibles inmediatamente, en el directorio del entorno de


Matlab.
3. Desde el IDE Arduino, de acuerdo a lo que se necesite, abra alguno de los

archivos contenidos dentro de la carpeta adiosrv, que a su vez est dentro


de la carpeta pde, una de las que se descomprimi.
4. Cargue en la tarjeta, el programa que necesite, el cual contiene el cdigo

necesario para que la tarjeta Arduino se comunique con Matlab.


5. Una vez cargado el programa en la tarjeta Arduino, es recomendable cerrar el

IDE ARDUINO, para que Matlab pueda acceder al puerto serial que se abre
cuando se conecta la tarjeta.
6. Abra MatLab y en la ventana Current Directory abra la carpeta que se

descomprimi, ah debe estar el M-file install_arduino; ejectelo para que


se instalen las funciones necesarias en MatLab para realizar la comunicacin
con la tarjeta Arduino [10].
Para interactuar con la tarjeta Arduino, desde el entorno de Matlab; primero
se debe crear un objeto para acceder a la informacin del puerto de comunicacin a
la que est conectada la tarjeta; esto se hace con el siguiente comando: a =
arduino(COM3), entre parntesis figura el puerto serial al que se conect la
Arduino, en este ejemplo es COM3, pero puede ser cualquier otro. Al ejecutar el
comando anterior en la ventana de comandos de MatLab, se inicia una conexin y
aparecer en pantalla un texto informativo sobre la configuracin de entradas, salidas
y estado actual de los pines de la tarjeta Arduino (Figura 2.5).

17

Figura 2.5 Comunicacin MatLab-Arduino.

Los pines de la tarjeta Arduino que permiten conectar el sistema a


dispositivos externos, pueden configurarse como entradas o como salidas y a su vez,
en forma digital o anloga. El procedimiento para configurar los pines como entradas
o como salidas es pinMode. A continuacin se muestran algunos ejemplos:
-

a.pinMode(13, OUTPUT). Este comando, configura el pin 13 de la tarjeta

Arduino, como salida digital.


a.pinMode(10, INPUT). Configura el pin 10, como entrada digital.
a.pinMode(11). Muestra el estado, de entrada o salida del pin 11
a.pinMode. Muestra el listado del estado de cada uno de los pines.
Si un pin ha sido configurado como entrada, el comando para leerlo es:

a.digitalRead(10), que permite leer el estado alto 1 o bajo 0 del pin 10.
Si un pin ha sido configurado como salida, para colocar un estado alto 1 o
bajo 0 en dicha salida, se usa el comando: a.digitalWrite(13, 1) o
a.digitalWrite(13, 0).
Las entradas anlogas, son pines de la tarjeta Arduino, que pueden recibir
voltajes en un rango de 0 a 5 voltios; tiles cuando se requiere un sensor que
represente el valor de una variable anloga, como por ejemplo: la temperatura.
18

Suministran un valor entero entre 0 y 1023, proporcional al valor de voltaje de la


entrada anloga. El comando para leer es: a.analogRead(5), el cual muestra el valor
presente en la entrada anloga 5. Para asignar un valor anlogo a un pin de salida, se
sigue el siguiente formato: a.analogWrite(3, 200), el primer argumento de la funcin,
es el pin anlogo y el segundo argumento es un valor proporcional al voltaje de
salida presente en ese pin [11].
2.6 Sensor MPU-6050
El sensor InvenSense MPU-6050 contiene un acelermetro MEMS y un
giroscopio MEMS en un solo chip. Es muy preciso, ya que contiene 16 bits de
analgico a digital de hardware de conversin para cada canal. Para ello capta la x, y,
z y el canal al mismo tiempo. El sensor utiliza el I2C-bus para interconectar con el
Arduino

[12].

El MPU-6050 no es caro, especialmente teniendo en cuenta el hecho de que


combina un acelermetro y un giroscopio, Figura 2.6.

Figura 2.6 Sensor MPU-6050

2.7 SolidWorks
SolidWorks es un software CAD (diseo asistido por computadora) para
modelado mecnico en 3D, desarrollado en la actualidad por SolidWorks Corp., una
filial de Dassault Systmes, S.A. (Suresnes, Francia), para el sistema operativo
Microsoft Windows. Su primera versin fue lanzada al mercado en 1995 con el
propsito de hacer la tecnologa CAD ms accesible.
19

El programa permite modelar piezas y conjuntos y extraer de ellos tanto


planos tcnicos como otro tipo de informacin necesaria para la produccin. Es un
programa que funciona con base en las nuevas tcnicas de modelado con sistemas
CAD. El proceso consiste en trasvasar la idea mental del diseador al sistema CAD,
"construyendo virtualmente" la pieza o conjunto. Posteriormente todas las
extracciones (planos y ficheros de intercambio) se realizan de manera bastante
automatizada.

Figura 2.7 Logotipo de SolidWorks

Captulo III. Marco Metodolgico


La realizacin del trabajo se llev a cabo mediante diseo experimental, debido a
las diversas variables que intervienen en el sistema para cumplir con su objetivo
principal. El desarrollo del proyecto se divide en las siguientes partes [14]:

20

1.
2.
3.
4.
5.

Diseo del prototipo en SolidWorks.


Modelo matemtico.
Construccin del prototipo.
Adaptacin del sensor.
Interfaz del prototipo en MatLab y Arduino.

3.1 Diseo del aeropndulo en SolidWorks.


Como primer paso se realiz en el software SolidWorks el diseo del
prototipo creando pieza por pieza para poder realizar el ensamble y obtener y el
diseo terminado como se muestra en la Figura 3.1.

Figura 3.1 Diseo del aeropndulo renderizado.

3.2 Modelo matemtico

El aeropndulo es el mostrado en la figura anterior (Figura 3.1) y es


impulsado por un motor con hlices cuya masa es m. La barra a la que est unido
el motor tiene longitud L y se desprecia sin masa. Cuando el motor gira, produce
una fuerza T que hace que el pndulo se mueva. Se denota por

el ngulo
21

entre la lnea de reposo y la barra del pndulo, y como en este modelo se considera la
traccin, se denota por C esa constante [15].

A continuacin se enlistan los pasos necesarios para llegar al modelado


matemtico del aeropndulo utilizando las ecuaciones de movimiento de Euler
Lagrange.

Paso 1: Modelo cinemtica directa.

Considerando que el aeropndulo se mueve en el plano x-y y que el origen de


este plano est en la parte superior de la barra, el modelo de cinemtica directa des
aeropndulo con referencia al motor est dado por la ecuacin (4):

(4)

[]

x
Lsin ( )
=f ( L , )=
y
L cos ( )

Paso 2: Cinemtica diferencial.

Derivando el vector anterior se tiene la ecuacin (5):

(5)
v=

d x
d
L cos ( )
= f ( L , )=
dt y dt
L sin ( )

[]

]
22

La rapidez de traslacin est dada por la magnitud del vector anterior se


muestra en la ecuacin (6).

(6)

Lcos ( )

2
v =

Lsin ( )

2
v =L2 2 +
2

v =L2 2

Paso 3: Modelo de energa.

La energa cintica del aeropndulo est dada por la ecuacin (7):

(7)

Ahora, la energa potencial est dada por:

23

u ( )=mgh

donde

h=0

la posicin del aeropndulo donde

=0 , en la

ecuacin (8):

(8)
()

1cos ()

LL cos =mgL
u ( )=mgh

Por lo que el Lagrangiano para el aeropndulo es igual a la ecuacin (9):

(9)
( 1 )=k ( 1 )u ()

Paso 4: Ecuaciones de movimiento de Euler-Lagrange.

De acuerdo a las ecuaciones de movimiento de Euler-Lagrange (10):

(10)
=

][

( 1 )
d ( 1 )

+c
dt

Donde

es el torque que se le proporciona al aeropndulo.


24

Tomando en cuenta al Lagrangiano

G 1
se tienen las ecuaciones (11), (12) y (13):

(11)

] [

( 1 )
1
=
m L2 2 mgL ( 1cos ( ) ) =m L2

(12)

d ( 1 )
d
2
2
= [ m L ] =m L

dt
dt

(13)

] [

( 1 )
1

=
m L2 mgL
( 1cos ( )) =mgLsin ( )

Por lo tanto en la ecuacin (14):

=m L +mgLsin ( ) +c

(14)

Como

es el par se puede sustituir por T en la ecuacin (15).

25

2
( ) +c
TL=m L +mgLsin

(15)

T es la fuerza que proporciona el motor y es proporcional a la seal u PWM


que se le enva al motor, ecuacin (16).

(16)
T =ku

Finalmente sustituyendo la ecuacin (16) en la ecuacin (15) se obtiene la


ecuacin (17):

( ) +c
kLu=m L +mgLsin

(17)

Se llega al modelo matemtico del aeropndulo tomando en cuenta la friccin


viscosa y la seal PWM enviada al motor.

La forma ms comn de presentar la ecuacin anterior es en la ecuacin (18):

kLu
( )c +
m L =mgLsin

(18)

26

Experimentalmente se mandan seales PWM al motor y se observa que el


seno del ngulo se comporta de la manera siguiente en el estado estacionario:

La curva azul es el resultado del experimento y la curva negra es una


aproximacin a la curva azul. En la grfica anterior se puede observar que la seal
PWM debe ser cuando menos igual a u0

para que el pndulo comience a

moverse; esto es debido a la ficcin inicial, y la letra u representa la seal PWM


que realmente provoca el movimiento del pndulo.

Un resultado del experimento anterior es que la fuerza T producida por el


motor no es simplemente ku, ecuacin (19):

(19)

k + ( uu0 )

T=

u>u0

0
u [u0 ,u 0 ]
k( u +u0 )
u<u0

Se ve que en la ecuacin anterior a la seal u se le resta u0 , para


conservar nicamente la parte de la seal que provoca el movimiento del pndulo, y
se multiplica por una constante de proporcionalidad k+ para convertir la seal PWM
en fuerza. Tambin se puede ver que cuando la seal u es menor que
{u} rsub {0}

y mayor que

{u } rsub {0 } el pndulo no se mueve en

ningn sentido. Adems que tambin se considera el movimiento del pndulo en el


sentido opuesto.

27

acute {u}

La seal

que es la que realmente mueve el motor puede ser

positiva y mover el pndulo en sentido positivo o ser negativa y mover el motor en


sentido inverso. Esto se puede expresar as en la ecuacin (20):

(20)
u=

u +u 0 u > 0
u u0 u < 0

Ya se dijo que la seal del PWM que en realidad mueve el motor es


acute {u} , por lo que la ecuacin (16) se puede escribir as en la ecuacin (21):

kL u
( )c +
m L =mgLsin

(21)

De la ecuacin (18) se puede despejar la seal PWM para sustituirla en la


ecuacin (21), y para conservar todava una seal de control es que se agrega
widetilde {u } , ecuacin (22).

(22)
mg
u =
sin ( )+ ~
u
K

La ecuacin (22) se sustituye en la ecuacin (21) para linealizarla.

28

(23)

kL mg sin ( ) + ~
m L =mgLsin
( )c +
u
k

mgLsin ( )+ kL u
( )c +
m L2 =mgLsin

m L2 =c
+kL
u

Lo anterior es la ecuacin linealizada del aeropndulo ahora, se procede a


encontrar la funcin de transferencia en la ecuacin (24).

(24)
{ m L }= {c }+ { kL ~
u}
2

m L2 s 2 ( s )=cs ( s ) +kL ~
u(s)
( s ) ( m L2 s 2+ cs ) =kL ~
u(s)

La funcin de transferencia es como se muestra en la ecuacin (25):

(25)
G ( s )=

kL
m L s + cs
2 2

Que se puede escribir de otra forma siguiendo este procedimiento como en la


ecuacin (26) y la ecuacin (27):

29

(26)
1
kL
m L2
G ( s )=
.
m L2 s2 + cs 1
m L2

(27)
k
mL
G ( s )=
c
s 2+
s
m L2

Estabilidad del sistema

Para conocer si el sistema es estable o no se utiliza en este caso el criterio de


estabilidad de Routh-Hurwitz. El polinomio completo del denominador de la funcin
de transferencia est en la ecuacin (26) es como se muestra en la ecuacin (28):

(28)
2 2

m L s + cs+ 0

Y como el ultimo termino es cero el sistema desde el principio se puede decir


que no es estable, por lo tanto, requiere de un controlador.

30

Adems, encontrando los puntos de la funcin de transferencia est en la


ecuacin (26) como se tiene en la ecuacin (29):

(29)
2 2

m L s + cs=0
s ( m L2 s+ c )=0

s 1=0 s2=

c
m L2

Se procede a encontrar la expresin de la funcin de transferencia en lazo


cerrado como se muestra en la ecuacin (30).

(30)
G Lc ( s )=

kcG ( s )
1+kcG(s) M (s)

Sustituyendo G(s) de la ecuacin (27) y M(s)=1, obtenemos la ecuacin (31),


(32), (33) y (34):

(31)
k
c
/(s +
s)
(
)
mL
mL
=
k
c
1+ kc (
/(s +
s)(1)
)
mL
mL
kc

GLc

31

(32)
kck
mL
c
s2 +
m L2 s
GLc =
c
kck
s2 +
s+
2
mL
mL
c
s2 +
s
2
mL

(33)
2 2

m L s +cs +kckL
m L2

kckL
m L2
G Lc=

(34)
GLc =

kckL
m L s +cs +kckL
2 2

Estabilidad en lazo cerrado

Al tratarse de un sistema de segundo orden, resulta sencillo discernir la estabilidad.

La ecuacin caracterstica es la ecuacin (35):


32

(35)
2 2

m L s + cs+ kckL=0

Para que los tres coeficientes sean positivos no nulos y se cumpla as la


condicin de Cardano- Viete para que el sistema tenga la posibilidad de ser estable,
kc debe ser mayor que cero (kc>0). En el controlador se asignara que as sea para
garantizar la estabilidad del sistema tomando en cuenta la anterior se procede a
construir la tabla de Routh-Hurwitz, ecuacin (36).

(36)
2

s m L kckL
s1 c
0

s kckL

Como los coeficientes de la primera columna son todos positivos, se cumple


el criterio de Routh- Hurwitz y el sistema es estable.

La condicin para que se garantice la estabilidad es que kc sea mayor que


cero, ecuacin (37).

33

(37)
kc >0

Controlabilidad
De la ecuacin (28) se despeja

}
:

kL ~
+
u
c
1

m L2

(38)

=x 1 , entonces

Si se hace

x 1
=
, y si se hace ahora se obtiene la ecuacin

(39):
x 1=x 2

Entonces

(39)

x 2
=
. Por lo que la ecuacin (39) puede escribirse como la ecuacin

(40):

x 2=

1
(c x 2 +kL ~u )
m L2

(40)

De la ecuaciones (39) y (40) se obtiene la ecuacin (41):

[][

0
x 1
=
0
x 2

][ ]

1
0
c x+ kL u
m L2
m L2

(41)

Simplificando se obtiene la ecuacin (42):

34

[][

][ ]

0
x 1
=
0
x 2

1
0
c x+ k u
mL
m L2

(42)

Donde se obtienen las ecuaciones (43) y (44):

[ ]

(43)

[ ]

(44)

0
0

1
c = A
m L2

0
k =B
mL

Ahora, se procede a encontrar la matriz de controlabilidad, que es [B AB], ecuacin


(45).

[ ]

(45)

k
mL
AB=
ck
2 3
m L

Por lo que la matriz de controlabilidad es la ecuacin (46):

[ ]
0

[ B AB ] =

k
mL

k
mL
ck
m 2 L3

(46)

Y su determinante es la ecuacin (47):

[ B AB ] = k

( mL )

(47)

Por lo tanto, el sistema es controlable.


35

3.3 Construccin del aeropndulo


Descripcin general del aeropndulo
El aeropndulo est formado por una estructura de madera con un espesor de
1.5cm. Incluye una hlice impulsada por un pequeo motor de corriente directa. El
motor y la hlice estn fijos al extremo de un tubo de PVC que oscila libremente. El
otro extremo del tuvo esta fijo a un potencimetro por medio de una pieza que
funciona como un punto pivote. Con una tarjeta Arduino Mega que maneja las
seales que se envan al motor para controlar su potencia. Las seales llegan primero
a una etapa de potencia que controla la velocidad del motor por medio de
modulacin de ancho de pulso (PWM). Al mismo tiempo la tarjeta est leyendo el
voltaje que proporciona el potencimetro, el cual es proporcional al ngulo que
forma le barra con la vertical.

Las funciones realizadas por la tarjeta de adquisicin pueden ser realizadas


fcilmente por un microcontrolador con un convertidor analgico digital y PWM. En
este trabajo se us la tarjeta Arduino ya que es de fcil manejo. La etapa de potencia
puede realizarse implementando un circuito sencillo de PWM o se puede adquirir
una tarjeta para controlar motores de CD.

El dispositivo completo puede ser construido por menos de $1500.00 pesos. Este
estimado considera el uso de un Arduino Mega, un integrado para manipulacin del
motor, un teclado matricial 4x4 y una LCD 16x2.

Construccin del aeropndulo, comenzando primero con una descripcin


detallada de cada una de las piezas y materiales utilizados en este.

36

Estructura de madera

La estructura del aeropndulo consiste en una placa de aserrn comprimido con


un espesor de 2cm. Esta se encuentra colocada de manera perpendicular. La placa
perpendicular a la base mide 22cm de ancho por 60 cm de altura.

Base del aeropndulo

La placa que sirve como base es un cuadro que mide 40x60. Se puede adquirir la
estructura en cualquier empresa de maquila de acrlicos o comprar los materiales
para fabricarla uno mismo.

Motor de corriente directa

El motor se encarga de impulsar la hlice para modificar el ngulo de elevacin


que forma la barra con la vertical. El motor utilizado es de la marca Motor Multistar
Drone 920kw modelo 2213-935. Este tipo de motores es utilizado en aeromodelismo
de radio control. Es un motor que con pocas vueltas en su embobinado provee un alto
poder de torque. El giro es en el sentido de las manecillas del reloj. Se alimenta con
voltajes entre 6.0V y 11.2V, como se muestra en la Figura 3.3.

37

Figura 3.3 Motor Multistar Drone.

Algunas caractersticas son:

EZO Japn Rodamientos


Imanes N45SH
Laminaciones .2mm
Oxgeno 180 grados de alambre de cobre libre Equilibrio .005g O mejor
bobinados lay Down Perfect
El 100% del control de calidad
Adaptador prop reemplazable y prop perno directa apoyados Especificaciones: KV
(RPM / V): 740KV Clulas Lipo: 4.3 s Max Amperios: 27A No Corriente de carga:
0.5A / 10V Resistencia interna: 0.136 ohmios Nmero de polos: 18/24 Dimensiones
(Dia.xL): 40 x 6 mm Motor del eje: 4 mm Eje de la hlice: 5mm Peso: 93g Perno
distancia entre orificios: 19 * 25mm Espesor Laminado: 0.2mm Imanes: N45 SH
Teniendo: EZO Equilibrio de especificaciones: 0,005 g.

Hlice del motor.

La hlice se conecta o instala en el eje de motor. El motor se encargara de hacer


girar la hlice entre 2500 revoluciones por minuto hasta 22000 revoluciones por
minuto para ejercer la fuerza de atraccin del aire. Cada motor dependiendo de la
38

capacidad y fuerza en HP (caballos de fuerza) tendr una hlice ideal y especfica


para el motor, no se podrn instalar hlices al azar (Figura 3.3.a).

Figura 3.3.a Hlice del motor.

Batera de alimentacin (Figura 3.3.b)

Figura 3.3.b Batera de alimentacin.

Caractersticas:
39

Controlado por microprocesador

Sensibilidad Delta pico

Clulas individuales de equilibrio

Li-ion, LiPo y vida capaz

Ni-Cd y NiMH capaces

Amplia gama de corrientes de carga

Funcin de almacenamiento, permite el almacenamiento seguro actual

Tiempo lmite de la funcin

Entrada de control del voltaje. (pilas Protege de coches en el campo)

Almacenamiento de

datos (Almacena

hasta 5 paquetes en

la

memoria)

Batera de ruptura en el ciclismo.

Especificaciones:

Voltaje de entrada: 11 ~ 18v...


Circuito de

alimentacin: Carga mxima: 50W / Nmero

mximo

de descarga: 5W
-

Corriente de carga Gama: 0.1 ~ 5,0

Aprobacin de la gestin actual gama: 0.1 ~ 1.0A

Ni-MH/NiCd clulas: 1 ~ 15
40

Li-ion/Poly clulas: 1 ~ 6

Pb voltaje de la batera: 2 ~ 20V

Peso: 277g

Dimensiones: 133x87x33mm
3.4 Adaptacin del sensor
Se coloc el sensor MPU-6050 el cual es un girscopo, se puso en la parte
superior del tubo para que este pueda medir el ngulo al cual se va a posicionar,
como se muestra en la Figura 3.4.

Figura 3.4 Adaptacin de sensor MPU-6050

3.5 Interfaz del aeropndulo en MatLab y Arduino


Se hizo el diagrama de bloques en el programa Simulink [16] para obtener las
grficas de respuesta y ver en la simulacin el tipo de respuesta que se necesita de
acuerdo al control PID como se muestra en la Figura 3.5.

Figura 3.5 Diagrama de bloques MatLab- Simulink.

41

Se hizo la simulacin de realidad virtual [17] para ver si es correcta la


respuesta seleccionada obtenida con el diagrama de bloques mencionado
anteriormente, Figura 3.5.a.

Figura 3.5.a Realidad virtual.

Captulo IV. Anlisis de Resultados


4.1 Imgenes del prototipo final
En la Figura 4.1 y 4.1.a se muestra el prototipo del aeropndulo final.

42

Figura 4.1 Prototipo final vista frontal.

Figura 4.1.a Prototipo final vista lateral.

4.2 Pruebas finales


En la Figura 4.2 se muestra el diagrama de bloques que se hizo para el
posicionamiento y control del aeropndulo, en la Figura 4.2.a se muestra una parte
del cdigo del funcionamiento del aeropndulo programado en Arduino con control,
43

el cdigo completo se puede ver en el Anexo C y en la Figura 4.2.b se muestra una


parte del cdigo del funcionamiento del aeropndulo Arduino-Simulink, el cdigo
completo se puede ver en el Anexo E.

Figura 4.2 Diagrama de bloques en Simulink.

Figura 4.2.a Cdigo del Aeropndulo con control.

44

Figura 4.2.b Cdigo del Aeropndulo Arduino-Simulink.

En las siguientes figuras se muestran los resultados finales del aeropndulo


con los diferentes controladores como son P, PD y PID.
Se utiliz el diagrama de bloques de Simulink que aparece anteriormente en
la Figura 4.2 para las 3 prcticas.
Practica 1 del controlador P
Se coloca el valor de la referencia (Slider Gain), se le puso 35 y se indica el
tipo de controlador a utilizar, se indic el controlador P. En la Figura 4.2.c se muestra
la grfica obtenida del controlador P y en la Figura 4.2.d se muestra la Ventana
Funtion Block Parameters: PIC Controller del control P.

45

Figura 4.2.c Grfica del controlador P.

Figura 4.2.d Ventana Funtion Block Parameters: PIC Controller del controlador P.

Practica 2 del controlador PD

46

Se coloca el valor de la referencia (Slider Gain), se le puso 35 y se indica el


tipo de controlador a utilizar, se indic el controlador PD. En la Figura 4.2.e se
muestra la grfica obtenida del controlador PD y en la Figura 4.2.f se muestra la
Ventana Funtion Block Parameters: PIC Controller del control PD.

Figura 4.2.e Grfica del controlador PD.

47

Figura 4.2.f Ventana Funtion Block Parameters: PIC Controller del controlador PD.

Practica 3 del controlador PID


Se coloca el valor de la referencia (Slider Gain), se le puso 35 y se indica el
tipo de controlador a utilizar, se indic el controlador PID. En la Figura 4.2.g se
muestra la grfica obtenida del controlador PID y en la Figura 4.2.h se muestra la
Ventana Funtion Block Parameters: PIC Controller del control PID.

48

Figura 4.2.g Grfica del controlador PID.

Figura 4.2.g Ventana Funtion Block Parameters: PIC Controller del control PID.

49

Conclusiones
-

Ventajas de este dispositivo: Su fcil diseo y construccin. Este dispositivo


se puede utilizar para prcticas en el curso de teora de control o control
discreto, para motivar el aprendizaje de los alumnos.

El controlador se puede programar desde Matlab Simulink. Para poder


trabajar en tiempo real se utilizan las libreras Real- Time Windows Target y
Real-Time Workshop.

El controlador utiliza la medida del error entre el ngulo real proporcionado


por el potencimetro y el ngulo objetivo. El error se utiliza para generar una
seal de control que se convertir en una seal PWM para ajustar la potencia
del motor y as reducir el error a cero.

50

Recomendaciones

El aeropndulo es un prototipo didctico, fcil de usar y muy prctico para las


clases de control.

51

Referencias
[1] Kumar Saha, Subir (2010), Introduccin a la robtica, Mc Graw Hill, Mxico,
D.F.
[2] Dorf, R.C. (1988), International Encyclopedia of Robotics, John Wiley & Sons,
Nueva York,
[3] Fuller, J.L. (1999), Robotics: Introduction, Programming, and Proyect, Prentice
Hall, Nueva Jersey.
[4] P. J. Escamilla, and N. Mort, A Novel Desing and Tuning Procedure for PID
Type Fuzzy Logic Controllers, submitted for publication, Proceedings of the IFAC
World Congress, Barcelona, Spain, 2002

52

[5] Reyes Corts, Fernando (2011), Robtica, Control de Robots Manipuladores,


Alfaomega, Mxico, D.F.
[6] Pomares Baeza, Jorge (2009), Manual de Arduino, Universidad de Alicante
Recuperado

el

16

de

septiembre

de

2013,

de:

http://rua.ua.es/dspace/bitstream/10045/11833/1/arduino.pdf.
[7] Moore, Holly (2007), MatLab para Ingenieros, Pearson, Mxico.
[8] General MATLAB product documentation. www.mathworks.com Data
Acquisition

Toolbox

Product

Documentation

http://www.mathworks.com/access/helpdesk/help/toolbox/daq/daq.shtml
[9] Arduino UNO R3, Consultado el 14 de septiembre de 2014, en:
http://5hertz.com/index.php?main_page=product_info&products_id=390
[10]

Arduino,

Consultado

el

13

de

septiembre

de

2014,

en:

http://www.arduino.cc/es/pmwiki.php?n=.
[11] Pinto Bermdez, Enrique, Mata Espada, Fernando (2010), Fundamentos de
Control con MatLab, Pearson, Madrid, Espaa.
[12] Carrillo Lpez, David (2008), Adquisicin de seales usando MatLab. Empleo
de un convertidor externo.
[13] Torrente Artero, scar (2013), Arduino, Curso prctico de formacin,
Alfaomega, Mxico.
[14]

A. Barrientos, L. F., Pen, C., Balaguer, R. Aracil

(1997),

Fundamentos

de robtica, Mc Graw Hill, Madrid, Espaa.


[15] Engaging Students in Hands-on Control System Design at the University of
Arizona. By Eniko T. Enikov, University of Arizona

53

[16] P. J. Escamilla, and N. Mort, Auto-tuning of fuzzy PID controllers, submitted


for publication, Proceedings of the IFAC World Congress, Barcelona, Spain, 2002.
[17] Real Time Windows Target for modeling, Simulation and Implementation. User
Guide Version 2. By MathWorks, Inc
[18] General MATLAB product documentation. www.mathworks.com Data
Acquisition

Toolbox

Product

Documentation

http://www.mathworks.com/access/helpdesk/help/toolbox/daq/daq.shtml

Anexos
Anexo A: Imgenes de prueba

54

Controlador P

P
Entrada
0

2
ngulo (rad)

ngulo (rad)

1.5

0.5
1
2
Tiempo (s)
Controlador PI

PI
Entrada
0

1
2
Tiempo (s)

1
0.5

PD
Entrada
0

1.5

1.5

0.5

Controlador PD

ngulo (rad)

ngulo (rad)

1
2
Tiempo (s)
Controlador PID

1.5
1
0.5
0

PID
Entrada
0

1
2
Tiempo (s)

Figura A.1 Grficas de la simulacin de control.

Figura A.2 Valores obtenidos de la simulacin de control.

Anexo B: Cdigo de arranque del Motor Multistar Drone

55

/
********************************************************************
******************************
*

Alberto Lpez Gass

22/12/2011

www.dieBotReise.blogspot.com

alblopgas@gmail.com

*
Descripcin: Programa que controla la velocidad de un control Brushless a

travs del
*

puerto Serial usando el monitor de Arduino.


Software de libre distribucion

Licencia Creative Commons 3.0

*
********************************************************************
******************************/
#include <Servo.h>
#define PINMOTOR 3

//pin conectado al ESC, en este caso CH_5 en

ARDUPILOT corresponde al pin 8


#define MAXIMOPWM 180

// Son grados Podia llegar hasta 180,paramas

seguridad lo dejo bajo


#define MINIMOPWM 10

// por si acaso empezar con un valor inferior, mi motor

no arranca hasta 65
#define PASO 10

// Incrementos del teclado

#define BAUD 9600 //velocidad puerto serial funciona hasta 38400


int pulsoMotor;
int ordenTeclado=0;
Servo myservo; // creamos el motor como elemento en la libreria
byte recibiendoByte ;
boolean iniciado = false;
void setup()
{
Serial.begin(BAUD);
56

myservo.attach(PINMOTOR); // inicializo el ESC en el pin determinado


Serial.println(" Comienzo del test"); //
Serial.println (" Pulsar 'A' para arrancar

\n Cuando escuche el pitido de

confirmacin");
while ( iniciado==false ){
myservo.write(0); // Aramado
recibiendoByte = Serial.read(); // Leemos el Byte recibido
if (recibiendoByte == 65 || recibiendoByte ==97) {

// A o a Mayusculas o

minusculas
iniciado=true;
}
}
Serial.println("inicio del loop principal \n Para subir controlar velocidad pulse \n
'A' para subir \n

'Z' para bajar \n

'S' para terminar Stop \n");

}
void loop(){
ordenTeclado =OrdenSubirBajar ();
if (ordenTeclado != 0) {

// Distinto de Cero

pulsoMotor = pulsoMotor + ordenTeclado;


pulsoMotor= constrain( pulsoMotor , MINIMOPWM, MAXIMOPWM); //
myservo.write(pulsoMotor); //Mientras no hay cambios,automaticamente

se

siguen enviando los mismos pulsos


Serial.print("Velocidad del pulso--> ");
Serial.println (pulsoMotor);
}
delay (150); //delay para no colapsar
}

57

int OrdenSubirBajar (){


int orden=0;
// Serial.flush();// Limpiamos el Bufer de entrada (evitar efecto ametralladora)
//delay (150);
if (Serial.available() > 0) {
recibiendoByte = Serial.read(); // Leemos el Byte recibido
if (recibiendoByte == 65 || recibiendoByte ==97) {

// A o A Mayusculas o

minusculas
Serial.println( " SUBIR");
orden = PASO;
}
if (recibiendoByte == 90 || recibiendoByte ==122) { // Z o z

Mayusculas o

minisculas
Serial.println( " BAJAR");
orden = -PASO;
}
if (recibiendoByte == 83 || recibiendoByte == 115){ // t o T

Mayusculas o

minisculas
Serial.println( " Stop!!");
orden = -(pulsoMotor- MINIMOPWM); // Deja el pulso en MINIMOPWM
}
}
return (orden);
}
Anexo C: Cdigo del funcionamiento del Aeropndulo con control en Arduino
/////////////////////////////////////
// programa PID desde cero
int TiempoMuestreo=10;

// tiempo de muestreo Se encuentra en milisegundos

58

unsigned long pasado=0;

// tiempo pasado Se hace para asegurar tiempo de

muestreo
unsigned long ahora;
float Ref=45;

// referencia entre 0 y 180 porque la salida de la planta nos dara

grados
int Y;

// Salida

int M=0;
int N=0;
double error;

// error

double errorPass=0;

// Suma del error para la parte integral

double errorAnt=0;

// error anterior para la derivada

double U;

// Seal control

// constantes del controlador


int Kp=2;//2
int Ki=0;
int Kd=10;//10
///////////////////////////////////////////////////////////////////
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
//Configuracion LCD I2C
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
//////////////////////////////////////////////////////
//Direccion I2C de la IMU
#define MPU 0x68
//Ratios de conversion
#define A_R 16384.0
#define G_R 131.0

59

//Conversion de radianes a grados 180/PI


#define RAD_A_DEG = 57.295779
//MPU-6050 da los valores en enteros de 16 bits
//Valores sin refinar
int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;
//Angulos
float Acc[2];
float Gy[2];
float Angle[2];
//////////////////////////////////////////////////////////////////////
//PINES
#include <Servo.h>
Servo motor;
void setup()
{
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);
motor.attach(3);
}
void loop()
{
///////////////////////////////////////////
///////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
//1 - leer sensor y almacenar la lectura en una variable
60

//2 - asegurar el tiempo de muestreo


//3 - una vez que se cumpla el tiempo de muestreo, calcular el PID
//4 - Guardad la seal de control en una variable
//5 - teniendo la seal de control podemos manipular el sistema a nuestro antojo
//Leer los valores del sensor
//Leer los valores del Acelerometro de la IMU
Wire.beginTransmission(MPU);
Wire.write(0x3B); //Pedir el registro 0x3B - corresponde al AcX
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); //A partir del 0x3B, se piden 6 registros
AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
//Se calculan los angulos Y, X respectivamente.
Acc[1]

atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2)

pow((AcZ/A_R),2)))*RAD_TO_DEG;
Acc[0]

atan((AcY/A_R)/sqrt(pow((AcX/A_R),2)

pow((AcZ/A_R),2)))*RAD_TO_DEG;
//Leer los valores del Giroscopio
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU,4,true); //A diferencia del Acelerometro, solo se piden 4
registros
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
//Calculo del angulo del Giroscopio
Gy[0] = GyX/G_R;
Gy[1] = GyY/G_R;
61

//Aplicar el Filtro Complementario


Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];
Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1];
//COMO SOLO USAREMOS 1 EJE ENTONCES DAMOS EL VALOR A LA
VARIABLE
Y = Angle[1]*(-1);

//MEDICION DE LA PLANTA

M = Y-83;
N = M * (-1);
/////////////////////////////////////////////////////////////
////////ASEGURAR TIEMPO DE MUESTREO
ahora=millis();

// tiempo actual

int CambioTiempo= ahora-pasado;

// diferencia de tiempo actual-

pasado
if(CambioTiempo >= TiempoMuestreo)

// si se supera el tiempo de

muestreo
{
error = Ref - N;

// error (Lazo cerrado)-- Feedback

errorPass=(error*(TiempoMuestreo))+errorPass;

// clculo de aproximacin

del area
double errorD =(error-errorAnt)/(TiempoMuestreo); // clculo derivativo
float P=Kp*error;
float I=Ki*errorPass;

// control proporcional
// control Integral

float D=Kd*errorD;
U=P+I+D;

// Seal de control (SALDRAN GRADOS 0 -> 180 Y

NECESITAMOS MAPEAR PARA OBTENER UN VALOR ENTRE 0 -> 255 PARA


EL MOTOR)
U = map(U, 0, 180, 40, 180); //pasar a 8 bits
pasado=ahora;

// actualizar tiempo
62

errorAnt=error;

// actualizar el error

}
/* if(U < 40)
{
U = 40;
}
if(U > 180)
{
U = 180;
}
*/
Serial.println(U);//visualizar en monitor serial la seal de control U en valores 0 ->
255
//visualizar en LCD el Angulo leido por el sensor
lcd.setCursor (0,0);
lcd.print("Angulo: ");
lcd.setCursor (8,0);
lcd.print(N);
//visualizar en LCD el error
lcd.setCursor (0,1);
lcd.print("e: ");
lcd.setCursor (4,1);
lcd.print(error);
//visualizar en LCD la seal de Control en 0 -> 255
lcd.setCursor (0,2);
lcd.print("Control: ");
lcd.setCursor (10,2);
lcd.print(U);
motor.write(U);
63

Serial.println(N);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////

Anexo D: Cdigo de limpieza de la memoria eeprom


/*
* EEPROM Clear
*
* Sets all of the bytes of the EEPROM to 0.
* Please see eeprom_iteration for a more in depth
* look at how to traverse the EEPROM.
*
* This example code is in the public domain.
*/
#include <EEPROM.h>
void setup() {
/***
Iterate through each byte of the EEPROM storage.
Larger AVR processors have larger EEPROM sizes, E.g:
- Arduno Duemilanove: 512b EEPROM storage.
- Arduino Uno:
- Arduino Mega:

1kb EEPROM storage.


4kb EEPROM storage.

Rather than hard-coding the length, you should use the pre-provided length
function.
64

This will make your code portable to all AVR processors.


***/
for (int i = 0 ; i < EEPROM.length() ; i++) {
EEPROM.write(i, 0);
}
// turn the LED on when we're done
digitalWrite(13, HIGH);
}
void loop() {
/** Empty loop. **/
}
Anexo E: Cdigo del funcionamiento del Aeropndulo Arduino-Simulink
/////////////////////////////////////
// programa PID desde cero
int TiempoMuestreo=10;
unsigned long pasado=0;

// tiempo de muestreo Se encuentra en milisegundos


// tiempo pasado Se hace para asegurar tiempo de

muestreo
unsigned long ahora;
int Y;
int M=0;
int N=0;
double control;
///////////////////////////////////////////////////////////////////
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
//Configuracion LCD I2C

65

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
//////////////////////////////////////////////////////
//Direccion I2C de la IMU
#define MPU 0x68
//Ratios de conversion
#define A_R 16384.0
#define G_R 131.0
//Conversion de radianes a grados 180/PI
#define RAD_A_DEG = 57.295779
//MPU-6050 da los valores en enteros de 16 bits
//Valores sin refinar
int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;
//Angulos
float Acc[2];
float Gy[2];
float Angle[2];
//////////////////////////////////////////////////////////////////////
//PINES
#include <Servo.h>
Servo motor;
void setup()
{
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
66

motor.attach(3);
Serial.begin(9600);
}
void loop()
{
///////////////////////////////////////////

///////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
//1 - leer sensor y almacenar la lectura en una variable
//2 - asegurar el tiempo de muestreo
//3 - una vez que se cumpla el tiempo de muestreo, enviar la lectura por puerto serie
//4 - recibir la seal de control de simulink
//5 - teniendo la seal de control podemos manipular el sistema a nuestro antojo
//Leer los valores del sensor
//Leer los valores del Acelerometro de la IMU
Wire.beginTransmission(MPU);
Wire.write(0x3B); //Pedir el registro 0x3B - corresponde al AcX
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); //A partir del 0x3B, se piden 6 registros
AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
//Se calculan los angulos Y, X respectivamente.
Acc[1]

atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2)

pow((AcZ/A_R),2)))*RAD_TO_DEG;
67

Acc[0]

atan((AcY/A_R)/sqrt(pow((AcX/A_R),2)

pow((AcZ/A_R),2)))*RAD_TO_DEG;
//Leer los valores del Giroscopio
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU,4,true); //A diferencia del Acelerometro, solo se piden 4
registros
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
//Calculo del angulo del Giroscopio
Gy[0] = GyX/G_R;
Gy[1] = GyY/G_R;
//Aplicar el Filtro Complementario
Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];
Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1];
//COMO SOLO USAREMOS 1 EJE ENTONCES DAMOS EL VALOR A LA
VARIABLE
Y = Angle[1]*(-1);

//MEDICION DE LA PLANTA

M = Y-85;
N = M * (-1);
N = map(N, 0, 90, 0,90); //pasar a 10 bits
Serial.write(N);//enviamos la llectura a simulink
if(Serial.available())
{
control = Serial.read();
control = map(control, 0, 180, 40, 180); //pasar a 8 bits
motor.write(control);
68

}
delay(10);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////

69

Вам также может понравиться