You are on page 1of 5

METODOLOGA

Para realizar la comunicacin arduino-acelerometro es necesario identificar la direccin que tiene el


acelermetro PmodACL, ya que este registro permite obtener los valores que posteriormente seran
utilizados para obtener la posicion del acelerometro.
Ademas es necesario identificar con cuales pines trabaja la placa arduino y acelermetro PmodACL
para la comunicacin I2C.

Figura 1: Diagrama de pines para conexin I2C

Identificacin de acelermetro PmodACL

Para identificar esta direccin es necesario ir al datasheet del acelermetro ya que ahi
encontraremos su direccion, sin embargo existe un metodo el cual consiste en realizar un scaneo al
sensor mediante un codigo de programacion hecho en arduino y posteriormete cargarlo a la placa la
cual estara conectada al sensor.

Figura 2: Diagrama de conexin I2C

El programa scaner para obtener la direccin del acelermetro utiliza la biblioteca Wire la cual
gestiona el protocolo de comunicaciones I2C de Arduino -acelerometro permitiedo de esta maner su
correcta conexin.
figura 3: Obtencin de direccin de acelermetro

Programacin IDE arduino comunicacin I2C

para la comunicacin I2C se utilizar la biblioteca biblioteca Wire.h.

A continuacin se presentan las funciones que vamos a utilizar.

Wire.begin () - Inicia el protocolo I2C Arduino.

Wire.beginTransmission (X) - inicia la comunicacin a un dispositivo capaz I2C con la direccin


X.

Wire.write (X) - transmite los datos de X especificada desde el dispositivo maestro.

Wire.endTransmission () - Termina transmisin.

Wire.requestFrom (X, Y) - solicitudes de datos de longitud Y desde el dispositivo situado en la


direccin X.

# include Wire.h.
#define accel_module (0x01D)
valores de byte [6];
salida char [512];
void setup () {
Wire.begin ();
Serial.begin (9600);

El cdigo anterior inicializa nuestro programa. La direccin de la PmodACL se guarda en la


memoria. Esta direccin se especifica en la hoja de datos como 0x01D. Tambin llamamos a cabo 6
bytes de datos con el fin de guardar la informacin del acelermetro. La cadena de salida se utiliza
para enviar informacin al puerto serie. Por ltimo, en la funcin de configuracin, que llamamos el
uso del protocolo I2C Arduino, as como el protocolo de serie.
Wire.beginTransmission (accel_module);
Wire.write (0x2D);
Wire.write (0);
Wire.endTransmission ();
Wire.beginTransmission (accel_module);
Wire.write (0x2D);
Wire.write (16);
Wire.endTransmission ();
Wire.beginTransmission (accel_module);
Wire.write (0x2D);
Wire.write (8);
Wire.endTransmission (); }
El cdigo anterior se utiliza para inicializar el registro de control de potencia. Su direccin es
especificada por 0x2D. El primer segmento de cdigo despeja el registro. Los registros D4 y D3 se
establecen en alto. Esto se hace con el fin de fijar el mdulo en modalidad de medicin, para
asegurarse de que no est en modo de suspensin.

Figura 4: Registro de lectura y escritura

void loop(){
int xyzregister = 0x32;
int x, y, z;
Wire.beginTransmission(accel_module);
Wire.write(xyzregister);
Wire.endTransmission();
Wire.beginTransmission(accel_module);
Wire.requestFrom(accel_module, 6);
int i = 0;
while(Wire.available()){
values[i] = Wire.read();
i++;
}
Wire.endTransmission();
figura 5: Direccin de registros de datos

La primera seccin del cdigo anterior se utiliza para especificar el primer registro de datos. Esta
informacin proviene de la ficha tcnica. Comenzamos la transmisin al mdulo; se enva una
solicitud a la direccin del mdulo. Cada valor recuperado se almacena en los valores de registro
seguidor por un extremo de la transmisin.

Algoritmo utilizado

Calculo el ngulo de inclinacin con el acelermetro PmodACL

Si tenemos en cuenta que la nica fuerza que acta sobre el sensor es la fuerza de la gravedad.
Entonces los valores que obtenemos en las componentes del acelermetro corresponden a la
gravedad y los ngulos de la resultante sern la inclinacin del plano del sensor, puesto que la
gravedad siempre es vertical.

Para entenderlo mejor, asumiremos que estamos en un plano X-Z e inclinamos el PmodACL un
ngulo , dicho ngulo se calcula de la siguiente forma:

figura 6: Calculo de ngulo mediante trigonometra

Lo anterior nos sirve para calcular el ngulo en un plano 2D, pero para calcular los ngulos de
inclinacin en un espacio 3D tanto en X como en Y usamos las siguientes formulas:
figura 7: calculo de ngulo de inclinacin en espacio 3D

Programacin en Ide Arduino de algoritmo utilizado


los valores que obtenemos mediante el calculo de inclinacin con geomtria nos da valores en
radianes para obtener los valores en grados hay que multiplicar por (180.0/3.14)
float accel_ang_x=atan(ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14);
float accel_ang_y=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14);