MMA7361 Sensor Acelerómetro

Este sensor (MMA7361) es un acelerómetro analógico de 3 ejes (x,y,z). El nivel de las medidas del acelerómetro, nos permite medir la aceleración, o la inclinación de una  plataforma con respecto al eje terrestre.

Otras características que tiene  son el modo sleep, acondicionamiento de señal, filtro pasa bajas de 1 polo, compensación de temperatura, auto prueba, y detección de 0g para caída libre. Este sensor funciona con alimentaciones entre 2.2 y 3.6VDC (3.3V es el valor óptimo), y consume solamente 400µA de corriente.

Especificaciones del sensor MMA7361:

  • – Bajo consumo de corriente: 400 μA.
  • – Modo de espera: 3 μA.
  • – Bajo Voltaje de la operación: 2,2 V – 3,6 V.
  • – Alta sensibilidad (800 mV / g@1.5g).
  • – Sensibilidad seleccionable (± 1,5 g, ± 6 g).
  • – Encendido Rápido Tiempo de calentamiento (0.5 ms Tiempo de Respuesta Activa).
  • – 0g-Detect para la Protección de la caída libre.
  • – Acondicionamiento de señales con filtro de paso bajo.
  • – Diseño robusto, alto Shocks supervivencia.
sensor MMA7361
MMA736 Sensor Acelerometro



de pines del sensor MMA7361:

MMA7361
Nombre de pines del MMA7361
Eje – XEs una señal de salida analógica a lo largo del eje X
Eje – YEs una señal de salida analógica a lo largo del eje Y
Eje – ZEs una señal de salida analógica a lo largo del eje Z
Sleep(SL)Este pin se activa de forma negada el integrado pasara a sleep y no nos enviara nada en sus salidas. se reanudará la operación cuando se consuma mas energía.
Detect(0G)Este pin será alto cuando se detecta 0g en los 3 ejes. Útil para detectar caida libre
5VEste pin está conectado a un regulador construido en el que traerá de 5v a 3.3v que se requieren en el chip para ejecutarse.
3.3VEste pin no pasa por el regulador de 5v, es para aquellos que tienen un voltaje de 3.3v regulado previamente.
Ground(GND)Este pin debe estar conectado a la tierra del circuito.
Sense Select(GS)Este pin es un habilitador de los sensores x, y , z. Este hay que habilitarlo a nivel bajo, y luego restan los pines de alimentación y masa. se utiliza para seleccionar entre las dos sensibilidades. Si este pin es bajo se encuentra en modo 1,5 g. si es alto, se cambia al modo de 6 g.
Self Test(ST)Este chip se ha construido en un auto-test para verificar que tanto las piezas mecánicas y eléctricas en el interior del chip están funcionando correctamente.Es útil para la calibración.

 Se explicara como crear un inclinómetro utilizando el  acelerómetro MMA7361 de 3 ejes y Arduino

Material que se necesita:

Conexión del sensor (MMA7361) al arduino:

arduino-MMA7361
Conexión del MMA7361 al Arduino

 Mapa de pines del SENSOR MMA7361

ARDUINO

CABLE/COLOR

MMA7361

GND

NEGROGND = Tierra

5V

ROJO

5V

A0

AZUL

X = Salida x

A1

VERDE

Y = Salida y

A2AMARILLO

Z = Salida z

GND

CAFE

GS = g-Select

GNDCAFE

ST = Self Test

AREFGRIS

3.3 y SL = Sleep

MMA7361
Foto del la conexión



 Explicación del programa:

Este circuito es capaz de funcionar con 5V, sin embargo internamente funciona con 3.3V lo cual utilizaremos como referencia para el convertidor Análogo->Digital. Esto nos permitirá tener mayor precisión a la hora de leer.

[code language=»cpp»]
#include <math.h>

void setup() {
analogReference(EXTERNAL);
Serial.begin(9600);
}
[/code]

Definimos algunas variables para almacenar los valores de los componentes de las fuerzas en cada uno de los ejes del acelerómetro.

[code language=»cpp»]
int xVal = 0;
int yVal = 0;
int zVal = 0;
[/code]

Un par de variables de tipo flotante doble van a almacenar el ángulo en el que se encuentra el acelerómetro.

[code language=»cpp»]
double angleYZ = 0;
double angleXZ = 0;
[/code]

Vamos a utilizar el puerto serial para escribir los valores.

Luego, en el loop principal tenemos que leer los valores análogos y hacer un pequeño ajuste utilizando la función map(). El problema es que el convertidor análogo-digital tiene un rango que va desde 0 a 1023, si utilizáramos la función arco tangente utilizando estos valores nos mentiría ya que los componentes de la fuerza solo tendrían valores positivos y por lo tanto valores erróneos.

Para corregir este problema utilizamos la función «map()» que nos permitirá que nuestro rango varíe entre valores positivos y negativos como se muestra en la siguiente tabla:

Fuerza GVoltaje salidaArduino analogRead()Luego de map()
1.5~3.3V~1023~500
0~1.6V~511~0
1.5~0V~0~-500

[code language=»cpp»]
void loop() {
[/code]

Como pueden ver en el código lo primero que hacemos es leer los valores que se encuentran en las entradas análogas

[code language=»cpp»]
xVal = analogRead(0);
yVal = analogRead(1);
zVal = analogRead(2);
[/code]

Luego utilizamos la función map para generar un rango más adecuado para los valores de entrada.

[code language=»cpp»]
xVal = map(xVal, 0, 1023, -500, 500);
yVal = map(yVal, 0, 1023, -500, 500);
zVal = map(zVal, 0, 1023, -500, 500);
[/code]

Por último aplicamos las sencillas funciones trigonométricas para calcular el ángulo correspondiente.

[code language=»cpp»]
angleYZ = atan((double)yVal / (double)zVal);
angleYZ = angleYZ*(57.2958);

angleXZ = atan((double)xVal / (double)zVal);
angleXZ = angleXZ*(57.2958);
[/code]

Una vez calculados los ángulos simplemente los imprimimos en el puerto serial para poder leerlos desde la computadora.

[code language=»cpp»]
Serial.write(«yz:»);
Serial.print(angleYZ);
Serial.write(«\n»);

Serial.write(«xz:»);
Serial.print(angleXZ);
Serial.write(«\n»);

delay(100);
}
[/code]

Si revisan la salida del puerto serial notarán que los valores varían «bastante», esto sucede ya que siempre hay algo de «ruido» o interferencias en la señal y es completamente normal.

Hasta este punto simplemente compilamos nuestro programa y lo guardamos en nuestro Arduino.

mma7431
Proceso de descarga
MMA7361
Proceso de comprobacion del programa

Configuración del puerto serial

 Para cargar el programa e ingresar al monitor serial que ofrece el Arduino es necesario asegurarse que el puerto COM sea el correcto.  Para ello tenemos que acceder a “Administrador de dispositivos” desde la PC y verificar que el COM que nos muestra sea el mismo que marca el software de Arduino.

PUERTO
Configuración de Puerto Serial
 

Una vez que este verificado el puerto serial solo damos click en la lupa que aparece en la parte superior derecha y automáticamente abre otra ventana que muestra los datos en el puerto serial.

serial
Datos del MMA7361 mostrados en puerto serial

Nota: observe que la nueva ventana marca como título del COM de la tarjeta que corresponde al serial monitoreado.

Para analizar el comportamiento del sensor se mueve de un lado a otro dependiendo las cordenedas se marcara los grados en la que se movió el sensor ya sea en xz o  yz. 


16 comentarios en «MMA7361 Sensor Acelerómetro»

  1. Hola muchas gracias, una duda: el módulo tiene un LED. Cuando está funcionando con normalidad debería estar encendido o apagado? Tienes que ver con el Sleep Mode ?

  2. Hola que tal amigo hice las conexiones tal y como viene, pero me imprime solo 45 y no cambia, y si no utilizo el analogReference(EXTERNAL); da otros resultados.

    1. Hola que tal 45 en el código? en la terminal? los 3 ejes? de cualquier manera te recomiendo probar a medir el voltaje con un multimetro del eje que este ortogonal al horizonte y después mide el voltaje volteando el dispositivo en ese eje en 180º.

    1. Cambia el rango de un numero a otro, común mente conocido como regla de tres o también relacionado con la ecuación de la recta. Por ejemplo el PWM trabaja a 8 bits y el ADC trabaja a 10 bits, esto es que cada módulo tiene un valor máximo de 256 y 1024 respectivamente. Entonces si tu quieres pasar el dato del ADC al PWM cuando el ADC llegue al 1/4 de su valor máximo va a dejar al PWM al máximo. Entonces aplicas la función map para que 1/4 del rango del ADC signifique ese 1/4 al valor de el PWM que en este caso para 1/4 seria: 64. https://www.arduino.cc/en/Reference/Map

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *