Girômetro e Acelerômetro de 3 Eixos Cada MPU6050

O MPU6050 é um sensor bastante completo e muito querido no mercado pelos “maker’s” em inúmeros projetos que necessitem não só de obter a posição em relação aos eixos tridimensionais como também a aceleração.

Aplicações

  • Smartphones;
  • Sistema de navegação;
  • Óculos swift;
  • Pêndulo invertido;
  • Robô bípede ou de duas rodas;

Especificações

  • Voltagem de Trabalho: 2.5V±5%, 3.0V±5%, ou 3.3V±5%;
  • Consumo: 6mA com giroscópio e acelerômetro;
  • Tamanho: 4,0mm x 4,0mm x 0,9mm;
  • Interface de comunicação: I²C.

Faixas de Leitura

  • Giroscópio programável na faixa de: ± 250, ± 500, ± 1000 e ± 2.000 ° / s (dps);
  • Acelerômetro programável na escala de: ± 2g, ± 4g, ± 8g e ± 16g.

O que é Acelerômetro e Giroscópio?

Certamente esses dois temos por mais que não saiba o conceito, tem noção por ser presente no nosso dia dia como os smartphones, mas do que se trata cada um deles?

Acelerômetro

A aceleração é a diferença de velocidade em relação ao período de tempo, o acelerômetro é um dispositivo capaz de perceber a aceleração, no caso do MPU6050 é por meios de “molas” de silício que varia sua tensão. A imagem abaixo é um exemplo de um modelo eletrônico que foi retirado do site Tecmundo.

Acelerômetro elétrico

Giroscópio

O giroscópio é um dispositivo capaz de indicar a direção/rotação de um objeto, o rotor em rotação sempre estará nivelado em posição a terra.

Resultado de imagem para giroscópio mecânico

O exemplo acima é o mais comum, o giroscópio mecânico. Nos componentes integrados não é muito diferente, porém é em uma escala muito pequena e com sensores que detectam a variação do sistema mecânico, são denominados de MEMS (Micro Electro Mechanical Systems).

Peculiaridades

A maior característica do MPU6050 é por ser dois em um, tendo não só giroscópio mas também um acelerômetro sendo ambos de três eixos em apenas um único chip.

Electrical Equipment & Supplies 2PCS MPU-6050 MPU6050 Six-axis Sensor Chips  IC QFN-24 Business & Industrial 7elements.gr

Uma característica muito positiva para esse sensor é que ele possui um conversor ADC de 16bit para cada canal, o que possibilita a leitura simultânea. Além disso, o MPU6050 tem um buffer FIFO de 1024 bytes que pode ser usados para armazenar a leitura e depois lida, a depender da configuração desejada.

Bloco diagrama da composição interna do MPU6050

Leitura

Quando foi feito o teste usando a biblioteca da Adafruit para o MPU6050 foi notado a gravidade da terra em relação a região de Lauro de Freitas – Bahia – Brasil onde marcou uma a aceleração de 9,57m/s² sendo que a gravidade da terra é 9,8m/s² como mostra na imagem abaixo:

Medição gravitacional com o MPU6050 e Arduino

Essa diferença representa 2,35% em relação ao valor gravitacional da terra e o valor lido pelo MPU6050 porém essa diferença pode ter ocorrido devido a margem de erro (não foi encontrada a respeito do acelerômetro), localidade geográfica ou esses dois fatores combinados.

A respeito das demais leituras, o MPU6050 apresenta uma certa variação positiva e negativa mas é normal na maioria dos sensores ADC, o ideal é sempre fazer uma média móvel para filtrar o máximo essas variações.

MPU6050 Dimensões

Com 4,0mm x 4,0mm x 0,9mm o MPU é muito similar aos encapsulamentos padrões do mercado, caso seja visto em uma placa e não tenha conhecimento do que se trata esse chip passará desapercebido.

Dimensões físicas do sensor MPU6050

MPU6050 com Arduino

Esse sensor é muito fácil de ser usado com o Arduino e qualquer outro microcontrolador, principalmente por ser popular na comunidade.

MPU6050 Esquemático Arduino

É fundamental verificar os níveis de tensões que serão trabalhadas em qualquer aplicação com o Arduino, no caso do MPU fica abaixo dos 5v. Alguns módulos já possuem regulador de tensão integrados mas é sempre bom analisar antes de fazer as conexões.

Montagem na protoboard do sensor MPU6050 com Arduino nano

Código

Para usar o MPU6050 é necessário ter uma biblioteca instalada na IDE do Arduino, nesse caso foi usado a biblioteca MPU6050_tockn. O código abaixo nada mais é do que o próprio exemplo da biblioteca, por esse motivo não está disponível o arquivo .ino para download.

#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();
  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
  }
}

Funcionamento

Por fins demonstrativos, o MPU6050 foi usado junto com um display OLED de 0.96” porém no canto inferior direito apresentou um bug mas de qualquer forma não impediu a demonstração. Vale salientar que no exemplo foi usado apenas o ângulo dos eixos X e Y por ser limitado ao tamanho da tela, na imagem abaixo mostra a saída serial do exemplo da biblioteca.

Funcionamento do MPU6050 com Arduino.

Considerações

O MPU6050 é um dos sensores indispensáveis, tendo uma estrutura de leitura ADC de 16bit independente para cada eixo, buffer FIFO. Além de ser dois em um, o que é um ponto muito positivo em termos de custo e benéfico.