Ligando acelerômetro MMA7361 no Arduino
Como conectar um acelerômetro MMA7361 no Arduino? Quando se fala em acelerômetro, geralmente a primeira coisa que se pensa é no aparelho celular. É o acelerômetro que detecta a inclinação do aparelho, muda a orientação da tela e permite, por exemplo, a utilização de jogos de corrida onde a movimentação do celular define a direção do carrinho na tela.
Temos também acelerômetros instalados em notebooks, para detectar quedas do aparelho e dessa forma “travar” os discos do computador para proteção dos dados, e um exemplo bem mais comum, que é a utilização do acelerômetro nos controles de videogame, como o Nintendo Wii.
(Bem) Resumidamente, o acelerômetro nada mais é do que um aparelho que serve para medir a aceleração de um corpo/objeto em relação à gravidade. Felizmente, temos a possibilidade de ver detalhadamente no Arduino como isso funciona, usando um módulo acelerômetro MMA7361:
Esse módulo é bem prático e já vem pronto para uso, com os pinos já soldados. É um módulo de 3 eixos (X, Y e Z), que gera uma variação de tensão para cada eixo, variação esta que por sua vez é tratada pelas portas analógicas do Arduino.
Isso é algo bem parecido com o que vimos neste artigo falando sobre dimmer, onde a variação de tensão nas portas analógicas determinava a luminosidade do led.
Características básicas desse módulo:
- Operação com 5v ou 3.3v DC
- 2 níveis de sensibilidade : 1,5G ou 6G
- Modo sleep, ideal para uso em configurações que necessitem do uso de uma bateria
Vamos ver agora como conectar esse módulo no Arduino.
Conexão do acelerômetro MMA7361 no Arduino
A ligação, como sempre, exige atenção e cuidado para não danificar o componente. São 10 pinos, cuja função mostro na tabela abaixo:
Atenção! Antes de conectar esse módulo, verifique a disposição dos pinos, pois em alguns módulos alguns deles estão invertidos, ok?
Ao montar o circuito, repare que será necessário ligar o pino 3.3 Volts do Arduino Uno R3 ao pino AREF, para que tenhamos uma tensão de referência. Sem ele, a leitura dos dados fica totalmente prejudicada:
Se possível, recomendo a ligação fora da protoboard ou então a utilização de um mini protoboard, como mostrado no circuito, isso vai facilitar bastante na hora de testar os movimentos com o módulo.
Para teste vou usar um dos 3 programas exemplo que vem na própria biblioteca do MMA7361, o programa G_FORCE.
//Programa : Teste Acelerometro MMA7361 //Alterações e comentários : Arduino e Cia #include <AcceleroMMA7361.h> //Carrega a biblioteca do MMA7361 AcceleroMMA7361 accelero; int x; int y; int z; void setup() { Serial.begin(9600); accelero.begin(13, 12, 11, 10, A0, A1, A2); //Seta a voltagem de referencia AREF como 3.3V accelero.setARefVoltage(3.3); //Seta a sensibilidade (Pino GS) para +/-6G accelero.setSensitivity(LOW); accelero.calibrate(); } void loop() { x = accelero.getXAccel(); //Obtem o valor do eixo X y = accelero.getYAccel(); //Obtem o valor do eixo Y z = accelero.getZAccel(); //Obtem o valor do eixo Z Serial.print("\nx: "); //Mostra os valores no serial monitor Serial.print(x); Serial.print(" \ty: "); Serial.print(y); Serial.print(" \tz: "); Serial.print(z); Serial.print("\tG*10^-2"); delay(500); }
Carregue o programa no Arduino, movimente o sensor e veja no serial monitor as variações dos eixos X, Y, Z, e a gravidade (G).
Gostou? Confira outros posts usando acelerômetro aqui mesmo no Arduino e Cia!
Ótimo…
Valeu Clébio. Abraço !
Aqui, estou com uma dúvida.
Como faço para conectar dois ou mais acelerômetros MMA7361 em um mesmo programa?
Pelo que eu vi em minha pesquisa se eu utilizasse o modelo ADXL335 seria tudo mais fácil, no entanto eu possuo apenas o modelo MMA7361…
Nome: Pedro
e-mail: [email protected]
obrigado, espero alguma resposta…
Boa tarde Pedro,
Olha, eu não tenho 2 acelerômetros aqui para testar, então vou sugerir que você use o segundo acelerometro criando outras variáveis para referenciar, por exemplo, X1, Y1, Z1, etc.
Eu alterei o programa e compilei, mas não consigo testar. O começo fica mais ou menos assim :
//Programa : Teste Acelerometro MMA7361
//Alterações e comentários : Arduino e Cia
#include AcceleroMMA7361.h //Carrega a biblioteca do MMA7361
AcceleroMMA7361 accelero;
AcceleroMMA7361 accelero2;
int x;
int y;
int z;
int x1;
int y1;
int z1;
void setup()
{
Serial.begin(9600);
accelero.begin(13, 12, 11, 10, A0, A1, A2);
accelero.setARefVoltage(3.3); //Seta a voltagem de referencia AREF como 3.3V
accelero.setSensitivity(LOW); //Seta a sensibilidade (Pino GS) para +/-6G
accelero.calibrate();
accelero2.begin(6, 7, 8, 9, A3, A4, A5);
accelero2.setARefVoltage(3.3); //Seta a voltagem de referencia AREF como 3.3V
accelero2.setSensitivity(LOW); //Seta a sensibilidade (Pino GS) para +/-6G
accelero2.calibrate();
}
Criei o "accelero2" e fiz uma configuração diferente de pinos. O ideal agora é testar com 2 acelerômetros e ver o que acontece.
Espero ter ajudado. Abraço !
Olá, seria possivel eu controlar a estabilidade de uma plataforma flutuante em forma de H, em cada ponta um tanque de lastro com uma bomba e com o acelerometro controlar o lastro mantendo o equilibrio caso eu adicione peso em algum dos lados?
Boa tarde,
Não sei qual o tempo de resposta que você precisaria para estabilizar a plataforma, mas não vejo problema em utilizar esse sensor no seu projeto.
Abraço.
e como ficaria o esquema de ligação para dois acelerômetros ? pode postar ae? ou me enviar grato [email protected]
Boa tarde,
Estou fazendo um projeto de medição de vibração de motores com esse acelerômetro, e gostaria de saber qual é a velocidade máxima ou aceleração máxima que ele pode medir.
Grato,
Marco.
Boa tarde Marco,
Se eu li certo o datasheet, a aceleração máxima é de +/- 5000 g :
http://www.freescale.com/files/sensors/doc/data_sheet/MMA7361L.pdf
Abraço !
Olá,
É obrigatório conectar os pinos ST, GS, OG e SL?
Percebi que outros acelerômetros como o ADXL330 não tem esses pinos.
Pode acarretar algum prejuízo no dispositivo se não ligar?
Att
Boa noite,
Olhando a função dos pinos, não vejo problema em não ligar. Apenas recomendo deixar o GS conectado, que é a seleção do modo de sensibilidade.
Abraço !
Bom dia não entendi quais pinos vc colocou a referência de 3.3V
Boa tarde Bruno,
No pino AREF você insere a tensão de referência para o conversor A/D (analógico/digital) do Arduino :
http://arduino.cc/en/Reference/AnalogReference?from=Reference.AREF
Abraço !
Boa noite,
Gostaria de saber se essa medida que o acelerômetro está fazendo é em G, se não, como faço para transforma-la?
Grato
Boa noite João,
Não sei ainda como fazer para transformar, por favor dê uma olhada no datasheet do MMA7361, nesse link :
http://www.freescale.com/files/sensors/doc/data_sheet/MMA7361L.pdf
Abraço !
Bom dia 🙂
Gostaria de saber onde posso encontrar a biblioteca/desenho do acelerômetro mma7361 do fritzing (esse que você usou nesse circuito). Estou usando o fritzing, mas ele não tem esse componente.
Bom dia,
Realmente não tem. Acabei desenhando na mão.
Abraço !
buen dia 😀 oye me podrias ayudar lo que pasa es que el codigo me marca que acelero no esta declarado.
gracias
Buenas tardes,
Por favor, compruebe la instalación de la libreria.
Saludos!
Boa Noite!
Eu só posso utilizar esses pinos do Arduino (13, 12, 11, 10, A0, A1, A2) para leitura dos dados ou posso utilizar qualquer pino e modificar na programação?
Estou utilizando um Arduino Nano
Obrigado
Boa tarde Bruno,
Eu não achei nada na documentação que fale sobre isso, mas creio que não tenha problema, já que todos os pinos são definidos no programa.
Abraço!
nao consigo ler no serial monitor…. já esta conectado o cabo serial.
boa tarde preciso muito da sua ajuda, como faço para ter os dados em graus??
como faço para ter os dados em graus
Opa boa tarde, estou usando este acelerometro em meu projeto, mas no caso estou usando um Arduino Mega 2560, então a minha dúvida é de que se é preciso fazer a ligação 3.3V no aref, ou se o Mega dá conta de processar os dados com precisão?
Desde já Muito obrigado.
Bom dia,
Recomendo fazer a ligação do 3.3V no aref.
Abraço!
Prezados boa tarde!
Estou integrado á um projeto na faculdade, que necessita de realizar uma Detecção de Queda Livre com o Arduino + Acelerômetro. Percebi que esse acelerômetro MMA7361 possui um pino de detecção de queda livre. Alguém poderia me ajudar informando o que seria necessário implementar no código para detectar essa queda livre no pino do acelerômetro? Grato !
"0g-Detect – O sensor oferece uma função que provê um sinal lógico alto quando o módulo está com os três eixos em 0g. É uma função importante na detecção de queda livre e é usado na proteção física de discos magnéticos como HD em notebooks."
Fonte: Eletrodex
– Datasheet MMA7361L via Webtronico
– Tabela de pinagem via Filipeflop
Paulo . vc conseguiu implementar este codigo para queda livre?
Boa tarde gostaria de saber como programar o acelerômetro no arduino mega 2560, vou fazer um carrinho seguidor de trilha e usar o acelerômetro na subida, tem alguma sujestao de programaçao?
Prezados bom dia!
Existe algum soquete onde eu possa instalar o acelerômetro MMA7361?
Pois necessito fixar esse acelerômetro em uma base acrílica.
Caso exista, vocês tem para vender?
Grato pela colaboração,
Celso
Oi Celso,
Eu desconheço, mas é uma coisa que podemos desenvolver. Entre em contato utilizando o formulário de contato no lado direito da página, para conversarmos.
Abraço!
Olá,
Estou com um projeto no qual utilizarei de um acelerômetro e, com esse pretendo captar os seus valores pra interpretá-los como se a utilizar um volante. Desta forma pretendo criar meu próprio joystick, fazendo com que alguns games reconheçam o movimento feito com meu Arduino.
Poderia me auxiliar em uma forma de fazer com que meu computador interprete estes dados vindo do Arduino através de bluetooth?
Sugestão: possibilite configurar a sensibilidade.
Boa! 🙂
Abraço!
Olá, bom dia.
Estou com um projeto e preciso de um sinal elétrico apenas quando a força G for positiva em um determinado eixo, consigo isso com o MMA7361?
Obrigado
Yuri Vieira
[email protected]
Boa noite Yuri,
Creio que sim. Basta colocar uma condição para testar o deslocamento do eixo que vc precisa. Dê uma olhada neste post também, creio que seja interessante para o seu projeto: http://www.arduinoecia.com.br/2015/04/acelerometro-giroscopio-mpu-6050.html
Abraço!
Estou procurando algo mais simples e barato, para detectar o movimento de um dedo, tem?
olá como faço para mostrar no serial a vibração que está ocorrendo em cada eixo?
O artigo mostra como inspecionar na serial os valores de cada eixo.
Ola. Boa Noite!
Estou desenvolvendo um programa que necessita que o acelerômetro detecte queda livre.
Como faço ?
Obrigado. Urgentemente.
Boa tarde. Estou iniciando no arduino e gostaria de saber se com esse acelerômetro é possível saber se algo esta de cabeça pra baixo e essa informação ser enviada via bluetooth/fm/wifi (qualquer coisa sem fio com bom alcance) ao arduino. Preciso de algo discreto e leve de preferência. Qual o melhor shield poderia me recomendar?