tecnolÓ(~ico de monterrey®

66
f TECNOLÓ(~ICO DE MONTERREY® ANÁLISIS Y SIMULAClÓN DEL COMPORTAMIENTO DINÁMICO DE UN CUADRÓPTJERO Por: José Carlos Alcántara Beltrán TECNOLÓGICO DE MONTERREY Héctor Alejandro Jiménez Parra Asesor Dr. Ricardo Femández del Busto y Ezeta Biblioteca Campua Ciudad deMéJdco Instituto Tecnológico y de Estudios Superiori~s de Monterrey Campus Ciudad de México, 2014 Departamento de Ingeniería Mecatrónica 1

Upload: others

Post on 27-Jun-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TECNOLÓ(~ICO DE MONTERREY®

f TECNOLÓ(~ICO DE MONTERREY®

ANÁLISIS Y SIMULAClÓN DEL COMPORTAMIENTO DINÁMICO DE

UN CUADRÓPTJERO

Por:

José Carlos Alcántara Beltrán

TECNOLÓGICO DE MONTERREY

Héctor Alejandro Jiménez Parra

Asesor

Dr. Ricardo Femández del Busto y Ezeta

Biblioteca Campua Ciudad deMéJdco

Instituto Tecnológico y de Estudios Superiori~s de Monterrey

Campus Ciudad de México, 2014

Departamento de Ingeniería Mecatrónica

1

Page 2: TECNOLÓ(~ICO DE MONTERREY®

ÍNDICE I. INTRODUCCIÓN ......................................................................................................................... 5

1.1 DESCRIPCIÓN DE UN CUADRÓPTERO .............................................................................. 5

1.2 JUSTIFICACIÓN ...................................................................................................................... 7

1.3 OBJETIVOS .............................................................................................................................. 7

Il. CARACTERÍSTICAS DE LOS COMPONENTES DE UN CUADRÓPTERO .................... 8

11. l DIAGRAMA GENERAL DEL SISTEMA .............................................................................. 8

m. MODELADO MATEMÁTICO DE UN CUADRÓPTER0 ................................................. 10

IIl. l MODELADO DEL SISTEMA ............................................................................................. 10

Ill.2 DINÁMICA DEL MOTOR .................................................................................................. 14

111.3 SIMULACIÓN DEL MODEL0 ........................................................................................... 16

IV. CONTROL ................................................................................................................................ 18

IV. l CONTROLADORES PARA CADA MOVIMIENTO ......................................................... 18

IV.2 DIAGRAMA EN LAZO CERRADO DEL SISTEMA ........................................................ 19

V. RESULTADOS ........................................................................................................................... 21

V. I CARACTERIZACIÓN DE LOS COMPONENTES ............................................................. 21

V.2 GIROSCOPIO/ACELERÓMETRO 3GDL ........................................................................... 24

V.3 BARÓl\1ETRO (ALTH.iETRO) ............................................................................................ 25

V.4 CONTROLADORES ELECTRÓNICOS DE VELOCIDAD (ESC) ..................................... 26

V.5 PLATAFORMA DE VUELO ................................................................................................ 30

VI. CONCLUSIONES .................................................................................................................... 33

VI.l ACCIONESAFUTUR0 ...................................................................................................... 33

VI.2 CONSIDERACIONES ÉTICAS ........................................................................................... 34

VII. REFERENCIAS ...................................................................................................................... 36

VIIL ANEXOS ................................................................................................................................. 40

VIII. I CÓDIGOS DE PROGRAMACIÓN ................................................................................... 40

VIII.2 PÓSTER ............................................................................................................................. 67

3

Page 3: TECNOLÓ(~ICO DE MONTERREY®

RESUMEN

Recientemente los vehículos aéreos no tripulados (UAV pc·r sus siglas en inglés) han cobrado auge en distintos campos tecnológicos y comerciales, un ejemplo de ello los cuadrópteros. Éstos sobresalen entre otros UAVs debido a su simetria, ,equilibrio de fuerz.as, versatilidad de trayectorias de vuelo, entre otras. En este reporte se analiza el comportamiento dinámico de estos vehículos, desde sus componentes hasta el mcdelo aerodinámico. También se muestran simulaciones del modelo de lazo abierto y del lazo de control propuesto, así como pruebas realizadas en los componentes de un cuadróptero fisico de manera que se alcance un mejor entendimiento de estos sistemas.

4

Page 4: TECNOLÓ(~ICO DE MONTERREY®

l. INTRODUCCIÓN 1.1 DESCRIPCIÓN DE UN CUADRÓPTERO Los cuadrópteros (quadcopters en inglés) son aparatos voladores que surgieron en la década de 1920 para solucionar problemas que tenían aeronaves de acenso vertical. 1 Sus ventajas frente a los helicópteros son: que son más fáciles de maniobrar que un helicóptero; no necesitan de la hélice de cola para cambiar su dirección, dt: manera que todo el empuje es aprovechado para mantenerlo en el aire; y por su configuración simétrica su modelo dinámico se simplifica, al ser prácticamente iguales las fórmulas para cabeceo y alabeo. La desventaja de este sistema es que es muy inestable (principalmente debido a su bajo amortiguamiento) y por lo tanto requiere de control robusto. 2

Un cuadróptero es una aeronave con seis grados de libertad (tres de traslación y tres de rotación). En traslación pueden moverse en los ejes X, Y y Z, mientras que en rotación pueden girar sobre estos ejes, respectivamente alabeo (rol!), cabeceo (pitch) y viraje (rol!).

L<ft y

Figura 1.1 Movimientos de un cuadróptero. (Tomado de Kaiser, E., 2013)

Al contrario de un avión o helicóptero el cuadróptero presenta una estructura simétrica de manera que el alabeo y el cabeceo se comportan de manera similar. Otra diferencia es que sus hélices adyacentes giran en direcciones opuestas de manera que se cancele el momento o torque al girar todas con la misma velocidad, es así que se puede realizar el acenso y descenso vertical. Esta configuración también es ventajosa para trasladar y/o girar a esta aeronave de acuerdo a la combinación de fuerzas en los motorei;, tal como se muestra en la tabla l. l.

1 DiCesare, A., Kyle Gustafson, K. y Lindenfelzer, P., s.f. 2 Hussein, W., Elruby, A., Haleem, H., & EI-Khatib, M. (s.f.).

5

Page 5: TECNOLÓ(~ICO DE MONTERREY®

a e ac1 n e Tabl 1 1 R 1 "ó d fu erzas d 1 d . e cua roptero Movimiento Fuerza en Fuerza en Fuerza en Fuerza en

motor F motor B motor R motor L Elevación grande grande grande grande EQuilibrio mediana mediana mediana mediana Descenso neaueña neaueña pec1ueña PeQueña IZQuierda mediana mediana grande pequeña Derecha mediana mediana neoueña grande Adelante neaueña grande mediana mediana Atrás grande pequeña mediana mediana Giro en sentido grande grande pequeña pequeña horario

[Giro en sentido pequeña pequeña grande grande antihorario

(romado de Hussem, El-Khat1b, Elruby, Haleen., s.f.)

Figura 1.2 Momentos ele giro de un cuadróptero. (Tomado deHussein, El-Khatib, Elruby, Haleen., s.f.)

Si bien, se han empleado mayoritariamente en la milicia, en la última década han adquirido aplicaciones comerciales y científicas tales como: tareas de rescate, monitoreo de fenómenos natw-ales, estudio de flora y fauna, estación de estudios meteorológicos, routers en zonas remotas, etc. En el futuro próximo se planea que hagan entrega de paquetería, y que

6

Page 6: TECNOLÓ(~ICO DE MONTERREY®

monitoreen ciudades tanto para seguridad como para mejorar el flujo de personas y automóviles. 3•

4

I.2 JUSTIFICACIÓN Precisamente en este tenor se ha propuesto este proyecto para definir una aplicación de monitoreo dentro del proyecto de Ciudades Inteligentes del ITESM. Este proyecto aumentará el conocimiento sobre estabilidad de cuadrópteros para poderlos emplear como autómatas que ayuden a reali:zar diversas tareas, es decir, esto es desde el punto de vista científico. Desde el punto de vista ambiental y económico, creemos que en un futuro usar cuadrópteros para medir el flujo de tránsito ayudará a diseñar nuevas ruta:; en puentes y autopistas; en el caso de peatones para agili:zar rutas de evacuación, detectar sitios de interés (en el que converjan más); en el 1;aso de seguridad, proveer una herramienta de nueva tecnología para evitar siniestros, etc.

1.3 OBJETIVOS Los objetivos principales de este proyecto fueron los siguientes:

• Anali:zar el comportamiento dinámico y aerodinámico del cuadróptero con base a diferentes propuestas predefinidas.

• Realizar el modelado del sistema en lazo abierto y simular utilizando herramientas computacionales.

11 Caracterización de sensores y actuadores. • Establecer el controlador para los 6 grados de libertad y realizar la simulación en lazo

cerrado. • Desarrollar una plataforma para la prueba del sistema motor-propela. • Establecer comunicación entre el ordenador y el sistema.

3 Sureshkumar, V. y Cohen, K. (2014). • Sherer, K. (2009).

7

Page 7: TECNOLÓ(~ICO DE MONTERREY®

11. CARACTERÍSTICAS DE LOS COMPONENTES DE UN CUADRÓPTERO 11.1 DIAGRAMA GENERAL DEL SISTEMA Para que un cuadróptero pueda ser controlable se requieren de elementos electrónicos y electromecánicos tales como sensores, actuadores, microcontrolador y un medio de comunicación. Los sensores penniten obtener información del ambiente, en este caso la traslación y rotación del cuadróptero respecto a una referencia; los actuadores (motores) transformarán señales eléctricas en fuerzas mecánicas, en este caso elevación y sustentación para que el sistema pueda moverse en el espacio aéreo; finalmente el microcontrolador recibirá la información de los sensores y la comparará con las consignas deseadas (enviadas por un medio inalámbrico de comunicación) de manera que pueda controlar las acciones del cuadróptero cerrando así el lazo. Ver figura 2.1.

Acelerómetro

Figura 2.1 Esquema general de sistema de control y sensado del cuadróptero

A continuación se presentan los componentes principales de este sistema:

8

Page 8: TECNOLÓ(~ICO DE MONTERREY®

• Acelerómetro.- Mide la aceleración en los ejes X e Y, la cual se puede integrar para obtener la posición

• Giroscopio.- Mide la velocidad angular en los 3 ejes (X,Y,Z) lo cual al ser integrado proporciona los ángulos Yaw, Pitch y Roll

• Barómetro.- Mide la presión atmosférica, con la cual se puede obtener la altura despejándola de la fórmula de presión barométrica.

• Controlador electrónico de velocidad (ESC).- Controla la velocidad de un motor, recibiendo de entrada un tren de pulsos y dependiendo del tiempo en alto (l. l Sms -2. I Sms) se obtiene una velocidad en los motores

• Xbee.- Usa el protocolo de comunicación Zigbee (radiocomunicación de bajo consumo de energía y con diversas topologías de red). Permite que se envíe la consigna inalámbricamente desde la computadora hasta el cuadróptero

• Microcontrolador (Arduino).- Gestiona los periféricc1s de entrada y salida (en este caso los sensores y actuadores) y permite que sea programable el control y las acciones del cuadróptero

• Motores sin escobillas (Brushless).- No presentan la fricción de escobillas, dándoles mejor eficiencia. Se les incorporan hélices para que se obtenga una fuerz.a de elevación

9

Page 9: TECNOLÓ(~ICO DE MONTERREY®

III. MODELADO MATEMÁTICO DE UN CUADRÓPTERO En este capítulo se detalla el análisis de las ecuaciones dinámicas para el control del sistema así como la simulación del modelo, sustentado en diforentes artículos referenciados posteriormente.

111. 1 MODELADO DEL SISTEMA Ecuaciones de movimiento

El modelo dinámico del cuadróptero está fundamentado principalmente en las ecuaciones de Newton sobre las ecuaciones de energía de Lagrange, donde :la parte de Lagrange o "L" es la diferencia entre la energía cinética y la energía potencial del sistema.

Si recordamos, la segunda ley de Newton propone lo siguiente:

F=ma=mi (3.1)

Y a su vez, se conoce que el Trabajo de un sistema se represe,nta como:

(3.2)

Sustituyendo (3.1) en (3.2) y simplificando obtenemos lo siguiente:

b

W= L mxdx

Integrando obtenemos que el trabajo es la diferencia entre la mergla cinética en el punto B y la del punto A por lo que la ecuación de Newton se puede reestablecer como:

!!.. (aª~)- aªL = F; i = 1,2,3. (Ejes Coordenados) (3.3) dt r, r¡

Utilizando el principio anterior y usando la representación ma1ricial de los cosenos directores para la rotación en los 3 diferentes ejes, obtenemos las siguientes ecuaciones de movimiento del sistema:

Ecuaciones de Traslación:

En las siguientes ecuaciones se puede observar del lado derecho la sumatoria de las fuerzas que afectan al movimiento del cuadróptero, es decir, la fuer2a de fricción por un lado y la fuerza de entrada por otro, la cual es afectada por los senos-cc,senos directores.

mi= u(l)(sin <P sin 0 + cos <P sin 8 cos 0) - k1x my = u(l)(sin <p sin 8 cos 0 + c,)s <P sin 0) - k2y (3.4)

mz = u(l)(cos 8 cos 0) - k3z - mg

10

Page 10: TECNOLÓ(~ICO DE MONTERREY®

Ecuaciones de Rotación:

En esta ocasión, a diferencia de las ecuaciones de traslación, las siguientes usan el momento de inercia en vez de la masa como tal, esto debido a que se trata de giros sobre el eje.

ly8 = u(2) - k56

lx0 = u(3) - k40 lz<p = u(4) - k6 <p

(3.5)

Donde la K1 es una constante con valor de 2 ó 4 para evitar la saturación de los motores.

Para las ecuaciones de la fuerza producida por los motores en cada movimiento, u(a), se basa en la figura 3.1.

Figura 3.1: Configuración para el control de vuelo (tomado de Hussein, Elruby, Haleem; s.f.)

Se obtiene lo siguiente:

Construcción del modelo

u(l) = F1 + F2 + F3 + F4

u(2) = F3 - F1

u(3) = F4 - F2

u(l) = F1 - F2 + F3 - F4

(3.6)

Para la prueba del modelo se sugiere utilizar la herramienta de Simulink de Matlab, debido a la facilidad del manejo de ecuaciones.

11

Page 11: TECNOLÓ(~ICO DE MONTERREY®

Para obtener un mayo orden en el diseño del sistema en Matlab, se toma como apoyo la herramienta llamada Subsystem, la cual permite organizar dentro de un solo bloque alguna operación, evitando que ésta aparezca en el diseño principal.

Con la ayuda de esta herramienta, se programó en bloques las ecuaciones de fuerza, ecuaciones de traslación y las ecuaciones de rotación como se muestra en las siguientes figuras:

---c;p

Figura 3.1 Diagrama de Ecuaciones de Fuerza

Se toma como entrada al bloque el valor de la fuerza de cada motor, para así obtener como salida el vector de fuerzas.

En el caso de las ecuaciones de rotación se hizo lo siguientt:, basándonos en la teoría de control:

12

Page 12: TECNOLÓ(~ICO DE MONTERREY®

ffi---c-;y ,~. .n"l:ir .

.....,,

Figura 2.3 Ecuaciones de Rotación

Si observamos más de cerca podemos apreciar lo siguiente:

....,,

Figura 3.3 Ecuación de Rotación para Theta

Cada ecuación tiene como entrada su respectiva resultante de fuerza, posteriormente se multiplica por una ganancia la cual es la inversa de su momem:o de inercia; en la entrada

negativa del sumador entra la multiplicación de la velocidad a11gular y la ganancia ~; el 1,,

resultado del sumador es la aceleración angular por lo que necesitamos un integrador para así obtener la velocidad, a su vez, se requiere de otro integrador para poder adquirir el ángulo.

Por otro lado, en consecuencia de que los ángulos son variabl.es con el tiempo, para la programación de las ecuaciones de traslación no es posible realizarla mediante subsistema

13

Page 13: TECNOLÓ(~ICO DE MONTERREY®

por lo que se hizo uso de otra herramienta llamada Matlab Function, la cual pennite definir las ecuaciones como en un script tomando en cuenta la entrada de datos variables.

En la siguiente imagen se observa la programación de las ecuaciones de traslación correspondientes a los movimientos de X y Y, así como también la parte de la ganancia de Z la cual es variable debido a los ángulos de Euler que tiene como entrada:

,_~::;~{111'P.in~i~9:k~aiiíit'00-W:.,:JZ1%n~áx~L1L~ '-·--····-·······---------- ·~- -;;··'~ '> · ,_,_ ,_, '!

íl ! ~lrun,ct:1.on (D=ill',DUZRY,E&l.DZJ• fCD(theu..¡:b1,epa1,Ul) 1

J J:O~se: ! ~j ) mcaJlat ( (eiad(ep91.)) • l•bldlP'.l:J.) )+(ca.adf•pn})• (•1.r~tt:11.et.a))" (cosd(pb:l))) • v1t/a::

IH j mmY-( l f•lndfepei) )• (aiDd.(tbet.a))• (cc11d(ph..l) )+(caad(e;!,U) •· (J11nd(pb.i)) 1 •tn.) ( :111: !-i '-Gai~•(((caad('t'baHl)•(coat(p!:li.))1/m)-VI; ! u '

Figura 3.4 Matlab Function para Ecuaciones de Traslación

Por último, se unieron todos los bloques para así poder confonnar un solo diseño como se muestra a continuación:

Figura 3.5 Modelo del Sistema

Ill.2 DINÁMICA DEL MOTOR Para la simplificación del modelo, se tomó en cuenta la siguiente representación de un motor de DC.

Ra La

+ --+ + Ía

~ Va eb

14

Page 14: TECNOLÓ(~ICO DE MONTERREY®

Figura 3.7 Diagrama de un motor CD controlado por armadura (Femández del Busto, Apuntes de lng. De Control)

En este caso, se supone que la corriente del campo i I es consti:nte, de tal manera que se tenga

un campo magnético constante. El par obtenido • es proporcional al producto de la corriente

armadura i, y el flujo magnético:

Pero el flujo es constante, ya que ;1 es constante, entonces

,p=K2i¡

• = K3ia

Cuando el rotor gira, se induce un voltaje eb en el circuito de armadura, el cual es

proporcional a la velocidad angular@ por la corriente de campo i1 :

Aplicando la ley de Kirckhoff de mallas en la armadura tenemos que:

R . L diª ea= a1a + a-+eh dt

Por otro lado, el balance de pares en el sistema mecánico resulta ser

Tomando Transformada de Laplace a las ecuaciones anteriores, se obtiene la función de transferencia entre el voltaje aplicado a la armadura y la velocidad angular de la carga mecánica:

Por lo tanto,

,(s) = lJeqs+ beq )n(s)

,(s) = K310 (s)

E0 (s) = (R0 + sl 0 )la(s) + Eb(s)

= (R0 + sL0 )10 (s) + KbQ(s)

15

Page 15: TECNOLÓ(~ICO DE MONTERREY®

Ea (s) = (Ra + sLa) T(s) + KbQ(s) K3

= (Ra +sLa)(Jeqs+beqP(s)+Kbn(s) K3

= ;3

~Rabeq +(RaJq +Labeq)s+LaJeqs2

+KbK3fl(s)

Finalmente, la función de transferencia entre la velocidad angular y el voltaje de la armadura es la siguiente:

Q(s)= _______ K_3:..._ ______ _

Ea(s) LaJeqS2 +(RaJeq +Labeq)s+K3Kb +Rabeq

Generalmente tenemos que La << 1 en la práctica. por lo que

Q(s)=-----K~3 __ _ Ea(s) (RaJeq +Labeq)s+K3Kb +Rabeq

= ____ K_,3::...._ __ _

RaJeqs+K3Kb +Rabeq

=~ Tms+l

Ahora definimos a la constante de tiempo del motor como

y la ganancia del motor como:

111.3 SIMULACIÓN DEL MODELO Integrando las ecuaciones de traslación del modelo presentadas ,~n el 3er capítulo, se hizo la simulación del lazo abierto en Simulink de Matlab, usando como entrada la sumatoria de fuerza U(l), que es la responsable del movimiento en X, Y y Z; los resultados obtenidos representan que es un sistema totalmente inestable:

16

Page 16: TECNOLÓ(~ICO DE MONTERREY®

. . . . "'I t : ¡ .. l ------------ ----/-- ----------------1------------------1- ---- ---- --------- --

a l 1 1 ' "'""'""'""'i' " " "'""'""'"'"i"''"''"'"'""'"l"""'""'"'""'" "

: : ~ : 11 ,11 •11 ,1 1

Figura 3.8: Simulación del modelo en Simulink

Como se puede observar en la figura 3.8, y como ya se tenía previsto, el modelo del cuadróptero es un sistema totalmente inestable lo que provoca que el control del mismo sea robusto para poder controlar los 6 grados de libertad de buena manera.

17

Page 17: TECNOLÓ(~ICO DE MONTERREY®

IV.CONTROL Para esta parte se tuvo que consultar los artículos del 1:quipo de Sreekumar, Hithesan y Anand (2011) así como también la tesis para grado de maestría de Basta, P. (2012), ya que aplican técnicas de control un poco más entendibles.

Una vez estudiada la parte de control en ambos docwnentos, se obtuvo la siguiente infonnación:

• Controladores del tipo PD para el movimiento de rotación en cada eje (cabeceo, alabeo y viraje), debido al control de velocidades

• Controlador tipo PID para el movimiento en Z, debido a que los 4 motores intervienen directamente en el movimiento.

• Controlador tipo PI para movimiento traslacional en X y Y. • Para el sistema en lazo cerrado se proponen 2 lazc,s de control principales, uno interno

que es el que controla el movimiento de rotación del cuadróptero y otro externo para la parte de traslación.

• A pesar de que el sistema tiene 6 grados de libertad, se puede simplificar a únicamente cuatro, los cuales son tres de rotación y uno de traslación (Eje Z). Esto debido a que al realizar el movimiento en el plano, los ángulo,s correspondientes a los ejes X y Y (Phi y Theta respectivamente) automáticamente varían, provocando el movimiento hacia un lado o hacia el otro sobre cada eje, por lo que el control no necesita ser muy robusto.

IV.1 CONTROLADORES PARA CADA MOVIMIENTO Tomando como base el modelo presentado anterionnente, específicamente en la parte del cálculo de los ángulos y la posición, se procede a calcular los controladores.

Control de Phi y Theta

Partiendo del supuesto de que el cuadróptero es simétrico en los ejes X y Y, se considera que el control para los ángulos de rotación es el mismo.

Figura 4.1 Lazo de Control para Theta y Phi

Control de Viraje (Psi)

Para este caso, el único cambio importante que ocurre en el control de Psi, es que en el viraje, los 4 motores intervienen debido a que se debe realizar una diferencia de torque exacta, es decir, la fuerza de los motores debe permanecer de tal forma que el cuadróptero no se incline ni pierda altura.

18

Page 18: TECNOLÓ(~ICO DE MONTERREY®

Figura4.2 Lazo de Control para Psi

IV.2 DIAGRAMA EN LAZO CERRADO DEL SISTEMA Para poder obtener el lazo cerrado de control del sistema. se basó en la propuesta antes mencionada, la cual es el disefio de 2 lazos cerrados como se ve a continuación:

Figura4.3 Diagrama en Lazo Cerrado

En la figura 4.3 se puede observar la conjunción de todos los elementos, explicados anteriormente, así como también implementada la propuesta de control del grupo de Sreekumar, Hithesan y Anand (2011) y cuya explicación de funcionamiento es la siguiente:

• Se lee la consigna, es decir, los valores deseados (Xd, Y d, Zd, Theta_d, Phi_ d y Psi_ d) para compararlos con los valores medidos o reales.

• Posteriormente, el error medido en X y Y pasa por su respectivo controlador para realizar la corrección.

• Debido a que el movimiento en X depende de la inclinación de Theta y que el movimiento de Y depende de Phi, sus sefiales de control entran directamente a las comparaciones entre la Theta y Phi deseadas, y las medidas, respectivamente.

• Los errores entran a su correspondiente controlador de movimiento rotacional de ThetayPhi.

• Por otro lado, los datos deseados de Z y de Psi pasan por un procedimiento similar, en pocas palabras, se obtiene el error de cada uno para asi obtener las sefiales corregidas después de pasar por su controlador.

19

Page 19: TECNOLÓ(~ICO DE MONTERREY®

• Estas dos señales de control entran en una adición con las respectivas de Theta y Phi, y a su vez, alimentar a cada motor.

• En el bloque de 'motores' se tiene representada la función de transferencia de un motor DC así como también el cálculo de fuerza de empuje de cada uno a través de sus revoluciones.

• Ya obtenidas las fuerzas producidas por los motores, se prosigue a hacer la sumatoria de fuerz.as para obtener la resultante que afecta en cada movimiento (Estudiado anteriormente).

• En el penúltimo bloque se hace el cálculo de los ángulos de Euler con el uso de las ecuaciones de aceleraciones angulares, para así d1!spués, en el último bloque, obtener la posición del sistema.

A continuación se presenta la tabla de ganancias de PID:

Tabla 4.1: Ganancias PID

Control KD J[(j Kd 0 0.5 - 0.02 ~ 0.5 - 0.02 'P 0.8 - 0.01 X -0.7 -0.3 -y 0.7 0.3 -z 2.83 4.98 0.1

20

Page 20: TECNOLÓ(~ICO DE MONTERREY®

V. RESULTADOS En este capítulo se presentan los procedimientos, programac10n, mediciones y caracterización de los componentes electrónicos así como la implementación de una plataforma de vuelo experimental.

V.I CARACTERIZACIÓN DE LOS COMPONENTES Con base en documentos de investigación sobre cuadrópteros como los de Hussein, Mongkhun o P. Basta, se eligió usar un barómetro, un 2.celerómetro y un giroscopio, estos dos últimos de tres grados de libertad (GDL) debido a su bajo costo y compatibilidad con el microprocesador Arduino.

Nota: Existen sistemas que contienen tanto los sensores c:omo el control embebido, tal como el Arducopter o el Parrot, sin embargo, para propósitos ele! análisis de control se eligió usar por separado los sensores y el microcontrolador.

Xbee

Habiendo distintos protocolos para llevar a cabo la commicación entre el microcontrolador (Arduino) y la computadora, para elegir el más adecuado para este proyecto se consideraron criterios como velocidad de transmisión, consumo de corriente, rango de alcance y entre otras. En la tabla siguiente se hace una comparación entre tres tecnologías inalámbricas en sus versiones económicas a partir de la información de García, J. (2010) e Ingeniería MCI (2013).

Tabla 5.1 Comparación de tecnologfos inalámbricas

Protocolo Baudrate Consumo Alcance Pr,edo Topologías Potencia de máximo (d.Slares) de red corriente

Bluetooth 2.0Mbps 40mA 18m. 15.95 Punto- 2mW (RN-42) punto,

punto-multipunto

Xbee (serie 250 Kbps 40mA 120m. 20.95 Malla, 2mW 2) Estrella,

punto-punto Wifi(RN- 54Mbps 210mA 100m. 43.08 Árbol, malla, lOOmW 131C) Estrella,

punto-punto

Se determinó que en términos de corriente, alcance, precio, topología y potencia Xbee daría la mejor solución, teniendo como única desventaja la velocidad de transmisión.

21

Page 21: TECNOLÓ(~ICO DE MONTERREY®

Con base en esto se adquirieron el Arduino Wireless Shield, 2 Xbees serie 2 y un Xbee explorer dongle. La función del dongle con Xbee es transmitir infonnación desde la computadora vía serial-canal Xbee-serial hasta llegar al Arduino montado en el cuadróptero de manera que se puedan transmitir las consignas a éste y que se pueda retroalimentar a la computadora con los datos medidos por los sensores.

El Wireless Shield se montó directamente sobre los pines del Arduino UNO, y los Xbees respectivamente sobre los puertos (con su forma) en el Wireless Shield y en el Dongle, tal como se observa en las siguientes imágenes.

(Tomado de

(Tomado de

http://duino4projects.com/arduino-wireless­

sd-sh ield-tuto rial/)

https ://www.rhydolabz.com/wiki/?p=3408)

Figura5. l Ensamblaje de módulo Xbee-Arduino

En seguida se siguieron las instrucciones del tutorial de la página de Arduino (2014) usando el programa X-CTU (la penúltima versión, ya que en la nueva se requería reiniciar tanto el dongle como el Wireless shield) en el cuál se configuró al Xbee-Dongle como Coordinador y al Xbee-Arduino como esclavo (end device) conjimction set; para hacer esto también se usó el botón de solicitud (Query) para obtener el tipo de modem de los Xbees. Para gestionar el canal de transmisión entre coordinador y esclavo, se adquirió el PAN-ID del esclavo y su número serial, el cual está contenido en 2 palabras (cada una de 16 bits): en la palabra HIGH (SH) y en la palabra LOW (SL).

PAN-ID: 232

SH: 13A200

SL: 408870AC

Es necesario usar el botón Read para poder obtener los parámetros de configuración que tiene cada XBee y el baud rate debe ser el mismo tanto para coordinador como para esclavos.

22

Page 22: TECNOLÓ(~ICO DE MONTERREY®

- - jCOMI) l( CTU

""""'"' ......... l'ld~ llaca~Mi:itl ... .........

PCSeli-9IR-Test lT_..... 1~~1 PCSeltn}>IR-. t..e JT-"' ...... ~-1 C.c,nPo,o~,-----------~ ¡ Mc,J,,,,P,. ...... ,. .• u·- - p....,.., v;

StlldC.;a,"'"1 11~~ R

1 :ea-d 1:[ jJ p ~~-M~~=,,=0,ea,:c,-0,~.,~ •• ~,~DO~rn~c,~,~,- ~

:Eil ::º~ fil =~?=~·~i~~· ~ Bb r,-::] =~=-:.~e:.~.~

ll!_----~---~==·~,,',,"""===;J' =~~ ~-=~=~ Ho.l S-9 UcttCollf\llb)N~..,_.- 1 ::::~~-~.!~'" ,_....,.__ -··"*""

r··

"" ,..,.. Mc:deo,,&- - -1~1

h""""-1;~ ~

D r111 0 CL .- ltl D 11 i. "'-'~ Qrou,••· &o.o..o ll,loJit,' Q JFFl#l l,;Q~R-.Qo.,,.t:..',:,/ lcc Q t:1u:t1ooci.,.c..1~ 1~ QOC1 1H ·"'- ~ -llo,,;rt11 Dnot11.1-~ o....-o.-...

:': ';:]Rfln""..,.-,g D1~,n ¡,,,,.. 1~ D PI ""' "-Há

~~

·r ·····- J:OM .

Figura 5.2 Interfaz XCTU. Tomado de

·· · ···1

.:.1

http://ard ui no.ce/ en/Guide/ Ardui noWi reless5hield52#. Ux81QoV8pRU

Al coordinador se le escribe el mismo PAN-ID para establecer el canal de comunicación, en OH parameter y DL parameter respectivamente se escribieron SH y SL de manera que identifique al dispositivo esclavo .

..._ - (COM1) X-CTU

Modem Pt,,mets Prd.. Relnotl ~ltb;l. .. V.slons ...

PCS-IR•.,, .. ¡, ..... ·-.......... 1

. ";: "¡-::. j '-;.::1r·::11¡~::-ílrv~~:.11 r~updtlerl!llMl~/~ I LMCI verftMI. ., Moclem:><BEE Fll'CtionSllt Varsion ~ IZNCT ~5COORD1H.-.TOR1'T ..:I~ =..:. -~ .-.·do.ten~-~... · ··- - ··· - 3 . Q IO) M"l' · l 6,t,1N~Addieu

fil i1J.\21:XlJSH· SeMIN~Hlljl Cl t4078:l791 SL -5fflll Nll'l'bef l o,e 1i1 t1:'A2001DH · De:MeloonAdlte:n Hq'I lil 1407Ell:'if) DL -D~10nAd1;huUIO'f la llll 7A ·Zd3ec A6*en NJ la !Hl! S[5Qt_.r..,[~ lil i.E. 9J OL·D"Wll ~ l r'ÓP'Ai la rrno .'.ld:ccll) la 11Nl · N~l~ itto Q íOJEt!Br~t F~ ~ [f ,...lAR At, ve,>,.1,i.-, ~uJo~T,mo, la !.'l(D)'JJDO Devu TW" tdo!nl~,.., lil !X 1Nf ~WcD..w,.,-yE".P.otf lil (01 NCI tlod,,:, On'-""'er~ Or~

ó.; ':j RF lnl11l<lcr!Q

J

Q 1-11r1. Po-i L~ el Q l1 JPI~ PPHiot Mr"le

~.:Hd~;;;a - ..-·--·-----------~~=·,11

Figura 5.3 lnteifaz XCTU. Tomado de: http://arduino.cc/en/Guide/ Arduino WirelessShieldS2#. Ux8 l Qo V8pRU)

23

Page 23: TECNOLÓ(~ICO DE MONTERREY®

Una vez configurado el protocolo se hicieron pruebas para asegurar la comunicación. La primera prueba constó de usar el programa ejemplo del tutorial de Arduino (Ver Anexo A) para encender y apagar un LEO (LEO naranja incluido en el Arduino) al enviar un carácter H para encendido y L para apagado; este programa se descargó en el Arduino. Por medio de la terminal de XCTU se enviaron los caracteres H y L.

Figura 5.4 Prueba Xbee LEO

A continuación con base en este funcionamiento, se escribió un programa para el coordinador, de manera que a través de Matlab se pudiesen enviar los caracteres por el puerto serial de la computadora hacia el dongle sin necesitar de la terminal XCTU (véase Anexo 8). Se obtuvo el mismo resultado que al usar la tenninal. Finalmente se incrementó la frecuencia de envío de datos y funcionó óptimamente hasta 57600 Hz (frecuencia máxima sugerida en foros)5.

V.2 GJROSCOPIO/ACELERÓMETRO 3GDL Para medir la distancia y los ángulos de giro se eligió el sensor Kootek Arduino GY-521 MPU-6050 ya que contiene acelerómetro y giroscopio de 3 GOL. Usa un convertidor analógico digital (AD) de 16 bits, el giroscopio tiene un rango de± 250 500 1000 2000 º / s, y a su vez el acelerómetro de± 2 ± 4 ± 8 ± 16 G (fuerza de gravedad). Su tiempo de muestreo mínimo es de I ms, sin embargo es recomendado que sea de 40ms para evitar mediciones ruidosas.6·

7

Se hizo un programa de calibración y referencia del sensor (a partir de las librerías y código de Rowberg, J., 2013) de manera que se obtuvieran valores en grados para el giroscopio y en distancia para el acelerómetro. 8 (Ver Anexo C)

En la siguiente imagen se puede apreciar el cambio antes de referenciar el giroscopio hacia su posición inicial ( código original de Rowberg, J., 2013) y después adaptarlo para que use la referencia la posición inicial del cuadróptero.

5 Aeroquad (2011). 6 Amazon (2014). 7 lnvensense (2011). 8 Rowberg, J. (s.f.).

24

Page 24: TECNOLÓ(~ICO DE MONTERREY®

101.0{ 42 . 49 -1.47 ling llMP ••• ¡('-, '

13 ' 2se9 ablÚ>lJ io~r:upe detecti"n O\rd'2UI<> e:<tunal .1-t:""f lOl.04 42.49 -1 .. ,e ¡,-12 6, 2589 i: lOt.03 n .o -l.4!1 y¡u: 0.00 -o.oo -0. 0D ti 1. 20 ~5B3 = o.oo -o.oo -o.oo

i 101.03 +uro -1..49 ypr o.oo -o.ao -o.ao -!! 31 2572 ypr o.oo -o.oo -o.oo 101.0l 42 , 51 -1.49 J(Pr o.oo 0,01 o.oa -21 45 2S6S ypr o.oo O~fU o.ca 101.04 42.52 -1.4B ypr o.oo 0.01 o.no -u 49 2Só6 ypr o.oo O.Gl º·ªº 101.04 42.S4 -1.46 y¡u: O.DO O.O¼ 0 .l)fl

fi6 2577 J(Pr O.OD 0,Dl 0.00 ypr o.oo 0.01 o.ca

io~~,

Figura 5.5 Izq: programa orifinal MPU6050. Der: programa adaptado MPU6050

A la izquierda se observan las mediciones del programa original y a la derecha las mediciones tras modificarlo para tener una referencia en O inicial.

V.3 BARÓMETRO (ALTÍMETRO) Para corroborar la distancia vertical (en el eje Z) también se eligió usar el barómetro SainSmart BMP085 cuya resolución es de 0.03hPa (0.25 m) y su tiempo de muestreo mínimo es de 7.5ms. También funciona como sensor de temperatura.9 Al igual que en el sensor anterior se hicieron programas de calibración y referencia (a partir de las librerías y código de Adafruit). 10 (Ver Anexo D).

• Amazon (2014). 10 Townsend, K. (2014).

25

Page 25: TECNOLÓ(~ICO DE MONTERREY®

o.ea "'

0.39 m

0 . 51 :o

O.ó3 !!l

Altitud.e: 0.70 c.

Altitude: 0.61 ,o

Alt it.ude: 0.63 m

Alútw.le: 0.93 ,o

. Y

Oliuír.saol

Figura 5.6 Izq.: programa orifinal BMP085. Der.: programa adaptado BMP085

A la izquierda se observan las mediciones del programa original y a la derecha las mediciones tras modificarlo para tener una referencia en O inicial. Como se puede observar el barómetro por su precisión presenta mucho mayor error que el acelerómetro-giroscopio.

V.4 CONTROLADORES ELECTRÓNICOS DE VELOCIDAD (ESC) Para controlar los motores de los cuadrópteros actualmente se cuenta con la tecnología de los ESCs. Estos dispositivos corrigen y suavizan un tren de pulsos modulados (PWM) provenientes del microcontrolador y conmutados de manera que bajo la alimentación de la batería más la corrección del control se transmita este PWM de manera trifásica al motor sin escobillas. 11 Los ESCs actuales cuentan con características adicionales en su programación tales como:

• Tipo de corte/límite del motor (motor cut-off y cut-offthreshold).- para suavizar el aterrizaje de la aeronave cuando está quedándose sin batería

• Habilitar freno (brake).- para frenar las hélices tal como un freno de automóvil frena las llantas

• Modo de sincronización (timing mode).- para elegir entre conmutación suave (2,4 o 6 polos del motor) y conmutación fuerte (6 o más polos), esta última consumiendo más potencia para alcanzar mayores velocidades en las propelas y tener mayor fuerza de empuje.

11 RCM Direct (2014).

26

Page 26: TECNOLÓ(~ICO DE MONTERREY®

• Tipo de Batería.- para optimizar el consumo según sea LiPo (Polímero de Litio) o NiMh

• Modo de inicio (startup mode).- Define el tipo aceleración durante el arranque.

(Hobbywing, 2010)

3. Sol Nem mue {Pnllflmmahlevalue) You wfl hear &Mral tunes rn loop. Set 1he wlue mafchí!g to a tone by moving lhmllle &ti: to 10p ~ Yilll hllarlhá tM. hn a 'l)ildal lóné ·.Htis• ern1s, ft'láal'IS the V8Íliil iS &et and sawd. (Ksefq 1he lhratlle slillklllfop, youwll go bode fo Step2 and you canselecf: olhl!rltéms;or mcwqtht s&:.t to bolfaln dwi2 seconds.wtn aldt program mocte diradly)

Figura 5.7 Programación de Hobbywing Skywalker. Tomado de Hobbywing, 2010

Los ESCs normalmente se programan por medio del joystick de un control de radiofrecuencia, lo cual funciona al variar el voltaje. También los modos y opciones se eligen por medio de tonos (beeps) que se escuchan de forma diferente a distinta posición del joystick (diferencia de potencial). Sin embargo, Simonech (2012) logró hacer esta misma programación empleando un potenciómetro y un Arduino, usando la librería de servos (la cual funciona para generar PWM) tal como se muestra en la figura a continuación:

27

Page 27: TECNOLÓ(~ICO DE MONTERREY®

Figura 5.8 Conexiones para programación de ESC. Tomado de Simonech, 2012

Con esta configuración más el código de Simonech y la tabla de programación de Hobbywing Skywalker 20A que se mostró previamente se pudieron configurar los ESCs.

Los ESCs comerciales operan correctamente entre 50 y 300 Hz. 1~ La libreria de servos de Arduino genera PWMs a 50 Hz por lo que se hizo un nuevo código para variar la velocidad de los motores (ver Anexo E).

Se hicieron pruebas a 50 y 200 Hz obteniendo resultados muy similares a pesar de la diferencia de frecuencia. Posteriormente se investigó que los ESCs comerciales tipo hobby independientemente de la frecuencia ( dentro del rango) son programables con periodos en alto menores a I ms, a I ms se encuentran detenidos los motores y a 2ms en periodo en alto se alcanza la velocidad máxima. 13

12 Aeroquad (2012). 13 Aeroquad (2012).

28

Page 28: TECNOLÓ(~ICO DE MONTERREY®

Figura 5.9 Mediciones PWM experimentales ESC

Experimentalmente se obtuvieron los siguientes resultados a 50 Hz (20ms) empleando una fuente de voltaje regulado a 11.1 V y 3100 mA.

Tabla 5.2 Parámetros experimentales ESC fuente de voltaje

Periodo positivo (milisegundos) Periodo total (milisegundos)

Programable O- 0.6 20

detenido 1 20 Inicia movimiento 1.195 20 Máxima velocidad 1.6 20

Experimentalmente se obtuvieron los siguientes resultados usando una batería LiPo de 3300mah a 11.1 volts y 200 Hz (periodo de 5ms)

Tabla 5.3 Parámetros experimentales ESC fuente de voltaje

Periodo positivo Periodo total Programable 0-0.700 5 Detenido 0.8 - l. 100 5 Inicia movimiento 1.180 5 Máxima velocidad 2 5

Se observó que la fuente de voltaje entraba en modo de protección al superar los l .6ms de periodo en alto debido a la demanda de corriente, sin embargo con la batería LiPo se pudo llegar al rango máximo real.

29

Page 29: TECNOLÓ(~ICO DE MONTERREY®

V.5 PLATAFORMA DE VUELO Con base en los datos experimentales de los ESCs y en la metodología de Simonech (2012) se hizo una plataforma de vuelo en la cual se colocó un motor con su hélice y ESC en el extremo de una viga, atravesada por un eje en su otro extremo a manera de "sube y baja". El eje móvil fue unido a un potenciómetro de forma que al variar el ángulo de la viga respecto al eje (conforme al empuje y elevación del motor) también varía el voltaje del pin central del potenciómetro.

Figura 5.1 O Plataforma de vuelo

Se hizo una secuencia de programas para poder manejarla en lazo abierto (ver Anexo E), es decir, variar la velocidad con base en periodos en alto de PWM (un pin PWM del Arduino) provenientes del Arduino y recibir lecturas de voltaje en una entrada analógica (un pin de Analog Input del Arduino). El diagrama de conexión es el mismo que se empleó para programar los ESCs en el apartado anterior.

Prueba de lazo abierto

Una vez ensamblada la plataforma se hicieron pruebas asignando valores incrementales de PWM desde IOOOµs (detenido) hasta su valor de elevación para alcanzar su posición horizontal, tal como se ve en la figura 5.11. Tal como se observa en la figura 5.12 se usó una frecuencia para el PWM de 200 Hz (5000µs de periodo total) y con un periodo positivo de 1470µs.

30

Page 30: TECNOLÓ(~ICO DE MONTERREY®

Figura 5.11 Platafonna estable en posición horizontal

Figura 5.12 Valores de periodo en alto y periodo en bajo programados

Ecuaciones para control PD

Posteriormente se hizo un programa para emplear un controlador tipo PO tal como ha sido sugerido en documentos como el de Sreekumar, Hithesan y Anand (2011 ).

Como base se tomó la fórmula U(s) = Kp (1 + K~) E(s) 1+ N

(5.1)

obtenida de Femández del Busto (2013), donde U(s) es la salida del controlador, E(s) es el error respecto a la consigna, Kp es la constante proporcional y Kd la constante de tiempo derivativa. Se aplicó el método de discretización de Euler hacia atrás,

z-1 s=­

Tz' (5.2)

donde Tes el tiempo de muestreo. Sustituyendo (5.2) en (5.1) y simplificando se obtuvo:

U(z) = K (l + Ka N z(z-1) ) E(z) P N T+Kd z(z-1)

= K (N T+Kd z(z-1)+ Kd N z(z-1)) P T+Kd z(z-1)

= K (N T+ Kd z 2-Kd z+KdN z 2

--Kd Nz)

p NT+Kdz'-Kdz (5.3)

31

Page 31: TECNOLÓ(~ICO DE MONTERREY®

Dividiendo al numerador y denominador de (5.3) entre z 2 s:e obtuvo

U(z) = K (N Tz-2 +Kd-Kdz-1 +KdN-i<dNz-1)

E(z) p Nrz-2 +Kd-Kdz-'

= K (N rz-2 -Kdz-1 (1+N)+l<d(1+N)) P N rz- 2+Kd-Kdz-1

Aplicando las propiedades de transformada Z inversa en desfasamiento se consiguió

N T u(k - 2) - Kdu(k - 1) + Kdu(k)

(5.4)

= Kp[N T e(k - 2) - Kd(l + N)e(k - 1) + Kd(l + N)e(k)]

Agrupando términos y despejando u(k) resultó en

u(k) = Kp[N T e(k-2)-Kd(l+N)(e(k-l)+e(k)))-N Tu(k-2)+ Kdu(k-1)

Kd

Finalmente simplificando (5.5) quedó

(5.5)

u(k) = KpN r e(k - 2) - Kp(l + N)(e(k - 1) + e(k)) -- !!.! u(k - 2) + u(k - 1) (5.6) ~ ~

Con base en la ecuación de recurrencias del control PD discreto (5.6) se obtuvo el programa a utilizar en el microcontrolador Arduino (ver Anexo F). fü:te programa podrá usarse a futuro para hacer pruebas de lazo cerrado con la medición del potenciómetro y la generación de pulsos.

32

Page 32: TECNOLÓ(~ICO DE MONTERREY®

VI. CONCLUSIONES Se pudieron obtener los modelo en lazo abierto y de lazo cerrado empleando los valores de inercia y medidas del cuadróptero fisico; al aplicar control i:n las simulaciones se alcanzaron las consignas deseadas mostrando curvas suaves y rápido tiempo de respuesta; el sobrepaso reducido es importante para el control ya que cualquier cambio brusco de posición puede resultar en la caída de la aeronave.

También se alcanzó superar distintos retos, tales como integrar los conocimientos de distintos autores y expertos en el tema explicando el por qué y el cómo de los procedimientos empleados, principalmente en las ecuaciones de movimiento. Conocer y explicar la teoría detrás del vuelo de estos vehículos permitirá que en füturas investigaciones se pueda proseguir a mejorar el control de vuelo e implementarlo en cuadrópteros con parámetros distintos (por ejemplo en masa, inercia o velocidades de los motores). Otro reto superado fue el de encontrar y adaptar los códigos (encontrados en foros) para obtener los valores nítidos de los sensores ya que la documentación oficial no los contenía, agregando también código que fije la referencia a la posición inicial del vehículo en cuanto a ángulos de Euler y posición. En el caso de la simulación en Simulink se pudo evaluar variables que cambian en el tiempo en funciones de transferencia al utilizar el Matlab block, ya que los bloques comunes para control no permitían esta característica

Se logró obtener un canal de comunicación inalámbrica efoctivo al usar los Xbees así como la prueba de su funcionamiento óptimo a frecuencias altas (57600Hz = 17.361µs) lo cual permite tener un tiempo de muestreo menor, y en el caso del lazo cerrado obtener una respuesta más rápida a cambios de consigna para controlar al cuadróptero.

Es importante también que se pudo aplicar y probar un método de programación de ESCs alterno al de los joystick de los radiocontroles, de forma qu,! no se tenga la limitación de este medio de comunicación; más aún, se pudo adaptar este método de manera inversa para construir una plataforma de vuelo, la cual fue instrumentada para tener un lazo cerrado de control permitiendo no sólo estudiar las fuerzas aerodinámicas sino la estabilidad (en vuelo) de un motor brushless.

Vl.1 ACCIONES A FUTURO A continuación se muestran las acciones sugeridas para continuar con este proyecto.

A futuro se sugiere que experimentando con la plataforma de vuelo se pruebe el control PD y que con ayuda de un anemómetro se grafiquen relaciones de PWM, rpm, corriente y empuje en un solo motor, para conocer mejor y predecir su ,comportamiento durante el vuelo. Para tener una medición más confiable de los sensores se d,!berá buscar un barómetro con un rango de cambio menor (se encontraron circuitos con un rango de 10cm y tiempo de muestreo de lms).

33

Page 33: TECNOLÓ(~ICO DE MONTERREY®

También se podría investigar la programación de sensores Kinect para ubicar la posición del cuadróptero durante el vuelo y mediante el filtro de Kalmari usar tanto las mediciones de los sensores del cuadróptero como las del Kinect para reducir el error considerablemente.

Al experimentar con los códigos de configuración y calibradón de los sensores la capacidad de memoria del Arduino Uno (32kb de memoria Flash) füe ocupada casi en su totalidad (incluyendo ambos sensores), por lo que añadiendo la implementación del lazo cerrado de control se requerirá usar un micrcontrolador de mayor capaddad, tal como el Arduino Mega que tiene 256Kb de memoria Flash, el cual es compatible con el WirelessShield usado para conectar los sensores y el Xbee. 14

También podría experimentarse la comunicación inalámbric:a con el integrado nrf800 lel cual tiene tecnología Bluetooth 4.0 de forma que se pudiera dar la consigna con un dispositivo móvil como un celular o Tablet. 15

A largo plazo se recomienda implementar y experimentar algoritmos de control robusto tal como el control backstepping integral sugerido por Hussein, W., Elruby, A., Haleem, H., y EI-Khatib, M. (s.f.), Bouabdallah, S. y Siegwart, R. (2007) para disminuir los riesgos de choques o caídas, explorar formas alternas de alimentación del sistema ( como energías renovables) ya que las baterías LiPo y similares sólo prnveen de 15 minutos de vuelo aproximadamente, y aplicar una solución de antivibración para el marco ya que al poner los motores en marcha hay mucha vibración la cual interforirá con las mediciones de los sensores.

Una vez cumplidas estas condiciones se propone una apLicación de monitoreo dentro del campus de la siguiente manera: equipar con una cámira con suficiente resolución al cuadróptero colocada en su centro de masa (para no afectar a los momentos de inercia), utilizar algoritmos para evasión de obstáculos y de reconocimiento de los mismos y de personas (como las técnicas de visión por computadora y aprendizaje automático), colocar señales o marcas para generar una ruta de monitoreo y u~ar algoritmos de seguimiento de trayectorias ( como A Estrella), y finalmente programar contingencias para que el cuadróptero evite caer/chocar contra personas así como un plan de aterrizaje seguro cuando tenga batería baja (todo esto probado previamente en un ambiente controlado y seguro).

Finalmente, aprovechando la configuración de malla de los Xbee Serie 2 se podría diseñar un sistema multiagentes de manera que varios cuadrópteros hagan tareas de forma cooperativa.

VI.2 CONSIDERACIONES ÉTICAS Se pudiese considerar el hecho en que al desarrollar un dii:positivo como este con cámara y

manipulado remotamente, la gente se sentiría invadida en su espacio personal al tener este

14 Arduino (2014). 15 Townsend, K. (2014).

34

Page 34: TECNOLÓ(~ICO DE MONTERREY®

cuadróptero en su proximidad. Otro dilema seria el tema del ambientalismo debido a los componentes del sistema los cuales no se degradarian a buen tiempo para reincorporarse a la naturalez.a como la bateria y los sistemas eléctrico-electrónicos. Por lo tanto, para un sistema de monitoreo de este tipo la responsabilidad ética recaeria en quien observase los monitores. Se sugerirla que el cuadróptero tenga una ruta fija ya sea pasillos o calles predeterminados sin que observe el interior de casas, bancos, etc. y que se hfoiera un software ( de aprendiz.aje automático) de manera que se obtengan datos sin la interve:11ción de un humano.

35

Page 35: TECNOLÓ(~ICO DE MONTERREY®

VII. REFERENCIAS Aeroquad (2011). What BAUD rates to usefor xbee communication? [foro online).

Recuperado de: http://aeroquad.com/showthread.php?5 l 18·-What-BAUD-rates-to-use-for­xbee-communication

Aeroquad (2012). Which PWMfrequency do I use to control my ESC? [foro online]. Recuperado de: http://aeroquad.com/showthread.php?5502-Which-PWM-frequency-do-I­

use-to-control-my-ESC

Amazon (2014). Emax Mt2213 935kv 2212 Brushless Motor for DJI F450X525

Quadcopter Hexcopter(pack of 4pcs). Recuperado de: http://www.amazon.com/Emax­Mt2213-Brushless-Quadcopter-Hexcopter/dp/BOOEDHXZ'SK/ref=sr _ 1 _ 4 ?s=toys-and­

games&ie=UTF8&qid= 1391106926&sr= 1-4&keywords=x525+quadcopter

Amazon (2014). EOS 0606i 6A max ACIDC Charger w/Balancer. Recuperado de:

http://www.amazon.com/E0S-0606i-max-Charger-Balancer/dp/B0036BG9JG/ref=sr _1 _ 1 ?ie=UTF8&qid=1391107714&sr=8-1&keywords=Hyperion+EOS+0606i+AC%2FDC+charger

Amazon (2014). Hyperion G3 Cx 3300 Mah 3S 1 l. 1 V 25C1/45C lithium Polymer Battery. Recuperado de: http://www.amazon.com/Hyperion-G3-Li1hium-Polymer­

Battery/dp/B003YI7D3C/ref=sr _ 1 _9?ie=UTF8&q id= 13 91107 580&sr=8-9&keywords=hyperion+lithium+polymer+battery

Amazon (2014). KootekArduino GY-521 MPU-6050 Module 3 axial gyroscope accelerometer stance tilt. Recuperado de: http://www.amazon.com/K.ootek-Arduino-l\1PU-6050-gyroscope-accelerometer/dp/B008BOPN40

Amazon (2014). Neewer X525 Quadcopter Folding Frame Multicopter Red/BK. Recuperado de: http://www.amazon.com/BestDealUSA-Quadcopter-Folding-Frame­

Multicopter/dp/BOOALME8SC/ref=sr_1_ 4?ie=UTF8&qid=1391106738&sr=8-

4&keywords=frame+quadcopter

Amazon (2014). Propeller 1045/1045R 10 • 4.5 Quad-Rotor Mu/ti Rotor Helicopter.

Recuperado de: http://www.amazon.com/Propeller-1045R-Quad-Rotor-Multi­Helicopter/dp/B006WXUU 11/ref=pd _ bxgy _ t_img_ z

Amazon (2014). SainSmart BMP085 Module Digital Barometric Pressure Sensor BOSCH Arduino ATMEL. Recuperado de: http://www.amazon.corn/SainSmart-Digital-Barometric­Pressure-Arduino/dp/B009 A525QS/ref=cm _ cr _pr _prodw;t_ top

Arduino (2014). Arduino Wireless Shield with XBee Series 2 radios. Recuperado de: http://arduino.cc/en/Guide/ Arduino WirelessShieldS2#. Ux81 Qo V8pRU

Arduino (2014). Compare board specs. Recuperado de: http://arduino.cc/en/Products.Compare

36

Page 36: TECNOLÓ(~ICO DE MONTERREY®

Arduino (2014). MPU-6050 Accelerometer + Gyro. Recupc,rado de:

http://playground.arduino.cc/Main/MPU-6050

Arduino (2014). Physical Pixel. Recuperado de: http://arduino.cc/en/futorial/PhysicalPixel

Basta, P. (2012). Quad Copter Flight. California: California State University.

Best Quadcopter Kits (2014).Quadcoptersfor Beginners Comparison Chart. Recuperado

de: http://bestquadcopterkits.com/quadcopters-beginners/

Bouabdallah, S. y Siegwart, R. (2007). Ful/ Control of a Quadrotor. Swiss Federal Institute ofTechnology. Recuperado de:

http://www.researchgate.net/publication/4297041 _Ful!_ control_ of _a_ quadrotor/file/3deec5 2de6eea9c6d 1. pdf

Britt (2012). Easy DIY Quadcopter Build (Part 3)-Setup. Oddcopter. Recuperado de: http://oddcopter.com/2012/12/27/easy-diy-quadcopter-build-part-3-setup/#rnore-6780

Britt (2012). Quadcopter Wiring. Oddcopter. Recuperado de:

http:/ /oddcopter.com/2012/04/ 13/quadcopter-wiring/

Craigi (2013). Review- Wltoys V959 2.4G 4-Axis 4CH RC Quadcopter With Camera.

Drone Flyers. Recuperado de: http://droneflyers.com/2013/03/review-wltoys-v959-2-4g-4-

axis-4ch-rc-quadcopter-with-carnera/

Cutler, M. (2012). Design ami Control of an Atonomous Variable-Pitch QuadRotor

He/icopter. Massachusetts: Massachusetts Institute ofTechnology.

DiCesare, A., Kyle Gustafson, K. y Lindenfelzer, P. (s.f.) Design Optimization of a Quad

Rotor Capable of Autonomous Flight. Worcester Polythecnic Institute. Recuperado de: http://www.wpi.edu/Pubs/E-project/ A vailable/E-project-030609-124019/unrestricted/MQP _ Report_ Quadrotor _Final%5B 1 %5D.pdf

EngBlaze (2011).We interrupt this program to bringyou a tutoría/ on ... Arduino

interrupts. Recuperado de: http://www.engblaze.com/we-interrupt-this-prograrn-to-bring­you-a-tutorial-on-arduino-interrupts/

EngBlaze (2012). Microcontrol/er tutoría/ series: AVR arui Arduino timer interrupts. Recuperado de: http://www.engblaze.com/microcontroller,-tutorial-avr-and-arduino-timer­

interrupts/

Femández, R. (2012). Análisis y Diseño de Sistemas de Control Digital. México:

McGrawHill. p. 278-280

frank26080115 (2014). RC Quadrotor Helicopter. Instruc1ables. Recuperado de: http://www.instructables.com/id/RC-Quadrotor-Helicopter/? ALLSTEPS

37

Page 37: TECNOLÓ(~ICO DE MONTERREY®

García, J. (2010). Zigbee vs Bluetooth vs Wi-Fi. Ingenio Sólido. Recuperado de:

http://www.ingeniosolido.com/blog/2010/08/zigbee-vs-bluctooth-vs-wi-fi-parte-2/

GeekPhysical (2013). Controlling toy quadcopter(s) with Arduino. Dzl's Evil Genius Lair.

Recuperado de: http://dzlsevilgeniuslair.blogspot.mx/2013/ l l /more-toy-quadcopter­

hacking.html

Good Luck Buy (2014).HobbywingSkywalker 20A 2A-BEC Brushless ESCfor Quadcopter Multicopter 4-Pack. Recuperado de: http://www.goodluckhuy.com/hobbywing-skywa1ker-

20a-2a-bec-brushless-esc-for-quadcopter-multicopter-4-pac:k.html

Hobbywing. (201 O) U ser Manual of Brushless Speed Controller. Recuperado de:

http://www.hobbywing.com/uploadfi1es/sx/file/Manual/HW-SM003ENG.pdf

Hussein, W., Elruby, A., Haleem, H., & EI-Khatib, M. (s.f.). Quad Rotor Design, Simulation and lmplementation. Egypt: Egyptian Arrned Force.

Hyperion (2010). HYPERION G3 Lithium Polymer Batteries. Recuperado de:

http://media.hyperion.hk/dn/g3lipo/

Ingeniería MCI (2013). Familias XBee Serie 1, XBee Serie 2 y XBee 900. Recuperado de:

http://www.xbee.cVdiferencias.html

Invensense (2011). MPU-6000 and MPU-6050 Product Spicification Revision 3.2.

Recuperado de: http://www.cdiweb.com/datasheets/invenscnse/PS-MPU-6000A.pdf

Kaiser, E. (2013). Arduino Quadcopter. Recuperado de: http://hpcas.blogspot.mx/

Mangal, A. (2012). Serial Communication between Arduino and

Marsh, J. (2013). Hacking a Cheap Toy Quadcopter to work with Arduino. Hackaday.

Recuperado de: http://hackaday.com/2013/l 1/19/hacking-a-cheap-toy-quadcopter-to-work­

with-arduino/

Mathworks (2014). Serial Port Devices. Recuperado de:

http://www.mathworks.com/help/matlab/serial-port-devices.html

MATLAB. Recuperado de: http://home.iitb.ac.in/-rahul./lTSP/serial _ comm _ matlab.pdf

McPherson, J. (2005). Complete Guide to lithium Polymer Batteries and liPo Failure Reports. RCGroups. Recuperado de:

http://www.rcgroups.com/forums/showpost. php?p= l 3 l 5 l 99&postcount= 1

Mongkhun, Q. (2012). Wireless Control Quadcopter with Stereo Camera and Self

Balancing. Universiti Tun Hussein Onn Malaysia. Recuperado de: http://eprints.uthm.edu.my/2926/l/mongkhun _ qetkeaw _ l .pdf

38

Page 38: TECNOLÓ(~ICO DE MONTERREY®

Randofo (2014). Arduino Wireless SD Shield Tutorial. Instmctables. Recuperado de: http://www.instructables.com/id/ Arduino-Wireless-SD-Shie'id-Tutorial/

RCM Direct (2014). Electric Speed Controllers (ESC) Explained. Recuperado de: http://www.rcmdirect.co. uk/shop/index.php?main _page=do,;:ument_general _info&products _id=585

RhydoLabz (2014). XBee Explorer Dongle. Recuperado de: https:/ /www .rhydolabz.com/wiki/?p=3408

Rojas, C. (2014). Tutorial Arduino-ConexiónXbee punto apunto. GeekyTheory. Recuperado de: http://geekytheory.com/tutorial-arduino-cCJmenzando-con-xbee/

Rowberg, J. (2013).jrowbergli2cdevlib. Github. Recupera.do de: https://github.com/jrowberg/i2cdevlib/tree/master/Arduin,,/MPU6050

Rowberg, J. (s.f.) /2Cdevlib Device Source and Documen!ation. Recuperado de: http://www.i2cdevlib.com/devices/mpu6050#source

Sherer, K. (2009). Airborne microbots to create wi-fi zones in disaster situations.Gizmag. Recuperado de: http://www.gizmag.com/autonomous-quadcopter-wi-fi-robots/11179/

Sirnonech (2012). How to control a brushless motor through a ESC with Arduino. Recuperado de: http://dronesandrovs.wordpress.com/20 112/11 /24/how-to-control-a­

brushless-motor-esc-with-arduino/

Sparkfun (2014). Bluetooth SMD Module - RN-42. Recupera.do de https://www .sparkfun.com/products/10253

Sparkfun (2014). XBee 2mW Wire Antenna -Series 2 (ZigBee Mesh). Recuperado de: https://www .sparkfun.com/products/ 10414

Sreekumar, Hithesan y Anand (2011). Design and Implementation ofthe Closed Loop Control of a Quad Rotor UAV for Stability. India: A1mita School of Engineering

Sureshkumar, V. y Cohen, K. (2014). Intelligent Fuzzy Flight Control of anAutonomous Quadrotor UAV. University ofCincinnati. Recuperado de: http://www.researchgate.net/profile/Kelly _ Cohen/pub lication/259763369 _ Intelligent_Fuzz y _Flight_ Control_ of _an _Autonomous _ Qua.drotor _ UA V /file/e0b4952dc36d357ae8.pdf

Theba.dfrank (2014). Configu,ring Xbees. Instructables. Recupera.do de: http://www.instructables.com/id/Changing-Xbee-Baud-Rates/? ALLSTEPS

Townsend, K. (2014). Using the BMP085 (API v2). Adafuit. Recuperado de:

https://learn.adafruit.com/bmp085/using-the-bmp085-api-v2

39

Page 39: TECNOLÓ(~ICO DE MONTERREY®

Townsend, K. (2014).Getting Started with the nRFBOOJ Bluefruit LE Brealwut. Adafruit. Recuperado de: https://leam.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le­breakout/introduction

Wise Technologies (2013). Arduino Wireless SD Shield Tutoría/. Recuperado de: http://duino4projects.com/arduino-wireless-sd-shield-tutorial/

VIII. ANEXOS

VIII.1 CÓDIGOS DE PROGRAMACIÓN ANEXO A Programa prueba LED Arduino para esclavo, original de Arduino (2014).

PhysicalPixel (xbeeLEDreceiver).-

const int ledPin = 13; // the pin that the LED is attached to

int incomingByte; // a variable toread incoming serial data into

void setup() {

// initialize serial cornmunication:

Serial. begin(9600);

// initialize the LED pin asan output:

pinMode(ledPin, OUTPUT);

void loop() {

// see ifthere's incoming serial data:

if (Serial.available() > O) {

// read the oldest byte in the serial buffer:

incomingByte = Serial.read();

// ifit's a capital H (ASCil 72), tum on the LED:

if (incomingByte = 'H') {

digitalWrite(ledPin, HIGH);

40

Page 40: TECNOLÓ(~ICO DE MONTERREY®

// ifit's an L (ASCII 76) tum offthe LEO:

if (incomingByte = 'L') {

digitalWrite(ledPin, LOW);

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

ANEXO B Programa para probar el encendido/apagado de 1Jn Led usando Matlab basado en Mangal, A. (2012).

clear ali;

ele;

delete(instrfind( {'Port'}, {'COMS'} ));

%iniciación programa

pserial=serial('COMS','BaudRate',9600);

fopen(pserial);

% inicia programa

sendData='L'; %se puede cambiar por H para encender el LEO

fprintf(pserial, '%c',sendData);

%finaliz.a programa

fclose(pserial);

delete(pserial);

clear ali;

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

41

Page 41: TECNOLÓ(~ICO DE MONTERREY®

ANEXO C Código adaptado del original de Jeff Rowberg p:3Ta obtener las mediciones de traslación y rotación con el sensor MPU 6050.

mpu_6050_ini2.- Se ignoran las primeras mediciones (ruidosas) y posteriormente se guardan mediciones de yaw, pitch y roll para posteriorment1: promediarlas y obtener los offsets. Estos offsets son restados a las nuevas mediciones de manera que la posición inicial en rotación del cuadróptero sea O en los tres ángulos. Cuando se corre (en el baud rate especificado), después de enviar el carácter se deberá esperar algunos segundos para que aparezcan las mediciones [11,12] Para probarlo se hizo la siguiente conexión:

Sensor Vin Gnd SDA SCL lnt

Se necesitan las librerías 12Cdev.h, MPU6050_6Axis_MotionApps20.h y MPU6050.h

#include "12Cdev.h"

#include <A verage.h>

#include "MPU6050 _ 6Axis _ MotionApps20.h"

//#include "MPU6050.h" // not necessary ifusing MotionApps include file

// Arduino Wire library is required if12Cdev 12CDEV _ARDUINO_ WIRE implementation

// is used in I2Cdev.h

#if12CDEV IMPLEMENTATION = 12CDEV ARDUINO WIRE - - -#include "Wire.h"

#endif

// class default I2C address is Ox68

// specific I2C addresses may be passed as a parameter here

// ADO Iow = Ox68 (default for SparkFun breakout and lnvenSense evaluation board)

// ADO high = Ox69

42

Page 42: TECNOLÓ(~ICO DE MONTERREY®

MPU6050 mpu;

//MPU6050 mpu(Ox69); 11 <- use for ADO high

!*

NOTE: In addition to connection 3.3v, GND, SDA, and SCL, this sketch

depends on the MPU-6050's INT pin being connected to the: Arduino's

externa) interrupt #O pin. On the Arduino Uno and Mega 2560, this is

digital 1/0 pin 2 .

• ====*!

/*

NOTE: Arduino vl.0.1 with the Leonardo board generates a compile error

when using Serial.write(buf, len). The Teapot output uses this method.

The solution requires a modification to the Arduino USBAPl.h file, which

is fortunately simple, but annoying. This will be fixed in the next IDE

release. For more info, see these links:

http://arduino.cc/forum/index. php/topic, 109987 .O.html

http://code.google.com/p/arduino/issues/detail?id=958

• ====•!

43

Page 43: TECNOLÓ(~ICO DE MONTERREY®

// uncomment "OUTPUT _ READABLE _ QUATERNION" if you want to see the actual

// quatemion components in a [w, x, y, z] fonnat (not best for parsing

// on a remote host such as Processing or something though)

//#define OUTPUT_READABLE_QUATERNION

// uncomment "OUTPUT_READABLE_EULER" ifyou want to see Euler angles

// (in degrees) calculated from the quatemions coming from the FIFO.

// Note that Euler angles suffer from gimbal lock (for more info, see

// http://en.wikipedia.org/wiki/Girn bal_Iock)

//#define OUTPUT_READABLE_EULER

// uncomment "OUTPUT_READABLE_ YA WPITCHROLL" ifyou want to see the yaw/

// pitch/roll angles (in degrees) calculated from the quatemio,ns coming

// from the FIFO. Note this also requires gravity vector calculations.

// Also note that yaw/pitch/roll angles suffer from gimbal loc:k (for

// more info, see: http://en.wikipedia.org/wiki/Gimbal_Iock)

#define OUTPUT _ READABLE _YA WPITCHROLL

// uncomment "OUTPUT_READABLE_REALACCEL" ifyou want to see acceleration

// components with gravity removed. This acceleration refernnce frame is

// not compensated for orientation, so + X is always + X according to the

// sensor, just without the effects of gravity. Ifyou want accderation

// compensated for orientation, us OUTPUT_READABLE_WORLDACCEL instead.

//#define OUTPUT _ READABLE _ REALACCEL

// uncomment "OUTPUT_READABLE_ WORLDACCEL" :ifyou want to see acceleration

// components with gravity removed and adjusted for the world frame of

// reference (yaw is relative to initial orientation, since no magnetometer

44

Page 44: TECNOLÓ(~ICO DE MONTERREY®

// is present in this case). Could be quite handy in sorne case:,.

//#define OUTPUT _ READABLE _ WORLDACCEL

// uncomment "OUTPUT_TEAPOT" ifyou want output tha1 matches the

// format used for the InvenSense teapot demo

//#define OUTPUT_TEAPOT

#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)

bool blinkState = false;

// MPU control/status vars

bool dmpReady =false;// set true ifDMP init was successfül

uint8_t mpulntStatus; // holds actual interrupt status byte from MPU

uint8_t devStatus; // retum status after each device operation (O= success, !O= error)

uintl6_t packetSize; // expected DMP packet size (default is 42 bytes)

uint16_t fifoCount; // count ofall bytes currently in FIFO

uint8_t fifoBuffer[64]; // FIFO storage buffer

// orientation/motion vars

Quatemion q; // [w, x, y, z] quatemion container

Vectorlntl6 aa; // [x, y, z] accel sensor measurements

Vectorlntl6 aaReal; // [x, y, z] gravity-free accel sensor measurements

Vectorint16 aaWorld; // [x, y, z] world-frame accel sensor measurements

VectorFloat gravity; // [x, y, z] gravity vector

float euler[J]; // [psi, theta., phi] Euler angle container

float ypr[J]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector

45

Page 45: TECNOLÓ(~ICO DE MONTERREY®

// packet structure for InvenSense teapot demo

uint8_t teapotPacket[14] = { '$', Ox02, 0,0, 0,0, 0,0, 0,0, OxOO, OxOO, '\r', '\n' };

int count=O;

float yawTot[50];

float pitchTot[50];

float rol1Tot[50];

float yawüffset=O;

float pitchüffset=O;

float rollüffset=O;

int flag=O;

int count2=0;

//

// = INTERRUPT DETECTION ROUTINE =

//

volatile bool mpulnterrupt = false; // indicates whether MPU interrupt pin has gone high

void dmpDataReady() {

mpulnterrupt = true;

//

46

Page 46: TECNOLÓ(~ICO DE MONTERREY®

// = INITIAL SETUP =

//

void setup() {

// join I2C bus (I2Cdev library doesn't do this automatically)

#if I2CDEV _IMPLEMENTATION = I2CDEV _ARDUINO _ WIRE

Wire.begin();

TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)

#elifl2CDEV _ IMPLEMENTA TION = I2CDEV _ BUIL TIN _FASTWIRE

Fastwire: :setup( 400, true);

#endif

// initialize serial comrnunication

// (115200 chosen because it is required for Teapot Demo output, but it's

// really up to you depending on your project)

Serial.begin(57600);

while (!Serial);// wait for Leonardo enumeration, others continue immediately

// NOTE: 8MHz or slower host processors, Iike the Teensy @ 3 Jv or Ardunio

// Pro Mini running at 3.3v, cannot handle this baud rate reliably dueto

// the baud timing being too misaligned with processor ticks. You must use

// 38400 or slower in these cases, or use sorne kind of externa) separate

// crystal solution for the UART timer.

// initialize device

Serial. println(F("lnitializing I2C devices ... ") );

mpu.initialize();

47

8 ~~ ~ o.,

'O 'O ro -g o ~ ro c.. (,.J E (l,) a .,..,

o >':: ·-~ -.Q 2 .... e: M i ~ .6 ]'

J

Page 47: TECNOLÓ(~ICO DE MONTERREY®

// verify connection

Serial.println(F("Testing device connections ... "));

Serial.println(mpu.testConnection()? F("MPU6050 connection successful") : F("MPU6050 connection failed"));

// wait for ready

Serial.println(F("\nSend any character to begin DMP programming and demo: "));

while (Serial.available() && Serial.read()); // empty buffer

while (!Serial.available()); // wait for data

while (Serial.available() && Serial.read()); // empty buffer again

// load and configure the DMP

Serial. println(F("Initializing DMP ... ") );

devStatus = mpu.dmplnitialize();

// supply your own gyro offsets here, scaled for min sensitivity

mpu.setXGyroOffset(220);

mpu.setYGyro0ffset(76);

mpu.setZGyroOffset(-85);

mpu.setZAcceIOffset(l 788); // 1688 factory default for my test chip

// make sure it worked (retums O ifso)

if ( devStatus = O) {

// tum on the DMP, now that it's ready

Serial.println(F("Enabling DMP ... "));

mpu.setDMPEnabled(true);

// enable Arduino interrupt detection

Serial.println(F("Enabling interrupt detection (Arduino externa) interrupt O) ... "));

48

Page 48: TECNOLÓ(~ICO DE MONTERREY®

11

attachlnterrupt(O, dmpDataReady, RISING);

mpulntStatus = mpu.getlntStatus();

// set our DMP Ready flag so the main loop() function knows it's okay to use it

Serial.println(F("DMP ready! Waiting for first interrupt..."});

dmpReady = true;

// get expected DMP packet size for later comparison

packetSize = mpu.dmpGetFIFOPacketSize();

} else {

//ERROR!

// I = initial memory load failed

// 2 = DMP configuration updates failed

// (if it's going to break, usually the code will be 1)

Serial.print(F("DMP Initialization failed (code "));

Serial. print( devStatus );

Serial. println(F(")") );

// configure LED for output

pinMode(LED_PIN, OUTPUT);

11 = MAIN PROGRAM LOOP=

49

Page 49: TECNOLÓ(~ICO DE MONTERREY®

//

void loop() {

// ifprogramming failed, don't try to do anything

if(!dmpReady) retum;

// wait for MPU interruptor extra packet(s) available

while (!mpulnterrupt && fifoCount < packetSize) {

// other program behavior stuffhere

//.

//.

//.

// ifyou are really paranoid you can frequently test in between other

// stuffto see ifmpulnterrupt is true, and ifso, "break;" from the

// while() loop to immediately process the MPU data

11.

//.

//.

// reset interrupt flag and get INT_STATUS byte

mpulnterrupt = false;

mpulntStatus = mpu.getlntStatus();

// get current FIFO count

fifoCount = mpu.getFIFOCount();

// check for overflow (this should never happen unless our code is too inefficient)

50

Page 50: TECNOLÓ(~ICO DE MONTERREY®

if((mpulntStatus & OxlO) 11 fifoCount = 1024) {

// reset so we can continue cleanly

mpu.resetFIFO();

Serial.println(F("FIFO overflow!"));

// otherwise, check for DMP data ready intenupt (this should happen frequently)

} else if (mpulntStatus & Ox02) {

// wait for correct available data length, should be a VERY short wait

while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();

// read a packet from FIFO

mpu.getFIFOBytes(fifoBuffer, packetSize);

// track FIFO count here in case there is> 1 packet available

// (this lets us immediately read more without waiting for an intenupt)

fifoCount -= packetSize;

#ifdef OUTPUT_READABLE_ QUATERNION

// display quatemion values in easy matrix form: w x y z

mpu.dmpGetQuatemion( &q, fifoBuffer);

Serial.print("quat\t");

Serial.print(q.w);

Serial. print("\t");

Serial. print( q.x );

Serial.print("\t");

Serial.print( q.y);

Serial.print("\t");

Serial.println( q.z);

51

Page 51: TECNOLÓ(~ICO DE MONTERREY®

#endif

#ifdef OUTPUT _ READABLE _ EULER

#endif

// display Euler angles in degrees

mpu.dmpGetQuatemion(&q, fifoBuffer);

mpu.dmpGetEuler( euler, &q);

Serial.print("euler\t");

Serial.print(euler[O]"' 180/M_pl);

Serial. print("\t");

Serial.print(euler[l]"' 180/M_pl);

Serial.print("\t");

Serial.println(euler[2] "' 180/M_pl);

#ifdef OUTPUT _READABLE _YA WPITCHROLL //esta parte se modificó de manera que se tomen varias medidas al principio y promediarlas para calcular el offset

// display Euler angles in degrees

if(count2<3000&&flag O){ //las primeras corridas se ignoran pues es puro ruido

count2++;

else

flag =1;

count2++;

if(count<50 && flag==]){ //mientras que el contador count sea menor a 50 y hayan pasado las primeras corridas se comienzan a guardar los valores en arreglos

52

Page 52: TECNOLÓ(~ICO DE MONTERREY®

mpu.dmpGetQuatemion(&q, fifoBuffer);

mpu.dmpGetGravity(&gravity, &q);

mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

yawTot[count]=ypr[O] * 180/M_pl; //arreglo para guardar mediciones de yaw

pitchTot[count]=ypr[I] * 180/M_pl; //arreglo para guardar mediciones de pitch

ro11Tot[count]=ypr[2] * 180/M_pl; //arreglo para guardar mediciones de roll

count++;

else if(count=50 && flag=!) //una vez que llega a 50 el contador, se proemdian los arreglos respectivamente para obtener sus offsets

yawOffset=mean(yawTot, 50);

pitchOffset=mean(pitchTot, 50);

rollOffset=mean(rollTot, 50);

count++;

//count=O;

else if(count>50 && flag=!) //posteriormente se toman las nuevas medidas y se restan los offsets para tener la referencia en O inicialmente

mpu.dmpGetQuatemion(&q, fifoBuffer);

mpu.dmpGetGravity(&gravity, &q);

mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

Serial.print("ypr\t");

Serial.print(ypr[O] * 180/M_PI - yawOffset);

53

Page 53: TECNOLÓ(~ICO DE MONTERREY®

#endif

Serial.print("\t");

Serial. print(ypr[ 1] • 180/M _ PI - pitchüffset );

Serial.print("\t");

Serial.println(ypr[2] • 180/M_PI - rollüffset);

Serial. print("\t");

else

#ifdef OUTPUT _READABLE_REALACCEL

#endif

// display real acceleration, adjusted to remove gravity

mpu.dmpGetQuatemion(&q, fifoBuffer);

mpu.dmpGetAccel(&aa, fifoBuffer);

mpu.dmpGetGravity(&gravity, &q);

mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);

Serial. print("areal\t");

Serial.print(aaReal.x);

Serial. print(''\t");

Serial. print( aaReal.y);

Serial. print("\t");

Serial.println(aaReal.z);

#ifdef OUTPUT _READABLE_ WORLDACCEL

// display initial world-frame acceleration, adjusted to remove gravity

54

Page 54: TECNOLÓ(~ICO DE MONTERREY®

// and rotated based on known orientation from quatemion

mpu.dmpGetQuatemion(&q, fifoBuffer);

mpu.dmpGetAccel(&aa, fifoBuffer);

mpu.dmpGetGravity(&gravity, &q);

mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);

mpu.dmpGetLinearAccelln World(&aa World, &aaReal, &q);

Serial.print("aworld\t");

Serial.print(aaWorld.x);

Serial.print(''\t");

Serial.print(aa World.y);

Serial. print("\t");

Serial. println( aa World.z);

#endif

#ifdef OUTPUT _ TEAPOT

// display quatemion values in InvenSense Teapot demo formal:

teapotPacket[2] = fifoBuffer[O];

teapotPacket[3] = fifoBuffer[l];

teapotPacket[4] = fifoBuffer[4];

teapotPacket[5] = fifo8uffer[5];

teapotPacket[6] = fifo8uffer[8];

teapotPacket[7] = fifo8uffer[9];

teapotPacket[8) = fifo8uffer[12);

teapotPacket[9] = fifo8uffer[13];

Serial. write(teapotPacket, 14);

teapotPacket[ 11 ]++; // packetCount, Joops at OxFF on purp,Jse

#endif

// blink LED to indicate activity

55

Page 55: TECNOLÓ(~ICO DE MONTERREY®

blinkState = !blinkState;

digita!Write(LED_pIN, blinkState);

***************************··············································

ANEXO D Referencia de barómetro Bmp085_ini.- Este programa, al igual que el del anexo anterior es una modificación de un código original, en este caso el de Townsend, K. (2014). Se deben decargar las librerías Adafruit_Sensor.h, Adafruit_B:MP085.h y Average.h.

Para probarlo se hizo la siguiente conexión:

Sensor Arduino Vcc Gnd SDA SCL

#include <Wire.h>

#include <Adafruit_ Sensor.h>

#include <Adafruit_ BMP085.h>

#include <Average.h>

Adafruit_ BMP085 bmp = Adafruit_ BMP085( 10085);

float zOffset=O;

int tlag=O;

int count=O;

int count2=0;

float zTot[50];

tloat Height;

56

Page 56: TECNOLÓ(~ICO DE MONTERREY®

void setup(void)

{

Serial.begin(57600); //baudrate

//Serial.println("Pressure Sensor Test"); Serial.println("");

/* Initialise the sensor • /

if(!bmp.beginO)

{

/* There was a problem detecting the BMP085 ... check your connections */

Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");

while(l);

void loop(void)

{

/* Get a new sensor event • /

sensors_event_t event;

bmp.getEvent(&event);

/* Display the results (barometric pressure is measure in hPa) */

if ( event. pres sur e)

{

/* Display atmospheric pressue in hPa • /

// Serial.print("Pressure: ");

// Serial.print(eventpressure);

// Serial.println(" hPa");

57

Page 57: TECNOLÓ(~ICO DE MONTERREY®

/* Calculating altitude with reasonable accuracy requires presmre •

* sea level pressure for your position at the moment the data i ~

* converted, as well as the ambient temperature in degress

* celcius. Ifyou don't have these values, a 'generic' value of *

*

* 1013.25 hPa can be used (defined as SENSORS_pRESSURE_SEALEVELHPA *

* in sensors.h), but this isn't ideal and will give variable

* results from one day to the next.

• • •

• You can usually find the current SLP value by looking at weather •

• websites or from environmental information centers near any major •

• airport.

• • •

• For example, for Paris, France you can check the current mean

• pressure and sea level at: http://bit.ly/l6Au8ol •1

/* First we get the current temperature from the BMP085 • /

if ( count2< lOOO&&flag==O){ //las primeras corridas se ignoran pues es puro ruido

count2++;

else

flag =I;

count2++;

if (count<50 && flag==l){ //mientras que el contador count sea menor a 50 y hayan pasado las primeras corridas se comienz.an a guardar los valores en arreglos

58

Page 58: TECNOLÓ(~ICO DE MONTERREY®

float temperature;

bmp.getTemperature( &temperature );

// Serial.print("Temperature: ");

// Serial.print(temperature);

// Serial.println(" C");

/• Toen convert the atmospheric pressure, SLP and temp to altitude •¡

/• Update this next line with the current SLP for better results •¡

float seaLevelPressure = SENSORS_PRESSURE __ SEALEVELHPA;

Height = bmp.pressureToAltitude(seaLevelPressure,

event. pressure,

temperature );

zTot[ count]=Height;

count++;

else if ( count=50 && flag= 1) //una vez que llega a 50 el contador, se proemdian los arreglos respectivamente para obtener sus offsets

zOffset=mean(zTot, 50);

count++;

else if(count>50 && flag=l) //posteriormente se toman las nuevas medidas y se restan los offsets para tener la referencia en O inicialmente

float temperature;

bmp.getTemperature( &temperature );

59

Page 59: TECNOLÓ(~ICO DE MONTERREY®

float seaLevelPressure = SENSORS _pRESSURE __ SEALEVELHPA;

Height = bmp.pressureToAltitude(seaLevelPressure,

event. pressure,

temperature );

Serial.print("Altitude: ");

Serial.print(Height - züffset); //finalmente se despliega la altura medida menos el offset

else

}

Serial.println(" m");

Serial. println('"');

Serial.println("Sensor error");

}

//delay(lOOO);

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

ANEXO E Programas para prueba de ESC

esc_pwmO.- Este programa pennite que se puedan realizar las conexiones entre el microcontrolador, ESC y platafonna previamente a conectar :la bateria

//este programa manda a O (tierra) al ESC (preinicialización)

int escPin = 9; //este es el pin de salida PWM del Arduino

void setup() (

60

Page 60: TECNOLÓ(~ICO DE MONTERREY®

pinMode(escPin, OUTPUn;

void loop() (

analogWrite(escPin, O);

Una vez hechas las conexiones necesarias, se conecta al final el voltaje positivo de control del ESC ( el cable rojo que viene en el conjunto blanco, rojo y negro) a la línea de voltaje positivo de la protoboard (comunicada a los 5V del Arduino). Pasados unos segundos el ESC sonará con beeps en intervalos constantes y se podrá pro,ceder a conectar la batería (a los cables rojo y negro gruesos del ESC). Sonará una tonada y más beeps constantes. Ahora se podrá cargar el siguiente programa.

esc_pwml.- Este programa saca al ESC de modo de programación a modo de control de velocidad. En este caso se da un periodo en alto de 1000 µs el cual mantiene al motor detenido y fuera del modo de programación.

int escPin = 9; //pin de salida de PWM del arduino

int pAlto = 1000; //Éste el periodo en alto del PWM en microsegun,:los.

int pTotal = 5000; //Éste el periodo total del PWM en microsegundos. SOOOµs = 200Hz

void setup() {

pinMode(escPin, OUTPUn;

void loop() V/se hace una generación de pulsos modulada PWM

analogWrite(escPin, 255); / /255 es equivalente a 5V en PWM de A1'duino

delayMicroseconds(pAlto);

analogWrite(escPin, O); //0 es equivalente a OV en PWM de Arduin:>

delayMicroseconds(pTotal-pAlto); //Ést.e es el periodo en bajo del PWM

61

Page 61: TECNOLÓ(~ICO DE MONTERREY®

esc_pwm_pruebas.- En este programa se puede experimentar variando el periodo en alto y al mismo tiempo ver en el Serial Monitor el valor cambiante del potenciómetro al cambiar el ángulo del brazo debido a la elevación por el motor.

Nota: si el motor presenta apagados y encendidos no deseados comentar las instrucciones respectivas a la comunicación serial

int escPin = 9; //pin de salida de PWM del arduino

float Input;

int pAlto = 1000; //Ahora sí se puede variar el periodo en alto (en microsegundos) para hacer pruebas, siempre que sea menor al periodo total.

int pTotal = 5000; //Éste el periodo total del PWM en microsegundos. SOOOus = 200Hz

void setup() {

pinMode(escPin, OUTPUT);

Serial.begin(57600); // ésta es la frecuencia de comunicación serial del Arduino.

void loop() {/ /se hace una generación de pulsos modulada PWM

analogWrite(escPin, 255); //255 es equivalente a 5Ven PWM de Arduino

delayMicroseconds(pAlto );

analogWrite(escPin, O); //O es equivalente a OV en PWM de Arduino

delayMicroseconds(pTotal-pAlto);//Éste es el periodo en bajo del PWM

lnput=analogRead(AO); //se recibe un valor de O a 1023 proveniente del potenciómetro según el ángulo del brazo

Serial.print(lnput); //se imprime este valor en el Serial Monitor dE! esta interfaz

Serial.print("\n");

62

Page 62: TECNOLÓ(~ICO DE MONTERREY®

ANEXO F PD en plataforma de vuelo PD_discreto_plataforma.-Código para implementar control tipo PD en la platafonna de vuelo. La programación de interrupción por timer se obtuvo del código de EngBlaze (2012).

#include <avr/io.h>

#include <avr/interrupt.h>

float uk=O; //output u(k)

float ukml=O; //u(k-1)

float ukm2=0; //u(k-2)

float ek=O; //e(k)

float ekml=O; //e(k-1)

float ekm2=0; //e(k-2)

float Kp= 10;

float Kd=0.00005; //Kd debe ser distinto de O

float T=0.001;

float N=12; /IN debe ser mayor a 10

float Setpoint;

float Input;

float SetPoint;

float flag=lOOO;

int escPin = 1 O;

//int countdown=O;

int pAlto=lOOO; // periodo ancho positivo microsegundos

int periodo=5000;

63

Page 63: TECNOLÓ(~ICO DE MONTERREY®

void setup()( //se programan las interrupciones por timer

pinMode(escPin, OUTPUT};

}

// initialize Timerl

cli(); // disable global interrupts

TCCR1A = O; // set entire TCCR1A register to O

TCCRIB = O; // same for TCCRIB

// set compare match register to desired timer count:

OCR1A = 15999; //para 710us o 15999 para 1 ms

// tum on CTC mode:

TCCRIB i= (1 « WGM12);

// Set CSIO and CS12 bits for 1 prescaler:

TCCRIB J= (1 « CSIO);

// enable timer compare interrupt:

T1MSK1 i= (1 « OCIE1A);

// enable global interrupts:

sei();

void loop()(//la salida en PWM depende del error respecto a la referencia deseada

analogWrite(escPin, 255);

delayMicroseconds(pAlto );

analogWrite(escPin, O);

delayMicroseconds(periodo-pAlto );

pAlto=flag;

1SR(TIMER1_C0MPA_vect) //interrupción por timer que hace el control PD a partir de la ecuación de recurrencias (8)

64

Page 64: TECNOLÓ(~ICO DE MONTERREY®

Input=analogRead(AO);

lnput=Input;

if(Input >1023){//se limita el valor leido de O a 1023

Input=I023;

}

else if (Input<O){

Input=O;

else

SetPoint=20;

ek=Setpoint-Input;

uk=Kp•N•(T/Kd)*ekm2-Kp*(l +N)•( ekm l +ek)-N"T/Kd*ukm2+ukm 1; //ecuación de recurrencias para controlador PD (8)

flag=map(uk,O, l 023, l 000,2000);

if (flag> 1500){ //se limita el periodo alto superiormente de los pulsos a 1500us por seguridad

flag=l500;

else if{flag<IOOO){//se limita el periodo en alto inferiorrnente a 1 OOOus para que no se regrese al modo de programación

flag=lOOO;

else{

ekm2=ekml;

65

Page 65: TECNOLÓ(~ICO DE MONTERREY®

ekrnl=ek;

ukrn2=ukrn l;

ukrnl=uk;

66

Page 66: TECNOLÓ(~ICO DE MONTERREY®

VIII.2 PÓSTER

ANÁLISIS Y SIMULACIÓN DEL COMPORTAMIENTO DINÁMICO DE UN ¡,,,\

- TECNOLÓGICO ~ DE MONTERREY•

Asesor. Dr. Ricardo Femández del Busto y Ezeta

PROBLEMÁTICA:

CUADRÓPTERO

Autores: José Carlos Alcántara Beltrán Héctor Alejandro Jiménez Parra

A01214864 A0\161655

Mayo 2014

El auge tecnológico que están teniendo los drones (Sistemas Aerodinámicos no Tripulados) en la actualidad para tareas no militares ha ido creciendo de forma significativa: como en el aspecto ambiental, que es el monitoreo de fauna y de comunidades ubicadas en sitios de dificil acceso para el ser humano: y de seguridad, en creación de rutas de evaOJación de acuerdo a una situación presentada. es importante conocer a fondo la dinámica de estos aparatos para poder desarrollar su potencial en aplicaciones benéficas a la sociedad.

OBJETIVOS:

El desarrollo de este proyecto se dividirá en dos partes. Los ob¡ebvos para esta primer etapa son los siguientes:

Analizar el comportamiento dinámico y aerodinémico del cuadróplero con base a diferentes propuestas predefinidas. Realizar el modelado del sistema en lazo abierto y simular utilizando herramientas computacionales. Caracterización de sensores y actuadores. Establecer el controlador para cada movimiento y realizar la simulación del sistema en lazo cerrado. Desarrollo de una plataforma para prueba de molar junio con la propela. Establecer comunicación entre el ordenador y el sistema.

Cuadróptero

Diagrama funcional

CONCLUSIONES: La Incursión en esta area ha sido un completo reto, deSde la recolección de información hasta la simulación del sistema en lazo cerrado. Se logró entender el comportamiento dinámico del cuadróptero para asl oblener las ecuaciones de los 6 grados de libertad y poder roodelar el sistema. En la parte del control, se propuso usar controladores tipo PD para el caso de la rotación debido a la necesidad de controlar velocidades angulares, y bpo PI únicamente para el movimiento de traslación. Se caractenzaron !os sensores con el uso de Arduino Uno. pero debido a la complejidad de los programas, se propuso usar Arduino Mega para mayor espacio de código.

RESULTADOS:

.. ~~~ .. al111Mn1111f*> ...

Modelo del Sistema en Lazo Abierto

PLANES A FUTURO:

Prueba de Sensores

• Integrar el sistema aerodinámico con el sistema de control en el Ardulno Mega

• Aplicar una solución para antlvlbraclón. • Implementar el lazo cerrado en el sistema. • Explorar la aplicación de algoritmos de control tipo robusto • Explorar formas alternas de alimentación • Implementar apllcaclón de monltoreo.

67