EJERCICIO Lectura de un acelerómetro Memsic 2125
Descripción del ejercicio
El acelerómetro Memsic 2125 es un acelerómetro de dos ejes de Parallax capza de medir aceleraciones de hasta 2G. A la hora de realizar mediciones muy precisas, el sensor cuenta con un pin de temperatura que puede ser utilizado para compensar posibles errores.
Los pins dedicados a realizar mediciones de aceleración se pueden conectar directamente a las entradas digitales de la placa Arduino, mientras que el pin de temperatura debe ser contemplado como entrada analógica. Los pines de aceleración envían al PC señales en forma de pulsos cuya amplitud representa la aceleración.
El ejemplo que aquí se muestra lo implementó Anders Gran, mientras que el software fue desarrollado por Marcos Yarza, que es el investigador de tecnologías de aceleración para la placa Arduino en la Universidad de Zaragoza, España. Las conexiones a la placa son mínimas ... sólo los pines correspondientes a los dos ejes (X,Y) están conectados a la placa. El pin de temperatura no lo utilizamos.
Elementos necesarios:
- Un sensor de aceleración Mensic 2125.
- Una placa protoboard.
- Cables para realizar las conexiones.
Detalle del conexionado del sensor Memsic 2125
Esquema
Placa protoboard con un acelerómetro conectado. Imágen de Anders Gran
Código fuente
/* Sensor de aceleración (Acelerómetro)
* -------------------------------------
*
* Lee un acelerómetro de 2D conectado a una
* par de entrdas digitales y envía sus valores
* a través del puerto serie. El LED de monitorización
* parpadea una vez enviada la información
*
*
* http://www.0j0.org
* copyleft 2005 K3 - Malmo University - Sweden
* @author: Marcos Yarza
* @hardware: Marcos Yarza
* @project: SMEE - Experiential Vehicles
* @sponsor: Experiments in Art and Technology Sweden, 1:1 Scale
*/
int ledPin = 13; // PIN del LED
int xaccPin = 7; // PIN de la coordenada X del acelerómetro
int yaccPin = 6; // PIN de la coordenada Y del acelerómetro
int value = 0; // Lectura del sensor
int accel = 0; // Aceleración
char sign = ' '; // Signo de la aceleración
int timer = 0; // Amplitud de la señal
int count = 0; // Contador
void setup() {
beginSerial(9600); // Inicializa las comunicaciones a 9600 baudios
pinMode(ledPin, OUTPUT); // PIN del LED --> Salida
pinMode(xaccPin, INPUT); // PIN de coordenada X --> Entrada
pinMode(yaccPin, INPUT); // PIN de coordenada Y --> Entrada
}
/* (int)operateAcceleration
* función que calcula la aceleración
* devuelve un entero
*/
int operateAcceleration(int time1) {
return abs(8 * (time1 / 10 - 500));
}
/* (void) readAccelerometer
* procedimeinto para leer el sensor, calcula
* la aceleración y muestra el valor
*/
void readAcceleration(int axe){
timer = 0;
count = 0;
value = digitalRead(axe);
while(value == HIGH) { // Itera hasta leer un valor BAJO en el pin
value = digitalRead(axe);
}
while(value == LOW) {
value = digitalRead(axe); // Itera hasta leer un valor ALTO en el pin
}
while(value == HIGH) {
value = digitalRead(axe); // Itera hasta leer de nuevo un valor BAJO en el pin y cuenta.
count = count + 1;
}
timer = count * 18; // Calcula el tiempo en milisegundos
if (timer > 5000){ // Signo de opración: + o - en función del tiempo
sign = '+';
}
if (timer < 5000){
sign = '-';
}
accel = operateAcceleration(timer); // Determina el valor de la aceleración
if (axe == 7){ // Representa la aceleración sobre el puerto serie
printByte('X');
}
else {
printByte('Y');
}
printByte(sign);
printInteger(accel);
printByte(' ');
}
void loop() {
readAcceleration(xaccPin); // Lee y representa la aceleración en el eje X
readAcceleration(yaccPin); // Lee y representa la aceleración en el eje Y
delay(300);
digitalWrite(ledPin, LOW);
}
Acelerómetro montado por M. Yarza en una placa de prototipos.
Este ejemplo es una adaptación del anterior. Marcos Yarza le añadió dos resistencias de 220 ohmios a los pines de salida del acelerómetro. La placa elegida para realizar este pequeño circuito es una parte de una placa de prototipos. El código en este caso es el mismo que antes (cambiando los pines de entrada a los pines 2 y 3), pero la instalación de la placa permite incrustar el circuito completo en un espacio mucho más pequeño.