You are on page 1of 5

METODOLOGÍA

Para realizar la comunicación arduino-acelerometro es necesario identificar la dirección que tiene el
acelerómetro 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 acelerómetro PmodACL
para la comunicación I2C.

c

Figura 1: Diagrama de pines para conexión I2C

Identificación de acelerómetro PmodACL

Para identificar esta dirección es necesario ir al datasheet del acelerómetro 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 conexión I2C

El programa scaner para obtener la dirección del acelerómetro utiliza la biblioteca Wire la cual
gestiona el protocolo de comunicaciones I2C de Arduino -acelerometro permitiedo de esta maner su
correcta conexión.

requestFrom (X. La cadena de salida se utiliza para enviar información al puerto serie. Wire. Esta dirección se especifica en la hoja de datos como 0x01D. El código anterior inicializa nuestro programa. figura 3: Obtención de dirección de acelerómetro Programación IDE arduino comunicación I2C para la comunicación I2C se utilizará la biblioteca biblioteca Wire. La dirección de la PmodACL se guarda en la memoria.write (X) . También llamamos a cabo 6 bytes de datos con el fin de guardar la información del acelerómetro. así como el protocolo de serie. Y) .begin () .endTransmission () . . que llamamos el uso del protocolo I2C Arduino. Wire.inicia la comunicación a un dispositivo capaz I2C con la dirección X.Inicia el protocolo I2C Arduino. Wire.endTransmission ().h. Wire.begin (9600). Wire. en la función de configuración. # include Wire. void setup () { Wire. A continuación se presentan las funciones que vamos a utilizar.beginTransmission (accel_module).write (0x2D).h.transmite los datos de X especificada desde el dispositivo maestro. Wire. Serial. #define accel_module (0x01D) valores de byte [6].Termina transmisión. Por último. Wire.beginTransmission (X) .write (0). Wire.begin (). salida char [512]. Wire.solicitudes de datos de longitud Y desde el dispositivo situado en la dirección X.

. Wire.beginTransmission(accel_module). while(Wire. Wire.available()){ values[i] = Wire.endTransmission (). z.beginTransmission (accel_module).beginTransmission (accel_module). 6). El primer segmento de código despeja el registro. Figura 4: Registro de lectura y escritura void loop(){ int xyzregister = 0x32.write(xyzregister).requestFrom(accel_module.endTransmission (). Wire.write (16). Wire. Wire. Wire.write (0x2D). } El código anterior se utiliza para inicializar el registro de control de potencia. int x.Wire. Su dirección es especificada por 0x2D.endTransmission(). i++.write (8). } Wire. Wire. Wire.read().beginTransmission(accel_module).endTransmission(). Wire. Wire.write (0x2D). Esto se hace con el fin de fijar el módulo en modalidad de medición. int i = 0. Los registros D4 y D3 se establecen en alto. y. Wire. para asegurarse de que no está en modo de suspensión. Wire.

Cada valor recuperado se almacena en los valores de registro seguidor por un extremo de la transmisión. 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 trigonometría Lo anterior nos sirve para calcular el ángulo en un plano 2D. Comenzamos la transmisión al módulo. Esta información proviene de la ficha técnica. Entonces los valores que obtenemos en las componentes del acelerómetro corresponden a la gravedad y los ángulos de la resultante serán la inclinación del plano del sensor. figura 5: Dirección de registros de datos La primera sección del código anterior se utiliza para especificar el primer registro de datos. Algoritmo utilizado Calculo el ángulo de inclinación con el acelerómetro PmodACL Si tenemos en cuenta que la única fuerza que actúa sobre el sensor es la fuerza de la gravedad. se envía una solicitud a la dirección del módulo. pero para calcular los ángulos de inclinación en un espacio 3D tanto en X como en Y usamos las siguientes formulas: . puesto que la gravedad siempre es vertical. Para entenderlo mejor.

2)))*(180.0/3.14). .0/3. float accel_ang_y=atan(ay/sqrt(pow(ax.0/3.2) + pow(az.2) + pow(az.2)))*(180.14) float accel_ang_x=atan(ax/sqrt(pow(ay. figura 7: calculo de ángulo de inclinación en espacio 3D Programación en Ide Arduino de algoritmo utilizado los valores que obtenemos mediante el calculo de inclinación con geométria nos da valores en radianes para obtener los valores en grados hay que multiplicar por (180.14).