You are on page 1of 19

http://5hertz.com/tutoriales/?

p=228

ABC Del Acelerometro.


Posted by: 5Hertz on 17/02/2014 in Acelermetro 4 Comments 66,109 views2

Los acelermetros son dispositivos que miden la aceleracin, 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 vara ligeramente con la
altitud (y ser un valor diferente en diferentes planetas, debido a las variaciones de la atraccin gravitatoria).
Los acelermetros son tiles para detectar las vibraciones en los sistemas o para aplicaciones de orientacin.

Ejes de medida de un acelermetro de tres ejes

Contenido:
1. Introduccion
1.1 Cmo funciona un acelermetro?
1.2 Cmo conectarse a un acelermetro.
1.3 Interfaz de comunicaciones.
1.4 Potencia
2. Cmo seleccionar un acelermetro.
2.1 Alcance.
2.2 Caractersticas adicionales.
3. Gua de compra de uno de nuestros acelermetros
3.1 Caractersticas a elegir de un acelermetro.
3.1.1 Rango.
3.1.2 Interfaz.
3.2 Caractersticas especiales.
3.3 Tabla comparativa.
4. Cmo utilizar su nuevo acelermetro con Arduino .
4.1 Acelermetros analgicos.
4.1.1 Programacin analgicos.
4.2 Acelermetros digitales.
4.2.1 Programacin digitales.

1.1 Cmo funciona un acelermetro?


Los acelermetros son dispositivos electromecnicos que detectan las fuerzas de aceleracin, ya sea esttica
o dinmica. Las fuerzas estticas incluyen la gravedad, mientras que las fuerzas dinmicas pueden incluir
vibraciones y movimiento.
Los acelermetros pueden medir la aceleracin en uno, dos o tres ejes. Los de tres ejes son ms
comunes conforme los costos de produccin de los mismos baja.
Generalmente, los acelermetros contienen placas capacitivas internamente. Algunos de estos son fijos,
mientras que otros estn unidos a resortes minsculos que se mueven internamente conforme las fuerzas de
aceleracin actan sobre el sensor. Como estas placas se mueven en relacin el uno al otro, la capacitancia
entre ellos cambia. A partir de estos cambios en la capacitancia, la aceleracin se puede determinar.
Sistema microelectromecnico para la aceleracin en 1 eje.

Otros acelermetros se pueden centrar en torno materiales piezoelctricos. Estos pequea carga elctrica de
salida estructuras cristalinas cuando se coloca bajo tensin mecnica (por ejemplo aceleracin).

Sistema con tensin mecnica.

Para la mayora de los acelermetros , las conexiones bsicas que se requieren para la operacin son el
poder y las lneas de comunicacin. Como siempre, leer la hoja de datos para una correcta conexin.

1.2 Cmo conectarse a un acelermetro


Para la mayora de los acelermetros , las conexiones bsicas que se requieren para la operacin son el
poder y las lneas de comunicacin. Como siempre, leer la hoja de datos para una correcta conexin.

1.3 Interfaz de comunicaciones


Los acelermetros se comunicarse a travs de un convertidor analgico , digital , o interfaz de conexin
modulada por ancho de impulsos(pwm) .
Los acelermetros con una interfaz analgica entregan un voltaje proporcional a la aceleracin en cada uno
de sus ejes (hablando de uno de 3 ejes) que normalmente fluctan entre tierra y el valor de alimentacin
Vcc. Estos suelen ser ms baratos que los digitales y mucho ms fciles de usa en momento ms veremos
porqu.
Los acelermetros con una interfaz digital pueden comunicarse a travs de los protocolos de comunicacin de
SPI o I2C. Estos tienden a tener ms funcionalidad y ser menos susceptibles al ruido que acelermetros
analgicas .
Los acelermetros con salida modulada en ancho de pulso (PWM ) sus salidas don de onda cuadrada con un
periodo conocido, pero un ciclo de trabajo vara con cambios en la aceleracin .

1.4 Potencia
Los acelermetros son generalmente dispositivos de baja potencia . La corriente requerida cae tpicamente en
la gama de micro ( ) o mili amperios , con una tensin de alimentacin de 5 V o menos . El consumo de
corriente puede variar dependiendo de la configuracin (por ejemplo , el modo de ahorro de energa en
comparacin con el modo de funcionamiento estndar). Estos modos diferentes pueden hacer a los
acelermetros muy adecuado para aplicaciones que funcionan con batera .
Asegrese de que los niveles lgicos tanto del acelermetro como del microcontrolador correspondan y ms
en los digitales; ya que si esto no es as puede daar el sensor.

2.Cmo seleccionar un acelermetro


Antes de elegir usar un acelermetro debemos considerar varios requerimientos donde entre los principales
se encuentra el nivel de alimentacin y el tipo de comunicacin del que ya se habl anteriormente (cheque
nuestros tutoriales de cmo usar las interfaces digitales . Otras caractersticas para su consideracin se
muestran a continuacin.

2.1 Alcance
La mayora de los acelermetros tendr un rango seleccionable de las fuerzas que pueden medir. Estos
intervalos pueden variar de 1g hasta 250g. Tpicamente, el ms pequeo de la gama, es el ms sensible.
Por ejemplo, para medir pequeas vibraciones sobre una mesa , utilizando un acelermetro de gama pequea
proporcionar datos ms detallados que el uso de uno de 250 g (que es ms adecuado para cohetes ) .

2.2 Caractersticas adicionales


Algunos acelermetros incluyen caractersticas como la deteccin del grifo (til para las aplicaciones de baja
potencia ), deteccin de cada libre ( utilizados para activar la Proteccin del Disco Duro), compensacin de
temperatura ( para aumentar la precisin en situaciones de del alto riesgo ) y deteccin de 0g. La necesidad
de estos tipos de caractersticas en el acelermetro ser determinada por la aplicacin en la que se incorpora
el acelermetro.
Este acelermetro puede ser configurado para realizar mediciones entre 1.5g y 6g entre otras
caractersticas especiales.

3. Gua de compra de uno de nuestros


acelermetros.
Acelermetros.
Qu mide un acelermetro? Bueno, la aceleracin. Ya sabes cmo algo rpido se est acelerando o
frenando. Vers, la aceleracin 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 elevacin y la masa del planeta en
el que se est parado).
Los acelermetros se utilizan para detectar tanto esttica ( por ejemplo, gravedad ) y dinmica ( por ejemplo,
arranques repentinos / frenado ) de la aceleracin. Una de las aplicaciones ms ampliamente utilizadas para
acelermetros es la deteccin de inclinacin. Debido a que estn afectados por la aceleracin de la gravedad,
un acelermetro le puede decir cmo 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 acelermetro, que lo deja saber si se
encuentran vertical u horizontal.
Un acelermetro tambin se puede utilizar para detectar el movimiento.Por ejemplo, un acelermetro en el
WiiMote de Nintendo se puede utilizar para detectar golpes de derecha y de revs emulando los golpes de
una raqueta de tenis, o el efecto que se le pone a una bola de boliche. Por ltimo, un acelermetro tambin se
puede usar para detectar si un dispositivo est en un estado de cada libre. Esta caracterstica se implementa
en varias unidades de disco duro: si esto se detecta manda la seal al Disco Duro para guardar datos y
bloquearse para evitar que el golpe dae los datos.

3.1 Caractersticas a elegir de un acelermetro.


Ahora que usted sabe lo que hacen, vamos a considerar cules son las caractersticas que debe buscar al
seleccionar su acelermetro :

3.1.1 Rango
Los lmites superior e inferior de lo que el acelermetro puede medir tambin se conoce como su gama. En la
mayora de los casos, un rango menor a gran escala significa una salida ms sensible, as que usted puede
obtener una lectura ms precisa de un acelermetro con un rango de baja escala.
Usted debe seleccionar un rango de deteccin que mejor se adapte a su proyecto, si el proyecto slo ser
sometido a aceleraciones entre 2g y -2g, un acelermetro oscilado 24 no le va a dar mucha precisin.
Contamos con un buen surtido de acelermetros, con alcances mximos se extiende desde 1.5 g hasta
24g. La mayora de nuestros acelermetros se establecen en un rango mnimo / mximo duro, sin embargo
casi todos de los acelermetros que tenemos disponen de rangos seleccionables .

3.1.2 Interfaz
- Esta es otra de las caractersticas ms importantes. Los acelermetros tendrn ya sea una interfaz Anloga,
Digital (I2C o SPI) o por Modulacin de Ancho de Pulso (PWM). Actualmente solo disponemos sensores con
las dos primeras interfaces.
Acelermetros con una salida analgica producirn una tensin que es directamente proporcional a la
aceleracin detectada. En 0g, la salida analgica ser residir generalmente en alrededor de la mitad de la
tensin de alimentacin ( por ejemplo, 1,65 V para un sensor de 3,3 V ). En general, esta interfaz es el ms
fcil de trabajar, usando solo un convertidor analgico a digital (ADC) presente en la mayora de los
microcontroladores.
Acelermetros con una interfaz de PWM producirn una onda cuadrada con una frecuencia fija , pero el ciclo
de trabajo del pulso variar con la aceleracin detectada. Estos son bastante raro; por lo que no contamos
con ningn modelo pero siempre es bueno saber cmo funcionan.
Acelermetros digitales por lo general cuentan con una interfaz serial sea SPI o I C. Dependiendo de su
experiencia, estos pueden ser los ms difciles de integrar con su microcontrolador. Dicho esto, los
acelermetros digitales son populares debido a que por lo general tienen ms caractersticas, y son menos
susceptibles al ruido que sus homlogos analgicos.
Nmero de ejes medidos Este est muy claro: de los tres ejes posibles ( x , y, z ) , cuntos tiene sentido
medir? Acelermetros de tres ejes suelen ser el camino a seguir, sino que son los ms comunes, as que
aqu no hay mucho que pensarle.
Consumo de energa Si el proyecto funciona con pilas, es posible que desee considerar la cantidad de
energa que consumir el acelermetro. El consumo de corriente se requiere por lo general ser en el rango
de los 100s A. Algunos sensores tambin disponen de la funcionalidad de reposo para ahorrar energa
cuando no se necesita el acelermetro.

3.2 Caractersticas especiales


Los acelermetros ms recientes pueden tener algunas caractersticas ingeniosas, no basta con producir los
datos de aceleracin. Estos acelermetros nuevos pueden incluir caractersticas como rangos seleccionables
de medida, control del sueo, 0 g de deteccin y deteccin de golpeteo.

3.3 Tabla comparativa.

Dispositivo Rango Interfaz Ejes Requerimientos de Caractersticas especiales


energa
MMA7361 1.5 g y Analgica 3 2.2 a 3.6VDC,400A Compensacin de
6g temperatura
Sensibilidad
seleccionable.
Deteccin 0g
Modo de reposo
SELF-TEST

ADXL335 3g Analgica 3 1.8 a 3.6VDC.350uA SELF-TEST

MMA8452 2g , 4 Digital I2C 3 1,95 V a 3,6 V6 uA - Dos pines de


g, 8g 165 uA interrupcin
Sensibilidad
seleccionable
SEFL-TEST
Etc.

ADXL345 16g DigitalSPI 3 2.0 V to 3.6 V40 A Deteccin de


/I2C doble golpe
Deteccin cada
libre
Dos pines de
interrupcin

LIS331 6g , DigitalSPI 3 2.16 V to 3.6 V10 A Dos pines de


12g, / I2C interrupcin
24g
Dodo de reposo
SEFL-TEST

MMA7455 2g, 4g, Digital 3 2.4 V 3.6 V400 A Dos pines de


8g SPI/I2C interrupcin
Deteccin (golpe,
vibracin y cada libre)

MMA7660 1.5g Digital 3 2.4 V 3.6 V47 A Deteccin de


I2C. orientacin
Deteccin de
golpe y sacudida

4. Cmo utilizar su nuevo acelermetro 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. Cmo ya vimos anteriormente cada sensor tiene ciertas caractersticas especiales que influyen a la
hora de tomar una decisin 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 Acelermetros Analgos.


Empecemos por los que han elegido un acelermetro analgico, ya sea porque lo tienen desde antes que
salieran los digitales o simplemente porque leyeron que son ms fciles de usar (eso yo le dije).

Todo sabemos que el acelermetro mide el cambio de velocidad, pero cuando este se encuentra esttico la
nica aceleracin que detecta es la gravedad que tira hacia abajo de este.
Usando esta aceleracin (gravedad) podemos calcular el ngulo de inclinacin del sensor con respecto al eje
vectorial de la gravedad. !Ahora un poco de matemticas!.

Cmo vemos en la imagen cuando el acelermetro est en reposo, solamente la fuerza de gravedad acta
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 inclinacin 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 aceleracin, los cuales mediremos con nuestro cdigo que haremos en arduino .

4.1.1 Programacin para acelermetro


analgico.
(DESCARGAR).
Una vez que tengamos conectado nuestro sensor al arduino por los pines analgicos, en la IDE empecemos a
teclear el cdigo:
Definimos los pines analgicos en los que estn cada uno de los ejes.
#define xPin A4 // eje x en el pin analgico 4
#define yPin A3
#define zPin A2
#define ST 2 //pin de activacin del sensor ADXL335
Definimos los mximos y mnimos valores del acelermetro para 1g de aceleracin.
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 analgicos 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
ms que nada para poder darle sentido a la inclinacin 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 aplicndole 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

sera :
El comando antan2 Regresa el ngulo en radianes por lo que debemos convertirlo a grados.
Tambin 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 Acelermetros digitales.


Anteriormente vimos como leer y como usar esas lecturas para calcular al ngulo de inclinacin de un
acelermetro analgico. Ahora veamos cmo obtener los mismo resultados con un acelermetro digital.
En los acelermetros la interfaz de comunicacin puede ser I2C o SPI, cada una con caractersticas 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 conexin del ADXL345 con el arduino UNO.

Hay que tener en cuenta que al estar usado una interfaz digital los valores arrojados por el acelermetro 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 engaar estos pines sern usados como pines digitales no cmo
analgicos. Una vez entendido esto y teniendo todo bien conectado vamos a proceder a desarrollar el cdigo.

4.2.1 Programacin para acelermetro digital.


(DESCARGAR)
Importamos la librera 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) // Direccin del dispositivo como se especifica en la hoja de datos
char POWER_CTL = 0x2D; //Registro de Control de Potencia
char DATA_FORMAT = 031;
char DATAX0 = 032; //Dato Eje X 0
char DATAX1 = 033; //Dato Eje X 1
char DATAY0 = 034; //Dato Eje Y 0
char DATAY1 = 035; //Dato Eje Y 1
char DATAZ0 = 036; //Dato Eje Z 0
char DATAZ1 = 037; //Dato Eje Z 1
Definimos los mximos y mnimos 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 despus escalarlos a los valores de los otros
ejes, tambin 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 librera wire, la comunicacin serial y configuraremos ciertos parmetros
del sensor.
// unirse a bus i2c (direccin opcional para master)
Wire.begin();
// inicia serial para la salida. Asegrese 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 cmo funciona el I2C puede checar nuestros tutoriales de
interfaces digitales para una mejor explicacin.
//Poner el ADXL345 en un rango de +/- 4G escribiendo el valor 001 al registro DATA_FORMAT.
writeTo(DATA_FORMAT, 001);
//Poner el ADXL345 en Modo de Medicin escribiendo el valor 008 al registro POWER_CTL.
writeTo(POWER_CTL, 008);
Nota: writeTo es una funcin que contiene los el cdigo I2C para platicar con el acelermetro, esta
funcin se mostrar mas abajo.
En el loop ponemos lo siguiente:

uint8_t howManyBytesToRead = 6;
//lee los datos de aceleracin del ADXL345
readFrom( DATAX0, howManyBytesToRead, _buff);

// cada lectura de eje viene con una resolucin 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 mnimo y mximo de los otros ejes
int zAng = map(z, minVal, maxVal, -128, 128);

//Cmo ya lo vimos en el ejemplo del acelermetro analgico usamos la tangente inversa para calcular el
ngulo. de inclinacin 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 transmisin de datos I2C.
void writeTo(byte address, byte val) {
Wire.beginTransmission(DEVICE); // empieza la transmisin al dispositivo
Wire.write(address); // enva direccin de registro
Wire.write(val); // enva el valor a escribir
Wire.endTransmission(); // termina transmisin
}// 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 transmisin al dispositivo
Wire.write(address); // enva direecin a leer
Wire.endTransmission(); // termina transmisinWire.beginTransmission(DEVICE); // empieza la
transmisin al dispositivo
Wire.requestFrom(DEVICE, num); // solicita 6 bytes del dispositivoint i = 0;
while(Wire.available()) // el dispositivo podra mandar menos de lo solicitado (anormal)
{
_buff[i] = Wire.read(); // recibe un byte
i++;
}
Wire.endTransmission(); // termina transmisin
}
Imgen que muestra los ngulos en grados en los ejes X y Y con respecto al vector de gravedad.

http://hetpro-store.com/TUTORIALES/mma7361-sensor-acelerometro/

comments

MMA7361 Sensor Acelerometro


MMA7361 Sensor Acelerometro

MMA736 Sensor Acelerometro


Este sensor (MMA7361) es un acelermetro analgico de 3 ejes (x,y,z). El nivel de
las medidas del acelermetro, nos permite medir la aceleracin, o la inclinacin de
una plataforma con respecto al eje terrestre. Otras caractersticas que tiene son
el modo sleep, acondicionamiento de seal, filtro pasa bajas de 1 polo,
compensacin de temperatura, auto prueba, y deteccin de 0g para cada libre.
Este sensor funciona con alimentaciones entre 2.2 y 3.6VDC (3.3V es el valor
ptimo), y consume solamente 400A de corriente.
Especificaciones del sensor MMA7361:
Bajo consumo de corriente: 400 A.
Modo de espera: 3 A.
Bajo Voltaje de la operacin: 2,2 V 3,6 V.
Alta sensibilidad (800 mV / g@1.5g).
Sensibilidad seleccionable ( 1,5 g, 6 g).
Encendido Rpido Tiempo de calentamiento (0.5 ms Tiempo de
Respuesta Activa).
0g-Detect para la Proteccin de la cada libre.
Acondicionamiento de seales con filtro de paso bajo.
Diseo robusto, alto Shocks supervivencia.

Descripcin de pines del sensor MMA7361:

Nombre de pines del MMA7361

Eje X Es una seal de salida analgica a lo largo del eje X


Eje Y Es una seal de salida analgica a lo largo del eje Y
Eje Z Es una seal de salida analgica a lo largo del eje Z
Este pin se activa de forma negada el integrado pasara a sleep y no nos
Sleep(SL) enviara nada en sus salidas. se reanudar la operacin cuando se consuma
mas energa.
Este pin ser alto cuando se detecta 0g en los 3 ejes. til para detectar caida
Detect(0G)
libre
Este pin est conectado a un regulador construido en el que traer de 5v a
5V
3.3v que se requieren en el chip para ejecutarse.
Este pin no pasa por el regulador de 5v, es para aquellos que tienen un
3.3V
voltaje de 3.3v regulado previamente.
Ground(GND) Este pin debe estar conectado a la tierra del circuito.
Este pin es un habilitador de los sensores x, y , z. Este hay que habilitarlo a
Sense nivel bajo, y luego restan los pines de alimentacin y masa. se utiliza para
Select(GS) seleccionar entre las dos sensibilidades. Si este pin es bajo se encuentra en
modo 1,5 g. si es alto, se cambia al modo de 6 g.
Este chip se ha construido en un auto-test para verificar que tanto las piezas
Self Test(ST) mecnicas y elctricas en el interior del chip estn funcionando
correctamente.Es til para la calibracin.
Se explicara como crear un inclinmetro utilizando el acelermetro MMA7361 de
3 ejes y Arduino
Material que se necesita:
1 arduino
1 sensor MMA7361 Acelerometro
Cables jumper tipo macho/hembra
Conexin del sensor (MMA7361) al arduino:

Conexin del MMA7361 al Arduino

Mapa de pines del SENSOR MMA7361


ARDUINO CABLE/COLOR MMA7361

GND NEGRO GND = Tierra


5V ROJO 5V
A0 AZUL X = Salida x
A1 VERDE Y = Salida y
A2 AMARILLO Z = Salida z
GND CAFE GS = g-Select
GND CAFE ST = Self Test
AREF GRIS 3.3 y SL = Sleep

Foto del la conexin

Explicacin del programa:


Este circuito es capaz de funcionar con 5V, sin embargo internamente funciona
con 3.3V lo cual utilizaremos como referencia para el convertidor Anlogo->Digital.
Esto nos permitir tener mayor precisin a la hora de leer.
?
1 #include <math.h>
2
3 void setup() {
4 analogReference(EXTERNAL);
5 Serial.begin(9600);
}
6
Definimos algunas variables para almacenar los valores de los componentes de
las fuerzas en cada uno de los ejes del acelermetro.
?
1 int xVal = 0;
2 int yVal = 0;
3 int zVal = 0;

Un par de variables de tipo flotante doble van a almacenar el ngulo en el que se


encuentra el acelermetro.
?
1 double angleYZ = 0;
2 double angleXZ = 0;

Vamos a utilizar el puerto serial para escribir los valores.


Luego, en el loop principal tenemos que leer los valores anlogos y hacer un
pequeo ajuste utilizando la funcin map(). El problema es que el convertidor
anlogo-digital tiene un rango que va desde 0 a 1023, si utilizramos la funcin
arco tangente utilizando estos valores nos mentira ya que los componentes de la
fuerza solo tendran valores positivos y por lo tanto valores errneos.
Para corregir este problema utilizamos la funcin map() que nos permitir que
nuestro rango vare entre valores positivos y negativos como se muestra en la
siguiente tabla:

Fuerza G Voltaje salida Arduino analogRead() Luego de map()


1.5 ~3.3V ~1023 ~500

0 ~1.6V ~511 ~0

1.5 ~0V ~0 ~-500

?
1 void loop() {
Como pueden ver en el cdigo lo primero que hacemos es leer los valores que se
encuentran en las entradas anlogas
?
1 xVal = analogRead(0);
2 yVal = analogRead(1);
3 zVal = analogRead(2);

Luego utilizamos la funcin map para generar un rango ms adecuado para los
valores de entrada.
?
1 xVal = map(xVal, 0, 1023, -500, 500);
2 yVal = map(yVal, 0, 1023, -500, 500);
3 zVal = map(zVal, 0, 1023, -500, 500);

Por ltimo aplicamos las sencillas funciones trigonomtricas para calcular el


ngulo correspondiente.
?
1 angleYZ = atan((double)yVal / (double)zVal);
2 angleYZ = angleYZ*(57.2958);
3
4 angleXZ = atan((double)xVal / (double)zVal);
angleXZ = angleXZ*(57.2958);
5
Una vez calculados los ngulos simplemente los imprimimos en el puerto serial
para poder leerlos desde la computadora.
?
01 Serial.write("yz:");
02 Serial.print(angleYZ);
03 Serial.write("\n");
04
05 Serial.write("xz:");
06 Serial.print(angleXZ);
07 Serial.write("\n");
08
delay(100);
09 }
10
Si revisan la salida del puerto serial notarn que los valores varan bastante, esto
sucede ya que siempre hay algo de ruido o interferencias en la seal y es
completamente normal.
Hasta este punto simplemente compilamos nuestro programa y lo guardamos en
nuestro Arduino.

Proceso de descarga
Proceso de comprobacion del programa

Configuracin del puerto serial


Para cargar el programa e ingresar al monitor serial que ofrece el Arduino es
necesario asegurarse que el puerto COM sea el correcto. Para ello tenemos que
acceder a Administrador de dispositivos desde la PC y verificar que el COM que
nos muestra sea el mismo que marca el software de Arduino.
Configuracin de Puerto Serial

Una vez que este verificado el puerto serial solo damos click en la lupa que
aparece en la parte superior derecha y automticamente abre otra ventana que
muestra los datos en el puerto serial.

Datos del MMA7361 mostrados en puerto serial

Nota: observe que la nueva ventana marca como ttulo del COM de la tarjeta que
corresponde al serial monitoreado.
Para analizar el comportamiento del sensor se mueve de un lado a otro
dependiendo las cordenedas se marcara los grados en la que se movi el sensor
ya sea en xz o yz. Con la ayuda del puerto serial se pudo observar los datos
obtenidos del sensor en movim

You might also like