Pages: [1] 2   Go Down
Author Topic: ArduinoDue 5DOF  (Read 922 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
siccome mi è arrivata la schedina stavo provando un po di cose.
in particolare ho collegato al mio arduino Due una scheda IMU 5DOF formata da un ADXL335 e un IDG-500.
di seguito i valori letti
Code:
-----------LETTURA DATI----------------------
lettura valore accelerometro asse X
Acc. asse x raw = 2024
Acc. asse x = -0.0631257631
lettura valore accelerometro asse Y
Acc. asse y raw = 2030
Acc. asse y = -0.0470085470
lettura valore accelerometro asse Z
Acc. asse z raw = 2445
Acc. asse z = 1.0677655678
lettura valore giroscopio asse X
Gyr. asse x raw = 1726
Gyr. asse x = 20.4578754579
lettura valore giroscopio asse Y
Gyr. asse y raw = 1726
Gyr. asse y = 20.4578754579
------------------------------------------------

il codice che uso per la lettura è il seguente

Code:
#define ACC_ASSE_X      A0 //408 a 612 piano 508
#define ACC_ASSE_Y      A1 //408 a 612 piano 508
#define ACC_ASSE_Z      A2 //          piano

#define GYR_ASSE_X      A3
#define GYR_ASSE_Y      A4

void setup() {
  Serial.begin(9600);
  //imposto il ADC a 12 bit
  analogReadResolution(12);
  delay(5000);
}

void loop() {
  Serial.println("-----------LETTURA DATI----------------------");
  //(((valore letto * vref (3.3)) / maxValue ADC (12bit = 4095)) - V0 (1.50 x,y e 1.50 z)) / sensitivy (0.300 mV/g)
  //zero value = zero value datasheet / Vref * 4095 (ADC 12bit)
  //(value letto - zero value) / sensitivity
  Serial.println("lettura valore accelerometro asse X");
  int rawValueAccX = 0;
  for(int i = 0; i < 50; i++) rawValueAccX += ReadRawAccAssValue(ACC_ASSE_X);
  rawValueAccX = rawValueAccX / 50;
  double valueAccX = (((rawValueAccX * 3.3) / 4095) - 1.650) / 0.300;
  Serial.print("Acc. asse x raw = ");
  Serial.println(rawValueAccX, DEC);
  Serial.print("Acc. asse x = ");
  Serial.println(valueAccX, DEC);
 
  Serial.println("lettura valore accelerometro asse Y");
  int rawValueAccY = 0;
  for(int i = 0; i < 50; i++) rawValueAccY += ReadRawAccAssValue(ACC_ASSE_Y);
  rawValueAccY = rawValueAccY / 50;
  double valueAccY = (((rawValueAccY * 3.3) / 4095) - 1.650) / 0.300;
  Serial.print("Acc. asse y raw = ");
  Serial.println(rawValueAccY, DEC);
  Serial.print("Acc. asse y = ");
  Serial.println(valueAccY, DEC);

  Serial.println("lettura valore accelerometro asse Z");
  int rawValueAccZ = 0;
  for(int i = 0; i < 50; i++) rawValueAccZ += ReadRawAccAssValue(ACC_ASSE_Z);
  rawValueAccZ = rawValueAccZ / 50;
  double valueAccZ = (((rawValueAccZ * 3.3) / 4095) - 1.650) / 0.300;
  Serial.print("Acc. asse z raw = ");
  Serial.println(rawValueAccZ, DEC);
  Serial.print("Acc. asse z = ");
  Serial.println(valueAccZ, DEC);
 
  Serial.println("lettura valore giroscopio asse X");
  int rawValueGyrX = ReadRawGyrAssValue(GYR_ASSE_X);
  double valueGyrX = (((rawValueGyrX * 3.3) / 4095) - 1.350) / 0.002;
  Serial.print("Gyr. asse x raw = ");
  Serial.println(rawValueGyrX, DEC);
  Serial.print("Gyr. asse x = ");
  Serial.println(valueGyrX, DEC);
 
  Serial.println("lettura valore giroscopio asse Y");
  int rawValueGyrY = ReadRawGyrAssValue(GYR_ASSE_Y);
  double valueGyrY = (((rawValueGyrY * 3.3) / 4095) - 1.350) / 0.002;
  Serial.print("Gyr. asse y raw = ");
  Serial.println(rawValueGyrX, DEC);
  Serial.print("Gyr. asse y = ");
  Serial.println(valueGyrX, DEC);
 
  Serial.println("------------------------------------------------");
 
  delay(5000);
}

int ReadRawAccAssValue(int pin) {
  int valore = analogRead(pin);
  return valore;
}

int ReadRawGyrAssValue(int pin) {
  int valore = analogRead(pin);
  return valore;
}

siccome la basetta è relativamente messa in piano, posso piu o meno valutare i valori letti e convertiti dell'accelerometro correnti. quelle che invece non riesco a capire sono i valori del giroscopio. qualcuno ha mai usato questi componenti e può darmi delle dritte?
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 110
Posts: 6986
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
hai verificato sul sito del venditore se ci fossero datasheet o una procedura di calibrazione?
Hai la sigla esatta del prodotto o il link del negozio dove l'hai comprata, se online?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il prodotto è questo https://www.sparkfun.com/products/retired/9268.

l'accelerometro è ADXL335
il giroscopio è IDG-500

se non ho capito male il giroscopio dovrebbe avere una procedura di auto-zero, o forse ho capito male io
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

perchè dal giro togli 1.350?
cioè, la logica è giusta, però quel valore sarebbe da calibrare ogni volta, tenendo la scheda ferma e leggendo il valore.

a quel punto il gyro ti misura quanto velocemente sta girando la scheda.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

1.350 da datasheet e se non ho letto male corrisponde alla tensione di riferimento a 0.
quindi ho ben pensato di togliere al valore letto il valore di zero. quell oche mi dici tu invece è che cosi facendo magari non sottraggo il vero valore dello zero, giusto?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, scusa, 1.35 è riferito ala tensione e non al valore grezzo, in ogni caso è normale che sballi un pò.

però riguardando meglio è più probabile che sbagli la conversione, ora guardo il Datasheet e ti dico

infatti qualcosa non va.

tu leggi 1726, che equivale e 1.39V. Tolto lo 0, ovvero 1.35V otteniamo 0.04V, ovvero 40mV, giustamente peri a 20°/s, ma se il tuo coso sta fermo questo non ci torna.

o il tuo zero è 1.39v (direi spoporzionato!) oppure il sensore dà un'uscita sinosuoideale oppure c'è qualche errore di collegamento: cavi lunghi, gnd non in comune, collegamenti at catzum
« Last Edit: August 27, 2013, 05:26:45 am by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9179
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1.350 da datasheet e se non ho letto male corrisponde alla tensione di riferimento a 0.

E' un valore di riferimento medio, non è assolutamente il reale valore per la velocità 0, questo lo devi ricavare per ogni asse all'accensione tenendo la scheda perfettamente ferma per almeno una decina di secondi, serve per dare il tempo di assestamento meccanico e far smorzare le eventuali oscillazioni, scaduto il tempo acquisisci 16 valori per ogni asse, campionando a 10Hz, e fai la media, i valori ottenuti sono quelli da usare per lo zero.
Tieni presente che i giroscopi, sopratutto quelli economici, derivano sensibilmente nel tempo e per le variazioni termiche.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, scusa, 1.35 è riferito ala tensione e non al valore grezzo, in ogni caso è normale che sballi un pò.

però riguardando meglio è più probabile che sbagli la conversione, ora guardo il Datasheet e ti dico

infatti qualcosa non va.

tu leggi 1726, che equivale e 1.39V. Tolto lo 0, ovvero 1.35V otteniamo 0.04V, ovvero 40mV, giustamente peri a 20°/s, ma se il tuo coso sta fermo questo non ci torna.

o il tuo zero è 1.39v (direi spoporzionato!) oppure il sensore dà un'uscita sinosuoideale oppure c'è qualche errore di collegamento: cavi lunghi, gnd non in comune, collegamenti at catzum

stasera, ora sono fuori casa, ricontrollo i cablaggi ed eventualmente condivido l'operato cosi se sbaglio qualcuno mi può bacchettare.



1.350 da datasheet e se non ho letto male corrisponde alla tensione di riferimento a 0.

E' un valore di riferimento medio, non è assolutamente il reale valore per la velocità 0, questo lo devi ricavare per ogni asse all'accensione tenendo la scheda perfettamente ferma per almeno una decina di secondi, serve per dare il tempo di assestamento meccanico e far smorzare le eventuali oscillazioni, scaduto il tempo acquisisci 16 valori per ogni asse, campionando a 10Hz, e fai la media, i valori ottenuti sono quelli da usare per lo zero.
Tieni presente che i giroscopi, sopratutto quelli economici, derivano sensibilmente nel tempo e per le variazioni termiche.

del fatto della deriva si ne sono pienamente conscio. quindi mi dici di fare una certa calibrazione all'avvio, provvederò.

tutto era nato dal fatto che l'accelerometro era abbastanza preciso mentre il giroscopio no (o perlomeno io ritengo questo) smiley-grin

grazie per le risposte
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro, ci sta una deviazione dallo zero, ma dal datasheet dice al massimo 8mV. quì staimo parlando di 40mV, pari a 20°/s... mi pare eccessivo, anche per un gyro di bassa qualità.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Disperso nel nauseante oceano della burocrazia
Offline Offline
Edison Member
*
Karma: 77
Posts: 2461
Io sono l'ultimo,
e parlero' al vuoto
in ascolto.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro, ci sta una deviazione dallo zero, ma dal datasheet dice al massimo 8mV. quì staimo parlando di 40mV, pari a 20°/s... mi pare eccessivo, anche per un gyro di bassa qualità.

E' perche' non hai dato lo strappo al cordino abbastanza forte, ed il giroscopio ruota troppo lentamente ...  smiley-eek-blue smiley-twist

(scusa, non ho resistito smiley-razz smiley-lol)
Logged

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9179
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

astro, ci sta una deviazione dallo zero, ma dal datasheet dice al massimo 8mV.

Sul datasheet, pagina 2, c'è scritto che la tolleranza rispetto al valore medio a velocità 0 di +/- 20 mV con auto zero, +/- 250 mV senza auto zero (pin 24 per abilitarlo e non mi pare sia utilizzato sulla board Sparkfun).
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

visto, capito, non capisco però da dove ho letto quell'8 però... bha  smiley-grin

quindi a questo punto bisogna ricalcolare il valore da calibrare, e verificare che sia compreso tra 1.35-0.25 < X < 1.35+0.25, altrimenti vuol dire che il sensore si è mosso durante la calibrazione.

Però se non ho capito male bisogan fare attenzione che in base alla temperatura del chip il valore può variare di +-50mV, giusto?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

questo cosa mi era sfuggita......
ora provvedo a valutare la cosa e vediamo cosa ne tiro fuori

grazie
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho fatto altre prove e per quanto lavoro di fino il giroscopio un po fa le bizze.
quindi ora provo a far lavorare insieme sia giroscopio e accelerometro applicando dei filtri (Kalman) e vediamo che dati ottengo smiley-grin

grazie
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ben le ho provate tutte.
ho visto qua e la per internet dove dicono che, se non usato, di mettere il pin AZ (auto zero) a massa. cosi facendo il segnale del giroscopio sembra piu accurato, ma comunque vengono letti, di tanto in tanto, valori che oscillano tra -7,39 e +7,39, con punte di circa 14.

quindi le cose sono due è il mio giroscopio e rotto, o ha un funzionamento veramente penoso smiley-sad


saluti
Logged

Pages: [1] 2   Go Up
Jump to: