miliamperios.com

Bootstrap Framework 3.3.6

Más de una docena de componentes reutilizables construidos para proporcionar iconografía, menús desplegables, grupos de entrada, navegación, alertas, y mucho más ...

Todo lo relacionado con el estudio, diseño y funcionamiento de circuitos y componentes electrónicos relacionados con el radio control. Fundado el 4 de Octubre del 2006.

Moderador: Moderadores

#1302012
Hola a todos, me he liado a construir un estabilizador de vuelo casero en base a un arduino mini pro y una MPU 6050.

Este no es un proyecto en el que se ahorre mucho dinero, ya que hay estabilizadores por cuatro perras por ahí, aunque el coste del proyecto es bastante bajo comprando los componentes en los sitios adecuados. El objetivo es hacerme uno para aprender y experimentar, comprarlo hecho es algo que puedo hacer en cualquier momento (si tengo euros, claro XD)

Como ya adelantaba más arriba los componentes a usar son un Arduino Mini Pro: http://arduino.cc/en/pmwiki.php?n=Main/ ... ardProMini, que es una plaquita muy pequeña ideal para este trabajo y una placa que lleva integrado el MPU6050 (GY521: http://playground.arduino.cc/Main/MPU-6050), en principio no hace falta nada más.

En mi caso las dos placas funcionan a 5V, lo que coincide con las tensiones de receptor y servos que yo tengo y me viene perfecto, otras placas funcionan a 3,3V, y necesitan un estabilizador a esa tensión.

El coste puesto en casa es de unos 5 euros, aparte necesitaremos cables y conectores para los servos y alimentación.

La parte de conexiones del hardware es sencilla, hay que meterle al arduino todas las señales desde el receptor que nos interesan (en este caso las de los servos de Alerones y timones, que son tres señales siempre que usemos una Y para alerones, y por lo tanto esto nos ocupará tres entradas. La salida ocupará otros tres pines del Ardu hacia los servos. La conexión de la MPU va por I2C, por lo que ocupa los pines específicos para ello del Mini Pro, que son A4 y A5, además utiliza la entrada digital 2, para manejar las interrupciones.

Aparte de eso habrá que llevar los +5 del variador o circuito aparte al arduino, al receptor a la MPU y a los servos, lo mismo con la masa, es bastante obvio :D

Como de momento no vamos a controlar el motor desde el Ardu, el variador alimentará el receptor directamente, y de las salidas de los servos se alimentará el Ardu y la MPU.

Eso es lo fácil, pondré fotos cuando esté montado todo, ahora vamos a lo complicado, el software.

En principio es bastante sencillo ir a Internet y bajarse ejemplos de código para este proyecto, hay desde lecturas de PPM directamente (hace falta un receptor que nos proporcione esa señal), como para leer las señales PWM que entregan los receptores RC para los servos, también hay muchos ejemplos de regulación PID para estabilizar, librerias, etc.

En mi caso voy a prescindir de usarlas, ya que busco hacerlo yo mismo, pero el que quiera bajarse las librerías de internet y un corta pega de los ejemplos y acondicionarlos al uso especifico del estabilizador de vuelo puede tener el prototipo en marcha en pocas horas.

No obstante voy a hacer dos excepciones, una es la de la librería de control de los servos, ya que viene incluida con el entorno de Arduino y la veo sencilla y práctica, el otro es la librería de acceso a la MPU, lo que merece una explicación aparte en el siguiente post lo pongo.
Última edición por dragoncet el Mar, 30 Dic 2014 12:07, editado 1 vez en total.
#1302013
Los chicos y chicas de Invensense son los fabricantes de este maravilloso circuito integrado: http://www.invensense.com/mems/gyro/mpu6050.html, que integra un acelerómetro junto a un giroscopio, ambos para los tres ejes (XYZ), y por algún motivo de marketing lo anuncian como de seis ejes, además (y ahí radica lo chulo de este circuito) incluye un procesador interno para realizar cálculos sobre las mediciones y dar una salida estable.

Porque el problema de estos circuitos integrados es que dan una salida de datos muy ruidosa, con saltos tremendos que hay que filtrar, para ello se suele usar o un filtro complementario o un filtro de Kalman, que son algoritmos llenos de sumatorios y demás símbolos matemáticos, y que tienen un problema serio en términos de coste de computación (vamos que al procesador le cuesta un rato calcularlos), esto es lo que provoca que muchos proyectos de MPU + Arduino se inicien pero no se terminen, acabando desanimado ante un estabilizador que comienza a estabilizar cuando ya estás recogiendo los pedazos de balsa o corcho del suelo (exagerando un poquito XD).

Pero una cosa está clara, el Ardupilot y el MutiWii funcionan, así que de alguna forma lo hacen, así que investigando un poco uno descubre que el procesador de la MPU6050 es capaz de darnos una salida estable de sus salidas, (es la parte llamada MPU), pero Invensense solo da el código para leerlos de forma restringida a los grandes clientes (me imagino que a Samsung y similares), cosa un poco rara la verdad, es la primera vez que veo a un fabricante de chips que restringe información (perdiendo ventas) sobre sus circuitos.

Pero gracias a la globalización de datos en la que vivimos los que podemos comer todos los días, podemos acceder a trabajos de personas que saben mucho más que uno sobre estos temas (o que tienen mucho tiempo libre para trastear, o que ligan poco, o...), por lo que haciendo ingeniería inversa Jeff Rowberg realizó una librería que hizo publica aquí: https://github.com/jrowberg/i2cdevlib donde se pueden acceder sin mayores problemas a los registros de la MPU, buscando "teapot MPU6050" en google se pueden ver ejemplos funcionales donde representamos un avioncito en pantalla que sigue fielmente la posición de la MPU (originalmente era una tetera, de ahí el nombre).

Si descargamos y cotilleamos el software para aviones de ardupilot, nos encontramos con la librería "Teapot", modificada convenientemente por el equipo de ese proyecto, con lo que se resuelve el misterio de porqué ellos estabilizan rápido y los aficionados de "a pié" no.

Con esto solucionado, podemos pasar a otras cosas del proyecto...
Última edición por dragoncet el Mar, 30 Dic 2014 12:27, editado 1 vez en total.
#1302014
Teniendo ya controlado el tema de sacarle los datos al procesador MPU de forma rápida y limpia (dentro de un orden), podemos pasar a realizar la estructura del proyecto que básicamente sería lo siguiente:
  • Estabilizar segun el valor de una señal auxiliar (en mi caso el canal 5).
    • Si el canal 5 está entre 0% y 25% = No estabilizar.
      Si Ch5 entre 35% y 60% = Estabilizar limitando los ángulos permitidos para aprendizaje.
      Si Ch5 entre 70% y 100% = Estabilizar tipo "Fly By Wire"
    Posteriormente se podrían implementar algunas cosas que creo podrían ser útiles:
    • Sacar la media de compensación de los planos de control vía bluetooth (movil) o USB (PC) para que al estrenar un avión podamos ajustarlos después del primer vuelo, diferenciando entre planeo y vuelo con motor (para comprobar incidencias).
      Instaurar un modo de lanzamiento a mano (Subida a 15º estabilizada mientras el motor sea superior a un %)
Aquí unas fotos de mi invento torturando al pobre AXN Floater:

Lo que tengo cogido con los dedos es la placa con la MPU:
Imagen

La totalidad de los componentes:
Imagen

Un detalle del Ardunino mini pro:
Imagen

A ver en cuanto tiempo lo acabo, antes del 2015 fijo que no... :lol: :lol:
#1303208
Bueno, al poco de publicar las fotos del invento ya tenía el estabilizador funcionando pero sin mando desde la radio, las perspectivas de momento son bastante buenas y creo que lo voy a conseguir, tuve un disgusto en la primera prueba, ya que iba muy leeeeento, de forma que no se podía utilizar en la práctica. Curiosamente se daba al compilar el código desde el portatil, en cambio desde la torre va bien, debo tener alguna configuración mal puesta en el entorno de Arduino en el pequeñín, y no encuentro que es... Al compilar desde la torre funciona perfectamente, a una buena velocidad y sin hacer nada raro en los servos (ni ruidos, ni movimientos aleatorios).

En cuanto esté operativo publicaré el código fuente por si alguien se anima.

De momento estoy esperando una partida de Arduino Mini Pro de Banggood, ya que ahora lo que toca es montar el prototipo con cables soldados, y no con conectores como tengo ahora que meten algo de ruido en las lecturas del gyro, esto me dejará en dique seco unas dos semanas más...

Ya iré contando cuando lleguen.

Saludos.
#1305249
He dejado el tema parado debido a que me pilló la gripe (puñetera epidemia) y me dejó fuera de combate casi dos semanas.

Lo bueno es que ya han llegado las piezas de Banggood, así que puedo continuar este finde, ya que volar no se puede por la alerta de viento que tenemos en Alicante.

Saludos.
#1306415
Como viene siendo normal, una vez hecho lo difícil, los problemas aparecen con lo fácil.

La lectura de la MPU está controlada, el "algoritmo" de control funciona aparentemente bien para estabilizar, pero he chocado en la lectura de las salidas de la radio.

Leerlas las leo, pero con una imprecisión que además es oscilante, lo que en la práctica se traduce en una oscilación de las superficies de control de unos 3mm arriba y abajo, algo completamente inaceptable.

Así que tengo que tirar por otro lado, he conseguido un código muy limpio usando interrupciones para leer las salidas del receptor, en cuanto pueda lo pruebo y comento...
#1306437
Vale, probado y verificado, con el nuevo código la emisora se lee perfectamente, la pena es que el uso de interrupciones puede marear al que no esté acostumbrado a ellas.

Por si alguien está interesado, pongo los enlaces a mi Drive con los archivos, la librería pinchangeint es necesaria para poder detectar interrupciones en más de dos pines en el arduino mini pro y el código, que es exactamente el mismo que el original de rcarduino.blogspot.com de donde lo he sacado, aunque lo he traducido al español para mejor comprensión.

El código lee tres entradas de la emisora, pero es muy fácil ampliarlo a más, de hecho yo pretendo leer cuatro (Alerones, profundidad, timón y un auxiliar que indique si queremos o no estabilizar).

https://drive.google.com/file/d/0B9Tkfo ... sp=sharing

https://drive.google.com/folderview?id= ... sp=sharing

No pongo el código de estabilización todavía porque está muy guarro, pero el sistema de estabilización en versión "Alpha" está muy cerca de ver le luz.

Habrá que buscarle un nombre... Xdd

Saludos.
#1306950
Visto los esperanzadores resultados, me he metido a soldar el prototipo para vuelo, aquí lo tenéis:

Imagen

Lo he montado sobre una lámina de gomaespuma tipo neopreno para que absorba algo las vibraciones del motor.

Ahora falta llevarlo al campo de vuelo y acordarme de coger una bolsa para llevar a casa los pedazos del AXN :mrgreen: :mrgreen: :mrgreen:

A ver si de aquí al fin de semana afino un poco más el programa y vemos que hace volando.

Saludos.
#1307399
Pues de momento no he conseguido levantar el AXN, menos mal que no ha roto la lipo...

Antes de echarle toda la culpa al estabilizador, diré que el AXN y yo no nos llevamos muy bien en los despegues...

Saludos.
#1307411
Pues el AXN ya está reparado (bendita cola caliente), pero el tiempo no acompaña, ni lo va ha hacer hasta la semana que viene...

...Y yo la semana que viene estoy de viaje.

Así que esto lleva camino de convertirse en un proyecto a largo plazo. :mrgreen:

Luego a la tarde voy a publicar el código que tengo hecho por si alguien se anima a ir trasteando, porque funcionar funciona, aunque no todo lo bien que a mi me gustaría.

Saludos.
#1310479
Hoy he conseguido volarlo en buenas condiciones, después de que el otro día descubriera que tenía programada la entrada del timón de profundidad al revés dentro de la rutina de estabilización (vamos que al darle parriba se iba pabajo), y claro, la piña en el despegue estaba asegurada si se hacía con el estabilizador conectado en el eje Y, cosa que hice :mrgreen: :mrgreen:

Vale; una vez solucionada esa cuestión, y una vez que ha dejado de soplar el tremendo viento de estas últimas semanas, la prueba de hoy ha sido satisfactoria, pero no definitiva.

Los datos previos: El AXN lleva el motor y la hélice cambiados por otros mayores, esto en la práctica quiere decir que aparte de subir como una bala, el par del motor tiende a girar el cuerpo del avión de forma tremenda hacia la izquierda, sobre todo a tope de motor. Una vez arriba e iniciado el planeo, el avión funciona de forma completamente normal, hace lo que se espera de un pequeño velero como él.

En las pruebas con el estabilizador conectado y dando motor, se aprecia que el modelo es algo más manejable que cuando desconectamos el estabilizador (lo llevo en el canal 5 de la siguiente forma: 0% No estabiliza, 50% estabiliza alerones (X), y 100% estabiliza alerones y profundidad (X y Z), el eje Y de dirección de momento no hago nada con el. Pero desde luego sigue teniendo el alabeo a izquierdas que hay que compensar con el stick, aunque menos.

En las pruebas con el estabilizador conectado y motor a 0, el planeo es casi automático, puedes soltar los mandos y el chisme sigue volando sin hacer nada raro, pero sin el estabilizador y debido al tipo de avión, se comporta casi igual. Es decir si ponemos el avión a cuchillo y soltamos los mandos, en los dos casos el AXN volverá a la horizontal (por el diedro de las alas), pero con el estabilizador lo hace más deprisa.

Hay que tener en cuenta que ahora mismo la sensibilidad que tiene puesta es muy escasa, con lo que notarse se nota, pero no mucho.

Se nota más la estabilización en Z, lo lleva completamente plano con motor o sin el.

La siguiente prueba, una vez que ha quedado claro que se puede volar con el estabilizador conectado y no se estrella por si solo, consistirá en que el canal 5 lo que haga es proporcionar sensibilidad al estabilizador a través de uno de los potenciómetros de la emisora, y más adelante instalar el modulo bluetooth para poder cambiarlo en tierra e ir probando, sin necesidad de llevar el portátil al campo de vuelo, ya que en este caso con el movil android y el blueterm se puede hacer sin problemas.

Otra opción sería programar un sistema de compensación automática de ganancia tipo ardupilot, pero me da a mi que puede acabar con el avión en pedacitos en las pruebas y me da "yuyu" hacerlo.

Lo que no quiero es poner tres potenciometros para la sensibilidad, ya que esa solución ya está a nivel comercial de forma barata y no es mi objetivo replicarla.

En fin, la prueba ha sido satisfactoria, pero queda camino por recorrer, aunque la dirección parece la correcta.

Saludos.
Última edición por dragoncet el Dom, 22 Mar 2015 13:05, editado 1 vez en total.
#1310482
Dije que publicaría el código, pero se me olvidó... :oops: :oops:

Ahí va: https://drive.google.com/folderview?id= ... sp=sharing

Si alguien le mete mano que me mande una copia, porfa.

Saludos.
#1352654
dragoncet escribió:Dije que publicaría el código, pero se me olvidó... :oops: :oops:

Ahí va: https://drive.google.com/folderview?id= ... sp=sharing

Si alguien le mete mano que me mande una copia, porfa.

Saludos.
Excelente aporte, mil gracias!

Has hecho algo mas? alguna version mejorada del firmware o algo?
podrias publicar tambien el esquema de conexiones?

Gran aporte de verdad, un saludo.

¡Elija que Addons deben funcionar, utilice sólo lo que realmente necesita!