ABC del acelerometro

  • ABC del acelerometro
Contenido:
1. Introduccion
1.1 ¿Cómo funciona un acelerómetro?
1.2 Cómo conectarse a un acelerómetro.
1.3 Interfaz de comunicaciones.
1.4 Potencia
2. Cómo seleccionar un acelerómetro.
2.1 Alcance.
2.2 Características adicionales.
3. Guía de compra de uno de nuestros acelerómetros
3.1 Características a elegir de un acelerómetro.
3.1.1 Rango.
3.1.2 Interfaz.
3.2 Características especiales.
3.3 Tabla comparativa.
4. Cómo utilizar su nuevo acelerómetro con Arduino .
4.1 Acelerómetros analógicos.
4.1.1 Programación analógicos.
4.2 Acelerómetros digitales.
4.2.1 Programación digitales.

 

1. Introducción

Los acelerómetros son dispositivos que miden la aceleración, que es la tasa de cambio de la velocidad de un objeto. Esto se mide en metros por segundo al cuadrado (m/s²) o en las fuerzas G (g).  La sola fuerza de la gravedad para nosotros aquí en el planeta Tierra es equivalente a 9,8 m/s², pero esto varía ligeramente con la altitud (y será un valor diferente en diferentes planetas, debido a las variaciones de la atracción gravitatoria). Los acelerómetros son útiles para detectar las vibraciones en los sistemas o para aplicaciones de orientación.
 

Ejes de medida de un acelerómetro de tres ejes
 

1.1 ¿Cómo funciona un acelerómetro?

Los acelerómetros son dispositivos electromecánicos que detectan las fuerzas de aceleración, ya sea estática o dinámica. Las fuerzas estáticas incluyen la gravedad, mientras que las fuerzas dinámicas pueden incluir vibraciones y movimiento.
Los acelerómetros pueden medir la aceleración en uno, dos o tres ejes.  Los de tres ejes son más comunes  conforme los costos de producción de los mismos baja.

 Generalmente, los acelerómetros contienen placas capacitivas internamente. Algunos de estos son fijos, mientras que otros están unidos a resortes minúsculos que se mueven internamente conforme las  fuerzas de aceleración actúan sobre el sensor. Como estas placas se mueven en relación el uno al otro, la capacitancia entre ellos cambia. A partir de estos cambios en la capacitancia, la aceleración se puede determinar.
 

Sistema microelectromecánico para la aceleración en 1 eje.
 
Otros acelerómetros se pueden centrar en torno materiales piezoeléctricos. Estos pequeña carga eléctrica de salida estructuras cristalinas cuando se coloca bajo tensión mecánica (por ejemplo aceleración).
 
Sistema con tensión mecánica.
 
Para la mayoría de los acelerómetros , las conexiones básicas que se requieren para la operación son el poder y las líneas de comunicación. Como siempre, leer la hoja de datos para una correcta conexión.
 

1.2 Cómo conectarse a un acelerómetro

Para la mayoría de los acelerómetros , las conexiones básicas que se requieren para la operación son el poder y las líneas de comunicación. Como siempre, leer la hoja de datos para una correcta conexión.
 

1.3 Interfaz de comunicaciones

Los  acelerómetros se comunicarse a través de un convertidor analógico , digital , o interfaz de conexión modulada por ancho  de impulsos(pwm) .

Los acelerómetros con una interfaz analógica entregan un voltaje proporcional a la aceleración en cada uno de sus ejes  (hablando de uno de 3 ejes) que normalmente fluctúan entre tierra y el valor de  alimentación Vcc.  Estos suelen ser más baratos  que los digitales y mucho más fáciles de usa en momento más  veremos porqué.

Los acelerómetros con una interfaz digital pueden comunicarse a través de los protocolos de comunicación de SPI o  I2C. Estos tienden a tener más funcionalidad y ser menos susceptibles al ruido que acelerómetros analógicas .

Los acelerómetros con salida modulada en ancho de pulso (PWM ) sus salidas don de onda cuadrada con un periodo conocido, pero un ciclo de trabajo varía con cambios en la aceleración .
 

1.4 Potencia

Los acelerómetros son generalmente dispositivos de baja potencia . La corriente requerida cae típicamente en la gama de micro ( μ ) o mili – amperios , con una tensión de alimentación de 5 V o menos . El consumo de corriente puede variar dependiendo de la configuración (por ejemplo , el modo de ahorro de energía en comparación con el modo de funcionamiento estándar). Estos modos diferentes pueden hacer a los  acelerómetros muy adecuado para aplicaciones que funcionan con batería .

Asegúrese de que los niveles lógicos tanto del acelerómetro como del microcontrolador correspondan y más en los digitales; ya que si esto no es así puede dañar el sensor.
 

2.Cómo seleccionar un acelerómetro

Antes de elegir usar un acelerómetro debemos considerar varios requerimientos donde entre los principales se encuentra el nivel de alimentación y el tipo de comunicación del que ya se habló anteriormente (cheque nuestros tutoriales de cómo usar las interfaces digitales . Otras características para su consideración se muestran a continuación.
 

2.1 Alcance

La mayoría de los acelerómetros tendrá un rango seleccionable de las fuerzas que pueden medir. Estos intervalos pueden variar de ± 1g hasta ± 250g. Típicamente, el más pequeño de la gama, es el más sensible. Por ejemplo, para medir pequeñas vibraciones sobre una mesa , utilizando un acelerómetro de gama pequeña  proporcionará datos más detallados que el uso de uno  de 250 g (que es más adecuado para cohetes ) .
 

2.2 Características adicionales

Algunos acelerómetros incluyen características como la detección del grifo (útil para las aplicaciones de baja potencia ), detección de caída libre ( utilizados para activar la Protección  del Disco Duro), compensación de temperatura ( para aumentar la precisión en situaciones de del alto riesgo ) y detección de 0g. La necesidad de estos tipos de características en el acelerómetro será determinada por la aplicación en la que se incorpora el acelerómetro.
 
Este acelerómetro puede ser configurado para realizar mediciones entre ±1.5g y ±6g entre otras características especiales.
 

3. Guía de compra de uno de nuestros acelerómetros.

Acelerómetros.
¿Qué mide un acelerómetro? Bueno, la aceleración. Ya sabes … cómo algo rápido se está acelerando o frenando. Verás, la aceleración se visualiza en unidades de metros por segundo al cuadrado ( m/s²), o fuerza G ( g ), que es aproximadamente 9.8m/s²; ( el valor exacto depende de su elevación y la masa del planeta en el que se esté parado).

Los acelerómetros se utilizan para detectar tanto estática ( por ejemplo, gravedad ) y dinámica ( por ejemplo, arranques repentinos / frenado ) de la aceleración. Una de las aplicaciones más ampliamente utilizadas para acelerómetros es la detección de inclinación. Debido a que están afectados por la aceleración de la gravedad, un acelerómetro le puede decir cómo se orienta con respecto a la superficie de la Tierra. Por ejemplo, el iPhone de Apple o mejor aun el lumia 925 de Nokia tienen un acelerómetro, que lo deja saber si se encuentran vertical u horizontal.

Un acelerómetro también se puede utilizar para detectar el movimiento.Por ejemplo, un acelerómetro en el WiiMote de Nintendo se puede utilizar para detectar golpes de derecha y de revés emulando los golpes de una raqueta de tenis, o el efecto que se le pone a una bola de boliche. Por último, un acelerómetro también se puede usar para detectar si un dispositivo está en un estado de caída libre. Esta característica se implementa en varias unidades de disco duro: si esto se detecta manda la señal al Disco Duro para guardar datos y bloquearse para evitar que el golpe dañe los datos.
 

3.1 Características a elegir de un acelerómetro.

Ahora que usted sabe lo que hacen, vamos a considerar cuáles son las características que debe buscar al seleccionar su acelerómetro :
 
3.1.1 Rango
Los límites superior e inferior de lo que el acelerómetro puede medir también se conoce como su gama. En la mayoría de los casos, un rango menor a gran escala significa una salida más sensible, así que usted puede obtener una lectura más precisa de un acelerómetro con un rango de baja escala.

Usted debe seleccionar un rango de detección que mejor se adapte a su proyecto, si el proyecto sólo será sometido a aceleraciones entre 2g y -2g, un acelerómetro oscilado ± 24 no le va a dar mucha precisión.

Contamos con un buen surtido de acelerómetros, con alcances máximos se extiende desde ± 1.5 g hasta ± 24g. La mayoría de nuestros acelerómetros se establecen en un rango mínimo / máximo duro, sin embargo casi todos de los acelerómetros que tenemos disponen de rangos seleccionables .
 
3.1.2 Interfaz
- Esta es otra de las características más importantes. Los acelerómetros tendrán ya sea una interfaz Análoga, Digital (I2C o SPI) o por Modulación de Ancho de Pulso (PWM). Actualmente solo disponemos  sensores con las dos primeras interfaces.

Acelerómetros con una salida analógica producirán una tensión que es directamente proporcional a la aceleración detectada. En 0g, la salida analógica será residirá generalmente en alrededor de la mitad de la tensión de alimentación ( por ejemplo, 1,65 V para un sensor de 3,3 V ). En general, esta interfaz es el más fácil de trabajar, usando solo un convertidor  analógico a digital (ADC) presente en la mayoría de los microcontroladores.

Acelerómetros con una interfaz de PWM producirán una onda cuadrada con una frecuencia fija , pero el ciclo de trabajo del pulso variará con la aceleración detectada. Estos son bastante raro; por lo que no contamos con ningún modelo pero siempre es bueno saber cómo funcionan.

Acelerómetros digitales por lo general cuentan con una interfaz serial sea SPI o I ² C. Dependiendo de su experiencia, estos pueden ser los más difíciles de integrar con su microcontrolador. Dicho esto, los acelerómetros digitales son populares debido a que por lo general tienen más características, y son menos susceptibles al ruido que sus homólogos analógicos.

Número de ejes medidos – Este está muy claro: de los tres ejes posibles ( x , y, z ) , ¿cuántos tiene sentido medir?  Acelerómetros de tres ejes suelen ser el camino a seguir, sino que son los más comunes, así que aquí no hay mucho que pensarle.

Consumo de energía – Si el proyecto funciona con pilas, es posible que desee considerar la cantidad de energía que consumirá el acelerómetro. El consumo de corriente se requiere por lo general será en el rango de los 100s μA. Algunos sensores también disponen de la funcionalidad de reposo para ahorrar energía cuando no se necesita el acelerómetro.
 

3.2 Características especiales

Los acelerómetros más recientes pueden tener algunas características ingeniosas, no basta con producir los datos de aceleración. Estos acelerómetros nuevos pueden incluir características como rangos seleccionables de medida, control del sueño, 0 g de detección y detección de golpeteo.
 

3.3 Tabla comparativa.

 
Dispositivo Rango Interfaz Ejes Requerimientos de energía Características especiales
 MMA7361t1 ±1.5 g y  ±6g Analógica 3 2.2 a 3.6VDC,400µA
  • Compensación de temperatura
  • Sensibilidad seleccionable.
  • Detección 0g
  • Modo de reposo
  • SELF-TEST
ADXL335t2 ±3g Analógica 3 1.8 a 3.6VDC.350uA
  • SELF-TEST
MMA8452t3 ± 2g , ± 4 g,  ± 8g Digital I2C 3 1,95 V a 3,6 V6 uA - 165 uA
  • Dos pines de interrupción
  • Sensibilidad seleccionable
  • SEFL-TEST
  • Etc.
ADXL345t4 ±16g DigitalSPI /I2C 3 2.0 V to 3.6 V40 μA
  • Detección de doble golpe
  • Detección caída libre
  • Dos pines de interrupción

 

LIS331t5 ± 6g ,  ± 12g,  ±24g DigitalSPI/ I2C 3  2.16 V to 3.6 V10 µA
  • Dos pines de interrupción
  • Dodo de reposo
  • SEFL-TEST
 MMA7455t6 ±2g, ±4g, ±8g Digital SPI/I2C 3 2.4 V – 3.6 V400 μA
  • Dos pines de interrupción
  • Detección (golpe, vibración y caída libre)
MMA7660t7 ±1.5g Digital I2C. 3  2.4 V – 3.6 V47 μA
  • Detección de orientación
  • Detección de golpe y sacudida

 

 

4. Cómo utilizar su nuevo acelerómetro con Arduino.

Si usted ha llegado a este punto ya tiene en proto o al menos en mente que sensor va a usar para su proyecto. Cómo ya vimos anteriormente cada sensor tiene ciertas características especiales que influyen a la hora de tomar una decisión por cual dispositivo irse. Pero no se dejará mentir que una de las principales aplicaciones que usted le va a dar a su sensor es para saber el ángulo en que se encuentra con respecto al vector de la gravedad.
 

4.1 Acelerómetros Analógos.

Empecemos por los que han elegido un acelerómetro analógico, ya sea porque lo tienen desde antes que salieran los digitales o simplemente porque leyeron que son más fáciles de usar (eso yo le dije).
 

Todo sabemos que el acelerómetro mide el cambio de velocidad, pero cuando este se encuentra estático la única aceleración que detecta es la gravedad que tira hacia abajo de este.

Usando esta aceleración (gravedad) podemos calcular el ángulo de inclinación del sensor con respecto al eje vectorial de la gravedad. !Ahora un poco de matemáticas!.
 

Cómo vemos en la imagen cuando el acelerómetro está en reposo, solamente la fuerza de gravedad actúa sobre el sensor y solo sobre el eje Z.  Entonces :
  • x=0g
  • y=0g
  • z=1g

Pero una vez que  inclinamos en sensor la fuerza de gravedad genera componentes vectoriales en los ejes x,y,z. son estos componentes los que ocupamos para poder estimar el ángulo de inclinación que tiene el sensor con respecto a la fuerza de gravedad g y estos valores los voltajes que genera cada uno de los ejes al ser cometidos a la aceleración, los cuales mediremos con nuestro código que haremos en arduino .
 
4.1.1 Programación para acelerómetro analógico.

(DESCARGAR).
Una vez que tengamos conectado nuestro sensor al arduino por los pines analógicos, en la IDE empecemos a teclear el código:
  • Definimos los pines analógicos en los que están cada uno de los ejes.
#define  xPin  A4       // eje x en el pin analógico 4
#define  yPin  A3    
#define  zPin  A2  
#define  ST       2        //pin de activación del sensor ADXL335
 
  • Definimos los máximos y mínimos valores del acelerómetro para 1g de aceleración.
 int minVal = 405;   //valores obtenidos de una prueba anterior
int maxVal = 609;
  • Creamos tres variables tipo double  para almacenar los ángulos en cada eje.
double x;      
double y;  
double z;
  • En el setup pondremos.
 void setup ( ) { 
 pinMode(ST,OUTPUT);
 digitalWrite(ST,LOW); 
 Serial.begin(9600);  
 }
  • En el loop leemos los valores analógicos de cada.
 int xRead = analogRead(xPin);     
 int yRead = analogRead(yPin);  
 int zRead = analogRead(zPin);
  • Convertimos las lecturas en valores proporcionales en el rango de -100 a 100. Esto lo usamos más que nada para poder darle sentido a la inclinación del sensor.
 int xAng = map(xRead, minVal, maxVal, -100, 100);
 int yAng = map(yRead, minVal, maxVal, -100, 100);  
 int zAng = map(zRead, minVal, maxVal, -100, 100); 
 

 
En la imagen se muestra el diagrama de cuerpo libre de los vectores que genera cada eje y aplicándole la tangente inversa a dichos vectores podremos calcular el ángulo en el que se encuentra el objeto.

Como por ejemplo para calcular el valor del ángulo en el eje x con respecto al vector de gravedad sería : 
 
  • El comando antan2 Regresa el ángulo en radianes  por lo que debemos convertirlo a grados.  También este comando está definido para cuando uno de los vectores sea 0; arroja un 0 o un 1 dependiendo del vector nulo.
 y = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);  
 x = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);  
 z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);
  • Imprimimos  por serial las lecturas.
 Serial.print(“x: “);  
 Serial.print(x);  
 Serial.print(“   y: “);  
 Serial.print(y);  
 Serial.print(“   z: “);  
 Serial.println(z);
                                 
 

4.2 Acelerómetros digitales.

 Anteriormente vimos como leer y como usar esas lecturas para calcular al ángulo  de inclinación de un acelerómetro analógico. Ahora veamos cómo obtener los mismo resultados con un acelerómetro digital.

En los acelerómetros la interfaz de comunicación puede ser I2C o SPI, cada una con características propias (como vienen explicado en los tutoriales de cada uno de ellos).

Para este tutorial utilizaremos el sensor ADXL345 usando la interfaz I2C.
 
Diagrama de conexión del ADXL345 con el arduino UNO.
 
Hay que tener en cuenta que al estar usado una interfaz digital los valores arrojados por el acelerómetro  ya no son voltajes variables; ahora son paquetes de bytes que vamos a leer por los pines SDA y SCL localizados en el A4 y A5 del arduino pero no se deje engañar estos pines serán usados como pines digitales no cómo analógicos. Una vez entendido esto y teniendo todo bien conectado vamos a proceder a desarrollar el código.
 
4.2.1 Programación para acelerómetro digital.

(DESCARGAR)
  • Importamos la librería Wire.h que es la que tiene el protocolo para el I2C .
#include <Wire.h>
  • Definimos las direcciones de los registros que usaremos del sensor; estas vienen especificadas en la hoja de datos del fabricante.
#define DEVICE (0x9D) // Dirección del dispositivo como se especifica en la hoja de datos
char POWER_CTL = 0x2D;            //Registro de Control de Potencia
char DATA_FORMAT = 0×31;
char DATAX0 = 0×32;      //Dato Eje X 0
char DATAX1 = 0×33;      //Dato Eje X 1
char DATAY0 = 0×34;      //Dato Eje Y 0
char DATAY1 = 0×35;      //Dato Eje Y 1
char DATAZ0 = 0×36;      //Dato Eje Z 0
char DATAZ1 = 0×37;      //Dato Eje Z 1
  • Definimos los máximos y mínimos arrojados por cada eje,  en el eje X y Y los valores son los mismos, pero en el eje Z no; así usaremos estos valores para después escalarlos a los valores de los otros ejes, también definimos las variables donde se almacenaran los ángulos.
byte _buff[6];
int minVal = -142;      
int maxVal = 112;
double X;      
double Y;  
double Z;
 
  • En el setup inicializamos la librería wire, la comunicación serial  y configuraremos ciertos parámetros del sensor.
// unirse a bus i2c (dirección opcional para master)
Wire.begin();        
// inicia serial para la salida. Asegúrese de que se ajustó el Monitor Serial a la misma velocidad.
  Serial.begin(9600);  
  Serial.print(“init”);

 Nota: si usted no comprende aun muy bien cómo funciona el I2C puede checar nuestros tutoriales de interfaces digitales para una mejor explicación.

//Poner el ADXL345 en un rango de +/- 4G escribiendo el valor 0×01 al registro DATA_FORMAT. 
  writeTo(DATA_FORMAT, 0×01);
//Poner el ADXL345 en Modo de Medición escribiendo el valor 0×08 al registro POWER_CTL.
  writeTo(POWER_CTL, 0×08);

Nota: writeTo es una función que contiene los el código I2C para platicar con el acelerómetro, esta función se mostrará mas abajo. 
  • En el loop ponemos lo siguiente:
 uint8_t howManyBytesToRead = 6;
 //lee los datos de aceleración del ADXL345
 readFrom( DATAX0, howManyBytesToRead, _buff);  
 
// cada lectura de eje viene con una resolución de 10 bit, es decir, 2 bytes. ¡Primero el Byte menos significativo!
// de esta forma, estamos convirtiendo los dos bytes en un int
  int x = (((int)_buff[1]) << 8) | _buff[0];   
  int y = (((int)_buff[3]) << 8) | _buff[2];
  int z = (((int)_buff[5]) << 8) | _buff[4];
 
//mapeamos el eje Z para que sea igual a los valores mínimo y máximo de los otros ejes
int zAng = map(z, minVal, maxVal, -128, 128);
 
//Cómo ya lo vimos en el ejemplo del acelerómetro analógico usamos la tangente inversa para calcular el ángulo. de inclinación del objeto.
Y = RAD_TO_DEG * (atan2(-y, -zAng) + PI);  
X = RAD_TO_DEG * (atan2(-x, -zAng) + PI);  
Z = RAD_TO_DEG * (atan2(-y, -x) + PI); 
 
  Serial.print(“x: “);  
  Serial.print(X);  
  Serial.print(“   y: “);  
  Serial.println(Y);
  delay(100);
  • Se adjunta las funciones para la transmisión de datos I2C.
void writeTo(byte address, byte val) {
Wire.beginTransmission(DEVICE); // empieza la transmisión al dispositivo
Wire.write(address);             // envía dirección de registro
Wire.write(val);                 // envía el valor a escribir
Wire.endTransmission();         // termina transmisión
}// Lee num bytes empezando del registro address en el dispositivo y los guarda en el arreglo buff.
void readFrom(byte address, int num, byte _buff[]) {
Wire.beginTransmission(DEVICE); // empieza la transmisión al dispositivo
Wire.write(address);             // envía direeción a leer
Wire.endTransmission();         // termina transmisiónWire.beginTransmission(DEVICE); // empieza la transmisión al dispositivo
Wire.requestFrom(DEVICE, num);    // solicita 6 bytes del dispositivoint i = 0;
while(Wire.available())         // el dispositivo podría mandar menos de lo solicitado (anormal)
{
_buff[i] = Wire.read();    // recibe un byte
i++;
}
Wire.endTransmission();         // termina transmisión
}
 
 
5Hertz Electrónica
Facilitadores de componentes electrónicos. Ponemos a su disposición más de 5 millones de productos.

Redes Sociales

Boletín de noticias