Video: Arducopter Beta 3


Aquí les dejo un video del Arducopter funcionando, informo sigue siendo Beta. Aunque conforme voy resolviendo problemas, me voy encontrando con más.

Puede hacer una formula matemática para detectar siempre la fuerza de gravedad, lo cual me permite diferenciar entre una aceleración por movimiento a una aceleración por fuerza gravitatoria terrestre, recuerden el acelerómetro no distingue entre movimiento del aparato o la fuerza de atracción que ejerce la tierra sobre los objetos, en otras palabras: supongamos que el Arducopter se ladee a la izquierda, este me lo detectara como gravedad y no como un movimiento de aceleración en dirección izquierda, no es lo mismo.
Por otro lado, tengo problemas al momento de encender el motor principal, este causa lecturas indeseadas en el acelerómetro, pueden ser dos razones: Vibraciones, o Ruido (interferencia electromagnética), el cual hace que los acelerómetros se atonten. Si es ruido; tendré que blindar el acelerómetro, si es vibración; tendré que inventar algún tipo de amortiguador que adsorban las vibraciones.

¿Me pueden ayudar? :cry:

Intente poner el codigo, pero esta muy largo, mejor luego les subo el sketch...

Que onda hispanoparlantes? Al parecer no hay mucho apoyo para los usuarios de arduino que hablamos espanol, en fin.
Voy a tratar de promocionarlo por lo menos en Mexico, que ni lo conocen aqui, y si puedo mas adelante distribuirlo tambien.

Volviendo al arducopter, ya solucione el problema de las vibraciones y otras cositas, se puede decir que ya es el Beta 4, chequen mi blog para fotos y detalles:

http://gizmobits.com/2007/11/18/mejoras-en-el-arducopter/

No se desperen, mis detalles son vagos, por que no quiero perder tiempo en algo que a lo mejor voy a cambiar despues, estoy documentando lo mejor que puedo, ya que termine les prometo todos los detalles del proyecto. La verdad que he aprendido muchisimo y espero que los descubrimientos les sirva futuros disenadores de aparatejos voladores.

Hola,

lo primero decir que ayer mismo me compré el Arduino Diecimila así que no tengo mucha experiencia con este micro en concreto, pero he visto que es muy fácil de desarrollar y espero avanzar pronto. Uno de los proyectos que tenía en mente intentar es exactamente lo mismo que estás haciendo tú, un sistema de estabilización para helicópteros.

En cuanto a helicópteros, tengo el Honey Bee King 2, que es de paso variable, es más difícil de controlar (yo lo tengo hace poco y me meto unas leches....) pero aún así espero poder montar algo similar a lo tuyo. En lugar del acelerómetro de la wii tengo dos MMA7261 que pedí a freescale como muestra gratuita, son encapsulados QFN pero quiero montar en breve una plaquita para leer directamente los valores X, Y, Z por las entradas analógicas. Aún así todavía tengo que pensar bastante cómo será el esquemático ya que mi situación es diferente a la tuya y puede que incluso el arduino se me quede corto de I/O (el helicóptero es de 6 canales).

Como ves soy muy novato en todo esto, y tengo algunas dudillas sobre el funcionamiento de los acelerómetros (cómo poder detectar combinaciones de giros y desplazamientos...) no obstante espero ir resolviendo esto poco a poco. De momento no puedo ofrecerte mucha ayuda, pero si consigo algún avance te lo haré saber. Leyendo tu blog has resuelto alguna de mis dudas iniciales, y el sistema de amortiguación que tienes me parece perfecto, pero al tener distinto heli y distintos acelerómetros está claro que los diseños y algoritmos de control no pueden ser iguales.

Un saludo

Saludos,

Mira yo tambien estoy empezando investigaciones, tampoco tengo mucho en conocimientos, pero si se lo basico en electronica digital y un poco de analogica. Para empezar me acabo de dar cuenta que con el acelerometro no me va a servir de mucho por si solo, se ocupa tambien un gyro de dos ejes, este ayuda que el heli no rote, y en conjunto con el acelerometro solo sirve para crear un horizonte virtual. El gyro no sabe donde queda la tierra, lo tienes que calibrar, el acelerometro si, pero detecta los giros del aparato vagamente, inclusive utilizando ecuaciones vectoriales basicos, puedes calcular la posicion del heli, solo que te repito no es muy preciso. Mi problema es que los gyros, si estan caros... y es lo que me limita, estoy tratando de hacer todo lo mas economico posible.

Ahora mi helicoptero es muy dificl de controlar y de muy mala calidad, es una helicoptero muy econimico Chino. Misma razon por lo que lo done a la ciencia, para experimentar con el y saber las capaidades del arduino. Es mas con decir que las aspas principales son estaticas, controla su altura por revoluciones del motor y no por la inclinacion de las paletas, lo mismo en el aspa de la cola, tengo experiencia manejado de gasolina y se manejan como mantequilla a comparacion a este, de hecho no espero que vuele, solo era para probar el arduino, ya que solo es el inicio de una serie de pruebas, hasta llegar hacer un androide, compleamente autonomo, con video camara y colocarle en un on-screen display (OSD) como el del link: http://www.dpcav.com/xcart/product.php?productid=16146&cat=24&page=1, con el OSD, puedes enviar junto con el video de la mini camara informacion del helicoptero, como altura, velocidad, posicion GPS.
Inclusive estaba pensando que con el radio control puedes controlar un servo que active un boton digital, y que en el OSD te valla marcando un opcion cada vez que presiones el boton (como un menu): Velocidad, altura, posicion y al mismo tiempo con otro canal conectado arduino, dependiendo de lo que seleccionaste en el menu, controlando un joystick analogico, podras enviarle datos al que el arduino, dependiendo de la posicion del joystick sera el valor que deseas, como la altura, entonces la computadora del arduino sabra que hacer, si subir mas o hacer equis intruccion que le programes remotamente.
Ahora te iba a comentar que te vallas haciendo de un GPS, ya que todos estos utilizan el mismo protocolo internacional de comunicacion, y el GSP te da informacion como, velocidad, altura, direccion (360 grados) N,S,E,W y claro la posicion global y no es dificil de manejarhttp://www.arduino.cc/playground/Tutorials/GPS.
Ahorita estoy investigando unos sensores mucho mas precisos para medir la altura, http://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf este componente tambien analogo, mide la presion del aire, ya hise calculos y sirve para medir hasta 1200 metros de altura, nada mal...
Los GPS que te recomiendo son el Parallax GPS, que lo puedes encontrar en parallax.com y el mejor de todos, el RangeVideo | FPV Video Solutions. Long Range Reconnaissance Plane lo usan mucho los de RC, incluso es compatible con el OSD que te puse anteriormente.
En fin me gustaria encontrar un solucion de OSD personalizable, que yo le pudiera enviar lo datos que yo desee por serial, o I2C.

Ahora en cuanto a tus acelerometros, voy a investigarte, pero por mientras hechale un vistazo a: http://www.arduino.cc/en/Tutorial/AccelerometerMemsic2125

Por otro lado la fase 1 del arducopter ya la he terminado, asi que pronto pondre mis resultados para que los cheques. No he podido por falta de tiempo. Y pues el resto sera despues, esto es solo el inicio y me puedo tardar meses, incluso anios.
Lo unico que realmente yo aporte, fue que a diferencia de poder controlar un servo, que hay miles de ejemplos aqui, yo escribi un codigo que hace lo contrario, en lugar de conectar un servo y controlarlo, puedes conectar la computadora del helicoptero y leer las seniales que envias del radio control, esto es muy util, ya que podemos utilizar el mismo sistema del servo que activa un boton digital, para decirle al arduino que me deje el aparato en piloto automatico o me lo deje en modo manual. Tal vez no me explique bien, pero ya pondre fotos y ejemplo de mis ideas.
Otra cosa que aporte fue el hecho de poder programar con el arduino el Boarduino (una version mas barata y pequenia), muy util, lo podemos comparador como los carros que van a la agencia y los conectan a la computadora y hacen un diagnostico del vehiculo, es igual podras ver los datos en tiempo real la lectura de los sensores e inclusive reprogramar el chip, desconectas y listo a volar otra vez.
Hise esto porque dudo que quieras usar tu diecimila en el helicoptero, aparte de que es mucho mas pesado, un accidente y te saldra mas caro. Por otro lado el Boarduino es mas liviano, y en caso de romperlo es mas economio reemplazarlo, la desventaja es que no se programa solo, igual que el mini arduino (este ultimo aun mas caro).

Hola,

lo primero decir que ayer mismo me compré el Arduino Diecimila así que no tengo mucha experiencia con este micro en concreto, pero he visto que es muy fácil de desarrollar y espero avanzar pronto. Uno de los proyectos que tenía en mente intentar es exactamente lo mismo que estás haciendo tú, un sistema de estabilización para helicópteros.

En cuanto a helicópteros, tengo el Honey Bee King 2, que es de paso variable, es más difícil de controlar (yo lo tengo hace poco y me meto unas leches....) pero aún así espero poder montar algo similar a lo tuyo. En lugar del acelerómetro de la wii tengo dos MMA7261 que pedí a freescale como muestra gratuita, son encapsulados QFN pero quiero montar en breve una plaquita para leer directamente los valores X, Y, Z por las entradas analógicas. Aún así todavía tengo que pensar bastante cómo será el esquemático ya que mi situación es diferente a la tuya y puede que incluso el arduino se me quede corto de I/O (el helicóptero es de 6 canales).

Como ves soy muy novato en todo esto, y tengo algunas dudillas sobre el funcionamiento de los acelerómetros (cómo poder detectar combinaciones de giros y desplazamientos...) no obstante espero ir resolviendo esto poco a poco. De momento no puedo ofrecerte mucha ayuda, pero si consigo algún avance te lo haré saber. Leyendo tu blog has resuelto alguna de mis dudas iniciales, y el sistema de amortiguación que tienes me parece perfecto, pero al tener distinto heli y distintos acelerómetros está claro que los diseños y algoritmos de control no pueden ser iguales.

Un saludo

ahi te va el esquema:

El primer recuadro indica las configuracions del chips, si g1 esta en estado bajo (low, o volts), y g2 tambien en estado bajo, tu acelerometro podra medir como maximo 2.5G con una sensibilidad de 480 milivoltios (.480 Volts) que es suficiente, si g1=bajo y g2=alto, podras medir hasta 3.3G, con una sensibilidad de 360 milivoltios por cada G.

Ahora segun el DataSheet del componente, cuando un eje (XYZ)no detecta ninguna aceleracion te dara una voltaje de 1.65 volts (0G), en el caso de que tengas la configuracion de 2.5G maximo, si tu aceleras positivamente hasta 2.5G (.480 volts X 2.5G), te subiera el voltaje maximo 1.2 volts, que si lo sumas a 1.65 volts seria 2.85 volts. Si al eje que sea le das un aceleracion negativa de 2.5, recibiras un senial de .45 Volts que es la resta de 1.65 volts - 1.2 volts (-2.5G). Esos son los rangos maximos en este caso, que deberas tomar en cuenta al programar el arduino, obviamente, tambien existen los rangos intermedios :P. Recuerda que el arduino tiene rangos de 0 a 5 volts, tu componente utiliza rango de de .45 volts a 2.85 volts, en cada eje. Por lo tanto si el arduino divide (digitaliza) 5 volts entre 1023 valores (10 bits), Vamos a calcular el rango de valores de tu acelerometro, si divides 5 / 1023 = .0049, lo que significa que aumenta 1 decimal por cada .0049 volts que recibe, si el acelerometro tiene un rango de 2.40 volts desde -2.5G hasta +2.5G, entonces podras jugar con rangos digitales de 0 a 489 aproximadamente, en donde 244 decimales signfica 0Gs, -2.5 es 0 en decimales y 489 es +2.5G, ok????

ahora por ultimo, antes de conectar los 3 ejes del acelerometro a las entradas analogicas del arduino, debes de ponerles un resistencia de 1k, y una capacitor de .1 uf y este a tierra, para evita interferencia, al igual que en la entrada de voltaje, necesitars un 7833, para regular un voltaje de 3.3 voltios y no quemes tu acelerometro. Por ultimo el pin de Sleep deb estar en estado alto (3.3) para que funcione (no olvides poner una resistencia de 120 0hms a tierra, ya que debe ser una senial digital de 3.3 no una corriente de 3.3). Si vas seleccionar el modo de 2.5 G los pines g1 y g2 solo conectalos a tierra.

Para mi punto de vista te va a salir mas caro el caldo que el plato fuerte. Mejor utiliza el acelerometro de wii y este maneja rangos de 0 a 1023, el doble que el tuyo, mas exacto, ademas ya viene super compacto (incluyendo filtros, capacitores, etc) y solo gastarias 2 analogos, en lugar de 3 y a aparte tienes dos botones digitales que puedes utilizar despues. Ademas el wii utiliza la tecnologia I2c, que te permite conectar por los mismos dos cables hasta 127 componentes mas, funciona como los USBs. Solo 20 dlls vamos.... Te evitaras dolores de cabeza...

Hola, gracias por la respuesta,

en cuanto a los acelerómetros supongo que al final acabaré comprándome uno de la wii, la verdad es que simplifica enormemente las cosas, no obstante a pesar de que los de freescale sean caros, a mí me han salido gratis ya que los pedí como samples, además donde trabajo tenemos una máquina cnc para hacer la pcb así que espero que me salga todo gratis.

A pesar de estar convencido de comprar el de la wii, primero quiero experimentar con los que tengo, incluso aunque sea necesario poner un multiplexor analógico para ahorrar entradas. Lo que se me ha ocurrido es que puedo emplear los 2 acelerómetros que tengo a la vez, de esta forma, si los monto en la misma placa, separados una distancia conocida, se pueden calcular también giros sobre el eje Z gracias a la diferencia de aceleración que habrá entre ambos sensores. Gracias a este montaje se podría prescindir del giróscopo y al tener dos acelerómetros supongo que la medida sería más precisa. Ya sé que para este fin también puedo usar el giróscopo que tengo con el helicóptero, pero de momento sólo estoy experimentando y antes de hacer el montaje en el heli quiero probar diferentes cosillas...

Lo de usar la diecimilia con el helicóptero, desde luego que no lo voy a hacer, la compré porque me pareció perfecta para experimentar, pero cuando realice el montaje final lo haré todo en una pcb propia, comprando un atmel168 y todo lo necesario.
No obstante, aunque estoy decidido a desarrollar este proyecto (me parece muy interesante), yo también me lo tomo como algo a medio-largo plazo, sé que un desarrollo como estos se mide en meses cuando menos...

Una vez tenga montada la placa con los acelerómetros te mandaré los esquemas y ya te digo qué tal funciona. Recientemente yo también me he hecho una web y cuando publique algo decente ya te pondré el enlace, de momento está "en construcción"

Un saludo

A no pues a todo dar, que daria yo por tener una maquinita de esas... jeje. ::slight_smile: ha y por cierto en TI te regalan samples tambien de hasta 10 unidades por cada componente y tienen un multiplexor que te podria ayudar y reguladores de voltaje en mini encapsulado... y SI solo deseas estabilizar el helicoptero, no hace falta el arduino, solo necesitas unos gyros de futaba y es todo, haran todo el trabajo por ti. Por otro lado las lecturas y controles tanto del cerebro del helicoptero como el de los servos se hacen mediante los pines digitales, aun asi no ocupas controlar todos los servos, es mejor que tengas el control directo del rotor principal y el de cola, en otras palabras solo conectarias al arduino dos entradas que vienen del circuito del heli y dos salidas a los servos X y Y (adelante, atras y derecha, izquierda). En fin, de hecho en el Wii, si hagarras los vectores X Y Z, los multiplicas al cuadrado cada uno, lo sumas y les sacas raiz, te da como resultado la gravedad neta que detecta, sin importar a donde gires el helicoptero, muy util para distinuir entre una aceleracion por movimiento y una "aceleracion" que en realidad es la fuerza de la gravedad causada por una rotacion.

Muy interesante esa teoria del doble acelerometro, no es por hecharte la sal, pero; sumando el rango de datos de tus acelerometros es muy corta, y sumando las vibraciones del helicoptero (si es de gasolina) no te va a servir ningun acelerometro. Dudo que las ligas te ayuden ;D. Estoy investigando y se que si se puede, por que en algun lado lo lei, es que puedes ajustar los rangos de 0 a 1023 (10 bits) del arduino exactamente al rango de tus acelerometros, para sacarle todo el jugo, pero no le he encotrado y no he preguntado aqui porque en este foro nadie me pela.
CUalquier cosa que ocupes hechame un grito por aqui, por cierto, te paso el link del Boarduino, ahi viene ya los diagramas para que no mas lo metas a la maquina he imprimas, soldas y a usar Boarduino - Breadboard-compatible Arduino Clone

Disculpa la ortografia, teclado americano de laptop y son las 3:44 AM por aca. :sunglasses:

Mira un ejemplo de multiplexores analogos http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1138666403

SN74LV4051A data sheet, product information and support | TI.com (samples)

Saludos,
Estaba navegando por ahí y encontré una pagina “Open Souce” donde están hacienda pilotos automáticos para RC. He estado investigando y los acelerómetros para helicóptero no van a funcionar, pero hay una segunda opción: Por medio de sensores infrarrojos.

Es mas barato el hardware, pero mas difícil de programar?. Además la pagina esta repleta de buenas ideas que podemos aplicar con arduino, estoy pensado hacer un Wiki de Arduino y RC.

Hechale un ojo: PaparazziUAV

Funciona de una forma interesante, el cielo siempre es más frio, que el suelo, entonces con sensores IR a los costados, detecta los cambios de temperatura, entonces puede determinar su inclinación, es la misma tecnología que utiliza el dragonFly, un helicoptero autonomo, que no utiliza acelerometros por el mismo problema:

http://www.rctoys.com/rc-products-catalog/RC-HELICOPTERS-DRAGANFLYER-COMPARE-ALL.html

No entiendo porqué dices que los acelerómetros no servirán... ¿has llegado a algún problema serio en el desarrollo? ¿lo dices por las vibraciones?

Si el ruido por vibraciones es muy fuerte, ¿has considerado utilizar un filtro de kalman? Filtro de Kalman - Wikipedia, la enciclopedia libre
he de decir que no he utilizado nunca ese filtro (digital por software) pero es de uso común en sensores con mucho "ruido blanco"

Puedes ver una aplicación de este filtro en acelerómetros aquí http://coecsl.ece.uiuc.edu/ge423/spring05/group3/website/kalman_info.htm

Incluso he podido encontrar un filtro de kalman escrito específicamente para el acelerómetro de la wii http://www.gamasutra.com/view/feature/1494/wheres_the_wiimote_using_kalman_.php?page=4 donde podrás encontrar fórmulas y código

Desde luego tú vas muy por delante de mí (yo todavía no he montado mi placa con los acelerómetros) así que tú verás en qué punto estás y si te merece la pena seguir con los acelerómetros o cambiar a otra tecnología, pero si te digo mi opinión, soy bastante más escéptico en cuanto a los sensores IR que en cuanto a los acelerómetros...

Un saludo

Saludos,
:o Oh mucho gracias por el tip, definitivamente tienes mas experiencia en cuanto electronica. Si había escuchado sobre los filtros de Kalman, pero solo había visto su aplicación en dispositivos GPS, sobre todo para helicópteros. Lo de mi problema con el acelerómetro si es por las vibraciones que son causadas por el motor, no se como describirlo, pero los servos se mueven como locos. Voy intentar lo del filtro y te digo que tal me va.
Por otro lado estoy diseñando el sistema de “Fly by Wire” del helicóptero, y mejorando el código para leer las señales PPM del heli. También como estoy intentando meterle un buen de cosas, voy a utilizar dos arduinos para que se dividan el trabajo y que se comuniquen por medio de TWI. Por lo visto voy a ocupar un helicóptero más grande $$$. :stuck_out_tongue: