Acelerómetros de 3 ejes, lo que necesitas saber

0
26019
 El siguente «Post» tiene como objetivo la comprensión de los acelerómetros, como probarlos y saber como utilizarlos posteriormente. Nos hemos ayudado de Arduino para implementar una manera de estudiarlos. Previo al uso de tales sensores en nuestros proyectos, es importante conocer cómo funcionan conceptualmente sin entrar en profundidad en la arquitectura interna. Solo nos vamos a centrar en lo que es realmente importante comprender para poder utilizarlos.

Antes tendremos que revisar conceptos útiles que utilizaremos en este estudio. Sabemos que todos los cuerpos en la superficie terrestre están sometidos a la fuerza de gravedad, que es una fuerza que nos empuja hacia el centro de la tierra. Cualquier objeto e independiente de su masa, se verá acelerado hacia la tierra a un valor g=9,8 m/s2 (depende también del lugar geográfico), y más aún, ya en la superficie de la misma, continúa siendo acelerado y es lo que permite medir el peso de una persona o cualquier objeto.

El peso es una fuerza que está dada por la ecuación de Newton F=mg (fuerza es igual al producto de la masa por la aceleración), siendo m la masa del objeto. Es muy común confundir masa con peso, es erróneo decir que por ejemplo Juan pesa 78 Kg, en realidad la balanza mide cuanto el producto de m·g , y los 78kg son una unidad de masa.

El peso de Juan sería 78 · g = 764 Kg · m/s2 = 764 Newtons. La balanza divide por un factor 9,8, 10 para redondear y muestra 78 Kg.

La masa es una propiedad fundamental de todos los objetos. Se definió al Kilogramo hacia 1889 en la revolución francesa, y es un prototipo internacional de una aleación de Platino e Iridio. Dicho elemento patrón pesa 9.8 N. Es decir, no se eligió cualquier patrón de masa, sino aquella que represente 9,8 N.

La masa es una característica inercial de los objetos, y es la propiedad que nos dice que un objeto permanecerá en equilibrio a menos que se le aplique una determinada fuerza (1ra de Newton). Este efecto se puede notar, por ejemplo, al ir en un vehículo. Si el vehículo está en reposo, la masa de los pasajeros están en equilibrio, de igual manera que si viajasen a 150 Kmt/h. Pero si se frena bruscamente, la fuerza de frenado se aplica al vehículo y no a los pasajeros, por lo tanto los mismos continuarán viajando a 100Kmts/h. Las fuerzas G , tienen como unidad a la gravedad g, es decir 1 fuerza G=9.8m/seg2, el termino fuerza aplicado no es correcto, ya que la gravedad no es una fuerza, pero así se la denomina como una medida para identificar a la gravedad, entonces los cambios de aceleración producen Fuerzas G. Por ejemplo supongamos que un vehículo viaja a 100 Km/h y se estrella contra un muro y pasa a velocidad cero en 1 seg. Si suponemos que la aceleración ( negativa) es constante , podemos calcularla:

Teniendo en cuenta que  ( Vf=Vi+a*t)   Vf=0, Vi=100 Km/h, t=1seg a= -100*1000/(1*60*60) = -27.7 m/s2 , si 1G= 9.8 , sería una fuerza de casi 3G , es decir 3 veces la gravedad. Nuestro cuerpo está sometido a 1g , es decir que nuestro peso podríamos decir que posee 1g, este impacto genera entonces una fuerza 3 veces nuestro peso.

Recordar que F=mxa, donde la aceleración a es la denominada fuerza G. Es una manera mentalmente simple para comparar la fuerza con nuestro peso, sabiendo que nuestro peso o el de cualquier objeto representa 1G.

Sensor de aceleración, Acelerómetro  MMA7361

 

MMA7361
Acelerómetro MMA7361

Los acelerómetros, como el sensor MMA7361 son capaces de medir la aceleración en 3 dimensiones, llamados ejes X, Y, Z. Todo cuerpo posee un centro de masa que es el lugar donde se equilibran todas sus fuerzas. Si aplicamos una fuerza en un centro de masa, el cuerpo no va a rotar, pero si se aplica desplazado de su centro experimentara un momento de fuerza que lo hará rotar.

Cuando un objeto, en general se mueve por alguna fuerza aplicada, esa fuerza se puede descomponer como componentes de fuerza parciales sobre los 3 ejes, es decir Rx, Ry y Rz, el módulo o intensidad de la fuerza se calcula aplicando el teorema de Pitágoras en tres dimensiones:

R2 = Rx2+Ry2+Rz2   

Grádico de Fuerzas en 3D
Diagrama de componentes de Fuerza en 3 D

El origen podemos considerar que corresponde al centro de masa. Esta Fuerza tendrá asociados 3 ángulos, uno respecto de cada eje tal que: cos(Axr) = Rx / R cos(Ayr) = Ry / R cos(Azr) = Rz / R Y los ángulos: Axr = arccos(Rx/R) Ayr = arccos(Ry/R) Azr = arccos(Rz/R) ()ver fuente de referencia  starlino_Guide)

De esta manera, si nuestro acelerómetro sensor nos está indicando cierta medida de magnitud aplicada en cada eje, podremos realizar estos cálculos para determinar intensidad y ángulos de la Fuerza. Al adquirir nuestro módulo acelerómetro, es importante leer su Datasheet para conocer la referencia de sus ejes y su orientación. Por ejemplo el MMA7361 tiene la siguiente disposición: Es decir, colocado de esta manera vemos como nombra los ejes y su signo, el cual es de suma importancia.

referencia ejes acelerometro
referencia ejes acelerometro

Pensemos ahora  ,y a los efectos didácticos, que el Acelerómetro está conformado por un receptáculo en su centro de masa, y dentro del mismo tres pequeñas “bolillas” de masa xx, donde cada una está sujeta a cada eje X+, Y+, Z+ , a través de un resorte minúsculo capaz de registrar la fuerza elástica. Ahora, viene lo divertido, tal cual está colocado el chip del acelerómetro, como lo muestra anteriormente, la gravedad actúa sobre el eje Y, en sentido (-Y). La “bolilla” sujeta a Y+ sufrirá un estiramiento dado que cae por su peso, por efecto directo de la gravedad:

Fuerza elástica
Representación de +1G del acelerómetro

 

El estiramiento genera una fuerza con sentido Y+ igual a K (I-I0), donde (I-I0) es el estiramiento y K una constante de fabricación. I0 es el resorte sin estirar, es decir sin aplicación de fuerza alguna, llamada Fuerza 0G Esta fuerza corresponde enteramente aplicada sobre el eje Y llamada Fy, por lo tanto serpa proporcional a la fuerza +1G ya que actúa la gravedad directamente sobre él. El signo (+) indica el de la fuerza que realiza el resorte, tratando de evitar que el resorte se estire y su sentido corresponde a (+Y).

 

 

 

Fuerza elástica contraria a 1G
Representación de -1G del Acelerómetro

Si ahora rotamos 180 grados el chip, la “bolilla”, ahora comprimirá el resorte nuevamente por efecto de la gravedad pero, la fuerza del resorte posee un sentido hacia (-Y) lo que representara una proporción a la fuerza de -1G   Con el resto de los ejes sucede lo mismo con sus respectivas “bolillas” y resortes. La teoría indica que las salidas de tensión proporcional a la magnitud en cada eje, deberían ser iguales pero en la realidad no lo es. Cada eje tiene un rango de valores y que vamos a medir con Arduino.

 

En esta figura vemos, el resumen de cómo actúan los sentidos de la fuerza elástica.

 

Resumen de fuerzas
Resúmen : -1G, OG, +1G

 

 

 

 

 

Continuando con el DataSheet del acelerómetro bajo estudio, es fácil ahora comprender estas especificaciones estáticas:

Referencia de posición MMA7361
Posiciones de referencia Acelerómetro módulo MMA7361

El sensor, nuestro acelerómetro, en la realidad no tiene “bolillas” ni resortes pero me pareció más didáctico para explicarlo. De hecho utiliza un efecto capacitivo, las bolillas son capacitores y el resorte la separación dieléctrica.El recinto de cada eje se compone de dos capacidades que trabajan en conjunto, una de las capas se desplaza conforme al sentido e intensidad de las fuerzas G y por lo tanto cuando aumenta una capacidad, disminuye la otra:

Esquema conceptual real MMA7361
Concepto de la arquitectura real del Acelerómetro MMA7361

Descripción de los pines del chip (No del módulo)

  1. Sin conexión.
  2. Salida de tensión Fx
  3. Salida de tensión Fy
  4. Salida de tensión Fz
  5. Vss , masa 0v
  6. VDD alimentación, máxima 5V, internamente trabaja con 3V3 y es la referencia del transductor.Se lo puede alimentar directamente con 3v3.
  7. SLEEP: activo bajo, Low: pone a dormir al sensor, HIGH: Run normal
  8. Sin conexión
  9. OG detect: genera un HIGH cuando detecta 0G en los tres ejes, situación de caída libre.
  10. GSelect: LOW: sensibilidad de +/-1.5G , con 800mv/G. HIGH: sensibilidad de +/-6G con 260 mv/G
  11. Sin conexión
  12. Sin conexión
  13. Selt Test: HIGH: Modo de testeo interno, LOW: normal
  14. Sin conexión
Descripción del Módulo acelerómetro MMA7361

El módulo posee los siguientes pines:

  • FX, FY y FZ que son los 3 ejes.
  • GND . 0v referencia
  • 5V : si lo alimentamos con 5V
  • 3V3 : si lo alimentamos con 3V3, en caso de hacerlo con 5V, este pin ofrece 3V3 de salida.
  • SL : Sleep, ya explicado
  • OGDetect, ya explicado
  • Self Test, ya explicado
  • GSelect, ya explicado
Que pretendemos

Lo que se pretende ahora es medir el acelerómetro en sus tres ejes con lo cual lo rotaremos y observaremos los valores de +/-1G y OG en cada eje. Para esto, las rotaciones seguirán el mismo patrón  de la figura del chip, son 6 posiciones.

ARMADO

Módulo Sensor:

  • Fx al canal A0 del Arduino
  • Fy al canal A1
  • Fz al canal A2
  • GND: 0V desde GND ARDUINO
  • 5V: 5V desde ARDUINO
  • 3V3: nada o, si se desea se puede conectar a AREF del Arduino
  • OG: nada
  • ST: LOW=GND
  • GS: LOW=GND
Arduino:
  • A0: FX
  • A1:FY
  • A2:FZ
  • AREF: 3V3 desde Arduino, esto es dado que el modulo entrega tensiones entre 0 y 3V3 con lo cual podemos aprovechar todo el rango de la conversión.
El código

¿Qué esperamos ver?

Sabemos que la sensibilidad del acelerómetro MMA7361 es de 800mv/G ( GS=LOW) y que la salida irá entre 0 y 3v3 en teoría. Si miramos el DataSheet , este nos dice que para esta sensibilidad de +/- 1G la salida va entre 0.85v y 2,45v y que para OG la salida vale 1,65v. Es decir es una ecuación lineal de una recta de la forma y=ax+b

Vout=0.8xG + 1.65V , G es nuestra variable independiente, 

Para G=0, Vout=1,65v Para G=-1G , Vout=1.65-0.8=0.85 Para G=+1G , Vout=1.65+0.8=2.45V

Nuestro conversor Arduino A/D representa valores de conversión entre 0 y 1023 y si nuestra VREF=3v3, entonces la conversiones N=Vin x 1023 / 3v3, Vin es la señal a convertir y N la conversión de 0 a 1023.

Como Vin ( entrada Ax de Arduino ) es la salida del módulo sensor, tenemos: N=(0.8G + 1.65)x 1023/3v3 Entonces lo que debemos encontrar en este ensayo , son valores próximos o en el entorno de:

OG   N=512 ,  +1G N=760,  -1G N=260

Ensayo del Acelerómetro

Colocamos el sensor en cada una de las 6 posiciones como lo muestra la figura de“Static Aceleration” indicada un poco mas arriba, luego observamos el monitor serial y anotamos los datos. Por ejemplo, aca les muestro para la posición primera del chip del módulo acelerómetro  

Posición de referencia eje Y +G

 

Vemos que en la figura Yout +1G = 2.45vpor lo tanto debe reflejarse en el monitor serial que la conversión tendrá en N máximo y los otros serán OG. En cada posición vemos que solo y solo un eje está midiendo +/- 1G, ya que en los otros ejes la fuerza de gravedad es perpendicular y por lo tanto los resortes no se estiran ni se contraen y miden el correspondiente de OG.

 

 

Muestra ensayo Posición 1

En cada posición anotamos todas las mediciones de cada eje( para el caso de la posición 1):

  • Posición: 1 Eje: Y

Gravedad: +1G 792

OG ejeX:        489

OG eje Z: 482

Es de notar que los valores obtenidos del acelerómetro SON LOS QUE ESPERAMOS ¡¡¡¡¡¡ en forma aproximada. Hay que notar también que uno con la mano no coloca una posición perfecta y a nivel. Les muestro un resúmen de todas las posiciones para mi caso:

  • Posición: 2 Eje: X

Gravedad: +1G 770

OG ejeY:        544

OG eje Z: 454

  • Posición: 3 Eje: Y

Gravedad: -1G 290

OG ejeX:        500

OG eje Z: 465

  • Posición: 4 Eje: X

Gravedad: -1G 244

OG ejeY:        540

OG eje Z: 475

  • Posición: 5 Eje: Z

Gravedad: +1G 710

OG ejeY:        503

OG eje X: 531

  • Posición: 6 Eje: Z

Gravedad: -1G 224

OG ejeY:        552

OG eje X: 482

Como vemos, la sensibilidad no es la misma en cada eje, como lo anticipe. Si comparamos todos los rangos de OG, +/-1G podemos decir que para los tres ejes, tenemos un rango dinámico de:

+1G: 710-792 -1G: 224-290 0G: 454-552

Lo cual está dentro de lo que esperábamos.

¿Para qué sirve esto?

Teniendo los rangos de cada eje podremos MAPEAR con la función MAP de Arduino los rangos de trabajo del acelerómetro que se utilice y adecuarlos a los rangos de operación. Por ejemplo lo que hice es mapear el rango del eje Y con la salida de un servo Motor 9G , de esta manera:

Map(promY, 792,290,179,0) para manejarlo copiando los movimientos del eje Y. Quedará para otra entrada futura. Esto fue todo, espero les sirva para futuros proyectos