Mostrando entradas con la etiqueta MMA8451Q. Mostrar todas las entradas
Mostrando entradas con la etiqueta MMA8451Q. Mostrar todas las entradas

viernes, 27 de marzo de 2015

Sensor de Choque con Acelerómetro

Para esta practica se nos pidió escoger entre un podómetro o un sensor de choque, este equipo se decidió por el sensor de choque. Se considera el siguiente criterio:
  • Al censar un choque se activa un LED A
Para la realización de la practica se selecciono el acelerómetro digital MMA8451Q, del cual ya se hablo de manera detallada en la entrada anterior.

Configuración del Acelerómetro

Al leer las notas de programación AN4070 se entiende que el sensor de choque se puede realizar de dos maneras, la primera es configurando la detección de movimiento, la otra manera es configurando la detección de caída libre para un eje diferente a Z, optamos por la segunda opción, ya que es más manejable. 

Accedimos al registro 0x15, en el cual se escribió el valor que representa la activación de la detección de caída libre, tomando en cuenta únicamente el eje X, lo que hacemos realmente es verificar la des-aceleración en un eje determinado.

Finalmente se configura lo sensibilidad del choque escribiendo en el registro 0x17, los demás registros de interrupción de mantuvieron en la configuración de la practica anterior.

Preparación de las pruebas

Para realizar las pruebas nos hicimos de un carro a control remoto, el cual fue adaptado en ciertos aspectos, primero se introdujo una batería con conexión USB para alimentar la placa, se fijo ligeramente a la base, ya que el chasis mantendría la sujeción.

Usamos una batería recargable para la alimentación de la placa


El chasis se modifico para que pueda pasar la antena en un lateral y el cable de carga en la parte trasera, finalmente se sujeto la placa en la parte plana del carrito, la selección del juguete se baso en tener un espacio suficiente para poder posicionar dicha placa.

Vista de la sujeción de la Placa

Adecuaciones para paso de cable hacia la Placa


Pruebas

Se realizaron pruebas de choque en el eje configurado, como se puede apreciar, no es necesario que el sensor este en la zona de impacto, la des-aceleración permite saber que hubo un choque, es importante mencionar que el mismo efecto se obtendría si se frenara muy rápido el coche. En los siguientes vídeos se puede apreciar el resultado final.



viernes, 20 de marzo de 2015

Manipulación de Actuadores por medio de un Acelerómetro

Para esta practica se nos pidió que mediante un acelerómetro pudiésemos controlar algunos actuadores, específicamente se dieron los siguientes requerimientos:
  • Los valores del Eje X controlen un Servomotor A
  • Los valores del Eje Y controlen un Servomotor B
  • Encender un LED A con un Tap Simple
  • Encender un LED B con un Tap Doble
  • Hacer parpadear un LED C con el censado de caída libre
Para la realización de la practica se selecciono el acelerómetro digital MMA8451Q, que cumple con una serie de características que se citan a continuación.

Acelerómetro MMA8451Q 

Descripción.

El MMA8451Q es un dispositivo de bajo consumo, con 14 bits de resolución. Su salida digital es I2C, pero destaca su gran tasa de muestreo; cuenta con seis velocidades de muestreo configurables por el usuario desde 1,5 Hz hasta 800 Hz.

Cuenta con diferentes funciones integradas flexibles y modos de operación según se quiera priorizar, el bajo ruido, alta resolución o bajo consumo. Éste dispositivo tiene buffers FIFO 14/8 que pueden contener hasta 32 muestras de datos, ya sean directas o provenientes de filtros pasa altas, dependiendo de la selección del usuario.

Características.

  • 1,95 a 3,6 voltios la tensión de alimentación
  • Velocidades de transferencia de datos (ODR) de 1,56 Hz a 800 Hz
  • Resolución de 14 bits
  • I²C interfaz de salida digital (opera a 2,25 MHz con 4,7 kW pull-up)
  • Detección de golpes: Simple y doble, direccional
  • Detección de vibración: Vibración, vibración direccional
  • Tres canales integrados de detección de movimiento
  • Caída libre o detección de movimiento: un canal
  • Detección de pulso: un canal
  • Detección Jolt: un canal

Principio de funcionamiento.

Este sensor convierte la aceleración detectada en un número binario a complemento y luego a 2 el cual puede ser leído por un microcontrolador externo. El número generado dependerá de la sensibilidad que se haya ajustado el dispositivo, puede ser ±2g, ±4g ±8g. Donde  “g” representa la aceleración de la gravedad (9,8 m/s2).
Para obtener el valor más pequeño que podemos detectar con esa configuración, el rango de medidas seleccionado dividido entre el número de cuentas de la sensibilidad que se desee.
Para calcular el valor más pequeño de aceleración que el sensor puede detectar, se divide el rango de medida completo más pequeño (±2g), entre el número de cuentas con la mayor sensibilidad a 14 bits (4096), por lo que el bit menos significativo que se puede medir por el sensor es:

Resolución=4g/(4096 cuentas)=0,0009765625 g/cuentas

Esto es el equivalente a una cuenta. Para esa configuración dada, solamente hay que multiplicar el valor leído al acelerómetro y multiplicarlo por la resolución del mismo y así obtener el rango en g’s.

Aceleración= (nº de cuentas)*(resolución)  

Esquema del sensor.


Conclusión.

Al final decidimos usar este sensor aparte de las razones descritas arriba la más importante es que este producto está incluido en la Freescale que estamos manejando.
Los algoritmos de detección de movimientos embebidos en éste dispositivo, permite su fácil y rápida implementación para aplicaciones que requieran la detección de orientación, vibración, golpes, sacudidas, caída libre, que son los objetivos de detección en esta práctica

El manejo del acelerómetro se realizo con ayuda de la librería propia que se puede encontrar en el entorno de MBED, a dicha librería se le añadió algunas funciones a medida de que la practica así lo requería.

Control de Servomotores

Los servomotores deben ser controlados con el valor correspondiente de la orientación del eje predeterminado, por medio de una función que accede a los registros 0x01, 0x03 se obtienen los valores de la orientación de los ejes X e Y.

El valor que se obtiene de la función es un numero flotante, por lo tanto se guarda en una variable del mismo tipo, el valor de la variable puede ir de -1 a 1, debido a que nos conviene manejar números positivos decidimos mover el rango de la variable de 0 a 2.

El control directo sobre el Servomotor se realiza mediante una señal PWM, el entorno MBED ya cuanta con una librería bastante potente para el manejo de PWM. Usamos un Servomotor modelo MG995, que tiene un periodo de 20ms, por lo cual, mediante la función period modificamos dicho periodo a 0.02 segundos.

El ciclo de trabajo se configuro a fin de trabajar acorde al servomotor, de la hoja de datos sabemos que:

1ms - 0°
1.5ms - 90°
2ms - 180°

El valor que se obtiene de los ejes se ajusto a fin de cumplir con el rango del ciclo de trabajo, de tal manera que se pueda relacionar de forma lineal la orientación con la posición del servomotor. El resultado final se muestra a continuación.


Tap y Doble Tap

La librería de manejo del MMA8451Q no configura las interrupciones de Tap Simple y Doble Tap, por lo cual agregamos a la librería funciones de acceso a los registros necesarios para poder hacer uso de las interrupciones, los registro fueron:

PULSE_CFG - 0x21

Este registro configura de detección del evento Tap Simple y Doble Tap, el valor que se asigna en el registro se puede variar de tal manera que se habilite únicamente el evento Tap Simple, que se habilite únicamente el evento Doble Tap o que se habilite de manera simultanea el evento Tap Simple y Doble Tap. Nosotros habilitamos ambos eventos al escribir en el registro el valor 0x7F.

PULSE_THSX - 0x23


Modifica el umbral del pulso para el eje X, se estableció un valor de 0x30, que equilave aproximadamente a 3g.

PULSE_THSY - 0x24


Modifica el umbral del pulso para el eje Y, se estableció un valor de 0x30, que equilave aproximadamente a 3g.

PULSE_THSZ  - 0x25


Modifica el umbral del pulso para el eje Z, se estableció un valor de 0x4F, que equivale aproximadamente a 5g.

PULSE_TMLT - 0x26

Con este registro definimos el tiempo que puede transcurrir entre el inicio de la aceleración en el eje seleccionado y el momento en el cual se alcanza el umbral especificado, para nuestro caso nos ayudamos de las tablas que se encuentran en las notas de programación AN4072. a 800Hz y para una TMLT de 60ms se estableció el valor del registro en 0x30.

PULSE_WIND - 0x28

Este registro especifica el tiempo en el cual un segundo pulso debe ser considerado, es decir, que es el tiempo entre pulsos máximo en el cual se considera un Tap Doble, Decidimos establecerlo a aproximadamente 700ms.

De igual manera se configuraron las interrupciones y con la ayuda de la librería InterrupIn de MBED se procedió a realizar el manejo de actuadores. Para el Tap Simple se selecciono el LED Rojo, para indicar un Tap Doble se selecciono el LED Verde, cuando se identifica un Tap Simple la interrupción producida hace que se ejecute una función que activa el LED correspondiente por algunos milisegundos, si se produce otro Tap dentro de los siguientes 700ms dicho Tap producirá una interrupción de Tap Doble, que activa el LED Verde, el resultado final se muestra en el siguiente vídeo, donde primero se hacen pruebas del Tap Simple para finalizar con las pruebas del Doble Tap.


 

Caída Libre 

La librería de manejo del MMA8451Q no configura la interrupción de Caída Libre, por lo cual agregamos a la librería funciones de acceso a los registros necesarios para poder realizar la practica, los registro fueron: 

FF_MT_CFG - 0x15

Este registro nos permite configurar el interrupción de Caída Libre, según la tabla del apartado de Free Fall de las notas de programación del acelerómetro, El valor que le dimos al registro fue 0xB8.

FF_MT_SRC - 0x16

Este registro es de solo lectura, en el podemos saber el estado de la interrupción y que orientación tuvo la Caída Libre.

Según los parámetros establecidos mediante el uso de registros, se procedió a realizar la prueba de Caída Libre, se selección el LED Azul para ser el indicador de dicha Caída, se procuro procuro una superficie blanda para no dañar la placa. El resultado final se muestra a continuación, también agregamos un vídeo en cámara lenta para poder observar a mejor detalle cuando se activa la función que hace parpadear el LED Azul.