Cuando queremos saber la posición de un objeto ,por ejemplo un robot, Podemos utilizar tres sensores principalmente: el giroscopio, el acelerómetro y la brújula.
El acelerómetro mide la rapidez de cambio de velocidad,(la aceleración), sometido a velocidad constante no nos dará valores de salida.
El giróscopo es un indicador de posición, al cambiar de la posición a la que esté calibrada genera un valor de salida, y volverá a cero si se regresa a la posición original.
La brújula mide campos magnéticos, y según sus valores podemos localizar el Norte (y por tanto los demás puntos cardinales).
Si queremos mucha precisión, podemos usar los 3 sensores simultáneamente, pero nosotros vamos a centrarnos en el acelerómetro.
Todos estamos sufriendo la aceleración de la gravedad de manera constante, el acelerómetro nos permite conocer la dirección de esa fuerza (ya sabes que la podemos representar como un vector). Cuando hablamos de un acelerómetro de 3 ejes hablamos de: x (izquierda, derecha), y (adelante, atrás), z (arriba, abajo).
Cuando el acelerómetro está sobre una superficie plana, sus ejes sufren los siguientes valores de gravedad:
- x=0
- y=0
- z=1g (la gravedad tira de él hacia abajo)
Si lo vamos inclinando los valores de voltaje que salen por sus 3 pines x,y,z son proporcionales a esa inclinación.
El funcionamiento interno de este módulo se basa en un chip que mide el “traspaso térmico por convección natural”, miden la transferencia de calor causada por la aceleración. Esto es posible gracias a la microelectrónica.
Podemos encontrar diversos modelos comerciales pero analizaremos uno de los más comunes y económicos MMA7361.
Aunque para mediciones muy precisas necesitaríamos conectar más pines, realmente nos funcionará con los 3 pines x,y,z y la alimentación. Además es imprescindible mantener el módulo activo sin que entre en modo “sleep” , para eso debemos conectar el pin sleep a nivel alto (por ejemplo a Vcc) o a un pin digital sobre el que estaremos continuamente escribiendo un nivel HIGH.
Incluiremos la librería que controla el módulo y nos ofrece funciones sencillas para obtener lecturas.
Si no usas la librería, siempre puedes hacer unas lecturas analógicas y “mapear” los valores como ya sabes para obtener una salida fiable.
PRÁCTICA
Vamos a hacer una simple lectura de los valores ofrecidos por el acelerómetro usando las funciones básicas de la librería. El programa deberá mostrar los valores por el monitor serie:
#include <AcceleroMMA7361.h> AcceleroMMA7361 accelero; int x, y, z; void setup(){ Serial.begin(9600); //los valores importantes es donde conectamos //x,y,z. En este caso A1..A3 accelero.begin(13, 12, 11, 3, A1, A2, A3); accelero.setSensitivity(LOW); //Sensibilidad baja del sensor accelero.calibrate(); //Calibración del sensor } void loop(){ //Lectura de los 3 ejes x = accelero.getXRaw(); y = accelero.getYRaw(); z = accelero.getZRaw(); Serial.print("X:"); Serial.println(x); Serial.print("Y:"); Serial.println(y); Serial.print("Z:"); Serial.println(z); delay(300); }
Realiza un “guante mágico”. Conecta 2 arduino mediante 2 módulos bluetooth (o mediante un cable como vimos en el tema de Tecnologías de las Comunicaciones). Una de ellas deberá tener el acelerómetro conectado y este debes coserlo a un guante. La otra arduino estará manejando un vehículo móvil. El objetivo es que, con el guante puesto, según la posición de tu mano, el coche se mueva en la dirección que indiques.