Conectando Acelerômetro 3 Eixos MMA7361 no Arduino 35

Acelerômetro é um dispositivo que serve para medir a aceleração de um objeto em relação à gravidade. Acelerômetros são muito utilizados em celulares e videogames para executar algum tipo de ação dependendo da movimentação do aparelho. No Arduino, segue o mesmo princípio e podemos utilizá-lo para controlar robôs ou algum outro tipo de dispositivo, apenas movimentando o sensor.

Um dos melhores sensores para Arduino, e também um dos mais fáceis de utilizar, é o Acelerômetro 3 Eixos MMA7361.

Acelerômetro MMA7361Este acelerômetro 3 eixos MMA7361 possui alta sensibilidade e baixo consumo de energia, facilitando o uso com o Arduino. Além disso, possui um eficiente modo Sleep, ideal para circuitos que utilizam baterias.

Pode ser ajustado para 2 níveis de sensibilidade (1,5g ou 6g), e já vem com os pinos soldados na placa, o que ajuda bastante na montagem do circuito. São dois conectores de cinco pinos nas laterais da placa, e o módulo pode ser alimentado por 3.3 v ou 5v. Alimentando-o com 3.3 v, há um incremento na precisão da leitura.

As funções dos demais pinos do módulo e a ligação ao Arduino estão mostrados na tabela abaixo :

Tabela Pinagem Acelerômetro MMA7361

Para utilizarmos o acelerômetro com o Arduino, primeiro precisamos da biblioteca AcceleroMMA7361, disponível nesse link. Faça o download da biblioteca, descompacte e coloque na pasta LIBRARIES da IDE do seu Arduino.

Vamos testar esse acelerômetro 3 eixos MMA7361 utilizando o arquivo exemplo RawData, que já vem na biblioteca do módulo, com algumas alterações para que os dados referentes aos eixos X, Y e Z sejam mostrados no Display LCD 16×2. O potenciômetro utilizado é de 10K, usado somente para controle de contraste :

Montagem Acelerômetro MMA7361 com Arduino

Os pinos X, Y e Z do módulo são ligados às entradas analógicas. Um detalhe importante é a ligação do pino de 3.3v do Arduino ao pino AREF, também no Arduino. É essa ligação que fornecerá uma tensão de referência ao circuito, evitando erros na leitura dos dados.

O programa exemplo RawData originalmente lê as informações relativas às variações dos eixos X, Y e Z e as mostra no serial monitor. Vamos manter essa função, mas também enviar esses dados para o display LCD 16×2.

//Programa : Conectando Acelerômetro 3 Eixos MMA7361 no Arduino 
//Autor : MakerHero

#include <AcceleroMMA7361.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); 
AcceleroMMA7361 accelero;
int x;
int y;
int z;

void setup()
{
  lcd.begin(16, 2);  
  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();
  lcd.setCursor(0,0);
  lcd.print("X: ");
  lcd.setCursor(8,0);
  lcd.print("Y: ");
  lcd.setCursor(0,1);
  lcd.print("Z: ");
}

void loop()
{
  x = accelero.getXRaw();
  lcd.setCursor(3,0);
  lcd.print(x);
  y = accelero.getYRaw();
  lcd.setCursor(11,0);
  lcd.print(y);
  z = accelero.getZRaw();
  lcd.setCursor(3,1);
  lcd.print(z);
  Serial.print("nx: ");
  Serial.print(x);
  Serial.print("ty: ");
  Serial.print(y);
  Serial.print("tz: ");
  Serial.print(z);
  delay(500);                                   
}

Movimente o sensor e observe no display os dados relativos aos eixos do acelerômetro. Você pode utilizar esses dados para movimentar, por exemplo, motores de acordo com as variações de cada eixo.

Foto Acelerômetro MMA7361 com Arduino

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

35 Comentários

  1. Boa tarde Adilson! É possível substituirmos o lcd por um lcd de 7 segmentos 4 dígitos?

  2. não consigo baixar a biblioteca aparece a seguinte mensagem “A pasta/arquivo zip especificado não contém uma biblioteca válida” oque devo fazer ??

    1. Bom dia Lucas,

      Você colocou a pasta AcceleroMMA7361 dentro da pasta libraries da IDE do Arduino?

      Grato.

      Adilson – Equipe MakerHeroO

  3. Como gravar os dados para gerar um grafico de vibração?

    JOSE ANTONIO FRANCA DE ARAUJO
  4. Gostaria de saber se esse acelerômetro conseguiria ler dados sendo exposto a 30G, se nao, qual vc indicaria um outro que eu possa usar, sou cliente fiel dá MakerHero kkkkkkk e essa foi minha primeira pergunta kkk, aguardo retorno

  5. ola, como faço para usar este acelerômetro para gerar um gráfico de um movimento de um pendulo na serial plot . detalhe seria um gráfico de amortecimento como se fosse uma onda senoidal porem ela vai diminuído a amplitude a medida que o movimento vai reduzindo. preciso medir a frequência que um objeto balança em um eixo e acompanhar o gráfico em tempo real. e exatamente o experimento do vídeo a seguir https://www.youtube.com/watch?v=f1U4SAgy60c , consigo fazer o gráfico com este acelerômetro ou vou ter que comprar o adxl345 ?.

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

    1. Para além de teorias sobre a aceleração na gravidade, eu faria um logger em SD. Soltaria o dispositivo de várias alturas, dentro de uma rede. Movimentaria a rede em vertical para suavizar algumas quedas.

  7. comprei um mpu 6050 …. quero aprender a programa-lo da seguinte maneira..

    quando os eixos z e y estiver em zero manter a rotaçao de um motor normal por eixo
    se
    estiver em + acelerar um motor e se estiver em – acelerar outro motor.

    tu podes me ajudar?

    estou aprendendo a programação (iniciante)

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

  9. Gostaria de utilizar um acelerômetro para identificar um movimento e reproduzir um som, seria possível isso? como?

  10. Olá! Quantos acelerômetros posso ligar no arduino UNO?
    Obrigado!

    1. Boa tarde Carlos,

      Desse modelo você consegue ligar 2 acelerômetros.

      Abraço!

      Adilson – Equipe MakerHero

  11. Boa tarde amigo,

    Em relação a aceleração, o valor que é obtido no Monitor Serial, é dado em qual unidade de aceleração?

    Desde já agradeço.

  12. Olá MakerHero!

    Sabe me dizer se com esse acelerômetro, na sensibilidade mais baixa – 1,5g – consigo detectar vibrações em lajes de concreto?
    As vibrações de interesse são as de impacto e atrito(arrastar de objetos) na laje. Ambas geram consequências de ruídos sonoros.

    1. Bom dia Ronaldo,

      Esse módulo é bem sensível, mas não testamos com esse tipo de aplicação.

      Abraço

      Adilson – Equipe MakerHero

  13. A aceleração eh medida de quanto em quanto tempo? Como sei em qual tempo ele atingiu tal aceleração?

    1. Bom dia Bianca,

      Para esse tipo de informação, peço que verifique o datasheet do MMa7361: http://www.freescale.com/files/sensors/doc/data_sheet/MMA7361L.pdf

      Abraço

      Adilson – Equipe MakerHero

  14. Fiz toda a ligação, conectei o cabo serial e tals, tenho o acelerometro certo, mas quando vou ver no programa o resultado (serial monitor) não aparece nada.

    help mee

  15. Saberiam me informar se esse código e a sua respectiva biblioteca funcionam junto ao acelerômetro MMA7260QT?

    1. Boa tarde Hiago,

      Não testamos com esse módulo ainda, e a biblioteca também não faz nenhuma referencia ao modelo de acelerômetro que você citou.

      Abraço.

      Adilson – Equipe MakerHero

      1. Obrigado pela atenção, Adilson! Aproveito também para parabenizar pela disposição em responder os usuários, tenham a certeza de que receberam mais um cliente, continuem assim!

        Abraço,

        1. Valeu Hiago !

          Abraço.

          Adilson – Equipe MakerHero

  16. esses comandos para o accelerometro estao dando erro o q posso fazer

  17. Olá, comprei este acelerometro no proprio site porem estou tendo problemas para compilar o codigo, nao sei se instalei a biblioteca incorretamente ou algo na biblioteca nao esta compativel com o IDE 1.5.8 do arduino.

    ERRO:

    C:UsersRafaelDocumentsArduinolibrariesAcceleroMMA7361AcceleroMMA7361.cpp: In member function ‘void AcceleroMMA7361::setARefVoltage(double)’:
    C:UsersRafaelDocumentsArduinolibrariesAcceleroMMA7361AcceleroMMA7361.cpp:115:29: error: invalid conversion from ‘int’ to ‘eAnalogReference {aka _eAnalogReference}’ [-fpermissive]
    analogReference(EXTERNAL);
    ^
    In file included from F:arduinoarduino-1.5.8hardwarearduinosamcoresarduino/Arduino.h:193:0,
    from C:UsersRafaelDocumentsArduinolibrariesAcceleroMMA7361AcceleroMMA7361.h:46,
    from C:UsersRafaelDocumentsArduinolibrariesAcceleroMMA7361AcceleroMMA7361.cpp:22:
    F:arduinoarduino-1.5.8hardwarearduinosamcoresarduino/wiring_analog.h:40:13: error: initializing argument 1 of ‘void analogReference(eAnalogReference)’ [-fpermissive]
    extern void analogReference( eAnalogReference ulMode ) ;
    ^
    C:UsersRafaelDocumentsArduinolibrariesAcceleroMMA7361AcceleroMMA7361.cpp: In member function ‘int AcceleroMMA7361::getTotalVector()’:
    C:UsersRafaelDocumentsArduinolibrariesAcceleroMMA7361AcceleroMMA7361.cpp:372:45: error: ‘square’ was not declared in this scope
    return sqrt(square(_mapMMA7361G(getXRaw())) + square(_mapMMA7361G(getYRaw())) + square(_mapMMA7361G(getZRaw())));
    ^
    Erro compilando.

    1. acabei de confirmar que na verdade o problema é da versao do arduino, a 1.5.8 que nao compila a biblioteca, fica dando esses erros. Alguem poderia me informar se tem algum lugar para fazer download da biblioteca corrigida, porque preciso programar no arduino due!!!

      1. consegui alterar a biblioteca : )
        Obrigado pelo tutorial do acelerometro!

        1. Obrigado Rafael !

          Abraço.

          Adilson – Equipe MakerHero

        2. Rafael, como vc conseguiu alterar a biblioteca? Obrigado

    2. Boa noite Rafael,

      A princípio me parece ser algum problema com a biblioteca, ou um problema na instalação ou conflito com alguma biblioteca já existente.

      Abraço.

      Adilson – Equipe MakerHero

  18. Buenas tardes,

    Quisiera saber donde puedo conseguir o descargar las librerías que ustedes agregan en la programación, o si me las podrían pasar , les agradecería mucho.

    Gracias, buen día.

  19. 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 A.

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

  21. eu e meu amigo compramos esse acelerometro e o motorshield

    como fazer o motor shield trabalhar conforme o acelerometro ?
    tipo assim quero que sempre o X fique 0 e assim o motor se equilibra tipo um Segway

    obrigado

    1. Boa tarde Josias,

      Não temos nenhum projeto pronto nesse sentido, mas você pode adaptar os códigos tanto do Acelerômetro quanto do Motorshield ao seu projeto.

      Abraço.

      Adilson – Equipe MakerHero