Arduino – Interface com acelerômetro e giroscópio

Conheça a placa GY-521, baseada no MPU-6050, que possui no mesmo invólucro um acelerômetro e um giroscópio de alta precisão com tecnologia MEMS.
acelerômetro

Henrique Torres apresentou e explicou o princípio de funcionamento de acelerômetros e giroscópios MEMS. Neste artigo iremos apresentar o GY-521, cedido pela FILIPEFLOP para nossa avaliação. Analisaremos seus recursos e faremos uma aplicação simples utilizando a plataforma Arduino UNO.

A placa GY-521 é baseada no CI MPU-6050 da InvenSense. Este CI possui no mesmo invólucro um acelerômetro e um giroscópio de alta precisão com tecnologia MEMS. No total são 6 eixos, sendo três para o acelerômetro e 3 para o giroscópio. Há também a possibilidade da ligação de um magnetômetro externo através de pinos auxiliares.

O MPU-6050 possui internamente um recurso chamado DMP (Digital Motion Processor). O DMP permite que o algoritmo de detecção de movimento seja processado no próprio CI livrando o microcontrolador dessa tarefa. O DMP faz a aquisição do acelerômetro, giroscópio e sensor adicional e faz o processamento dos dados. O resultado pode ser lido diretamente ou colocado em um buffer do tipo FIFO.

O MPU-6050 possui internamente conversores A/D de 16 bits de resolução para cada canal, dessa forma todos os sinais podem ser amostrados ao mesmo tempo. Internamente há um buffer FIFO de 1024 bytes, onde os valores podem ser armazenados e depois lidos, conforme configuração desejada.

Outro recurso interessante do MPU-6050 é o sensor de temperatura interno que permite medidas de -40 °C a +85 °C.

A comunicação é feita através do padrão I2C usando os pinos SCL e SDA. A Figura 1 exibe a pinagem da placa GY-521:

Pinagem placa GY-521
Figura 1 – Pinagem placa GY-521 – Acelerômetro e Giroscópio

A seguir são apresentadas as funções de cada pino:

  • Vcc: Alimentação (3,3V à 5V);
  • GND: 0V;
  • SCL: I2C Serial Clock (SCL);
  • SDA (Slave_Data): I2C Serial Data (SDA);
  • XDA: I2C Master Serial Data, para conexão de sensor auxiliar;
  • XCL: I2C Master Serial Clock, para conexão de sensor auxiliar;
  • AD0: Define o endereço da I2C;
  • INT: pino para interrupção.

Conforme se pode observar na Figura 1, a placa possui poucos componentes, sendo os principais um regulador de tensão de 3,3 V  e o MPU-6050. A Figura 2 exibe o esquema elétrico da placa:

Esquema elétrico placa com MPU6050
Figura 2 – Esquema elétrico placa

Conforme descrito acima, a placa possui um pino de endereço, que é responsável pelo endereçamento do CI no barramento I2C. Quando esse pino está desconectado define que o endereço I2C do sensor é 0x68. Quando conectado a 3,3 V, define o endereço 0x69. Dessa forma é possível utilizar dois módulos em um mesmo circuito.

Para exemplificar a utilização deste sensor, iremos apresentar uma aplicação utilizando  a plataforma Arduino. Neste exemplo serão lidos os sinais do acelerômetro, do giroscópio e do sensor de temperatura. Os valores serão exibidos no terminal serial em intervalos de aproximadamente 500 ms.

Exemplo – Lendo acelerômetro e giroscópio com Arduino 

A montagem do hardware é bem simples. A Figura 3 exibe a ligação dos módulo GY-521 à placa Arduino Uno:

Montagem do exemplo
Figura 3 – Montagem do exemplo

O programa para o Arduino é baseado na biblioteca Wire. Consiste basicamente na inicialização e leitura dos registradores do MPU-6050 através da comunicação I2C. Os valores de cada eixo, tanto do acelerômetro quanto do giroscópio, são lidos e apresentados no terminal serial de forma simples, ou seja, sem nenhum tratamento. Confira a listagem do programa, baseado no exemplo disponível no site do Arduino:

O resultado é apresentado na Figura 4. São exibidos os valores em sequência onde fica fácil perceber a variação dos eixos conforme o movimento.

Valores lidos
Figura 4 – Valores lidos

Conclusão

Neste artigo foi apresentado como interfacear o módulo GY-521 baseado no MPU-6050, uma ótima opção para aplicações com acelerômetro e giroscópio, com Arduino. Foram apresentados suas características e recursos, além de um exemplo de interface com Arduino. Este artigo servirá como base para projetos e aplicação utilizando sensores do tipo MEMS em conjunto com a plataforma Arduino.

Para aprender mais sobre Arduino

Arduino – Primeiros Passos

Arduino UNO

Arduino – Entradas/Saídas digitais

Referências

Loja FILIPEFLOP

datasheet MPU-6050

MPU-6050 Blog Arduino

Notificações
Notificar
guest
15 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Fernando Avelino Ferreira
Fernando Avelino Ferreira
11/04/2021 21:26

Uma duvida li no datasheet dele que a precisão seria para X,Y,Z = 2g,4g,8g porém não estou conseguindo entender/ converter esses números para graus para saber a precisão do sensor na medição de angulos em x,y,z estou orecisando fazer uma aplicação no qual eu precise de uma resolução de 0,05°.

Leonardo
Leonardo
17/03/2021 22:38

Olá, tudo bem Fábio? Cara ficaria muito feliz se conseguisse compartilhar essa biblioteca com o bloco eletrônico do Giroscópio para o Proteus. Será que é possível? Agradeço desde já = ‘ ]

Emilio David
Emilio David
10/12/2019 14:17

Olá Fábio! Gostaria de saber se esses valores de aceleração da gravidade nos três eixos X, Y e Z, os que aparecem no monitor serial, já estão convertidos em g [gravidade m/s²]. Caso não esteja, como faço para obter esses valores em g?

Advocir
Advocir
17/06/2019 16:35

se eu quiser colocar uma tela para não ter que usar um computador como ficaria?

Anna Carolina
Anna Carolina
21/08/2018 14:08

Olá, os dados mostrados no serial print do arduino já estão nas suas unidades corretas? Em graus para o giro e em g para o acelerômetro?

Augusto
Augusto
15/05/2018 10:03

Olá! Esse sensor consegue medir até quantos g?? Não consegui achar no data sheet. Preciso de uma aplicação que meça até uns 2000g… Ou teria outro sensor mais amplo? E a taxa de amostragem? é 2000Hz??

Rafael Megda
Rafael Megda
15/03/2017 16:52

Olá Fabio
Estou participando de um projeto onde vamos utilizar um MPU-6050 para analise de aceleração, porem não consegui encontrar um código que converta a leitura em g (m/s^2), pelo que entendi a saída do Wire é somente os dados brutos.

Ariadne Soares
Ariadne Soares
01/03/2017 15:26

o sensor pode ser utilizado sem a ligação com o arduíno?
gostaria de utilizar o giroscópio acelerômetro em um projeto porém, sem a interferência de cabos de conexão com outra placa. Seria possível?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Ariadne Soares
02/03/2017 10:08

Olá Ariadne!

É necessário um circuito para comunicação com o sensor. Você pode fazer uma aplicação que envie dados via comunicação sem fio, usando um microcontrolador e circuito de rádio na aplicação.

Alexandre Peres
Alexandre Peres
05/08/2016 09:32

Seria possível adaptar um giroscópio deste a um Arduíno, e entrando fazer com que este comunique com um smartphone via USB? Seria uma boa ideia para celulares dos quais não possuem giroscópio, 😉

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Alexandre Peres
14/09/2016 14:05

Alexandre é uma idea interessante, você também pode usar uma comunicação bluetooth.

Abraços

trackback
05/05/2015 15:10

[…] Arduino – Interface com acelerômetro e giroscópio […]

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H