20. Sensor Inercial Acelerometro
Tutorial: Introducción al Acelerómetro (Sensor Inercial)
¡Hola a todos! Bienvenidos a un nuevo capítulo de nuestro curso. Hoy exploraremos uno de los cuatro tipos de sensores inerciales: el acelerómetro. Los sensores inerciales incluyen el acelerómetro, el giroscopio, el magnetómetro y el barómetro, cada uno midiendo una función específica. En este caso, el acelerómetro se encarga de medir la aceleración que experimenta un objeto en sus ejes.
¿Qué es un Acelerómetro?
Imaginemos un acelerómetro como un dispositivo que detecta cambios en la aceleración. Si lo colocamos en una posición plana y estable, la única fuerza que actúa sobre él es la gravedad, generando una aceleración de 1g (aproximadamente 9.8 m/s²).
Pero, ¿cómo puede medir esta aceleración si está estático? La clave está en su funcionamiento interno. Dentro del chip del acelerómetro, hay una masa suspendida (como una pequeña esfera o estructura) sostenida por microestructuras. Cuando la gravedad tira de esta masa, el sensor detecta la oposición a este movimiento y la traduce en una señal eléctrica. Es similar a cómo una balanza mide tu peso: aunque no te estés moviendo, la gravedad sigue actuando.
Ejemplos Prácticos
1. Posición Plana
Eje Z: Aceleración ≈ 1g (gravedad).
Eje X y Y: Aceleración ≈ 0g.
El acelerómetro genera voltajes proporcionales a estas aceleraciones.
2. Inclinación
Al inclinar el acelerómetro, la gravedad se descompone en sus componentes según los ejes del sensor. Por ejemplo:
Si lo inclinamos hacia adelante, el eje Y registrará parte de la gravedad.
El eje Z seguirá midiendo una componente, pero reducida.
La suma vectorial de las aceleraciones en todos los ejes siempre será igual a 1g.
Configuración y Código
Usaremos un acelerómetro analógico XBL335 o similar, conectado a un Arduino:
Alimentación: 3.3V (¡no 5V!).
Conexiones:
Eje X → Pin A0.
Eje Y → Pin A1.
Eje Z → Pin A2.
Ejemplo 1: Lectura de Valores Enteros
int x = analogRead(A0);
int y = analogRead(A1);
int z = analogRead(A2);
Serial.print("X = ");
Serial.print(x);
Serial.print(" | Y = ");
Serial.print(y);
Serial.print(" | Z = ");
Serial.println(z);
delay(200);Ejemplo 2: Conversión a Voltaje
float voltX = (x * 5.0) / 1023;
float voltY = (y * 5.0) / 1023;
float voltZ = (z * 5.0) / 1023;Ejemplo 3: Cálculo de Aceleración (en g)
Fórmula general:
float accelX = (voltX - 1.74) / 0.33;
float accelY = (voltY - 1.76) / 0.33;
float accelZ = (voltZ - 2.16 + 0.33) / 0.33;Ejemplo 4: Control de LED con Acelerómetro
Variamos la velocidad de parpadeo de un LED según la inclinación en el eje Y:
int ledPin = 8;
int delayTime = map(y, 286, 430, 50, 250);
digitalWrite(ledPin, HIGH);
delay(delayTime);
digitalWrite(ledPin, LOW);
delay(delayTime);Resultados
En posición plana:
(0, 0, 1).Invertido:
(0, 0, -1).Inclinación lateral:
(1, 0, 0)o(-1, 0, 0).
El acelerómetro responde correctamente a los cambios de orientación, permitiéndonos usarlo en proyectos como controles de videojuegos, estabilizadores, o wearables.
Conclusión
Hemos aprendido los fundamentos del acelerómetro, su conexión con Arduino, y cómo interpretar sus datos. En el próximo capítulo, exploraremos aplicaciones más avanzadas.
¡Muchas gracias por su atención! Nos vemos en la siguiente lección.
Comentarios
Publicar un comentario