

Un acelerómetro es un sensor que nos permite saber saber el grado de inclinación en el que se encuentra. Esto lo hace midiendo la aceleración que la tierra ejerce sobre sus tres ejes (X,Y y Z).
Los acelerómetro son comunes por ejemplo en las tablets o smartphones, permitiendo girar la pantalla según la posición de nuestro terminal.
Realmente el acelerómetro esta encapsulado en un pequeño chip, pero existen módulos, cómo el que se puede ver en el esquema, que facilitan enormemente la conexión con Arduino y además cuenta ya con condensadores de desacoplo para optimizar su funcionamiento. El acelerómetro que lleva es un ADXL335, que podéis encontrar en Internet.
Este sería el esquema:
Es muy sencillo, el acelerómetro devolverá por cada uno de sus ejes una tensión proporcional a la aceleración que esta detectando. Lo único que tenemos que hacer es leer ese dato con un pin analógico de Arduino e interpretarlo. Este sería el código para hacer eso:
//Definimos los pines analogicos en los que estan cada uno de los ejes const int xPin = 0; const int yPin = 1; const int zPin = 2; //mínimos y máximos del acelerometro int minVal = 265; int maxVal = 402; //creamos tres variables double para almacenar las lecturas de cada eje double x; double y; double z; void setup ( ) { //iniciamos la comunicación por serial a 9600 baudios Serial.begin(9600); } void loop ( ) { //leemos los valores de cada eje del acelerometro int xRead = analogRead(xPin); int yRead = analogRead(yPin); int zRead = analogRead(zPin); //convertimos las lecturas en valores propocionales entre -90 y 90 int xAng = map(xRead, minVal, maxVal, -90, 90); int yAng = map(yRead, minVal, maxVal, -90, 90); int zAng = map(zRead, minVal, maxVal, -90, 90); //hacemos la conversión de radianes a grados x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI); //Enviamos por serial las lecturas Serial.print("x: "); Serial.println(x); Serial.println("y: "); Serial.print(y); Serial.println("z: "); Serial.println(z); //esperamos un una decimia de segundo y volvemos a leer. delay(100); }
A este tipo de sensores se les puede dar muchos usos, por ejemplo es lo que usan los mandos de la Wii para saber en que posición los tenemos y que el juego interprete lo que corresponde hacer. Pero también se usan mucho en robótica, para determinar la posición en la que se encuentra el robot (si a volcado o se ha caído, por ejemplo), por donde esta desplazándose (una cuesta, una zona lisa.. etc) o para estabilizarse si se trata de un robot volador o subacuatico, por ejemplo.