@magnetron1 ottimo! Se riesci pure a sistemare l'orientazione del magnetometro fai un grosso favore a tutti!
annuncio
Comprimi
Ancora nessun annuncio.
MultiWii Quad! Alternativa ad Aeroquad/Baronpilot con sensori wii
Comprimi
X
-
Fabio nei prossimi due giorni, meteo permettendo, proverò il volato e la modalità stabile. Al banco proverò il magnetometro, credo che se dovessi per logica seguire la procedura che mi sono "inventato" per tarare il gyro e l'acc devo considerare che se punto a nord il muso del quad dovrei avere sull'asse x un valore prossimo a 0, orientando poi il quad verso destra tale valore dovrebbe crescere e verso sinistra dovrebbe diminuire. Sbagliando l'orientamento il quad dovrebbe ruotare su se stesso alla ricerca del punto... proverò. Visto che ci sono vorrei poi passare all'altimetro di precisione, ma non conoscendo bene il sensore vorrei una mano da te così da poter mettere mani alla routine che lo gestisce e passarne una versione semistabile ad Alex, che ne dici?
Ultima modifica di magnetron1; 24 luglio 11, 15:16.
Commenta
-
Originariamente inviato da magnetron1 Visualizza il messaggioSenti, ma dove hai preso le eliche colorate?
Che misura sono?
Le si trova 10x4.5 (2+2) alternativamente colorate?
le eliche verdi le trovi quì
Flyduino - Propeller
Ciao
Diego
Commenta
-
Commenta
-
Originariamente inviato da magnetron1 Visualizza il messaggioSenti, ma dove hai preso le eliche colorate?
Che misura sono?
Le si trova 10x4.5 (2+2) alternativamente colorate?FLYDRONE X4M - FLYDRONE X6M spyder -FLYDRONE mini
FLYDRONE AXN FPV
GOPRO HERO2 - FUTABA T9Z WC2 - FRSKY 2.4GHZ www.Flydrones.ch
Commenta
-
Più tardi provo a settare i PID, e magari faccio il primo volo di collaudo...
Io avevo paura a tenere il quad in mano, ma, una volta capito che movimenti fà sai come gestirlo, basta tenerlo saldamente !!!
Di fatti dopo le prime 2 o 3 volte ho dovuto fare altre prove per trovare il problema, ma armando i motori sapevo a cosa andavo incontro...
Importante è anche alzare il gas mooolto lentamente e attendere se c'è qualche comportamento anomalo del quad per non incappare in qualche incidente o ferimento... Io ad esempio usavo un cavo USB lungo e tenevo il quad al di sopra della mia testa...FLYDRONE X4M - FLYDRONE X6M spyder -FLYDRONE mini
FLYDRONE AXN FPV
GOPRO HERO2 - FUTABA T9Z WC2 - FRSKY 2.4GHZ www.Flydrones.ch
Commenta
-
Originariamente inviato da talkobit2Salve a tutti! qualcuno mi puo dare indicazioni su come collegare una radio? ho dubbi sul voltaggio... devo passare una rx di un elicottero che va con batterie 11.1 ad un aereo che va con bat 7.4... però ho letto che la rx funziona con 4.8v che significa?
e scusase per l'introzuzione...
Dovresti scrivere il tuo post qui: Radiocomandi - BaroneRosso.it - Forum Modellismo
Cerchiamo di tenere pulita questa discussione che riguarda unicamente la piattaforma MultiWii.
Vediamo se i moderatori ci assistono e magari ripuliscono questo messaggio. Grazie.
Commenta
-
Originariamente inviato da Jonny-Paletta Visualizza il messaggioPiù tardi provo a settare i PID, e magari faccio il primo volo di collaudo...
Io avevo paura a tenere il quad in mano, ma, una volta capito che movimenti fà sai come gestirlo, basta tenerlo saldamente !!!
Di fatti dopo le prime 2 o 3 volte ho dovuto fare altre prove per trovare il problema, ma armando i motori sapevo a cosa andavo incontro...
Importante è anche alzare il gas mooolto lentamente e attendere se c'è qualche comportamento anomalo del quad per non incappare in qualche incidente o ferimento... Io ad esempio usavo un cavo USB lungo e tenevo il quad al di sopra della mia testa...
Comunque dall'esperienza fatta questa mattina posso dire che il pid di default è già abbastanza ottimizzato anche se non può ovviamente andare bene per tutti, ogni frame ha il suo comportamento dettato anche dal tipo di motore, regolatore, elica e configurazione meccanica.
Un buon inizio è sicuramente il P=2 o 3 la I=0 e la D=0, prova così e vedi.
Commenta
-
Dici che se lascio tutti i valori di defaul e provo a farlo volare è troppo rischioso?
Ovviamente proverò prima ancora al "banco".
Comunque ripetiamolo ancora, fate attenzione a fare le prove al banco, NON ABBIAMO A CHE FARE CON DEI GIOCATTOLI !!!FLYDRONE X4M - FLYDRONE X6M spyder -FLYDRONE mini
FLYDRONE AXN FPV
GOPRO HERO2 - FUTABA T9Z WC2 - FRSKY 2.4GHZ www.Flydrones.ch
Commenta
-
Originariamente inviato da Jonny-Paletta Visualizza il messaggioDici che se lascio tutti i valori di defaul e provo a farlo volare è troppo rischioso?
Ovviamente proverò prima ancora al "banco".
Comunque ripetiamolo ancora, fate attenzione a fare le prove al banco, NON ABBIAMO A CHE FARE CON DEI GIOCATTOLI !!!
Se però sei sicuro che adesso è tutto ok, motori, connessioni, sensori e comandi dal radiocomando corrispondono, l'orientamento è stato fatto allora con uno slancio di fiducia puoi abbassare il PID a P=2 o 3 e provare.
Tieniti lontano qualche metro per sicurezza e prova, cerca di tenerlo poco al suolo, cerca di staccare almeno 20, 30cm perchè l'effetto suolo è moltiplicato da 4 rotori. Se poi il pid ha la componente I attiva allora comincia ad accumulare errore. Io ho fatto la prima prova con i PID di default dopo essermi assicurato che i motori rispondevano, l'orientamento fosse corretto (e dai video che hai postato, il tuo orientamento sembra corretto).
Fai un video di questo primo "collaudo" e postalo, così vediamo...
Quando conti di provarci?
Commenta
-
Sinceramente volevo provare ancora oggi, ma c'è un vento perfido e quindi mi toccherà rimandare... anche perchè essendo al primo volo di collaudo e non conoscendo il comportamento di un multirotore...
Ok volavo con elicotteri, ma son fermo ormai da qualche anno, anche se le basi ormai ti restanoFLYDRONE X4M - FLYDRONE X6M spyder -FLYDRONE mini
FLYDRONE AXN FPV
GOPRO HERO2 - FUTABA T9Z WC2 - FRSKY 2.4GHZ www.Flydrones.ch
Commenta
-
Originariamente inviato da Jonny-Paletta Visualizza il messaggioSinceramente volevo provare ancora oggi, ma c'è un vento perfido e quindi mi toccherà rimandare... anche perchè essendo al primo volo di collaudo e non conoscendo il comportamento di un multirotore...
Ok volavo con elicotteri, ma son fermo ormai da qualche anno, anche se le basi ormai ti restano
Be, allora quando collaudi ci vuole il video.
Io appena riesco ne farò uno.
Commenta
-
Ho giusto provato se tutto funziona a dovere con i PID di default al banco, ora che i motori sono OK è tutta un altra storia...
I comandi impartiti dagli stick sono giusti, l'asse del YAW è più morbido a contrastare che il pitch e il roll, è giusto?FLYDRONE X4M - FLYDRONE X6M spyder -FLYDRONE mini
FLYDRONE AXN FPV
GOPRO HERO2 - FUTABA T9Z WC2 - FRSKY 2.4GHZ www.Flydrones.ch
Commenta
-
Bussola orientamento
Ciao magnetron1
Allora per adare sul discorso della bussola o controllato
la posizione del cip saldato sulla scheda di fabio ed e messo nella direzione
guista,fabio non sbaglia poi o trovato dei video sul web di come dovrebbe funzionare la bussola
io monto HMC5843 quando lo colibro con le varie rotazioni la frecceta nera si mette
un po dove vuole adesso qardando i video solo uno sembra funzionare bene
adesso se il cip di fabio e giusto anche il mio e nel senso giusto (x,y,z)
vanno lasciti come sono cioe mi spiego o trovato il codice originale per la FREEIMUv035_MS
prima ancora che cualcuno lo modifichi e poi lo mette nella DEV.
Come puoi vedere tutto sotto x,y,z non sono modificate percio ne dedugo
che se la freccetta dopo la calibrazione non simette nella direzione consueta
cio direzione avanti avedo cura di partire tenendo il mezzo in mano nella direzione di marcia
se poi parti con la calibrazione mettendo il mezzo nella direzione opposta o in qulugue
altra posizione la la freccetta nera dovrebbe ritorna nen senso di marcia giustu, e guesto
che ancora non riesco a capire, attualmente io con varie prove e indiferente come parto con la calibrazione
non si mette mai nelle posizine di marcia sara perche chi a fatto il video si e trovato con le cordinate
giuste cioe a nord e noi qui non abbimo le stesse cordinate.
comunque per concludere la frecetta nera attualmente io lo nel l'anglo destro se messa li
quando lo faccio sollevare adesso solo in casa tenendolo con una codicella sempre in sicurezza
quando attivo la bussola lui tenda a stare fermo dove si trovava al momento che lo o attivato
se poi lo muovo con lo stik della radio o con un colpetto lui torno lentamente dove era sempre
nel punto deve e stato attivato.
Ma speriamo bene fabio mi a scritto che FREEIMUv035_MS non e sponibile pe almeno 4 settimane.
vIDEO 1 ‪Magnetometertest with FFImu‬‏ - YouTube
VIDEO 2 ‪mwc - gui , baro‬‏ - YouTube
VIDEO 3 ‪FFIMU v1.22 compass/mag‬‏ - YouTube
Qesto e il sito dove si trova il codice:MultiWii • View topic - Support for FreeIMU v0.3.5* and MS5611-01BA
Index: Sensors.pde
================================================== =================
--- Sensors.pde (revision 195)
+++ Sensors.pde (working copy)
@@ -28,6 +28,11 @@
//#define ITG3200_ADDRESS 0XD2
#endif
+#if !defined(MS561101BA_ADDRESS)
+ #define MS561101BA_ADDRESS 0xEE //CBR=0 0xEE I2C address when pin CSB is connected to LOW (GND)
+ //#define MS561101BA_ADDRESS 0xEF //CBR=1 0xEF I2C address when pin CSB is connected to HIGH (VCC)
+#endif
+
uint8_t rawADC[6];
static uint32_t neutralizeTime = 0;
@@ -202,6 +207,7 @@
// ************************************************** ************************************************** ********
#if defined(BMP085)
+#define BMP085_ADDRESS 0xEE
static struct {
// sensor registers from the BOSCH BMP085 datasheet
int16_t ac1, ac2, ac3, b1, b2, mb, mc, md;
@@ -239,9 +245,9 @@
// read a 16 bit register
int16_t i2c_BMP085_readIntRegister(uint8_t r) {
union {int16_t val; uint8_t raw[2]; } data;
- i2c_rep_start(0xEE + 0);
+ i2c_rep_start(BMP085_ADDRESS + 0);
i2c_write(r);
- i2c_rep_start(0xEE + 1);//I2C read direction => 1
+ i2c_rep_start(BMP085_ADDRESS + 1);//I2C read direction => 1
data.raw[1] = i2c_readAck();
data.raw[0] = i2c_readNak();
// i2c_rep_stop();
@@ -250,22 +256,22 @@
// read uncompensated temperature value: send command first
void i2c_BMP085_UT_Start() {
- i2c_writeReg(0xEE,0xf4,0x2e);
- i2c_rep_start(0xEE + 0);
+ i2c_writeReg(BMP085_ADDRESS,0xf4,0x2e);
+ i2c_rep_start(BMP085_ADDRESS + 0);
i2c_write(0xF6);
}
// read uncompensated pressure value: send command first
void i2c_BMP085_UP_Start () {
- i2c_writeReg(0xEE,0xf4,0x34+(OSS<<6)); // control register value for oversampling setting 3
- i2c_rep_start(0xEE + 0); //I2C write direction => 0
+ i2c_writeReg(BMP085_ADDRESS,0xf4,0x34+(OSS<<6)); // control register value for oversampling setting 3
+ i2c_rep_start(BMP085_ADDRESS + 0); //I2C write direction => 0
i2c_write(0xF6);
}
// read uncompensated pressure value: read result bytes
// the datasheet suggests a delay of 25.5 ms (oversampling settings 3) after the send command
void i2c_BMP085_UP_Read () {
- i2c_rep_start(0xEE + 1);//I2C read direction => 1
+ i2c_rep_start(BMP085_ADDRESS + 1);//I2C read direction => 1
bmp085_ctx.up.raw[2] = i2c_readAck();
bmp085_ctx.up.raw[1] = i2c_readAck();
bmp085_ctx.up.raw[0] = i2c_readNak();
@@ -275,7 +281,7 @@
// read uncompensated temperature value: read result bytes
// the datasheet suggests a delay of 4.5 ms after the send command
void i2c_BMP085_UT_Read() {
- i2c_rep_start(0xEE + 1);//I2C read direction => 1
+ i2c_rep_start(BMP085_ADDRESS + 1);//I2C read direction => 1
bmp085_ctx.ut.raw[1] = i2c_readAck();
bmp085_ctx.ut.raw[0] = i2c_readNak();
// i2c_rep_stop();
@@ -337,6 +343,144 @@
}
#endif
+
+#if defined(MS561101BA)
+
+// registers of the device
+#define MS561101BA_PRESSURE 0x40
+#define MS561101BA_TEMPERATURE 0x50
+#define MS561101BA_RESET 0x1E
+
+// D1 and D2 result size (bytes)
+#define MS561101BA_D1D2_SIZE 3
+
+// OSR (Over Sampling Ratio) constants
+#define MS561101BA_OSR_256 0x00
+#define MS561101BA_OSR_512 0x02
+#define MS561101BA_OSR_1024 0x04
+#define MS561101BA_OSR_2048 0x06
+#define MS561101BA_OSR_4096 0x08
+
+static struct {
+ // sensor registers from the MS561101BA datasheet
+ uint16_t c1, c2, c3, c4, c5, c6;
+ union {uint32_t val; uint8_t raw[4]; } ut; //uncompensated T
+ union {uint32_t val; uint8_t raw[4]; } up; //uncompensated P
+ uint8_t state;
+ uint32_t deadline;
+} ms561101ba_ctx;
+#define OSR MS561101BA_OSR_4096
+
+void i2c_MS561101BA_reset(){
+ i2c_writeReg(MS561101BA_ADDRESS, MS561101BA_RESET, 0);
+}
+
+void i2c_MS561101BA_readCalibration(){
+ delay(10);
+ ms561101ba_ctx.c1 = i2c_MS561101BA_readIntRegister(0xA2);
+ ms561101ba_ctx.c2 = i2c_MS561101BA_readIntRegister(0xA4);
+ ms561101ba_ctx.c3 = i2c_MS561101BA_readIntRegister(0xA6);
+ ms561101ba_ctx.c4 = i2c_MS561101BA_readIntRegister(0xA8);
+ ms561101ba_ctx.c5 = i2c_MS561101BA_readIntRegister(0xAA);
+ ms561101ba_ctx.c6 = i2c_MS561101BA_readIntRegister(0xAC);
+}
+
+void Baro_init() {
+ delay(10);
+ i2c_MS561101BA_reset();
+ delay(10);
+ i2c_MS561101BA_readCalibration();
+ i2c_MS561101BA_UT_Start();
+ delay(10);
+ i2c_MS561101BA_UT_Read();
+}
+
+// read a 16 bit register
+int16_t i2c_MS561101BA_readIntRegister(uint8_t r) {
+ union {int16_t val; uint8_t raw[2]; } data;
+ i2c_rep_start(MS561101BA_ADDRESS + 0);
+ i2c_write(r);
+ i2c_rep_start(MS561101BA_ADDRESS + 1);//I2C read direction => 1
+ data.raw[1] = i2c_readAck();
+ data.raw[0] = i2c_readNak();
+// i2c_rep_stop();
+ return data.val;
+}
+
+// read uncompensated temperature value: send command first
+void i2c_MS561101BA_UT_Start() {
+ i2c_writeReg(MS561101BA_ADDRESS, MS561101BA_TEMPERATURE + OSR, 0);
+ //i2c_rep_start(MS561101BA_ADDRESS + 0);
+ //i2c_write(0xF6);
+}
+
+// read uncompensated pressure value: send command first
+void i2c_MS561101BA_UP_Start () {
+ i2c_writeReg(MS561101BA_ADDRESS,MS561101BA_PRESSUR E + OSR, 0); // control register value for oversampling setting 3
+ //i2c_rep_start(MS561101BA_ADDRESS + 0); //I2C write direction => 0
+ //i2c_write(0xF6);
+}
+
+// read uncompensated pressure value: read result bytes
+// the datasheet suggests a delay of 25.5 ms (oversampling settings 3) after the send command
+void i2c_MS561101BA_UP_Read () {
+ i2c_rep_start(MS561101BA_ADDRESS + 1);//I2C read direction => 1
+ ms561101ba_ctx.up.raw[2] = i2c_readAck();
+ ms561101ba_ctx.up.raw[1] = i2c_readAck();
+ ms561101ba_ctx.up.raw[0] = i2c_readNak();
+// i2c_rep_stop();
+}
+
+// read uncompensated temperature value: read result bytes
+// the datasheet suggests a delay of 4.5 ms after the send command
+void i2c_MS561101BA_UT_Read() {
+ i2c_rep_start(MS561101BA_ADDRESS + 0);
+ i2c_write(0);
+ i2c_rep_start(MS561101BA_ADDRESS + 1);//I2C read direction => 1
+ ms561101ba_ctx.ut.raw[2] = i2c_readAck();
+ ms561101ba_ctx.ut.raw[1] = i2c_readAck();
+ ms561101ba_ctx.ut.raw[0] = i2c_readNak();
+// i2c_rep_stop();
+}
+
+void i2c_MS561101BA_Calculate() {
+ // see datasheet page 7 for formulas
+ int32_t dT = ms561101ba_ctx.ut.val - ms561101ba_ctx.c5 * pow(2, 8);
+ int64_t off = ms561101ba_ctx.c2 * pow(2,16) + (ms561101ba_ctx.c4 * dT) / pow(2, 7);
+ int64_t sens = ms561101ba_ctx.c1 * pow(2,15) + (ms561101ba_ctx.c3 * dT) / pow(2,8);
+ pressure = (ms561101ba_ctx.ut.val * (sens) / pow(2, 21) - off) / pow(2, 15);
+}
+
+void Baro_update() {
+ if (currentTime < ms561101ba_ctx.deadline) return;
+ ms561101ba_ctx.deadline = currentTime;
+ TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz, MS5611 is ok with this speed
+ switch (ms561101ba_ctx.state) {
+ case 0:
+ i2c_MS561101BA_UT_Start();
+ ms561101ba_ctx.state++; ms561101ba_ctx.deadline += 10000;
+ break;
+ case 1:
+ i2c_MS561101BA_UT_Read();
+ ms561101ba_ctx.state++;
+ break;
+ case 2:
+ i2c_MS561101BA_UP_Start();
+ ms561101ba_ctx.state++; ms561101ba_ctx.deadline += 10000;
+ break;
+ case 3:
+ i2c_MS561101BA_UP_Read();
+ i2c_MS561101BA_Calculate();
+ BaroAlt = (1.0f - pow(pressure/101325.0f, 0.190295f)) * 44330.0f;
+ ms561101ba_ctx.state = 0;
+ baroNewData = 1;
+ //ms561101ba_ctx.deadline += 20000;
+ break;
+ }
+}
+#endif
+
+
// ************************************************** ************************************************** ********
// I2C Accelerometer ADXL345
// ************************************************** ************************************************** ********
Index: def.h
================================================== =================
--- def.h (revision 195)
+++ def.h (working copy)
@@ -23,18 +23,18 @@
#define ITG3200_ADDRESS 0XD0
#endif
-#if defined(FREEIMUv01)
+#if defined(FREEIMUv01) || defined(FREEIMUv02)
#define ITG3200
#define ADXL345
#define HMC5843
- #define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = -Y; accADC[PITCH] = X; accADC[YAW] = Z;}
+ #define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = X; accADC[PITCH] = Y; accADC[YAW] = Z;}
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = X; gyroADC[PITCH] = Y; gyroADC[YAW] = Z;}
#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = Z;}
#define ADXL345_ADDRESS 0xA6
#undef INTERNAL_I2C_PULLUPS
#endif
-#if defined(FREEIMU)
+#if defined(FREEIMUv03)
#define ITG3200
#define ADXL345
#define HMC5883
@@ -42,8 +42,24 @@
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = X; gyroADC[PITCH] = Y; gyroADC[YAW] = Z;}
#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = Z;}
#define ADXL345_ADDRESS 0xA6
+ #undef INTERNAL_I2C_PULLUPS
#endif
+#if defined(FREEIMUv035) || defined(FREEIMUv035_MS) || defined(FREEIMUv035_BMP)
+ #define ITG3200
+ #define BMA180
+ #define HMC5883
+ #define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = X; accADC[PITCH] = Y; accADC[YAW] = Z;}
+ #define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = X; gyroADC[PITCH] = Y; gyroADC[YAW] = Z;}
+ #define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = Z;}
+ #undef INTERNAL_I2C_PULLUPS
+ #if defined(FREEIMUv035_MS)
+ #define MS561101BA
+ #elif defined(FREEIMUv035_BMP)
+ #define BMP085
+ #endif
+#endif
+
#if defined(PIPO)
#define L3G4200D
#define ADXL345
@@ -95,7 +111,7 @@
#define GYRO 0
#endif
-#if defined(BMP085)
+#if defined(BMP085) || defined(MS561101BA)
#define BARO 1
#else
#define BARO 0
Index: config.h
================================================== =================
--- config.h (revision 195)
+++ config.h (working copy)
@@ -72,8 +72,14 @@
//#define FFIMUv1 //first 9DOF+baro board from Jussi, with HMC5843
//#define FFIMUv2 //second version of 9DOF+baro board from Jussi, with HMC5883
-//#define FREEIMUv01 //first version of 9DOF board from Fabio
-//#define FREEIMU //later version of 9DOF board from Fabio
+// FreeIMU sensors boards from Fabio Varesano.
+// See FreeIMU: a libre 9DOM/DOF inertial measurement unit | Varesano.net to know your correct version
+//#define FREEIMUv01 // FreeIMU v0.1
+//#define FREEIMUv02 // FreeIMU v0.2
+//#define FREEIMUv03 // FreeIMU v0.3 and v0.3.1
+//#define FREEIMUv035 // FreeIMU v0.3.5
+//#define FREEIMUv035_MS // FreeIMU v0.3.5_MS
+//#define FREEIMUv035_BMP // FreeIMU v0.3.5_MS
//#define PIPO //9DOF board from erazz
//#define QUADRINO //full FC board 9DOF+baro board from witespy
//#define ALLINONE //full FC board or standalone 9DOF+baro board from CSG_EU
@@ -93,6 +99,7 @@
/* I2C barometer */
//#define BMP085
+//#define MS561101BA
/* I2C magnetometer */
//#define HMC5843
Commenta
-
Originariamente inviato da Jonny-Paletta Visualizza il messaggioHo giusto provato se tutto funziona a dovere con i PID di default al banco, ora che i motori sono OK è tutta un altra storia...
I comandi impartiti dagli stick sono giusti, l'asse del YAW è più morbido a contrastare che il pitch e il roll, è giusto?
Commenta
Commenta