Acelerómetro + Arduino

martes, 9 de agosto de 2011
Los acelerómetros son sensores muy útiles en el diseño de sistemas autónomos, los cuales puedan corregir o alterar su estado según los sean los datos, un acelerómetro como su nombre lo indica es aquel que es capaz de medir aceleraciones, existen de 1, 2 y 3 ejes (x,y,z), también pueden variar el tipo de interfaz ya sea analógico o digital, y entre los digitales varia el protocolo de comunicación (USART,I2C,SPI... etc.).


En este caso se trata de un acelerómetro analógico a 3.3v, con selector de precisión (GS1,GS2) y Sleep.
los pines x,y & z son las salidas de cada eje, las cuales tiene determinado voltaje según sea la aceleración medida en su respectivo eje. La conexión de este sensor con el arduino es muy sencillo ya que solo es necesario medir el voltaje con los ADC del arduino (A0,A1,A2...), para su fácil instalación decidí soldar un cable de vcc a sleep y conectarlos a 3v3 del arduino ya que a un voltaje más alto el sensor se quemaría.


Para este tipo de sensores no es necesaria ninguna Biblioteca y el código es bastante reducido:

void setup(){
     Serial.begin(115200);
     pinMode(14,OUTPUT);
     pinMode(18,OUTPUT);
     pinMode(19,OUTPUT);
     digitalWrite(14,LOW);
     digitalWrite(18,HIGH);
     digitalWrite(19,HIGH);
}

void loop(){
Serial.print(“ Eje x:   ");
    Serial.println(analogRead(A1));

Serial.print(“ Eje y:   ");
    Serial.println(analogRead(A2));

Serial.print(“ Eje z:   ");
    Serial.println(analogRead(A3));

delay(100);
}

Con este sencillo programa podemos ver los datos de cada eje en la terminal, puede usarse map(); para ajustar los rangos de valores deseados para el procesamiento en acciones de ciertas aplicaciones.

Variable = map(sensorX,0,1023,0,255);  // con esto se pierde resolución pero puede resultar ser mas sencillo de manejar datos pequeños.

Ejemplo: Podemos visualizar la posición de nuestro sensor por medio de una animación 3D (Un cubo RGB) que se va a mover según la posición de nuestro Acelerómetro. A continuación dejo los códigos.



Espero sus comentarios. :D

17 Comentarios, Dejar un Comentario:

  • esta bueno el proyecto, se le podría aplicar processing para el arduino?

  • Savage

    Claro y es realmente sencillo gracias a que processing tiene muchos ejemplos de animaciones ademas que en la pagina te explican para que sirve cada función. Checa de nuevo el post subiré un ejemplo.:D
    Saludos.

  • podrías volver a subir el código por favor, ya que dieron de baja megaupload :(

  • Josué Alejandro Savage

    Hola, ya esta disponible nuevamente el código. Saludos.

  • Chocs

    No entiendo esta linea de tu codigo

    port = new Serial(this,"/dev/tty.usbmodem411",115200); // COM en Windows Ej. COM2
    port.bufferUntil('.');
    }

    podrías explicarla?

  • Josué Alejandro Savage

    Ok, port es una nuevo objeto del tipo Serial. donde dice "/dev/tty.usbmodem411" esa es la direccion del arduino, si no sabes cual es la que debes poner en el arduino IDE en Serial Port ahi viene cual es la que estas utilizando para tu arduino, si estas en windows seria algo COM2 o COM3 etc, eso es lo que deberas poner ahi, el siguiente dato 115200 es la velocidad del Serial, la velocidad que estas enviando los datos seriales desde tu arduino con la instruccion Serial.begin(); ejemplo Serial.begin(115200);
    port.bufferUntil('.'); es la cantidad de datos que va a almacenar en buffer como una cadenas hasta que encuentre un caracter en especial, en este caso el . (punto) por lo que si envias desde el arduino Serial.print("Hola como estas? .") la cadena que almacenara en buffer sera "Hola como estas? ". Espero esto te haya ayudado. Saludos

  • Gastón Charkiewicz

    Hola, cómo estás?
    Estuve probando tu ejemplo, y si bien mi Arduino transmite de forma correcta (lo verifiqué con el Serial Monitor), no puedo lograr que Processing lo reconozca.
    La consola de Processing dice lo siguiente:

    Stable Library
    =========================================
    Native lib Version = RXTX-2.1-7
    Java lib Version = RXTX-2.1-7

    ...y, debuggeando, noté que nunca se ejecuta un serialEvent(...).

    Podrías darme una mano?

    Muchas gracias!

    Gastón Ch.

  • Josué Alejandro Savage

    Hola, claro espero poder ayudarte pero la información que me estas dando ahora no me es suficiente para saber que este fallando, quizá si me mandas una imagen con lo que dice processing cuando esta en ejecución pueda ser más fácil encontrar el problema, es con el ejemplo que he puesto o has modificado algo? quizá también habría que checar eso. Saludos :D

  • Mirelly Geovannily Garcia Cedeño

    disculpa este programa funciona con todo tipo de acelerometro es que yo tengo este Acelerómetro de 3 ejes +-1.5/6g

  • como se realiza lo del cubo

  • Josué Alejandro Savage

    Hola, debes descargar el programa processing y también los archivos que están en este post grabas los que son del arduino y ejecutas el de processing y ya tendras el cubo. Saludos, Funciona con cualquier tipo de acelerometro siempre y cuando sea analogico, para digitales hay que modificar el codigo del arduino.

  • Alvaro Pinto

    Hola respecto a la lectura del puerto

    port = new Serial(this,"/dev/tty.usbmodem411",115200); // COM en Windows Ej. COM2
    port.bufferUntil('.');
    }

    cambie "/dev/tty.usbmodem411" por "COM3" y no corre el programa me dice: Cannot find anything named "port"

    me podrías ayuda

    gracias

  • Josué Alejandro Savage

    Hola, debes checar en que puerto esta conectado tu arduino, puedes checarlo desde Arduino IDE ver con que COM se programa y ese será el que escribirás en processing, recuerda que el puerto debe estar disponible por lo que no deberás tener abierta la aplicación de arduino ni ninguna que utilice arduino además de processing. Suerte y saludos.

  • arduino es para maricas

  • Josué Alejandro Savage
    Este comentario ha sido eliminado por un administrador del blog.
  • ..CM..

    Hola, tengo un problema al correr el programa en arduino y en processing todo esta aparentemente bien, pero al aparecer el cuadro no me aparece el cubo sino un cuadro que no se mueve en ningun sentido, no se como solucionarlo :/

  • Carlos Rosell

    Hola, el enlace de descarga del processing está caído. Podrías subirlo de nuevo?

  • Publicar un comentario en la entrada