Translate

sabato 7 settembre 2013

QUALCHE PICCOLO PROGRESSO

Qui sotto potete vedere il software modificato ,per semplificare ho inserito solo la parte che e' stata modificata.
 #ifdef OUTPUT_READABLE_REALACCEL
            // display real acceleration, adjusted to remove gravity
            mpu.dmpGetQuaternion(&q, fifoBuffer);
            mpu.dmpGetAccel(&aa, fifoBuffer);
            mpu.dmpGetGravity(&gravity, &q);
            mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
            Serial.print("areal\t");
            Serial.print(aaReal.x);
            Serial.print("\t");
            Serial.print(aaReal.y);
            Serial.print("\t");
            Serial.println(aaReal.z);
           
            lettura[attuale++] = aaReal.x;
if (attuale > (NUM_ELEM_MEAN - 1) ) {
attuale = 0;
}
media = 0;
for(int index=0;index<NUM_ELEM_MEAN;index++) {
media += lettura[index];
}
media = media / NUM_ELEM_MEAN;

//NEW CODE
if (delay_counter < 1700) {
delay_counter++;
} else {
v = (-500. + media)*(255./400.);
if (v == 0) {
//fermo
vel = 0;
  analogWrite (E1,0);
  digitalWrite(M1,LOW);  
  analogWrite (E2,0);   
  digitalWrite(M2,LOW);
} else if (v > 0) {
//avanti
vel = v;
  analogWrite (E1,vel);
  digitalWrite(M1,HIGH);  
  analogWrite (E2,vel);   
  digitalWrite(M2,HIGH);
} else if (v < 0){
//in dietro
vel = -v;
  analogWrite (E1,vel);
  digitalWrite(M1,LOW);  
  analogWrite (E2,vel);   
  digitalWrite(M2,LOW);
}
}
        #endif
Ho semplicemente sostituito nel codice precedente il dato da usare che tiene conto solo della variazione dell'asse x chiamato:"aaReal.x".Poi ho dovuto inserire per la calibrazione del sensore anziché il valore in gradi usato precedentemente il valore -500 che consiste nel valore di partenza quando e' perfettamente parallelo al terreno.Ecco qui si sono presentati i primi problemi perché ad ogni accensione questo valore ha una variazione che quindi mi sposta il riferimento iniziale e questo mi sta dando qualche problema di stabilita'.
Ho dovuto inserire un counter
 if (delay_counter < 1700) {
delay_counter++;
questo perché il sensore all'accensione impiega alcuni secondi(circa 15) per raggiungere il valore stabile iniziale quindi dopo circa 1700 letture diventa stabile.Quindi i comandi ai motori vengono inviati dopo questi 15 secondi.
Ora al software manca solo la parte di sterzata data dal potenziometro collegato al manubrio che ancora non ho sviluppato.