Ciao a tutti, io e Vanni stiamo impazzendo per interpretare il valore di questo giroscopio, in teoria dovrebbe dare come output velocità angolare e noi stiamo cercando di spiegare ad arduino come fare un integrale...
Davvero complesso!
Il codice piu' o meno da il valore in gradi MA! si perde almeno 3 gradi ogni 90 di rotazione....non so davvero qualcuno sa darci qualche info?
Ecco il codice:
int sensorPin = 2; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
float angularVelocity = 0; // variable to store the value coming from the sensor
float previousAngularVelocity = 0;
double orientation = 9000;
double previousOrientation = 9000;
long previousTime = 0;
unsigned long time;
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop() {
//orientation = previousOrientation;
for ( int i = 0; i < 11 ; i++) {
long treshold = 320.999;
angularVelocity = (analogRead(sensorPin) - treshold) + angularVelocity;
if (i == 10) {
angularVelocity = (angularVelocity / 10) * 0.75;
break;
}
}
if (angularVelocity - previousAngularVelocity > - 1 && angularVelocity - previousAngularVelocity < 1) {
angularVelocity = previousAngularVelocity;
}
time = millis() - previousTime;
previousTime = millis();
orientation = orientation + (angularVelocity * time);
if (orientation - previousOrientation > - 1 && orientation - previousOrientation < 1 ) {
orientation = previousOrientation;
}
Serial.println(orientation / 100);
}
come vedete con questo pezzo:
if (orientation - previousOrientation > - 1 && orientation - previousOrientation < 1 ) {
orientation = previousOrientation;
}
abbiamo cercato di limitare il moto oscillatorio e impreciso del valore output. Altro problema con il valore treshold cerchiamo di calibrare il valore in modo che sia 90 ma il valore cambia in rapporto al voltaggio a cui si alimenta arduino, quindi sarebbe da pensare a un codice che auto-calibra il valore treshold nei primi 5 secondi dopo l'accensione in modo che il valore in gradi sia preciso e che non guadagni ne perda.
qualcuno conosce sti cosi e puo' darci una mano?