¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

En el fascinante mundo de la tecnología, el acelerómetro es un componente esencial que nos permite medir la aceleración de un objeto en movimiento. En este artículo, exploraremos cómo funciona el acelerómetro ADXL335 y cómo podemos integrarlo con la plataforma Arduino para realizar emocionantes proyectos de electrónica. ¡Sigue leyendo para descubrir más sobre esta fascinante tecnología!

¿Alguna vez te has preguntado cómo sabe tu teléfono inteligente en qué dirección está arriba? Es una de las características más innovadoras de los teléfonos inteligentes actuales. Todos tienen un pequeño dispositivo llamado acelerómetro integrado en el circuito que detecta cuando inclinas el dispositivo de un lado a otro. De esta manera, su teléfono inteligente sabe cuándo cambiar del modo vertical al horizontal.

Los acelerómetros se utilizan ampliamente en aplicaciones de sensores de movimiento e inclinación de bajo consumo y bajo costo, como: B. en dispositivos móviles, sistemas de juegos, para proteger discos duros, para estabilización de imagen y en equipos deportivos y de salud.

Veamos qué son, qué hacen y cómo funcionan.

¿Cómo funciona un acelerómetro?

Para entender cómo funcionan los acelerómetros, imagine una esfera dentro de un cubo 3D.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

Suponiendo que el cubo está en un espacio donde todo es ingrávido, la bola simplemente flota en el centro del cubo.

Ahora supongamos que cada pared representa un eje específico.

Si de repente movemos la caja hacia la izquierda con una aceleración de 1 g (una sola fuerza G de 1 g corresponde a una aceleración gravitacional de 9,8 m/s).2), la pelota sin duda golpeará la pared Si medimos la fuerza que ejerce la pelota sobre la pared X, podemos obtener un valor de salida de 1g a lo largo del eje X.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

Veamos qué pasa si colocamos este cubo en la Tierra. La pelota simplemente cae sobre la pared Z y ejerce una fuerza de 1 g como se muestra en el siguiente diagrama:

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

En este caso el cuadro no se mueve, pero aún obtenemos un valor de 1g en el eje Z. Esto se debe a que la gravedad (que en realidad es una forma de aceleración) tira la pelota hacia abajo con una fuerza de 1 g.

Aunque este modelo no representa con precisión cómo se construye un acelerómetro en la práctica, a menudo es útil para comprender por qué la salida de un acelerómetro generalmente se da en ±g o por qué un acelerómetro en reposo muestra 1g en el eje z. ¿Qué lecturas del acelerómetro pueden ¿Esperas en diferentes orientaciones?

En el mundo real, los acelerómetros se basan en sistemas microelectromecánicos (tecnología de fabricación MEMS). Entonces, descubramos cómo funciona un acelerómetro MEMS.

¿Cómo funciona un acelerómetro MEMS?

Un acelerómetro de sistema microelectromecánico (MEMS) es una estructura micromecanizada construida sobre una oblea de silicio.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino
¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

La suspensión de esta estructura se realiza mediante muelles de polisilicio. Esto permite que la estructura se doble a medida que acelera a lo largo de los ejes X, Y y/o Z.

La deflexión cambia la capacitancia entre los paneles fijos y los paneles unidos a la estructura suspendida. Este cambio de capacidad es proporcional a la aceleración a lo largo de este eje.

El sensor procesa este cambio de capacitancia y lo convierte en un voltaje de salida analógico.

Descripción general del hardware del módulo ADXL335

El corazón del módulo es un acelerómetro MEMS de tres ejes pequeño, de bajo consumo y silencioso. Dispositivos analógicos – ADXL335. Puede medir no sólo la aceleración estática causada por la gravedad, sino también la aceleración dinámica causada por el movimiento, el impacto o la vibración.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

Este módulo apto para placas de prueba divide cada pin del ADXL335 en un conector de 6 pines con paso de 0,1'', que incluye 3 salidas analógicas para mediciones de los ejes X, Y y Z, 2 pines de suministro y un pin de autoprueba.

Actuación

El ADXL335 funciona de 1,8 V a 3,6 V CC (normalmente 3,3 V). Sin embargo, el regulador integrado de 3,3 V lo hace ideal para conectarse a microcontroladores de 5 V como el Arduino.

El sensor sólo consume 350 μA de corriente durante el funcionamiento normal.

Rango de medición

El ADXL335 tiene un rango de detección completo de ±3g. Esto significa que la aceleración máxima que el ADXL335 puede medir y mostrar con precisión como salida es ±3g. Por ejemplo, si se acelera a 4g, el acelerómetro no se romperá, pero la salida puede fallar.

La aceleración máxima absoluta del ADXL335 es de 10.000 g. Las aceleraciones de más de 10.000 g pueden provocar que el ADXL335 falle.

Salida ratiométrica

La salida del ADXL335 es radiométrica, por lo que el voltaje de salida aumenta linealmente con la aceleración en el rango. Esto significa que la salida de medición de 0 g siempre está a la mitad del voltaje de suministro de 3,3 V (1,65 V), -3 g a 0 V y +3 g a 3,3 V, con escala completa en el medio.

Especificaciones técnicas

Aquí están las especificaciones.

Tensión de funcionamiento 1,8 V – 3,6 V
Corriente de funcionamiento 350μA (típico)
Área de detección ±3g (sarpullido completo)
Rango de temperatura −40 a +85 °C
Eje del sensor 3 ejes
sensibilidad 270 a 330 mV/g (ratiométrico)
Resistencia a los golpes Hasta 10.000 g
Dimensiones 4 mm x 4 mm x 1,45 mm

Puede encontrar más información en la siguiente hoja de datos.

Distribución de pines del acelerómetro ADXL335

Antes de entrar en la conexión y el código de ejemplo, echemos un vistazo a la distribución de pines.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

VCC suministra energía al módulo. Conéctalo a la salida de 5V de tu Arduino.

X fuera genera un voltaje analógico proporcional a la aceleración a lo largo del eje X.

Y-fuera genera un voltaje analógico proporcional a la aceleración a lo largo del eje Y.

Z fuera Genera un voltaje analógico proporcional a la aceleración a lo largo del eje Z.

Tierra es el pin de tierra.

ST (autoprueba) El pin controla la función de autoprueba, que le permite probar la funcionalidad del sensor en la aplicación final. Esta característica se discutirá en detalle al final del tutorial.

Cableado de un acelerómetro ADXL335 a un Arduino

Ahora que sabemos cómo funciona el acelerómetro ADXL335, podemos conectarlo a nuestro Arduino.

Las conexiones son bastante simples. Comience montando el acelerómetro en la placa de pruebas. Conecte el pin VCC al pin 5V del Arduino y el pin GND al pin de tierra del Arduino. Conecte las salidas X, Y y Z a los pines analógicos A0, A1 y A2 del Arduino.

Para obtener resultados precisos necesitamos cambiar el voltaje de referencia analógico (AREF) en el Arduino. Esto se logra conectando el pin de 3.3V del Arduino al pin AREF.

La siguiente imagen muestra el cableado.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

Código de ejemplo de Arduino: lectura del acelerómetro ADXL335

El boceto es bastante sencillo. Simplemente muestra la salida del sensor calibrado para cada eje en el puerto serie. Antes de entrar en detalles, pruebe el boceto.

const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

// Take multiple samples to reduce noise
const int sampleSize = 10;

void setup() 
{
	analogReference(EXTERNAL);
	Serial.begin(9600);
}

void loop() 
{
	//Read raw values
	int xRaw = ReadAxis(xInput);
	int yRaw = ReadAxis(yInput);
	int zRaw = ReadAxis(zInput);

	// Convert raw values to 'milli-Gs"
	long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
	long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
	long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

	// re-scale to fractional Gs
	float xAccel = xScaled / 1000.0;
	float yAccel = yScaled / 1000.0;
	float zAccel = zScaled / 1000.0;

	Serial.print("X, Y, Z  :: ");
	Serial.print(xRaw);
	Serial.print(", ");
	Serial.print(yRaw);
	Serial.print(", ");
	Serial.print(zRaw);
	Serial.print(" :: ");
	Serial.print(xAccel,0);
	Serial.print("G, ");
	Serial.print(yAccel,0);
	Serial.print("G, ");
	Serial.print(zAccel,0);
	Serial.println("G");

	delay(200);
}

// Take samples and return the average
int ReadAxis(int axisPin)
{
	long reading = 0;
	analogRead(axisPin);
	delay(1);
	for (int i = 0; i < sampleSize; i++)
	{
	reading += analogRead(axisPin);
	}
	return reading/sampleSize;
}

Las siguientes imágenes muestran las lecturas del acelerómetro en diferentes orientaciones.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino
¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino
¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino
¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino
¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino
¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

Explicación del código:

El boceto comienza declarando los pines de entrada analógica de Arduino a los que están conectados los pines de salida X, Y y Z del sensor.

const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

Las siguientes dos variables, RawMin Y RawMax, se establecen. Dado que Arduino tiene un ADC de 10 bits (210 = 1024), los voltajes de salida del ADXL335, que se encuentran entre 0 y 3,3 voltios, se asignan a valores enteros entre 0 y 1023. Por esta razón RawMin se establece en 0 y RawMax se establece en 1023.

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

El sampleSize La variable especifica la cantidad de muestras que Arduino debe capturar durante cada conversión. En nuestro caso apostamos sampleSize a 10 para obtener resultados más precisos.

// Take multiple samples to reduce noise
const int sampleSize = 10;

En el área de configuración primero configuramos la referencia analógica a EXTERNA llamando analogReference(EXTERNAL). Luego iniciamos la comunicación serial con la PC.

Advertencia:

Esto es necesario porque conectamos 3,3 V al pin AREF del Arduino. Si no llamas analogReference(EXTERNAL)cortocircuite el voltaje de referencia activo generado internamente y el pin AREF, lo que podría causar daños a su Arduino.

Puedes saber más al respecto. analogReference() Función activada Sitio web oficial de Arduino.

analogReference(EXTERNAL);
Serial.begin(9600);

En la sección del bucle leemos las salidas analógicas del sensor cada 200 ms. Observe que estamos llamando a esto ReadAxis() función personalizada en lugar de la analogRead() Función. Esta función simplemente toma diez muestras de conversión de ADC y devuelve el promedio.

//Read raw values
int xRaw = ReadAxis(xInput);
int yRaw = ReadAxis(yInput);
int zRaw = ReadAxis(zInput);

Conversión de salida ADXL335 a aceleración (g)

El siguiente fragmento de código es la parte más importante del programa. Asigna los voltajes de salida analógicos del sensor y los convierte en aceleración debida a la gravedad (G).

El mapeo es manejado por el IDE integrado. map() Función. cuando llamamos map(xRaw, RawMin, RawMax, -3000, 3000)El valor de RawMin se asigna a -3000, el valor de RawMax se asigna a 3000 y los valores intermedios se asignan a valores intermedios.

Los números -3000 y 3000 no son aleatorios. En realidad, representan la aceleración de la gravedad medida por el sensor en mili-g, es decir, ±3 g (-3000 mili-g a 3000 mili-g).

Por ejemplo,

  • Si el sensor genera 0 voltios en el eje x, es decir, xRaw=0, eso es map() La función devuelve -3000, que corresponde a -3g.
  • Si el sensor genera 1,65 voltios en el eje x, es decir, xRaw=511, entonces map() La función devuelve 0, que corresponde a 0g.
  • Si el sensor genera 3,3 voltios en el eje x, es decir, xRaw=1023, es decir map() La función devuelve 3000, que es +3g.

El término radiométrico Tiene más sentido ahora ya que el voltaje de salida aumenta linealmente con la aceleración en todo el rango.

// Convert raw values to 'milli-Gs"
long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

Finalmente, la salida del sensor se reduce a fracciones de G dividiendo por 1000 y se muestra en el monitor en serie.

// re-scale to fractional Gs
float xAccel = xScaled / 1000.0;
float yAccel = yScaled / 1000.0;
float zAccel = zScaled / 1000.0;

Serial.print("X, Y, Z  :: ");
Serial.print(xRaw);
Serial.print(", ");
Serial.print(yRaw);
Serial.print(", ");
Serial.print(zRaw);
Serial.print(" :: ");
Serial.print(xAccel,0);
Serial.print("G, ");
Serial.print(yAccel,0);
Serial.print("G, ");
Serial.print(zAccel,0);
Serial.println("G");

Función de autoprueba ADXL335

El acelerómetro ADXL335 tiene una función de autoprueba que le permite probar la funcionalidad del sensor en la aplicación final. El pin ST (autoprueba) del módulo controla esta función.

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

Cuando el pin ST está conectado a 3,3 V, se aplica internamente una fuerza electrostática a la barra del acelerómetro. El movimiento resultante del haz permite al usuario determinar si el acelerómetro funciona o no.

El cambio esperado en la producción es

  • −1,08 g (−325 mV) en el eje X
  • +1,08 g (+325 mV) en el eje Y
  • +1,83 g (+550 mV) en el eje Z

El pin ST puede permanecer abierto durante el funcionamiento normal o puede conectarse a GND.

Advertencia:

Exponer el pin ST a voltajes superiores a 3,6 V puede dañar permanentemente el acelerómetro.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino

¿Alguna vez te has preguntado cómo tu teléfono inteligente sabe qué dirección es arriba? Es una de las características más innovadoras de los teléfonos inteligentes actuales. Todos tienen un pequeño dispositivo llamado acelerómetro integrado en el circuito que detecta cuando inclinas el dispositivo de un lado a otro. Así es como tu teléfono inteligente sabe cuándo cambiar de modo vertical a modo horizontal.

Los acelerómetros se utilizan ampliamente en aplicaciones de detección de movimiento y inclinación de bajo consumo y bajo costo, como dispositivos móviles, sistemas de juegos, protección de unidades de disco, estabilización de imagen y dispositivos deportivos y de salud.

¿Cómo funciona un acelerómetro?

Para entender cómo funcionan los acelerómetros, imagina una bola dentro de un cubo en 3D. Suponiendo que el cubo está en el espacio exterior, donde todo es sin peso, la bola simplemente flotará en el centro del cubo.

Ahora, asume que cada pared representa un eje específico. Si de repente movemos la caja hacia la izquierda con una aceleración de 1g (una fuerza G de 1g equivale a una aceleración gravitacional de 9.8 m/s2), la bola sin duda golpeará la pared X. Si medimos la fuerza que la bola ejerce sobre la pared X, podemos obtener un valor de salida de 1g a lo largo del eje X.

Veamos qué sucede cuando colocamos ese cubo en la Tierra. La bola simplemente caerá en la pared Z, ejerciendo una fuerza de 1g como se muestra en el diagrama más abajo:

En este caso, la caja no se está moviendo, pero aún así obtenemos una lectura de 1g en el eje Z. Esto se debe a que la gravedad (que en realidad es una forma de aceleración) está tirando la bola hacia abajo con una fuerza de 1g.

Aunque este modelo no representa exactamente cómo se construye un sensor de acelerómetro del mundo real, a menudo es útil para comprender por qué la señal de salida de un acelerómetro generalmente se especifica en ±g, o por qué un acelerómetro lee 1g en el eje z en reposo, o qué lecturas de acelerómetro puedes esperar en diferentes orientaciones.

En el mundo real, los acelerómetros se basan en la tecnología de fabricación de sistemas microelectromecánicos (MEMS). Así que, veamos cómo funciona un acelerómetro MEMS.

¿Cómo funciona un acelerómetro MEMS?

Un acelerómetro MEMS (Sistema Micro-Electro-Mecánico) es una estructura micromecanizada construida sobre una oblea de silicio.

Esta estructura está suspendida por resortes de polisilicio. Le permite a la estructura deflectarse cuando se acelera a lo largo de los ejes X, Y y/o Z. Como resultado de la deflexión, la capacitancia entre placas fijas y placas unidas a la estructura suspendida cambia. Este cambio en la capacitancia es proporcional a la aceleración a lo largo de ese eje.

El sensor procesa este cambio en la capacitancia y lo convierte en una tensión de salida analógica.

Visión General del Hardware del Módulo ADXL335

En el núcleo del módulo se encuentra un acelerómetro MEMS triple de baja potencia, bajo ruido de Analog Devices – ADXL335. Puede medir no solo la aceleración estática causada por la gravedad, sino también la aceleración dinámica causada por el movimiento, el impacto o la vibración.

Este módulo compatible con breadboard saca todos los pines del ADXL335 a un encabezado de 6 pines con un paso de 0.1′′, incluidas 3 salidas analógicas para mediciones de los ejes X, Y y Z, 2 pines de suministro y un pin de autoprueba.

Conexiones

Las conexiones son bastante simples. Comienza montando el acelerómetro en el breadboard. Conecta el pin VCC al pin 5V de tu Arduino y el pin GND al pin de tierra del Arduino. Conecta las salidas X, Y y Z a los pines analógicos A0, A1 y A2 del Arduino.

Para obtener resultados precisos, necesitamos cambiar el voltaje de referencia analógico (AREF) en el Arduino. Esto se logra conectando el pin 3.3V del Arduino al pin AREF.

El siguiente código de ejemplo es una manera simple de mostrar la salida del sensor calibrado en cada eje en la interfaz serial:

  1. Declare los pines de entrada analógica del Arduino a los que están conectados los pines de salida X, Y y Z del sensor.
  2. Defina los valores mínimos y máximos para cada eje.
  3. Especifique el número de muestras que deben tomarse en cada conversión.
  4. En la configuración, establezca la referencia analógica en EXTERNAL y comience la comunicación serial.
  5. En el loop, lea las salidas analógicas del sensor cada 200ms.
  6. Convierta las salidas del ADXL335 en aceleración en g y muéstrelo en el monitor serial.

Función de Autoprueba del ADXL335

El Acelerómetro ADXL335 tiene una función de autoprueba que permite probar la funcionalidad del sensor en la aplicación final. El pin ST (autoprueba) en el módulo controla esta función.

El pin ST puede dejarse abierto o conectarse a GND durante el funcionamiento normal. Conectar el pin ST a 3.3V realiza una autoprueba de fuerza electrostática en la viga interna del acelerómetro.

El cambio esperado en la salida es:

  • −1.08 g (−325 mV) en el eje X
  • +1.08 g (+325 mV) en el eje Y
  • +1.83 g (+550 mV) en el eje Z

Con esta información, estás listo para empezar a experimentar con el acelerómetro ADXL335 y el Arduino. ¡Diviértete descubriendo todas las posibilidades que ofrecen estos dispositivos!

4 comentarios en «¿Cómo funciona el acelerómetro? Interfaz ADXL335 con Arduino»

Deja un comentario