11 setembro 2013

Ligando 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.

ligando acelerometro Arduino
(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, adquirindo um módulo acelerômetro MMA7361 como esse abaixo, que eu recebi recentemente da FilipeFlop.

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. 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
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 :

Tabela ligação acelerômetro MMA7361

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:

Acelerômetro MMA7361 Arduino
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. Carregue o programa no Arduino, movimente o sensor e veja no serial monitor como se comportam as variações dos eixos X, Y, Z, e a gravidade (G).

Acelerômetro MMa7361 - Saída Serial Monitor


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//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);                     
 }  

39 comentários:

  1. 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: lokonews@live.com
    obrigado, espero alguma resposta...

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
    2. 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?

      Excluir
    3. 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.

      Excluir
  2. 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.

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  3. 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

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  4. Bom dia não entendi quais pinos vc colocou a referência de 3.3V

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  5. 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

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  6. 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.

    ResponderExcluir
    Respostas
    1. Bom dia,

      Realmente não tem. Acabei desenhando na mão.

      Abraço !

      Excluir
  7. buen dia :D oye me podrias ayudar lo que pasa es que el codigo me marca que acelero no esta declarado.
    gracias

    ResponderExcluir
    Respostas
    1. Buenas tardes,

      Por favor, compruebe la instalación de la libreria.

      Saludos!

      Excluir
  8. 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

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  9. nao consigo ler no serial monitor.... já esta conectado o cabo serial.

    ResponderExcluir
  10. boa tarde preciso muito da sua ajuda, como faço para ter os dados em graus??

    ResponderExcluir
  11. 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.

    ResponderExcluir
    Respostas
    1. Bom dia,

      Recomendo fazer a ligação do 3.3V no aref.

      Abraço!

      Excluir
  12. 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 !

    ResponderExcluir
    Respostas
    1. "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

      Excluir
  13. 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?

    ResponderExcluir
  14. 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

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  15. 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?

    ResponderExcluir
  16. 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
    eng.yurivieira@hotmail.com

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  17. Estou procurando algo mais simples e barato, para detectar o movimento de um dedo, tem?

    ResponderExcluir
  18. olá como faço para mostrar no serial a vibração que está ocorrendo em cada eixo?

    ResponderExcluir
    Respostas
    1. O artigo mostra como inspecionar na serial os valores de cada eixo.

      Excluir
  19. Ola. Boa Noite!
    Estou desenvolvendo um programa que necessita que o acelerômetro detecte queda livre.
    Como faço ?
    Obrigado. Urgentemente.

    ResponderExcluir