Cómo usar un acelerómetro en nuestros proyectos de Arduino


arduino-acelerometro

En esta entrada vamos a introducir el uso del acelerómetro como componente fundamental en nuestros proyectos de electrónica y Arduino. En la siguiente entrada ampliaremos al uso de giroscopios para, finalmente, terminar presentando el uso de IMU’s para calcular la orientación, por ejemplo, de un vehículo o robot.

En entradas anteriores hemos visto distintas opciones disponibles para dotar de movimiento a nuestros proyectos con Arduino mediante motores rotativos o actuadores lineales. También hemos analizad los factores a tener en cuenta para escoger uno u otro en nuestro proyecto.

Si vamos a dotar de movimiento a nuestro proyecto, y medida que estos se vayan complicando, necesitaremos determinar la posición, velocidad y orientación. Tenemos muchos sensores que nos ayudarán a determinar la posición, velocidad y orientación, como brújulas magnéticas, GPS, barómetros, encoder ópticos y magnéticos o pulsadores de fin de carrera.

Pero entre este tipo de sensorse destacan por su importancia los acelerómetros, giroscopios e IMU’s. En los últimos años han experimentado un gran desarrollo y han pasado a convertirse en dispositivos pequeños, compactos, duraderos y baratos.

Esto es debido en gran medida a la aparición y mejora de sistemas microelectromecánicos (MEMS, Microelectromechanical Systems), dispositivos que aúnan comportamientos mecánicos y electrónicos a escalas microscópicas, típicamente del orden de nanómetros.

arduino-mens

Muchos dispositivos cotidianos disponen de uno de estos sensores. Por ejemplo, los móviles y tablets, los emplean para detectar la orientación de la pantalla.

Nosotros lo usaremos frecuentemente en nuestros proyectos de electrónica y robótica caseros con Arduino, por ejemplo, para medir la orientación de una pinza en un brazo robótico o una torreta con sensores, la dirección de avance de un vehículo, o detectar que nuestro robot se ha caído.

¿Qué es un acelerómetro?

Como su nombre indica, un acelerómetro es un dispositivo que permite medir la aceleración a la que está sometido.

Recordamos brevemente que la aceleración es la variación de la velocidad respecto del tiempo o, expresado matemáticamente,

\vec a = \frac{\partial \vec v}{\partial t} = \frac{\partial^2 \vec r}{\partial t^2}



Las unidades para la aceleración en el sistema internacional son m/s^2.

Asimismo, recordamos que por la primera ley de Newton

\vec{F} = m \cdot \vec{a}


Es decir, que cualquier cuerpo con una masa m requiere una cierta fuerza para variar su velocidad. Equivalentemente, cualquier cuerpo sometido a una aceleración experimentará una cierta fuerza. Emplearemos este hecho para entender el funcionamiento del acelerómetro.

Imaginemos que queremos fabricar un dispositivo que quiera medir aceleración. Podríamos construir un sensor formado por un cuerpo sólido, en cuyo interior suspendemos una masa sujeta por muelles al cuerpo exterior.

arduino-acelerometro-funcionamiento

Al aplicar una aceleración al conjunto la masa suspendida ejercerá una fuerza sobre los muelles causando que uno se contraiga y otro se elongue, por lo que la posición relativa de la masa dentro del sensor variará.

Este desplazamiento de la masa libre interior puede ser medido para determinar la magnitud de la aceleración. El desplazamiento será proporcional a la aceleración soportada, y se mantendrá constante mientras la aceleración sea constante.

Para construir este acelerómetro en un MEMS se emplea una estructura micromecanizada de polisilicio construida sobre una oblea de silicio. Los muelles de polisilicio suspenden la estructura sobre la oblea de silicio, a la vez que proporciona resistencia para soportar las aceleraciones a las que se verá sometido el sensor.

arduino-acelerometro

Al someter el dispositivo a aceleraciones la parte interior se deforma y se desplaza respecto a la parte fija, de deforma de forma similar a nuestro dispositivo imaginario basado en muelles. El desplazamiento es detectado por la variación de la capacitancia del sistema.

Los acelerómetros disponibles normalmente son de 3 ejes, es decir, son capaces de medir la aceleración a la que está sometido el sensor en X, Y y Z independientemente, lo que permite saber simultáneamente la magnitud y dirección de la aceleración medida.

La capacidad de medir medir la aceleración de un sistema proporciona en si misma funcionalidades interesantes, como registrar vibraciones o golpes. Por ejemplo, los podómetros emplean un acelerómetro para detectar los pasos que damos.

Pero no es la única función que podemos obtener de un acelerómetro. El sensor se ve afectado por la gravedad terrestre, que supone una aceleración de aproximadamente 9.81 m/s^2 en la superficie de la tierra, que por supuesto es registrada constantemente por el sensor.

Una primera consecuencia es que podemos detectar condiciones de caída libre, por ejemplo, cuando en sensor cae de una mesa, o un robot pierde el equilibrio y cae al suelo. Simplemente debemos comprobar que la aceleración resultante medida es inferior a 9.81 m/s^2.

El objeto podría estar cayendo mientras es sometido a otra aceleración, en cuyo caso sería mucho más difícil determinar la caída.

Incluso más interesante la medición de la gravedad puede emplearse para determinar la orientación del sensor. Dado que podemos registrar la aceleración en tres ejes, en ausencia de otras aceleraciones, podemos determinar la orientación del sensor con un poco de trigonometría.

En el caso de 2D, asumiendo que ponemos el sensor horizontal en su plano X-Y, con Z apuntando hacía arriba, y únicamente giramos en el eje Y, la ecuación para el ángulo resulta,

arduino-acelerometro-orientacion-inclinacion

\theta = atan \frac{A_x}{A_z}


De forma similar, en el caso 3D las ecuaciones resultan,

arduino-acelerometro-orientacion

\theta_x = atan \frac{A_x}{\sqrt{{A_y}^2+{A_z}^2}}


\theta_y = atan \frac{A_y}{\sqrt{{A_x}^2+{A_z}^2}}


\theta_z = atan \frac{\sqrt{{A_x}^2+{A_y}^2}}{A_z}


Sin embargo un acelerómetro no resulta un sensor adecuado para intentar determinar la velocidad de un sistema y mucho menos su posición. Podríamos estar tentados a estimar la velocidad, simplemente multiplicando la aceleración por el tiempo.

Como frecuentemente comentamos, este tipo de mediciones integradas respecto al tiempo acumulan los errores de medición y el ruido, lo que conlleva efectos de deriva. Debería ser siempre el último recurso y nunca tenerlo en consideración más allá de una estimación burda.

Como vemos, un acelerómetro es un dispositivo muy versátil, que no permite obtener mediciones de aceleraciones y orientación. Además son sensores absolutos es decir, que existe un punto 0,0,0 de medición, que correspondería con el sensor cayendo libremente en el vacío. Finalmente, la medición no es integrada, por lo que no presentan deriva en la medición a medio o largo plazo.

Como aspectos negativos, son dispositivos muy sensibles a las vibraciones, por lo que la medición presentará ruido de alta frecuencia. En general, deberemos filtrar la señal antes de poderla usar. En el caso más simple, simplemente hacer el promedio de varias mediciones será suficiente.

En la siguiente entrada abordaremos el uso de giroscopios, dispositivos que permiten medir la velocidad angular de un sensor, y que complementan muy bien las limitaciones en el cálculo de la orientación, algo que veremos en la última entrada sobre IMU’s.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino
Previous Motores paso a paso con Arduino y driver A4988 o DRV8825
Next Cómo usar un giroscopio en nuestros proyectos de Arduino