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
[SIZE=2=]/*******************************/
/****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
[/SIZE]
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] [COLOR=darkred=](Esta seria la opcion elegida ya que carece de // al principio)[/COLOR][/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.
Pd. Si veis algun error o quereis añadir algo, comentarlo por favor...