Você já pensou em fazer um controle de videogame parecido com o Wii? ou então um jogo de celular que sente a posição do aparelho? que tal fazer o posicionamento no espaço de um quadcóptero?. Todas estas aplicações utilizam um sensor chamado acelerômetro, que mede aceleração relativa (ou seja, a variação da velocidade de um objeto em relação ao repouso).
Na postagem de hoje falarei sobre o MMA7361 (
datasheet aqui), um acelerômetro capacitivo com uma saída analógica para cada eixo (X, Y, Z) que é capaz de medir acelerações entre +/-1,5G e +/-6G ("G" significa gravidade, que tem o valor de 9,8066m/s*s aqui na terra). Dá pra fazer muita coisa legal (interfaces de usuário) com este sensor, então vamos aprender á usa-lo.
Para testar este sensor eu utilizo um microcontrolador Arduino (no meu caso o Arduino Leonardo), mas qualquer outro microcontrolador com entradas analógicas deve servir. O código que utilizamos está disponível
neste link do Github, e foi desenvolvido pelo usuário
Jeroendoggen. Você terá que instalar uma biblioteca adicional para o MMA7361 funcionar; veja como instalar bibliotecas adicionais (pelo menos no linux)
neste link do fórum oficial do Arduino.
Arduino 5V -> MMA7361 5V
Arduino GND -> MMA7361 GND
Arduino A0 -> MMA7361 X
Arduino A1 -> MMA7361 Y
Arduino A2 -> MMA7361 Z
Arduino 10 -> MMA7361 GS
Arduino 11 -> MMA7361 0G
Arduino 12 -> MMA7361 ST
Arduino 13 -> MMA7361 SL
Após fazer o upload do código G_force.ino (disponível
neste link e também na caixa abaixo, lembrando que a bilbioteca do MMA7361 deve estar instatada no seu computador) você pode abrir o monitor serial da IDE do Arduino.
#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero;
long x;
long y;
long z;
void setup()
{
Serial.begin(9600);
accelero.begin(13, 12, 11, 10, A0, A1, A2);
accelero.setARefVoltage(3.3); //sets the AREF voltage to 3.3V
accelero.setSensitivity(LOW); //sets the sensitivity to +/-6G
accelero.calibrate();
}
void loop()
{
x = accelero.getXAccel();
y = accelero.getYAccel();
z = accelero.getZAccel();
Serial.print("\nx: ");
Serial.print(x);
Serial.print(" \ty: ");
Serial.print(y);
Serial.print(" \tz: ");
Serial.print(z);
Serial.print("\tG*10^-2");
delay(500); //make it readable
}
Ao ligar o seu Arduino e abrir o monitor serial, o programa acima fará uma auto-calibração do sensor, e é necessário que o chip dele esteja exatamente na horizontal, com sua parte superior apontando para cima (veja imagem abaixo). Após executar esta calibração, as leituras de aceleração irão começar.
Para saber se a calibração foi executada corretamente você pode se basear na aceleração da gravidade (9,8066 m/s*s); para isso posicione o sensor conforme as imagens abaixo e veja se os valores mostrados nas imagens batem com os que você obteve.
Caso seus valores fiquem próximos aos das imagens acima, parabéns! você concluiu a etapa de conexão e calibração do MMA7361. O próximo passo é brincar um pouco com o sensor e observar seus valores de X, Y e Z variando conforme o movimento executado. Pelo código postado acima você pode ver que as variáveis tipo long 'x', 'y' e 'z' carregam o valor de aceleração nos três eixos; agora estes valores podem ser utilizados para qualquer coisa dentro do seu programa de Arduino!.