Abro un nuevo hilo para explicar el desarrollo de la electrónica del multiwiicoptero ya que considero un tema que debe ir por separado del proyecto que llevo a cabo del Triwiicoptero.
Debo añadir que básicamente intento recopilar información de terceros y sobre ella aplicar las mejoras que considero necesarias. Toda la información que recopilo aquí es de proyectos de código librey en todos los casos pondré las fuentes de información para respetar al máximo a sus desarrolladores:
Links de interés:
Link de la página original del proyecto.: Está en inglés pero muy bién detallado. En esa misma página podeis encontar los links de descarga de los códigos y los GUI (interface gráfica de configuración y verificación), así como esquemas electrónicos y un pequeño foro. Para empezar recomiendo leerse toda la información que aparece.
Link Hilo principal RCGroups. Este hilo tiene más de 200 páginas y es un rollo leerselo todo. Aún así es una muy buena fuente de información detallada sobre problemas concretos. Además el creador del proyecto da avances de los upgrades que aplica. Recomiendo echarle un vistazo a las últimas páginas y de vez en cuando ponerse al día.
Link Hilo Buildlogs RCGroups: En este hilo hay un poco más de información muy interesante con imágenes de montajes electrónicos, chasis y configuraciones. No son muchas páginas de momento y es bueno echarle un vistazo.
Elección de materiales:Arduino: Es un proyecto de desarrollo libre de un microcontrolador Atmel montado en unas placas que facilitan el cableado con pins o otras placas llamadas
shields. Además este microcontrolador lleva precargado un bootloader que facilita mucho la programación. Esta programación recibe el nombre de Processing. El processing es un lenguaje de programación derivado del C que permite el uso de librerias para controlar dispositivos (p.e.: servos, lcd's,...).
Para este proyecto se puede usar cualquier Arduino que equipe el Atmel 328. Esta versión es imprescindible ya que el código es demasiado largo para el 168 (16 Kb del 168 contra 32 Kb del 328). Tambiés es recomendable aunque no imprescindible que sea de 16Mhz y 5 voltios. Si alguien tiene un 168 por casa y quiere probarlo, es posible reducir el código quitando partes prescindibles para que quepa, pero hay qeu saber hacerlo.
Básicamente hay 3 modelos que nos serán útiles: el Pro 328/5V/16Mhz, el ProMini 328/5V/16Mhz y el Duemilenove/UNO



Donde comprarlos:
Más barato y total confianza:
Sparkfun. Es la tienda on-line número uno en experimentación electrónica. Tienen de todo con una calidad altísima, muy buen soporte casi todo es de desarrollo y código libre. (los links de las fotos son de esta web)
En España:
BricoGeek. Basicamente son importadores de Sparkfun. No tienen un catálogo muy amplio, pero sirven en 24 horas (pagandolo, claro). Son serios. Yo he tratado con ellos alguna vez.
Se aceptan sugerencias.
Sensores: Este proyecto destaca por el bajo coste de los sensores (entre otras cosas).
Giros:WiiMotioPlus: Esta esta
tienda de ebay podeis conseguir el WMP por unos 7 euros. Es una copia. También puede usarse el original que sale por unos 20 €. Comprar el original no es una garantía de mejor funcionamiento, aunque hay copias que no acaban de funcionar bién. En el hilo de RCgroups teneis fotos de las distintas versiones de la placa del WMP. Se da el caso que un mismo vendedor de ebay puede suministrar distintas versiones. En la web de
Tuconsola.com tienen una versión no original por 13 € que es la que yo estoy usando en el prototipo. Va etiquetada como WÜ y funciona bién. Más adelante explicaré el cableado y montaje.
Acelerómetros:
Edito este apartado para añadir una opción más:
BMA020: Es un nuevo acelerómetro de 3 ejes fabricado por Bosh. Destaca su muy bajo coste, mejor estabilidad ante vibraciones y mayor sensibilidad y resolución. Es comparable en prestaciones al ADXL345, pero mucho más económico (3 $ el BMA frente a 19 $ el ADXL, precio solo chip). Actualmente puede encontrarse en
ELV Electrónics. La página está en alemán pero se puede traducir con Google y hacen envios a España. También podeis pedirlo a un usuario de RCgroups por compra múltiple.

Uploaded with
ImageShack.usNintendo Nunchuk: Es el mando secundario de la Wii. Como en el caso del WMP, en ebay hay muchos y muy baratos (desde 3€ puesto en casa) este sensor no es obligatorio, aunque aporta la opción de autoestabilización. En este caso no hay reportados distintos funcionameintos entre el original y las copias, con lo cual hay libertad de elección. Yo uso uno original para las pruebas (tengo que devolverselo a mis hijos cuando termino a la espera del que he comprado en ebay).
Otros componentes para el montaje:
Además del Arduino y de los sensores, para este proyecto, son necesarios otros componentes electrónicos elementales. En este apartado os pondré lo que yo he usado para mi proyecto y cada uno que lo adapte a sus necesidades.
-Placa para circuitería: Es necesario hacer una placa donde soldar todos los componentes, conectores de ESC, servo, WMP,... Esta placa puede diseñarse a medida y hacerla en circuito impreso o usar una placa para prototipado pre-perforada con isletas. Esta placa de prototipado es una placa de fibra de vidrio o baquelita de distintos tamaños que lleva una matriz de agujeros y en cada agujero una isla de cobre para soldar. También las hay que llevan pistas que unen las islas. Hay que usar pequeños cables para hacer los puentes de unión entre islas. Realmente es un trabajo de chinos (para hacer mi prototipo he tardado unas 4 horas) pero permite hacer modificaciones a posteriori de forma muy fácil, añadir componentes,... Si todo va bién, tengo previsto hacer una placa de circuito impreso, pero de momento, tendré que contentarme con esto.

-Tiras de pines: Son unas tiras de 40 pines que se pueden cortar facilmente. Se sueldan a la placa y permiten conectar servos, ESC, arduino ... Estan los pines macho y los pines hembra y tienen una distáncia standard. Si teneis que comprar, coged unas cuantas tiras ya que siempre sirven para todo. Las hay de muy baratas y de caras. Mirad por ebay.

-Componentes electrónicos varios: Para este proyecto no son imprescindibles, pero si que aportan prestaciones muy interesantes. Son los condensadores, resistencias, estabilizadores de tensión, leds,... En este caso lo mejor es buscar en una tienda local ya que tienen un coste mínimo y no merece la pena comprorlo por internet. Además hay miles de formatos y valores. Si alguien tiene dificultad en encontar estos componentes, me ofrezco a comprarlos yo y mandárselos cobrando solo los costes (sin ánimo de lucro), ya que a veces en algunas partes de la geografía es difícil encontar una tienda de componentes electrónicos bien surtida. Más adelante especifico la lista de todos.
Montaje:El montaje de la placa es muy simple si se usa la confuguración básica con un Arduino Pro mini. Os adjunto un diagrama que he modificado ya que he incluido unos cambios que se comentan en el foro y que yo los he probado y funcionan mucho mejor. La modificación que he introducido es todo lo rojo. Los valores de los componentes son: r4y5 1Kohm, C1 2,2 microF, C2 1 microF y el regulador de tensión LM7833 en la versión cilíndrica del encapsulado. Estos cambios permiten tener una señal mucho más limpia en el bus I2C que comunica los sensores con el Arduino. Además alimenta los sensores con 3,3 voltios (aunque alimentados a 5 también funcionan) que es la alimentación nativa de estos. El condensador C1 es de tántalo (un tipo de condensador polarizado). Luego cuelgo unas fotos del montaje y los componentes.

Para empezar el montaje debemos desensamblar el Wii Motion Plus. La carcasa lleva dos tornillos con cabeza de 3 puntas (si, si 3 puntas). Este tornillito es el standard de Nintendo para todas sus consolas. Aunque el WMP no sea original, es muy probable que lleve estos tornillos. Por Internet venden destornilladores para sacar estos tornillos, incluso hay tutoriales que enseñan como linar una llave Allen o un destornillador normal para convertirlo en 3 puntas. Otra solución es buscar uno plano que encaje en el hueco. Yo, por mi parte tengo una cajita de puntas especiales ara hackear consolas que incluye esta punta. Tened en cuenta que nunca más vamos a necesitar volver a montarlo...

Una vez abierto nos encontramos con la plaquita que está sujetada con unas pestañas de plático a la carcasa. Much cuidado al hacer palanca en esas pestañas, ya que si somos demasiado contundentes y se escapa la herramienta, nos podemos cargar la placa. Lo mejor es usar los dedos y listo.

El siguiente paso es quitar los dos conectores. Dependiento de la versión, nos podemos encontrar muchas combinaciones de tipos de cable, conector a la placa y longitud. Yo recomiendo desoldar los cables del conector del Nunchuk y cortar lo mas largos posible los cables que van a ir al Arduino. En el caso del WMP de la foto, estos cables van reforzados con un conector. Si ese es vuestro caso, mucho mejor.
La siguiente imágen os la pongo para que veais las magnitudes de las placas, el Arduino mini pro, el WMP y el adaptador a USB

El siguiente paso es cojer las tiras de pines (tanto macho como hembra) y cortarlas a la longitud adecuada con unos alicates de corte. En mi caso he cortado dos tiras de 12 pines para el lateral del Arduino y otra de 6 para conectar el adaptador a USB, y otra tira hembra de 6 pines para el FTDI (adaptador USB). Las do tiras largas las voy a soldar por debajo y la de 6 por la parte de arriba del Arduino.

El siguiente paso va a ser planificar como pondremos los componentes en la placa.

Inicialmente tengo previsto montar una electronica sin el Nunchuk, pero voy a preveer su posterior conexión. El la placa hemos de ubicar el Arduino, que irá sujeto con los pines soldados a la placa principal, la placa del WMP, que irá sujeta aprovechando los dos agujeros de las pestañas con unos tornillos M2 o M2,5. Tiene que estar muy bién fijado ya que si no vamos a tener muchos problemas con las vibraciones. Hemos de preveer además todos los conectores que tenemos que poner para poder conectar los 3 ESC y el servo o los 4 ESC o los 6 ESC (depende de la configuración que vayamos a usar), los conectores que vayan al transmisor (5 canales + positivo y negativo) y futura conexión al Nunchuk. Además voy a pones 4 pads antivibraciones que he sacado de unos servos. En este punto debemos reflexionar sobre donde colocamos los conectores ya que si están cerca del pin del Arduino, nos ahorraremos cables, soldaduras y problemas.
Añado un post super interesante de Nosepo para recopilar toda la info en el primer post:Para programar el Arduino hay que utilizar un cable usb ftdi de la misma tension que la version del Arduino, 3V o 5V.
Tenemos que bajarnos el Programa de programación del Arduino (arduino-0022).http://arduino.googlecode.com/files/arduino-0022.zip
Hay que bajarse el archivo siguiente:http://multiwii.googlecode.com/svn/tags/MultiWii_1prebis6.zipUna vez descomprimido, vemos dos carpetas:MultiWiiConf_1prebis6
/ application.windows / MultiWiiConf_1prebis6.exe ----->
Programa de monitorizacion/ajuste de la placa Multiwii.
MultiWii_1prebis6 / MultiWii_1prebis6.pde ----->
Archivo a programar en el Ardunio.En el Arduino 0022, en File, abrimos el archivo "MultiWii_1prebis6.pde" y empezamos a modificarlo, a nuestro gusto y necesidad. Cuando lo tengamos modificado le damos a guardar y teniendo el FTDI conectado al Arduino, le damos al UPLOAD. A los pocos segundos los leds del FTDI y del Arduino empezaran a parpadear y poco despues en el programa Arduino0022, podrá "UPLOADING DONE" y ya estará programado.Voy a explicaros un poco cada parte del codigo que se puede modificar, lo demas no debeis tocarlo.Esta es la parte configurable, sin modificar del code 1pre6bis/*******************************/
/****CONFIGURABLE PARAMETERS****/
/*******************************/
/* Set the minimum throttle command sent to the ESC (Electronic Speed Controller) */
/* This is the minimum value that allow motors to run at a idle speed */
//#define MINTHROTTLE 1300 // for Turnigy Plush ESCs 10A
#define MINTHROTTLE 1120 // for Super Simple ESCs 10A
/* The type of multicopter */
//#define GIMBAL
//#define BI //experimental
//#define TRI
#define QUADP
//#define QUADX
//#define Y6
//#define HEX6
//#define FLYING_WING //experimental
#define YAW_DIRECTION 1 // if you want to reverse the yaw correction direction
//#define YAW_DIRECTION -1
#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP
//#define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones
#define PROMINI //Arduino type
//#define MEGA
//****** advanced users settings *************
//enable internal I2C pull ups
#define INTERNAL_I2C_PULLUPS
/* The following lines apply only for a pitch/roll tilt stabilization system */
/* It is not compatible with Y6 or HEX6 */
/* Uncomment the first line to activate it */
//#define SERVO_TILT
#define TILT_PITCH_MIN 1020 //servo travel min, don't set it below 1020
#define TILT_PITCH_MAX 2000 //servo travel max, max value=2000
#define TILT_PITCH_MIDDLE 1500 //servo neutral value
#define TILT_PITCH_PROP 10 //servo proportional (tied to angle) ; can be negative to invert movement
#define TILT_ROLL_MIN 1020
#define TILT_ROLL_MAX 2000
#define TILT_ROLL_MIDDLE 1500
#define TILT_ROLL_PROP 10
/* I2C accelerometer */
//#define ADXL345
//#define BMA020
//#define BMA180
/* I2C barometer */
//#define BMP085
/* ADC accelerometer */ // for 5DOF from sparkfun, uses analog PIN A1/A2/A3
//#define ADCACC
/* The following lines apply only for specific receiver with only one PPM sum signal, on digital PIN 2 */
/* IF YOUR RECEIVER IS NOT CONCERNED, DON'T UNCOMMENT ANYTHING. Note this is mandatory for a Y6 setup */
/* Select the right line depending on your radio brand. Feel free to modify the order in your PPM order is different */
//#define SERIAL_SUM_PPM PITCH,YAW,THROTTLE,ROLL,AUX1 //For Graupner/Spektrum
//#define SERIAL_SUM_PPM ROLL,PITCH,THROTTLE,YAW,AUX1 //For Robe/Hitec/Futaba
/* interleaving delay in micro seconds between 2 readings WMP/NK in a WMP+NK config */
/* if the ACC calibration time is very long (20 or 30s), try to increase this delay up to 4000 */
#define INTERLEAVING_DELAY 3000
//for V BAT monitoring
//after the resistor divisor we should get [0V;5V]->[0;[1023] on analog V_BATPIN
//the code is implemented but not yet adjusted to empirical V levels
#define VBATLEVEL1_3S 1000
#define VBATLEVEL2_3S 800
#define VBATLEVEL3_3S 700
/* when there is an error on I2C bus, we neutralize the values during a short time. expressed in microseconds */
#define NEUTRALIZE_DELAY 100000
/* this is the value for the ESCs when thay are not armed */
/* in some case, this value must be lowered down to 900 for some specific ESCs */
#define MINCOMMAND 1000
/* this is the maximum value for the ESCs at full power */
/* this value can be increased up to 2000 */
#define MAXTHROTTLE 1850
/* This is the speed of the serial interface. 115200 kbit/s is the best option for a USB connection.*/
#define SERIAL_COM_SPEED 115200
/* In order to save space, it's possibile to desactivate the LCD configuration functions */
/* comment this line only if you don't plan to used a LCD */
#define LCD_CONF
/* motors will not spin when the throttle command is in low position */
/* this is an alternative method to stop immediately the motors */
//#define MOTOR_STOP
/* force the autolevel activation */
/* usefull for a 4 channels only setup */
//#define FORCE_LEVEL
Debeis saber que en el codigo toda linea que tenga // aunque la veais, nunca se va a programar, tambien tener en cuenta que en cada apartado del codigo solo podeis elegir una opcion, si dejais dos activas se producirá un error y estallará el Arduino ( jejee es broma), pues bien ahora vamos por partes:
1.- Ajuste de las minimas revoluciones de los motores cuando estan en ON. Aqui configuramos la fuerza con la que van a arrancar los motores, sin darle potencia en el mando, como un punto muerto del coche. en principio solo hay dos opciones, si teneis montado ya el Bicho con los motores, probar las dos opciones y sino os convence coger una y variarle el valor, por ejemplo a 1150, que es lo que tengo yo. (En este punto los motores de deben elevar el Multicopter, solo quedarse a unas revoluciones de "calentamentamiento")./* This is the minimum value that allow motors to run at a idle speed */
//#define MINTHROTTLE 1300 // for Turnigy Plush ESCs 10A
#define MINTHROTTLE 1120 // for Super Simple ESCs 10A [HIGHLIGHT=#ffc000]
(Esta seria la opcion elegida ya que carece de // al principio)[/HIGHLIGHT]
Yo lo tengo así.
/* This is the minimum value that allow motors to run at a idle speed */
#define MINTHROTTLE 1150 // for Turnigy Plush ESCs 10A [HIGHLIGHT=#f79646](Active esta opcion y cambié el valor a 1150)[/HIGHLIGHT]
//#define MINTHROTTLE 1120 // for Super Simple ESCs 10A
2.- Seleccionar el tipo de Multiwii a construir:/* The type of multicopter */
//#define GIMBAL
//#define BI //experimental
//#define TRI
#define QUADP [HIGHLIGHT=#f79646](En este caso se ha seleccionado un QUAD en +)[/HIGHLIGHT]
//#define QUADX
//#define Y6
//#define HEX6
//#define FLYING_WING //experimental
GIMBAL: Circuito de Estabilizacion de camara.
BI: Biquad, por ahora experimental.
TRI: Tricoptero.
QUAP: Quad cen configuracion +.
QUADX: Quad en configuracion X.
Y6: Hexacopter en configuracion Y con dos motores en cada pata.
HEX6: Hexacopter con seis patas.
FLYING_WING: Estabilizador para ala volante, por ahora experimental.
Yo como tengo un Hexa de seis patas lo configuré así:
/* The type of multicopter */
//#define GIMBAL
//#define BI //experimental
//#define TRI
//#define QUADP
//#define QUADX
//#define Y6
#define HEX6
//#define FLYING_WING //experimental
3.- Invertir correciones Yaw.
Se utiliza en los tricopteros, dependiendo como se monte el servo de cola, nos hará falta invertir el control del Arduino a ese canal en concreto (No en la emisora)#define YAW_DIRECTION 1 [HIGHLIGHT=#f79646](Se deja asi por defecto)[/HIGHLIGHT]
//#define YAW_DIRECTION -1
4.- Velocidad del Bus I2C:
Muchos sensores funcionan a 400Mhz, pero otros no, por ello por defecto se ajusta a 100Mhz, y luego se recomienda probar en 400Mhz.#define I2C_SPEED 100000L [HIGHLIGHT=#f79646](Por defecto esta configurado a 100Mhz)[/HIGHLIGHT]
//#define I2C_SPEED 400000L
5.- Tipo de arduino:
Donde debemos elegir entre el Ardunio Mini o Mega.#define PROMINI [HIGHLIGHT=#f79646](por defecto esta activado el Mini)[/HIGHLIGHT]
//#define MEGA
6.- Activacion de la estabilizacion de cámara.(Solo Quads, por ahora)/* The following lines apply only for a pitch/roll tilt stabilization system */
/* It is not compatible with Y6 or HEX6 */
/* Uncomment the first line to activate it */
//#define SERVO_TILT [HIGHLIGHT=#f79646](Para activarla, solamente en los QUADS, borrar los dos // de esta linea)[/HIGHLIGHT]
#define TILT_PITCH_MIN 1020 //servo travel min, don't set it below 1020
#define TILT_PITCH_MAX 2000 //servo travel max, max value=2000
#define TILT_PITCH_MIDDLE 1500 //servo neutral value
#define TILT_PITCH_PROP 10 //servo proportional (tied to angle) ; can be negative to invert movement
#define TILT_ROLL_MIN 1020
#define TILT_ROLL_MAX 2000
#define TILT_ROLL_MIDDLE 1500
#define TILT_ROLL_PROP 10
El resto de lineas de este apartado es donde se puede configurar el recorrido de los servos de la estabilizacion de la camara.
7.- Selección del tipo de Acelerometros.
Si se tiene algún acelerometro diferente al NK, hay que borrar // en el que corresponda./* I2C accelerometer */
//#define ADXL345
//#define BMA020
//#define BMA180
8.- Activar el barometro./* I2C barometer */
//#define BMP085 [HIGHLIGHT=#f79646](borrar los // si se tienes el barometro instalado)[/HIGHLIGHT]
9.- Activar el PPMSUM.
Ya explicado en posteriores post, cuando la version de nuestro Arduino este limitada en entradas/salidas PWM, por ejemplo cuando se monta un Hexa con el Arduino pro, obliga a conectar la señal del RX por un solo canal, donde contiene la informacion del resto de canales.
En este apartado, si os veis obligados a utilizar PPMSUM, debeis borrar el // del tipo de emisora que tengais.//#define SERIAL_SUM_PPM PITCH,YAW,THROTTLE,ROLL,AUX1 //For Graupner/Spektrum
#define SERIAL_SUM_PPM ROLL,PITCH,THROTTLE,YAW,AUX1 //For Robe/Hitec/Futaba [HIGHLIGHT=#f79646](Yo tengo un HExa con el Arduino mini Pro y una emisora Futaba, por lo que tengo activada esta opcion)[/HIGHLIGHT]
10.- Forzar la activacion del autolevel.
Esta funcion es especialmente interesante con emisoras de 4 canales que carecen de un quinto canal para seleccionar en vuelo si queremos vuelo deportivo o autoestabilizado y en sus multicopteros tiene instalado acelerometros. Lo que hace es tener conectado en todo momento el vuelo autoestabilizado./* force the autolevel activation */
/* usefull for a 4 channels only setup */
//#define FORCE_LEVEL [HIGHLIGHT=#f79646](Borrar // para activar)[/HIGHLIGHT]
Los demás puntos de esta versión prefiero no explicarlos ya que no los he experimentado en mis carnes y ademas pienso que son ajustes muy avanzados.
Espero que os sirva a aprender como se configura el code de los MultiWii.