Problemas al usar el acelerómetro como interruptor de movimiento

Estoy usando un acelerómetro ADXL206 y un microcontrolador PIC16F917 para determinar el movimiento lineal relativo de un dispositivo que funciona de acuerdo con este movimiento.

Puedo leer datos del acelerómetro:

  • Da una salida de 2.5 @ sin movimiento
  • Da una salida de 2,5 + 0,312 voltios por 1g Derecho
  • Da una salida de 2,5 + 0,312 voltios por 1g Izquierda

Tengo un dispositivo con 2 LED para determinar la dirección del movimiento. Debería funcionar así:

  • inicio del programa: LED apagados
  • movimiento derecho: LED rojo encendido y permanece así. LED azul apagado. incluso cuando el dispositivo deja de moverse
  • movimiento izquierdo: LED azul ENCENDIDO y permanece encendido. LED rojo apagado. incluso cuando el dispositivo deja de moverse

Los resultados reales que obtengo son cuando el dispositivo se mueve, parpadea el LED solo durante el movimiento y luego se apagan cuando no hay movimiento.

No puedo obtener la dirección del acelerómetro y permanecer en un estado estable.

¿El problema está en leer los valores del acelerómetro o en el algoritmo?

Información insuficiente. Necesitas describir el problema correctamente.
Necesito usar el acelerómetro como interruptor de detección de movimiento y detección de dirección. Entonces tenga un estado estable de mi dispositivo. Por ejemplo, el movimiento de estabilidad a la derecha enciende el LED rojo y permanece ENCENDIDO, y el movimiento de estabilidad a la izquierda enciende un LED azul y apaga el LED ROJO.
¿Dónde está tu código fuente?
Proporcione el código fuente y los esquemas.
La descripción actual del comportamiento deseado del dispositivo debería ser trivial de implementar: simplemente deje de leer el acelerómetro una vez que se encendió uno de los dos LED. Sin embargo, sospecho que eso no es realmente lo que quieres, sino que quieres detectar movimiento en la dirección opuesta. Por eso, la respuesta de Anindo proporciona razones por las que esto no es trivial con un acelerómetro.

Respuestas (2)

El dispositivo que contiene el acelerómetro experimenta una fuerza (de x G) momentáneamente, en contra de la dirección de la aceleración, cuando comienza el movimiento. Entonces experimentará 0 Geesque la aceleración se detiene, es decir, una vez que se ha alcanzado la velocidad objetivo.

De manera similar, cuando se detiene el dispositivo desde una velocidad constante, experimentará una fuerza momentánea que se opone a la desaceleración, luego cero fuerza nuevamente una vez que se detiene.

Eso es lo que informa su experimento: los LED parpadean cuando se experimenta la aceleración, una vez en cada dirección. En otras palabras, el comportamiento es el diseñado.

Para mantener una indicación mientras continúa el movimiento, un acelerómetro no es el dispositivo ideal. No es un detector de movimiento , es un detector de aceleración , como su nombre lo indica.

Si bien algunos trucos de software simples ( integrar la aceleración en el tiempo ) podrían usarse para rastrear cuándo se siente la aceleración en una dirección u otra, dicho mecanismo fallaría si la fuerza de desaceleración (o aceleración) es muy baja en comparación con la sensibilidad y el sentido piso de ruido de la señal, como si uno fuera a acelerar el dispositivo muy despacio, pero lo detuviera rápidamente, o viceversa .

Gracias. Necesito que la indicación esté ENCENDIDA incluso cuando el dispositivo detiene el movimiento. Está destinado a sentir el estallido de movimiento. No el movimiento en sí.
@PhilFrost Sí, tienes razón... Editado para que tenga sentido ahora. Gracias. :-)
@Swiftmind No estoy seguro de entender su comentario, parece contradecirse: si desea que el LED se encienda incluso cuando el movimiento se detiene, simplemente conecte un LED en serie con una resistencia, no se requieren otros componentes electrónicos. Si desea sentir el estallido de movimiento (lo que presumiblemente significa aceleración en su terminología), entonces en el momento en que la aceleración se detiene, es decir, no hay más aceleración (cambio de velocidad), la indicación se detendrá, que es lo que dice que está sucediendo.

Un acelerómetro no mide el movimiento: mide el cambio en el movimiento. O más exactamente, mide la derivada de la velocidad . Entonces, cuando su acelerómetro comienza a moverse en una dirección, puede detectarlo. Pero una vez que te estás moviendo y ya no estás acelerando, al acelerómetro, bien podría estar sentado en tu escritorio. Lo único que medirá es el ruido y la aceleración constante de la gravedad.

Una analogía sería esta: si no puede ver, y no puede escuchar el viento ni el ruido de la carretera, y las ventanas están cerradas para que no pueda sentir el viento, ¿cómo sabría que está en un automóvil en movimiento o estacionado? ¿auto?

Dicho de otra manera, imagina una pelota en equilibrio sobre la parte superior de tu objeto. El acelerómetro mide cómo se moverá la pelota en relación con el objeto a medida que el objeto cambia de velocidad.

No puedes hacer lo que describes con un acelerómetro práctico. Cuando su objeto comienza a moverse hacia la izquierda, el acelerómetro registra una fuerza en una dirección. Cuando su objeto luego deja de moverse, el acelerómetro registra una fuerza en la otra dirección. El problema es este: esa fuerza en la otra dirección es indistinguible de la fuerza que medirías cuando tu objeto comienza a moverse hacia la derecha.

Estás midiendo el cambio en la velocidad. El cambio de velocidad es el mismo en ambos casos:

  • moviéndose a la izquierda -> sin moverse
  • no se mueve -> se mueve a la derecha

No puedes distinguirlos con un acelerómetro. Si desea medir "movimiento hacia la izquierda" y "movimiento hacia la derecha", eso es velocidad, no aceleración. Necesitas un dispositivo que mida la velocidad. En teoría, puede integrar la aceleración para obtener la velocidad 1 , pero los detalles prácticos como el ruido y la compensación harán que el cálculo de la velocidad se desvíe del valor real.

1: un ejemplo de un sistema que hace esto es un sistema de navegación inercial . Estos sistemas emplean una ingeniería muy cuidadosa y sistemas costosos para reducir, pero no eliminar, la deriva.

Gracias. Solo quiero detectar el inicio y la dirección del movimiento.
@Swiftmind quizás debería editar su pregunta para que sea más clara.