Velocidad de medición con acelerómetro de 3 ejes

2

Estamos creando una bola que cambia de color dependiendo de su velocidad cuando rueda.

Tengo un sensor de acelerómetro de 3 ejes.

Este es el código que estamos usando en este momento:

int xAxis = A3;
int yAxis = A1;
int zAxis = A2;
int axisValue = 0;

int led = 13;
int led2 = 12;
int led3 = 11;

void setup() {
  Serial.begin(38400);
  Serial.println("Starting up");

  pinMode(led, OUTPUT);     
  pinMode(led2, OUTPUT);     
  pinMode(led3, OUTPUT); 
}

void loop() {
  axisValue = analogRead(xAxis);    
  Serial.print("X="); Serial.print(axisValue);

  axisValue = analogRead(yAxis);    
  Serial.print(",Y="); Serial.print(axisValue);

  axisValue = analogRead(zAxis);    
  Serial.print(",Z="); Serial.println(axisValue);

  if (axisValue > 300 ) {
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(led2, LOW);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(led3, LOW);   // turn the LED on (HIGH is the voltage level)
    Serial.println("more than 300");
  } 
  else if  (axisValue < 300 ) {
    digitalWrite(led, LOW);     // turn the LED on (HIGH is the voltage level)
    digitalWrite(led2, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(led3, HIGH);   // turn the LED on (HIGH is the voltage level)
    Serial.println("less than 300");
  }
 // delay(200);                 
}

Así que tengo algunos LEDs que se encienden y apagan. Pero quiero cambiar la luz de acuerdo a la velocidad no solo a la posición. ¿Cómo puedo hacer eso?

    
pregunta user43716

1 respuesta

1

Un acelerómetro mide la aceleración, no la velocidad. Para obtener velocidad, deberá integrar los datos de aceleración a lo largo del tiempo. Dado que esto se encuentra en el dominio discreto (solo puede muestrear la aceleración un número finito de veces por segundo) es más una aproximación y puede relacionarse mediante la siguiente fórmula donde A = aceleración, V = Velocidad, T = Período de muestreo.

V [k + 1] = V [k] + T * A [k]

Entonces, cada vez que se muestrea la aceleración, deberías evaluar esta fórmula y luego hacer V (k) = V (K + 1). Esto es esencialmente la integración.

También tenga en cuenta que los datos de aceleración que lee el sensor incluyen la fuerza debida a la gravedad, esto generalmente se explica restando 9.8 m / s de las lecturas del eje z, sin embargo, en su caso, dado que el acelerómetro está girando, el el efecto de la gravedad probablemente (con suerte) se anularía al ser aplicado por igual en todos los ejes.

Por lo general, los acelerómetros deben orientarse de manera precisa para evitar grandes errores. Por ejemplo, un error de ángulo de solo 1 grado causaría que la velocidad disminuya en 1.7 m / s después de 10 segundos. Para aplicaciones en las que la orientación no es fija, generalmente se usa un giroscopio junto con el acelerómetro para tener en cuenta la orientación real de cada eje. Como el acelerómetro girará rápidamente en su caso, no puedo decir con certeza cómo se comportará. Como solo necesita velocidades relativas, puede funcionar lo suficientemente consistente para sus necesidades, o puede que no funcione en absoluto, no puedo decirlo. Incluso con acelerómetros correctamente orientados, el cálculo de la velocidad produce errores significativos, ya que cada pequeño error en la aceleración se sumará a lo largo del tiempo. En mi experiencia, este error podría ser de alrededor de 3 m / s después de 10 segundos o más. Vale la pena intentarlo, ¡buena suerte!

    
respondido por el THEMuffinMan7

Lea otras preguntas en las etiquetas