martes, 21 de abril de 2015


Equipo 8


Objetivo

Familiarizarse con el acelerómetro digital ADXL345, el cual permite obtener valores de 3 ejes, así como también facilita funciones como son el tap simple y doble al igual que la caída libre. Con ayuda de las funciones mencionadas anteriormente, controlar diferentes actuadores.


Descripción del ADXL345

El ADXL345 es un acelerómetro de 3 ejes de alta resolución (13 bit). Una de las ventajas es su bajo consumo de energía. El formato de los datos de salida es de complemento a dos de 16 bit. Los datos se pueden obtener a través de interfaz SPI o I2C.
El ADXL345 es adecuado para medir la aceleración estática de la gravedad para aplicaciones de detección de inclinación, así como la aceleración dinámica ocasionada por algún movimiento o impacto. Su alta resolución permite medir cambios de inclinación de menos de 1.0.
Incluye funciones especiales de detección. Puede reconocer cuando no hay inactividad con base en la presencia o ausencia de movimiento, y si la aceleración en cualquier eje excede de un nivel establecido por el usuario. También detecta pequeños impulsos individuales y dobles, cuando el dispositivo está en caída libre. Estas funciones se pueden asignar a cualquiera de los dos pines de salida de interrupción. La tarjeta cuenta con un buffer de 32 bits tipo FIFO, para almacenar datos y minimizar la intervención del procesador que se esté empleando. Incluye modalidades de bajo consumo que permiten administrar la energía con base en la detección de movimiento y la medición del umbral de aceleración activa para lograr consumos de energía extremadamente bajos.
Este sensor trabaja entre 3.3 y 5 V DC, pero el rango de voltaje correcto para esta tarjeta es de 2.0 a 3.6 V DC.

Características del Acelerómetro ADXL345:
  •    Acelerómetro con interfaz digital I2C y SPI
  •    Rango de medición seleccionable +/- 2, 4, 8 y 16 g
  •   El módulo o tarjeta de interconexión incluye circuito regulador de voltaje
  •    Pines configurables para generar interrupciones
  •    Voltaje de operación de  a 3.6 V
  •    Detección de picos de aceleración dobles y sencillos (como interfaz de usuario)
  •    Detección de caída libre
  •    Puede conectarse con el bus I2C y SPI.



Instrucciones
  1.   Controlar dos servomotores con el acelerómetro digital, uno     con el eje X y el otro con el eje Y.
  2.    Encender un LED con un Tap Simple.
  3.    Encender dos LED’s con un Tap Doble.
  4.    Hacer parpadear un LED al detectar la caída libre.


Descripción del servomotor de 180°

Los servomotores son utilizados para controlar posición (ángulo) de giro. Normalmente pueden girar dentro de un rango de 0-180° y se controlan por PWM. Comúnmente, el tiempo del pulso en estado alto debe ser entre 1-2ms y la posición 90° o central  queda en 1.5ms, mientras que 0°y 180°corresponden a 1ms y 2ms, respectivamente,
 Para mantener la posición del motor es necesario mantener los pulsos con el mismo periodo. Ya que un cambio en este podría se interpretara como una nueva dirección deseada.



Materiales

Material
Descripción
Imagen



Microcontrolador arduino due


Microcontrolador donde se realizara el software para leer los valores obtenidos por el acelerómetro y controlar los actuadores.



2 servomotores de 180°


Actuador que se moverá de acuerdo a los grados leídos por el acelerómetro digital, estos con un rango de 0 a 180°





3 LED


Este servirá como indicador, ya que se encenderá si el evento fue exitoso, al realizar un Tap simple debe encenderse un LED, si se trata de un Tap Doble serán dos LED’s los que se prendan y en caso de tener una caída libre este indicador comenzara a parpadear.






Acelerómetro ADLX345


Acelerometro digital que nos permitirá tomar valores de los ejes X, Y y Z para controlar los servomotores así como implementar las funciones del Simple Tap, Doble Tap y Caída libre para hacer encender los indicadores.





Batería de 9v.


Esta únicamente servirá como fuente de alimentación del sistema para que este sea portable, y más accesible para probar las funciones.



Desarrollo de la Práctica

Para el desarrollo de la práctica se procedió a conectar el ADLX345 al arduino Due para establecer la comunicación utilizando la siguiente configuración,

Arduino Pin
ADXL345 Pin
10
CS
SDA
SDA
12
SDO
SCL
SCL
3V3
VCC
Gnd
GND


Para la primera parte del código se agregó la librería Wire, para establecer la comunicación entre el acelerómetro y arduino así como la librería correspondiente al servo.



Debido a que los valores que arroja el acelerómetro son de 10 bits, se creó una función para interpretar este resultado a uno de 16 bits para poder utilizar estos valores más adelante en el código, esto mediante un corrimiento. 


Dentro del loop se solicitaron mediante la interfaces I2C los datos al acelerómetros, para esto se procedió a leer los registros de estos valores según la dirección que indica la hoja de datos, estos fueron mapeados dentro de un rango de -250 y 250 para devolver un resultado de 0 a 180 lo cual se  interpretó como el Angulo de posicionamiento del servo y mediante este se posicione el servo.


A continuación se procedió agregar la librería del ADXL345.




Para la utilización del tap, doublé tap así como la caída libre, se procedió a realizar cambios en los registros del arduino para activar las interrupciones y la sensibilidad de ciertas variables.




Dentro del loop se procedió a leer los registros del acelerómetro para detectar el tap, doble tap o caída libre. Activando los led según se el caso.



  
En cuanto al servo dentro del setup se procedió a inicializarlo y configurar el ancho de pulso al deseado a partir del mapeo al leer los resultados del  acelerómetro.


Resultados
Todas las funciones se integraron en un solo programa, por lo que al encender el arduino ya se pueden realizar las pruebas del Simple Tap, Doble Tap, Caida libre así como el control de los servomotores.




A continuación pueden observar el funcionamiento de la practica. 


PODÓMETRO

Un podómetro es un dispositivo electrónico, generalmente portátil que cuenta cada paso que una persona realiza al detectar el movimiento de las caderas de la persona, pero esta medición no solo se limita a las caderas, se puede diseñar para cualquier parte del cuerpo siempre y cuando se tenga una buena ubicuidad. Debido a que la longitud del paso de cada persona varía, es necesaria una calibración informal, realizada por el usuario, si se desea la presentación de la distancia recorrida en una unidad de longitud (por ejemplo, en kilómetros o millas).
Usado originalmente por amantes del deporte y de la actividad física, los podómetros se están popularizando como un medidor y motivador del ejercicio cotidiano. A menudo se lleva en el cinturón durante todo el día, de esa manera se puede registrar la cantidad de pasos que el usuario ha recorrido ese día, y por lo tanto los kilómetros o millas (distancia = número de pasos x longitud del paso).
Para el desarrollo de la aplicación del podómetro se
comenzó realizando una función la cual se encargara de
inicializar las configuración del acelerómetro así como de
activar las interrupciones necesarias y la sensibilidad de estas.


De igual forma se creó una función (init()) para iniciar la inicialización del podómetro.


Como se puede observar esta utiliza la función updateModelAxis(). Dentro de esta función se muestra las medidas obtenidas por los ejes x,y,z del acelerómetro se promedian y se obtiene el de mayor valor. 



Para obtener el valor de los pasos se procedio a realizar un función encargada de llevar la cuenta de los pasos llamada  stepCalc().



La función stepCalc(). Se encarga de establecer un lapso de tiempo para el cálculo del paso en este caso son 100 milisegundo el lapso. Esta función utiliza dos funciones adicionales como lo son getValidValue() y getValue(), estas funciones se encargan de obtener los valores del acelerómetros compararlos con los valores promedio muestrados para detectar un cambio en la aceleración en el acelerómetro dentro del lapso de tiempo propuesto.

continuación se puede observar el funcionamiento del proyecto.