Arduino, ADXL335 Sensor

Este diminuto componente de baja potencia, es un aceleró metro analógico completo de 3 ejes con señales reguladas de voltaje de salida. Mide la aceleración con una escala de ± 3G y utiliza un nivel de tensión de 3.3 V. Se puede medir la aceleración de la gravedad estática en aplicaciones de detección de inclinación, así como la aceleración dinámica resultante del movimiento, choque o vibraciones.  ( hoja de datos ).
¿Que es un Aceleró metro?
Un aceleró metro es un  es un tipo de sensor analógico transductor que detecta el movimiento o el giro, es decir, es capaz de responder con una señal eléctrica ante una perturbación inducida por la aplicación de una fuerza o la gravedad. Este dispositivo es capaz de detectar si está en horizontal o vertical o por ejemplo si los agitamos en el aire.

El ADXL335 proporcionará a Arduino, tres voltajes proporcionales a la aceleración de cada eje X, Y y Z. Algo muy importante es que se trata de un dispositivo que se alimenta a 3.3 V, por lo que hay que tener cuidado al conectarlo a nuestro Arduino de no hacerlo a la salida de 5v, ya que dañaríamos el sensor.

Conexión:

Código:

//Pines analogicos de lectura
 const int xPin = 0;     
 const int yPin = 1;
 const int zPin = 2;

// Valores mínimos y máximos del acelerometro en reposo
 int minVal = 265;     
 int maxVal = 402;

// para guardar los valores calculados
 double x;    
 double y;
 double z;

void setup ( ) {
 Serial.begin(9600);
 }

void loop ( ) {

//Lee los valores analogicos del acelerometro
 int xRead = analogRead(xPin);    
 int yRead = analogRead(yPin);
 int zRead = analogRead(zPin);

// mapea los valores leidos a un rango  -90 a 90 grados (-π  a  π )
 int xAng = map(xRead, minVal, maxVal, -90, 90);
 int yAng = map(yRead, minVal, maxVal, -90, 90);
 int zAng = map(zRead, minVal, maxVal, -90, 90);

//Convertimos los radianes a grados
 x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);
 y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
 z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);

//Imprimimos en el monitor serial los caluculos
 Serial.print("x: ");
 Serial.print(x);
 Serial.print(" | y: ");
 Serial.print(y);
 Serial.print(" | z: ");
 Serial.println(z);

delay(100);       //Espera 1 decima de segundo
 }

 

9 Comentarios Agrega el tuyo

  1. Jose dice:

    Amigo, buenos días.
    Tengo varias consultas:
    1- los valores minVal = 265 y maxVal = 402, es alguna propiedad del acelerómetro, sino, que lo conlleva a usarlos?
    2- Conoce alguna forma de ver gráficamente estos valores?, no se, tal ves un tipo de onda senoidal?
    Agradezco!

  2. peter dice:

    donde puedo comprarlo en el df me urge

  3. Alicia dice:

    Hola, muy útil el post muchas gracias solo tengo un problema, y es que no me da siempre los mismos valores, tengo puesto el acelerómetro en una inclinación fija pero los valores oscilan entre un mínimo y un máximo, ¿es normal?

    1. Ammm no recuerdo.. saludos!

  4. marercen dice:

    Hola, me esta dando varios errores. ¿Le incluyes alguna librería?

    Saludos

  5. jhony dice:

    los valores minVal = 265 y maxVal = 402, es alguna propiedad del acelerómetro, sino, que lo conlleva a usarlos?

  6. Ruth Miley Carlos Polinar dice:

    Al mover de forma horizontal me imprima la distancia y al mover de forma vertical me imprima la distancia en serial ….espero de su ayuda porfavor

  7. Gregorio dice:

    Buenas, tengo un problema a la hora de conectar los servos con el acelerómetro. Por lo visto, la medida de los ángulos me da muchos saltos y arruina el proyecto. ¿Podéis ayudarme?

    P.D.: hemos usado el mismo código pero le hemos quitado lo de los radianes a los grados centígrados.

Replica a Jose Cancelar la respuesta