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
- Controlar dos servomotores con el acelerómetro digital, uno con el eje X y el otro con el eje Y.
- Encender un LED con un Tap Simple.
- Encender dos LED’s con un Tap Doble.
- 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
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.
A continuación se puede observar el funcionamiento del proyecto.



