Pages Menu
TwitterFacebook



BANNER1_ALT

Posted by on May 20, 2015 in Sensores analógicos | 5 comments

MMA7361 Sensor Acelerometro

MMA7361 Sensor Acelerometro

MMA7361 Sensor Acelerometro

sensor MMA7361

MMA736 Sensor Acelerometro

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.

 

Descripción de pines del sensor MMA7361:

MMA7361

Nombre de pines del MMA7361

Eje – X Es una señal de salida analógica a lo largo del eje X
Eje – Y Es una señal de salida analógica a lo largo del eje Y
Eje – Z Es 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
5V Este 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.3V Este 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

NEGRO GND = Tierra

5V

ROJO

5V

A0

AZUL

X = Salida x

A1

VERDE

Y = Salida y

A2 AMARILLO

Z = Salida z

GND

CAFE

GS = g-Select

GND CAFE

ST = Self Test

AREF GRIS

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.

#include <math.h>

void setup() {
  analogReference(EXTERNAL);
  Serial.begin(9600);
}

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

int xVal = 0;
int yVal = 0;
int zVal = 0;

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

double angleYZ = 0;
double angleXZ = 0;

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 G Voltaje salida Arduino analogRead() Luego de map()
1.5 ~3.3V ~1023 ~500
0 ~1.6V ~511 ~0
1.5 ~0V ~0 ~-500

 

  void loop() {
  

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

  xVal = analogRead(0);
  yVal = analogRead(1);
  zVal = analogRead(2);
  

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

  xVal = map(xVal, 0, 1023, -500, 500);
  yVal = map(yVal, 0, 1023, -500, 500);
  zVal = map(zVal, 0, 1023, -500, 500);
  

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

  angleYZ = atan((double)yVal / (double)zVal);
  angleYZ = angleYZ*(57.2958);

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

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

  Serial.write("yz:");
  Serial.print(angleYZ);
  Serial.write("\n");

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

  delay(100);
}

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.  Con la ayuda del puerto serial se pudo observar los datos obtenidos del sensor en movim

INCLINOMETRO DIGITAL CON ARDUINO

5 Comments

  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 ?

    • El LED esta conectado a VCC, siempre va a estar encendido.

  2. sabes en que unidades mide la aceleracion el acelerometro?

    • Hola, es g = gravedad, es la unidad que maneja este tipo de sensor para esa variable

  3. Buenos dias! Que calcula exactamente el sensor MMA7361? Aceleracion o inclinacion? Gracias.

Post a Reply

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