f Proyecto: Diseño y construccion de drone ~ Ingenieria a nivel industrial

Visita mi canal de youtube

domingo, 16 de julio de 2017

Proyecto: Diseño y construccion de drone


Introducción

Muchos sistemas integrados utilizan sensores que combinan un acelerómetro y un giroscopio. Quadcopter es uno de los ejemplos de eso. Ya-construido baratos como un juguete quadcopters están disponibles en e-bay en torno a $ 25 ~ $ 30, pero muchos aficionados y AVID programadores AVR construir sus propios quadcopters. Pensamos que construir nuestro propio quadcopter nos daría una buena oportunidad para aprender sobre acelerómetros, giroscopios, comunicaciones inalámbricas y control de motores. ¡También, podríamos tener un juguete fresco de alta tecnología al final del proyecto!
Diseño de alto nivel

Quadcopter


Un quadcopter es un multicopter levantado y propulsado por cuatro rotores. Los motores están montados en el mismo plano, en el helicóptero, formando un cuadrado. Esto permite que este quadcopter levante verticalmente sin girar sobre sí mismo. Existen varias ventajas para los helicópteros cuádruples sobre helicópteros comparables. El hecho de que estén implicados cuatro motores reduce el tamaño mínimo de las hélices en cada motor. Esto significa que en caso de que el helicóptero alcance algo, el daño es significativamente menor que si un helicóptero de tamaño similar se estrellara. La figura siguiente muestra cómo se montan los motores. La dirección de rotación es crítica para el correcto funcionamiento de un quadcopter.



source: wikipedia

Todos los motores tienen que girar a la misma velocidad para una elevación vertical; Sin embargo, los motores 1 y 3 tienen que girar en sentido opuesto a los motores 2 y 4. Esto es necesario para compensar la aceleración angular generada por cada motor. De esta manera la aceleración angular total debe ser cero, manteniendo el quadcopter stable .

Según Wikipedia, la dinámica de vuelo es la ciencia de la orientación y control de vehículos aéreos en tres dimensiones. Roll, pitch y yaw como se muestra en la imagen de abajo son los tres parámetros críticos de la dinámica de vuelo, que son los ángulos de rotación en tres dimensiones sobre el centro de masa del objeto volador. En nuestro proyecto, utilizamos nuestro chip IMU para medir estos valores y también empleamos el sistema PID (control proporcional integrador derivativo) del laboratorio 4 para ajustarlos. Los movimientos de balanceo, tono, guiñada y aceleración (arriba y abajo) se controlan mediante un joystick de Xbox.


source: wikipedia

Acelerómetro y giroscopio

Un acelerómetro es un dispositivo electromecánico que mide las fuerzas de aceleración. Hay un tutorial excelente en la web en http://www.instructables.com/id/Accelerometer-Gyro-Tutorial/step3/Combining-the-Accelerometer-and-Gyro/
Expliquemos brevemente cómo funcionan los acelerómetros y los giroscopios (un resumen del sitio web). Sea el vector R en el siguiente diagrama el vector de fuerza que el acelerómetro mide. Rx, Ry y Rz son proyecciones del vector R en los ejes X, Y y Z.


source: http://www.instructables.com

Cada acelerómetro tiene un nivel de voltaje cero-g (se puede encontrar en una hoja de datos), que corresponde a 0 g. Deje que VzeroG sea el nivel de voltaje 0g y entonces el cambio de voltaje desde la tensión de cero-g, DeltaVoltsRx, es Rx VzeroG. Para convertir el valor en g (9,8 m / s ^ 2), necesitamos aplicar la sensibilidad del acelerómetro en mV / g (se encuentra en una hoja de datos). Finalmente,
Rxg = (Rx-VzeroG) / Sensibilidad
Ryg = (Ry-VzeroG) / Sensibilidad
Rzg = (Rz-VzeroG) / Sensibilidad
Ahora bien, si queremos calcular la inclinación del quadcopter respecto al suelo, podemos calcular el ángulo entre el vector R y el eje Z. Se definen los ángulos entre los ejes X, Y, Z y el vector de fuerza R como Axr, Ayr y Azr como en el siguiente diagrama:


source: http://www.instructables.com

Del diagrama anterior, deducimos que
CosX = cos (Axr) = Rx / R
Cosy = cos (Ayr) = Ry / R
CosZ = cos (Azr) = Rz / R
Axr = arccos (Rx / R)
Ayr = arccos (Ry / R)
Azr = arccos (Rz / R)
Cada canal de giroscopio mide la rotación alrededor de uno de los ejes X, Y y Z. Definiremos Rxz como la proyección del vector de fuerza inercial R en el plano XZ y Axz como el ángulo entre el eje Z y Rxz. El giroscopio mide la tasa de cambios de los ángulos como Axz en grados / s. Al igual que el acelerómetro, aplicamos la tensión y la sensibilidad de velocidad cero del giroscopio (mV / (deg / s)) para obtener RateAxz = (GyroXZ VzeroRate) / Sensibilidad


source: http://www.instructables.com

Desafortunadamente, los datos del acelerómetro no se pueden confiar 100% debido a la sensibilidad del acelerómetro a la vibración y al ruido mecánico. Giroscopio también tiene problemas como la deriva incluso cuando la rotación se detiene Así que, combinamos los datos del acelerómetro y los datos del giroscopio para una mejor precisión.
Primero definimos un vector Rest = [RxEst, RyEst, RzEst] como la salida final que queremos. Rest es el valor corregido basado en los datos actuales del giroscopio y los datos estimados anteriores. También defina Racc = [RxAcc, RyAcc, RzAcc] como un vector medido actualmente por el acelerómetro. Luego, Rest (0) = Racc (0). Supongamos que hacemos mediciones regulares a intervalos de tiempo iguales de T segundos y Rest (n-1) es nuestra estimación anterior cuando estamos en el paso n. El valor obtenido del giroscopio y una estimación previa se define como Rgyro = [RxGyro, RyGyro, RzGyro]. Del diagrama anterior, podemos obtener
(Axz) = Rx / Rz => Axz = atan2 (Rx, Rz)
Axz (n - 1) = atan2 (RxEst (n - 1), RzEst (n - 1))
Axz (n) = Axz (n - 1) + RateAxz (n) * T
RateAxzAvg = (RateAxz (n) + RateAxz (n-1)) / 2
Rgyro | = SQRT (RxGyro ^ 2 + RyGyro ^ 2 + RzGyro ^ 2)
RxGyro = sin (Axz (n)) / SQRT (1 + cos (Axz (n)) ^ 2 * tan (Ayz (n)) ^ 2)
RyGyro = sin (Ayz (n)) / SQRT (1 + cos (Ayz (n)) ^ 2 * tan (Axz (n)
RzGyro = Signo (RzGyro) * SQRT (1 - RxGyro ^ 2 - RyGyro ^ 2)
Finalmente usamos un promedio ponderado para obtener Rest (n):
Resto (n) = (Racc * w1 + Rgyro * w2) / (w1 + w2)
Resto (n) = (Racc + Rgyro * wGyro) / (1 + wGyro) donde w2 / w1 = wGyro.
Como último paso normalizamos la última ecuación para obtener RxEst (n) = RxEst (n) / R donde R = SQRT (RxEst (n) ^ 2 + RyEst (n) ^ 2 + RzEst (n) ^ 2).
I2C (interfaz de dos hilos)

Inter-Intergrated Circuit (marca registrada) es un bus multi-maestro de un solo terminal de computadora inventado por Philips. Tiene una velocidad máxima de transferencia de 400kHz. I2C consta de sólo dos cables, SCL (reloj) y SDA (datos). SCL sincroniza todas las transferencias de datos y sólo un dispositivo maestro puede conducir esta línea. Ambas líneas SDA y SCL son de drenaje abierto, lo que significa que los dispositivos sólo pueden conducir sus salidas bajas pero no altas. Así, como se ve en el siguiente diagrama, se necesitan resistencias pull-up.



source: http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html

Hay dispositivos maestros y esclavos en el bus I2C (normalmente un maestro y unos pocos esclavos). Un esclavo no puede iniciar una transferencia a través del bus I2C, pero ambos dispositivos pueden transferir datos a través del bus I2C. Cuando un maestro quiere hablar con un esclavo, emite una secuencia de inicio en el bus como en el siguiente diagrama. SDA se permite cambiar sólo cuando la línea SCL es alta. SDA necesita ser estable sin un cambio cuando se están transfiriendo los datos. Las secuencias de inicio y parada marcan el comienzo y el final de la transmisión de datos.



source: http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html

La secuencia de datos transmitidos consiste en 7 bits para una dirección, 1 bit para un comando de lectura / escritura y 1 bit para ACK (acuse de recibo), 9 bits en total. Hay algunas bibliotecas I2C disponibles en la web, y estamos usando twi.c y twi.h
Diseño del programa / hardware

Sparkfun.com ofrece un tablero cómodo y pequeño que tiene un acelerómetro y un giroscopio en él: IMU Combo Board Digital - 6 grados de libertad ITG3200 / ADXL345. A continuación se muestra el esquema de nuestra placa de circuito que incluye el chip de sensor, un chip de conversión de nivel, un receptor, clavijas para motores y tomas de encabezado para nuestra placa MCU y un LCD para propósitos de depuración solamente.
·         Level converter
·         Brushless servo motors
·         Software design

Program/Hardware Design

Sparkfun.com offers a convenient and tiny board that has both an accelerometer and a gyroscope on it: IMU Digital Combo Board - 6 Degrees of Freedom ITG3200/ADXL345. Below is the schematic of our circuit board that includes the sensor chip, a level converter chip, a receiver, pins for motors and header sockets for our MCU board and an LCD for debugging purposes only.








Convertidor de nivel

Nuestro MCU es accionado por la batería de 7.4V y salidas 5V. La IMU que usamos toma 3.3V de entrada, por lo que necesitamos un cambiador de nivel de voltaje (de 5V a 3.3V). Logic Level Converter BOB-08745 de sparkfun.com es muy barato y hace el trabajo. Incluso una manera más barata sería utilizar tres diodos en lugar del convertidor de nivel.




Servomotores sin escobillas

Aunque es más difícil de controlar motores sin escobillas en comparación con los motores de cepillado, hemos decidido utilizar servo motores sin escobillas para los siguientes beneficios:

Más torque por peso
Más par por vatio (mayor eficiencia)
Mayor fiabilidad
Ruido reducido
Mayor vida útil (sin cepillo ni erosión del colector)
Reducción global de la interferencia electromagnética (EMI)
La forma más fácil de programar los controladores de motor es usar una de esas tarjetas de programación de ESC de HobbyKing como se muestra a continuación.




La siguiente imagen muestra las especificaciones del motor en detalle. Aquí podemos ver que el motor M1818 / 25 dibuja 35 vatios. Esto significa que usando una batería de 2 celdas (7.4v) los motores dibujarán 4.73 Amp. Esto significa que la batería 1050mah durará 1,05 / (4,73 * 4) = 3 minutos con los motores a toda velocidad. Suponiendo que los motores necesitan estar a la mitad de la velocidad para que el cuádruplo flote, el tiempo total de vuelo será entre 3 a 6 minutos.







Software design

Our overall program is depicted in the diagram below:



Tenemos cuatro tareas principales que realizamos constantemente como a continuación:

Leer Gyro a 200Hz
Leer Acelerómetro a 200Hz
Controles de vuelo a 100Hz
Leer el receptor a 50Hz
El software para este proyecto se basó en el proyecto en línea llamado de ArduCopter. Este ArduCopter es un quadcopter basado en Arduino. El hecho de que existiera el ArduCopter nos aseguró que nuestro proyecto era factible. Este proyecto en línea quadcopter es OpenSource, esto significa que nuestro uso de su código todavía tiene que ser OpenSource.


Para transferir el código ArduCopter al microcontrolador Atmega644 era necesario convertir las bibliotecas Arduino. Esta fue la parte más complicada del proyecto, sin embargo también fue la parte que más nos benefició.

SerialHardware.h, Servo.h y Device_I2C.h fueron las bibliotecas más importadas que convertimos en atmega644. El Servo.h nos permitió crear varias señales PWM de 50Hz con un ancho de pulso de 1ms a 2ms. Esta biblioteca fue muy optimizada y permitió que 12 de estas señales PWM sean controladas con un solo temporizador de 16 bits con una resolución de 2us. Esto fue muy útil ya que el atmega644 tiene sólo 6 salidas PWM cableadas y con una resolución mucho más pequeña y frecuencias más altas. Controlar la velocidad en los controladores del motor es tan fácil como controlar un servo (después de haberlos programado).

SerialHardware.h era una simple interfaz de uart, sin embargo la conversión de la biblioteca nos permitió minimizar el código de Arducopter para que funcione en el atmega644.

Finalmente Device_I2C.h es una biblioteca que proporciona funciones que utilizan protocolo para interfaz de dos hilos. Esto se utilizó para comunicarse con la tarjeta del sensor. Esta biblioteca nos permitió utilizar simples funciones de lectura y escritura a las líneas I2C sin preocuparnos por la interfaz de bajo nivel, en main ().

En la carpeta del proyecto es posible ver los siguientes archivos:

AQMath.h
Este archivo contiene todas las funciones que realizan operaciones matriciales, es decir, matrixInverse3x3 (). Estas operaciones se utilizarán al calcular la cinemática del cuádruplo.

Acelerómetro.h
Este archivo contiene las funciones de encabezado para el siguiente archivo, esto se hizo de manera que para que el Arducopter sea flexible a diferentes acelerómetros, las funciones reales estarán en el Accelerometer_ADXL345.h.

Accelerometer_ADXL345.h
Este archivo contiene las funciones que inicializa el acelerómetro usando el protocolo I2C, también contiene todas las funciones que interactúan con el acelerómetro, incluyendo measureAccel () y otras útiles como evaluateMetersPerSec (). Esta última función depende no sólo de la aceleración, sino también de la diferencia de tiempo entre lecturas.

AeroQuad.h
Todas las variables generales se definen en este fichero, esto se utiliza para aislar el código principal de las variables asociadas con las características de quadcopter, y las variables de tiempo.
DataStorage.h
Este archivo contiene las funciones que leen y escriben en EEPROM incluyendo funciones que leen y escriben flotantes. Esto permite que el programa mantenga los valores de PID después del ciclo de pwer, permitiendo que el quadcopter permanezca siempre calibrado.

Device_I2C.h
Este archivo contiene todas las funciones necesarias para implementar un protocal de dos hilos, permitiendo que las funciones de acelerómetro y giroscopio llamen a los sensores sin preocuparse por el protocolo de comunicación.

FlightCommandProcessor.h
Este fichero contiene una sola función denominada readPilotCommnads, esta función garantiza que los motores sólo estén armados bajo ciertas condiciones y también que algunos de los controladores configuren el modo de configuración.

FlightControlProcessor.h
Este archivo copntains las funciones más importantes para el buen funcionamiento del quadcopter, contiene todas las funciones que corrigen el error para las velocidades del motor. También se asegura de que las señales de los motores nunca pasen encima o debajo de la anchura de pulso 1ms a 2ms.

FlightControlQuadX.h
Este archivo define el diseño físico del quadcopter, numerando los motores de tal manera que los ejes X, Y y Z se alineen correctamente.

FourtOrderFilter.h
Este archivo contiene las funciones que preforman un filtro Chebyshev de cuarto orden para los valores del sensor. Esto se hace para que las vibraciones se amortiguan lo que permite un vuelo más suave.

GlobalDefined.h
Este archivo sólo contiene la definición de los ejes para que a lo largo del proyecto puedan ser mencionados como 'XAXIS' en lugar de un número.

Giroscopio.h
Este archivo contiene los encabezados para los dos archivos siguientes. Esto se hizo para que el giroscopio en el Arducopter puede ser intercambiable.

Giroscopio_ITG3200.h
Este archivo contiene todas las funciones que interactúan con el giroscopio. Contiene funciones como calibrateGyro (), para que el giroscopio se inicialice correctamente.

Gyroscope_ITG3200Common.h
Este archivo contiene la función común entre los giroscopios, que contiene el measureGyro real (), que devuelve los valores reales del girocompás. También contiene funciones para detectar la deriva giroscópica compensando con la información del acelerómetro.

HeadingHoldProcessor.h
Este archivo contiene todas las funciones que aseguran una guinada estable.

Cinemática.h
Este archivo contiene los archivos que convierten toda la velocidad y rotación en valores psysically significativos reales. Esto significa que, por ejemplo, los valores que provienen del acelerómetro se convertirán en metros por segundo al cuadrado.

Cinemática_ARG.h
Este archivo también contiene funciones muy importantes que stabelize el quadcopter. Estas funciones convierten los argumentos para el control de vuelo en valores físicos reales ya filtrados y procesados ​​para que el quadcopter se estabilice correctamente.

Motors.h
Este archivo contiene la declinación de los números de motor y es el encabezado para las funciones que escriben a los motores. Las funciones reales estarán en el siguiente archivo. Esto se hace de modo que el método usado para escribir a los motores se independe de la función real.

Motors_PWM.h
Este archivo contiene las funciones de control del motor. Estas funciones aprovechan el archivo servo.h para crear el pwm necesario para controlar el motor. También en este archivo se escribe el reloj interno ISR, lo que significa que cada milisegundo el reloj incrementará una variable llamada AbsoluteTime, esta variable será utilizada por la mayoría de las funciones como un reloj interno. Sólo se desbordará cada 71 minutos.

PID.h
Este archivo contiene todos los cálculos PID. Esto se tomó de la página arduino.cc y se convirtió para el Atmega644, basado en el laboratorio 4 de ECE 4760.

Receptor.h
Este archivo define todos los valores iniciales para todo el parámetro de recepción del receptor RF. También incluye todas las variables globales que van a ser afectadas por la interfaz humana, como las velocidades Throttle, X, Y y Z.

Twi
Este archivo contiene todas las funciones de bajo nivel que permiten al microcontrolador comunicarse utilizando la interfaz de dos hilos. Estas funciones se incluyen en el Device_I2C.h anterior. El Device_I2C es una interfaz de alto nivel para que en el código principal no tengamos que preocuparnos por los detalles más bajos que simplifican el código.

Volver arriba

Protocolo de comunicación inalámbrica

El transmisor y el receptor que utilizamos son TWS-BS-6 y RWS-374-3. Su rango de frecuencia es 434MHz.
Enviamos 4 bytes de información a la vez. Checksum es (Addr + Data) y cuando el receptor recibe 4 bytes, agrega el segundo y el tercer bytes y compara la suma con Checksum para ver si hubo algún error en la transmisión.
Sincronización | Addr | Datos | Suma de control
Enviamos solamente 15 tipos diferentes distintivos de datos para controlar los motores. 0, 1, 8, 9 para el valor numérico de la velocidad de un motor, Y para guiñada, P para paso, R para rollo, U para arriba y abajo y / para separar conjuntos de datos para cada motor. Por ejemplo, podemos enviar 1U32 / 2Y53 / 3R119 / 4P54. Para una transmisión precisa, es mejor enviar un byte que esté equilibrado con el mismo número de 0s y 1s. Sin embargo, este esquema corta la velocidad de transmisión a la mitad porque para enviar un byte de 10010101, necesitamos romperlo en dos cuatro bits y rellenarlos con 0110 y 1010 respectivamente (por ejemplo, complementos de 1001 y 0101) y enviar dos bytes, 10010110 y 01011010. Para evitar esta sobrecarga y aún garantizar una alta velocidad de transmisión precisa, elegimos hábilmente los patrones de bits para 15 datos que están perfectamente balanceados.
Resultados

Nuestro quadcopter y el stand de prueba estaban físicamente bien construidos de la manera que planeamos. El peso total del chasis era bastante más ligero de lo que esperábamos y los motores eran bastante potentes para el tamaño de nuestro quadcopter. Nuestro protocolo de comunicación inalámbrica funciona a la más alta velocidad de 2400 baudios. A pesar de que podíamos comunicarnos con el quadcopter de forma inalámbrica, la estabilidad de la misma no podía ser totalmente confiable, por lo que construimos un ver-saw como soporte de prueba y zip-amarró el quadcopter a ella durante la mayoría de nuestros vuelos de prueba. Responde bastante bien a las órdenes, y los motores son rápidos para ajustar los valores de guiñada, paso, balanceo y aceleración. Sin embargo, cuando se despegan del suelo, los motores abruptamente ejercen demasiado acelerador, y sin ser atados a la prueba, el quadcopter podría volar y chocar contra los obstáculos.
Conclusión

Aunque construimos un quadcopter de trabajo, hay mucho espacio para muchas mejoras. En primer lugar, podemos hacer que sea mucho más estable para que podamos dejarlo volar libremente en un lugar abierto, incluso con los espectadores alrededor. Podemos mejorar la precisión de nuestro protocolo inalámbrico para que sea posible volar el quadcopter sin cables desde muy lejos.

Consideraciones de propiedad intelectual: Utilizamos extensamente varias bibliotecas de Arduino. Todos ellos son de código abierto y pertenecen al dominio público, por lo tanto no violamos las normas de propiedad intelectual.
Consideraciones éticas: Planeamos publicar el sitio web de nuestro proyecto en el sitio web Cornell.edu. Por lo tanto, tuvimos cuidado de seguir de cerca el Código de Ética de IEEE. Nuestra preocupación número uno fue la seguridad de nuestro miembro del equipo, compañeros de clase y cualquier observador de nuestro proyecto durante todo el curso del proyecto y especialmente en la demostración del proyecto. Nuestro quadcopter es muy potente (motores fuertes) y tiene cuatro palas de hélices girando rápido. Por esta razón, hemos probado principalmente el quadcopter con cremallera atada a un puesto de prueba y para la comunicación inalámbrica y las pruebas de vuelo, hemos utilizado un amplio laboratorio con mucho espacio libre y muy poca gente alrededor. A medida que obtuvimos mucha ayuda de otros ingenieros que generosamente donaron sus códigos fuente, con la esperanza de beneficiar a otros compañeros estudiantes de ingeniería y aficionados, dejamos nuestro proyecto como una fuente abierta. Cualquier persona que esté interesada en construir su propio quadcopter es bienvenido para usar, modificar o expandir nuestro proyecto. También buscamos la crítica constructiva de sus compañeros ingenieros para que podamos mejorar nuestro proyecto en el futuro. A lo largo del proyecto, no lesionamos ni sobornamos a nadie. Creemos que cumplimos con nuestro objetivo de adherirnos al Código de Ética de la IEEE.
Consideraciones legales: Nuestro transmisor y receptor son siempre altos cuando no se transmiten datos. Esto viola una de las restricciones legales de la FCC que los transmisores y receptores deben ser bajos cuando no hay transmisión de datos. Podemos resolver fácilmente este problema añadiendo simplemente un inversor (que consiste en un transistor y una resistencia) al transmisor y al receptor. Deberíamos haber sido más cuidadosos y un control minucioso de las restricciones legales de la FCC al comienzo del proyecto.
Apéndice

Para descargar el archivo zip de los códigos fuente, haga clic aquí.

Esquemas del tablero IMU

Detalles del costo del proyecto




Data sheets
·         Accelerometer
·         Gyroscope
·         Transmitter
·         Receiver
Vendor sites
·         http://www.sparkfun.com
·         http://www.hobbyking.com
Code/designs borrowed from others
Background sites/paper































































0 comentarios:

Publicar un comentario